module Nali::Controller

Attributes

client[R]
params[R]

Public Class Methods

afters() click to toggle source
# File lib/nali/controller.rb, line 16
def self.afters
  self.class_variable_get :@@afters
end
befores() click to toggle source
# File lib/nali/controller.rb, line 13
def self.befores
  self.class_variable_get :@@befores
end
included( base ) click to toggle source
# File lib/nali/controller.rb, line 7
def self.included( base )
  base.extend self
  base.class_eval do
    self.class_variable_set :@@befores,   []
    self.class_variable_set :@@afters,    []
    self.class_variable_set :@@selectors, {}
    def self.befores
      self.class_variable_get :@@befores
    end
    def self.afters
      self.class_variable_get :@@afters
    end
    def self.selectors
      self.class_variable_get :@@selectors
    end
  end
end
new( client, message ) click to toggle source
# File lib/nali/controller.rb, line 25
def initialize( client, message )
  @client  = client
  @message = message
  @params  = message[ :params ]
end
selectors() click to toggle source
# File lib/nali/controller.rb, line 19
def self.selectors
  self.class_variable_get :@@selectors
end

Public Instance Methods

_create() click to toggle source
# File lib/nali/controller.rb, line 39
def _create
  model = model_class.new params 
  model.access_action( :create, client ) do |options|
    permit_params options
    if ( model = model_class.new( params ) ).save
      trigger_success model.get_sync_params( client )[0]
      client.sync model
    else trigger_failure end
  end
end
_update() click to toggle source
# File lib/nali/controller.rb, line 50
def _update
  if model = model_class.find_by_id( params[ :id ] )
    model.access_action( :update, client ) do |options|
      permit_params options
      if model.update( params )
        trigger_success model.get_sync_params( client )[0] 
        model.sync client
      else trigger_failure end
    end
  end
end
after( &closure ) click to toggle source
# File lib/nali/controller.rb, line 91
def after( &closure )
  register_after closure: closure, except: [] 
end
after_except( *methods, &closure ) click to toggle source
# File lib/nali/controller.rb, line 99
def after_except( *methods, &closure )
  register_after closure: closure, except: methods
end
after_only( *methods, &closure ) click to toggle source
# File lib/nali/controller.rb, line 95
def after_only( *methods, &closure )
  register_after closure: closure, only: methods
end
before( &closure ) click to toggle source
# File lib/nali/controller.rb, line 79
def before( &closure )
  register_before closure: closure, except: [] 
end
before_except( *methods, &closure ) click to toggle source
# File lib/nali/controller.rb, line 87
def before_except( *methods, &closure )
  register_before closure: closure, except: methods
end
before_only( *methods, &closure ) click to toggle source
# File lib/nali/controller.rb, line 83
def before_only( *methods, &closure )
  register_before closure: closure, only: methods
end
clients() click to toggle source
# File lib/nali/controller.rb, line 31
def clients
  Nali::Clients.list
end
destroy() click to toggle source
# File lib/nali/controller.rb, line 62
def destroy
  if model = model_class.find_by_id( params[ :id ] )
    model.access_action( :destroy, client ) do |options|
      model.destroy()
      trigger_success model.id
    end
  else trigger_failure end
end
runAction( name ) click to toggle source
# File lib/nali/controller.rb, line 119
def runAction( name )
  if name == :select
    selector = params[ :selector ].to_sym
    @params  = params[ :params ]
    self.select selector
  else
    self.runFilters name
    self.send( name ) unless @stopped
    self.runFilters name, :after
  end
end
save() click to toggle source
# File lib/nali/controller.rb, line 35
def save
  params[ :id ].to_i.to_s == params[ :id ].to_s ? _update : _create
end
select( name ) click to toggle source
# File lib/nali/controller.rb, line 107
def select( name )
  selected = nil
  self.runFilters name
  if !@stopped and selector = self.class.selectors[ name ]
    selected = instance_eval( &selector )
  end
  self.runFilters name, :after
  if !@stopped and selected and ( selected.is_a?( ActiveRecord::Relation ) or selected.is_a?( ActiveRecord::Base ) )
    client.sync selected
  end
end
selector( name, &closure ) click to toggle source
# File lib/nali/controller.rb, line 103
def selector( name, &closure )
  selectors[ name ] = closure
end
stop() click to toggle source
# File lib/nali/controller.rb, line 131
def stop
  @stopped = true
end
trigger_failure( params = nil ) click to toggle source
# File lib/nali/controller.rb, line 75
def trigger_failure( params = nil )
  client.send_json( { action: :_failure, params: params, journal_id: @message[ :journal_id ] } )
end
trigger_success( params = nil ) click to toggle source
# File lib/nali/controller.rb, line 71
def trigger_success( params = nil )
  client.send_json( { action: :_success, params: params, journal_id: @message[ :journal_id ] } )
end

Protected Instance Methods

runFilters( name, type = :before ) click to toggle source
# File lib/nali/controller.rb, line 137
def runFilters( name, type = :before )
  filters = if type == :before then self.class.befores else self.class.afters end
  filters.each do |obj| 
    if !@stopped and ( ( obj[ :only ] and obj[ :only ].include?( name ) ) or ( obj[ :except ] and !obj[ :except ].include?( name ) ) )
      instance_eval( &obj[ :closure ] )
    end
  end
end

Private Instance Methods

model_class() click to toggle source
# File lib/nali/controller.rb, line 161
def model_class
  Object.const_get model_name 
end
model_name() click to toggle source
# File lib/nali/controller.rb, line 165
def model_name
  self.class.name.gsub( 'sController', '' ).to_sym
end
permit_params( filter ) click to toggle source
# File lib/nali/controller.rb, line 156
def permit_params( filter )
  params.keys.each { |key| params.delete( key ) unless filter.include?( key ) }
  params
end
register_after( obj ) click to toggle source
# File lib/nali/controller.rb, line 152
def register_after( obj )
  afters.push obj
end
register_before( obj ) click to toggle source
# File lib/nali/controller.rb, line 148
def register_before( obj )
  befores.push obj
end