Skip to content

Instantly share code, notes, and snippets.

@davydovanton
Last active February 20, 2019 13:06
Show Gist options
  • Save davydovanton/f21d23b8d56ab76e8de7a0acd2e13265 to your computer and use it in GitHub Desktop.
Save davydovanton/f21d23b8d56ab76e8de7a0acd2e13265 to your computer and use it in GitHub Desktop.

Revisions

  1. davydovanton revised this gist Mar 17, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions dry_monads_with_handler.rb
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@ def result_handler(result)
    case result
    when Success, Some
    puts 'success, user created'
    when Failure { |message, hash| message == :http_error }
    when Failure { |message, _| message == :http_error }
    puts "HTTP request error, #{result.failure[2]}"
    when Failure { |message, hash| message == :validation_error }
    when Failure { |message, _| message == :validation_error }
    puts "validation error, #{result.failure[2]}"
    when Failure(ROM::Error)
    puts 'User not created'
  2. davydovanton created this gist Mar 17, 2018.
    24 changes: 24 additions & 0 deletions dry_monads_with_handler.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    def result_handler(result)
    case result
    when Success, Some
    puts 'success, user created'
    when Failure { |message, hash| message == :http_error }
    puts "HTTP request error, #{result.failure[2]}"
    when Failure { |message, hash| message == :validation_error }
    puts "validation error, #{result.failure[2]}"
    when Failure(ROM::Error)
    puts 'User not created'
    end
    end

    def save_user_from_url(url, params)
    http.get(url, params)
    .bind { |body| validator.call(body).to_result }
    .bind { |payload| Try(ROM::Error) { (user_repository.create(payload) } }
    .fmap { |user| NotificationWorker.perform_async(user.id) }
    end

    result_handler save_user_from_url('site.com/posts/1', option: 1) # => HTTP request error
    result_handler save_user_from_url('site.com/users/1', option: :invalid) # => validation Error
    result_handler save_user_from_url('site.com/users/1', option: :dublicated) # => persistance Error
    result_handler save_user_from_url('site.com/users/1', option: :valid) # => 'success, user created'