Module: Nali::Controller

Defined in:
lib/nali/controller.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



5
6
7
# File 'lib/nali/controller.rb', line 5

def client
  @client
end

#paramsObject (readonly)

Returns the value of attribute params.



5
6
7
# File 'lib/nali/controller.rb', line 5

def params
  @params
end

Class Method Details

.included(base) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

Instance Method Details

#_createObject



39
40
41
42
43
44
45
46
47
48
# 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

#_updateObject



50
51
52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



91
92
93
# File 'lib/nali/controller.rb', line 91

def after( &closure )
  register_after closure: closure, except: [] 
end

#after_except(*methods, &closure) ⇒ Object



99
100
101
# File 'lib/nali/controller.rb', line 99

def after_except( *methods, &closure )
  register_after closure: closure, except: methods
end

#after_only(*methods, &closure) ⇒ Object



95
96
97
# File 'lib/nali/controller.rb', line 95

def after_only( *methods, &closure )
  register_after closure: closure, only: methods
end

#before(&closure) ⇒ Object



79
80
81
# File 'lib/nali/controller.rb', line 79

def before( &closure )
  register_before closure: closure, except: [] 
end

#before_except(*methods, &closure) ⇒ Object



87
88
89
# File 'lib/nali/controller.rb', line 87

def before_except( *methods, &closure )
  register_before closure: closure, except: methods
end

#before_only(*methods, &closure) ⇒ Object



83
84
85
# File 'lib/nali/controller.rb', line 83

def before_only( *methods, &closure )
  register_before closure: closure, only: methods
end

#clientsObject



31
32
33
# File 'lib/nali/controller.rb', line 31

def clients
  Nali::Clients.list
end

#destroyObject



62
63
64
65
66
67
68
69
# 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

#initialize(client, message) ⇒ Object



25
26
27
28
29
# File 'lib/nali/controller.rb', line 25

def initialize( client, message )
  @client  = client
  @message = message
  @params  = message[ :params ]
end

#runAction(name) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
# 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

#saveObject



35
36
37
# File 'lib/nali/controller.rb', line 35

def save
  params[ :id ].to_i.to_s == params[ :id ].to_s ? _update : _create
end

#select(name) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# 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) ⇒ Object



103
104
105
# File 'lib/nali/controller.rb', line 103

def selector( name, &closure )
  selectors[ name ] = closure
end

#stopObject



131
132
133
# File 'lib/nali/controller.rb', line 131

def stop
  @stopped = true
end

#trigger_failure(params = nil) ⇒ Object



75
76
77
# 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) ⇒ Object



71
72
73
# 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