JsResponder

Part of the Rails Ajax Responder Architecture. On the server side controller, you transcode your chain of commands into an array to your JS Client. Your JS Client should have a corresponding methods that are able to execute these commands.

JsResponder implements method_missing. You can write any method in transcode block as long as there is a corresponding method in the client.

Installation

Add this line to your application's Gemfile:

gem 'js_responder'

And then execute:

$ bundle

Or install it yourself as:

$ gem install js_responder

Usage

condition = (1+1 == 2)
instructions = JsResponder.new.transcode(context) do |c|
    redirect 'http://www.redirect.to'
    any_method 'Hola'
    if condition
        success 'Yes, 1+1 equal 2'
    else
        error 'Nope, 1+1 not equal to 2'
    end
    log 'Operation completed'
end
instructions == [
    ['redirect', 'http://www.redirect.to'],
    ['any_method', 'Hola'],
    ['success', 'Yes, 1+1 equal 2'],
    ['log', 'Operation completed']
]

On the client side

$(document).on 'ajax:success', 'form', (event, data, status, xhr) ->
  # Use your ResponderClient

class ResponderClient
  # receive whole json array and execute each instruction sequentially
  @execute: (instructions) ->
    _.each instructions, (instruction) =>
      @translate instruction

  # translate array instruction into class method call
  @translate: (instruction) ->
    command = instruction.shift()
    @[command].apply(this, instruction)

  # ----------------------------
  # AVAILABLE COMMANDS
  # ----------------------------
  @redirect: (url) ->
    window.location =  url

  @log: (text) ->
    alertify.log text

  @success: (text) ->
    alertify.success text

  @error: (text) ->
    alertify.error text

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sagittaros/js_responder. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.