lux-fw 0.1.17 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.version +1 -1
  3. data/bin/cli/am +38 -29
  4. data/bin/cli/assets +8 -4
  5. data/bin/cli/exceptions +6 -6
  6. data/bin/cli/generate +0 -0
  7. data/bin/cli/get +0 -0
  8. data/bin/cli/nginx +11 -5
  9. data/bin/cli/routes +0 -0
  10. data/bin/cli/systemd +36 -0
  11. data/bin/forever +0 -0
  12. data/bin/job_que +0 -0
  13. data/bin/lux +1 -0
  14. data/lib/common/base32.rb +0 -0
  15. data/lib/common/class_attributes.rb +13 -4
  16. data/lib/common/crypt.rb +6 -10
  17. data/lib/common/dynamic_class.rb +23 -0
  18. data/lib/common/generic_model.rb +0 -0
  19. data/lib/common/hash_with_indifferent_access.rb +352 -0
  20. data/lib/common/method_attr.rb +69 -0
  21. data/lib/lux/api/api.rb +26 -27
  22. data/lib/lux/api/lib/application_api.rb +26 -7
  23. data/lib/lux/api/lib/doc_builder.rb +18 -17
  24. data/lib/lux/api/lib/dsl.rb +23 -41
  25. data/lib/lux/api/lib/error.rb +3 -0
  26. data/lib/lux/api/lib/model_api.rb +22 -20
  27. data/lib/lux/api/lib/rescue.rb +5 -15
  28. data/lib/lux/api/lib/response.rb +46 -0
  29. data/lib/lux/cache/cache.rb +13 -6
  30. data/lib/lux/cell/cell.rb +3 -14
  31. data/lib/lux/config/config.rb +4 -3
  32. data/lib/lux/controller/controller.rb +3 -3
  33. data/lib/lux/controller/lib/nav.rb +6 -2
  34. data/lib/lux/error/error.rb +15 -14
  35. data/lib/lux/helper/helper.rb +5 -5
  36. data/lib/lux/helper/lib/html_tag.rb +67 -0
  37. data/lib/lux/html/lib/input_types.rb +26 -16
  38. data/lib/lux/lib/lux.rb +51 -0
  39. data/lib/lux/lux.rb +5 -52
  40. data/lib/lux/page/lib/response.rb +178 -0
  41. data/lib/lux/page/page.rb +72 -51
  42. data/lib/lux/rescue_from/rescue_from.rb +8 -6
  43. data/lib/lux/template/template.rb +1 -0
  44. data/lib/lux-fw.rb +2 -0
  45. data/lib/overload/array.rb +4 -0
  46. data/lib/overload/date.rb +2 -0
  47. data/lib/overload/hash.rb +19 -10
  48. data/lib/overload/it.rb +29 -0
  49. data/lib/overload/object.rb +3 -19
  50. data/lib/overload/r.rb +53 -0
  51. data/lib/overload/string.rb +5 -6
  52. data/lib/overload/string_inflections.rb +4 -3
  53. data/lib/plugins/assets/assets_plug.rb +9 -4
  54. data/lib/plugins/assets/helper_module_adapter.rb +4 -2
  55. data/lib/plugins/db_helpers/link_plugin.rb +2 -2
  56. data/lib/plugins/db_logger/init.rb +1 -1
  57. data/lib/vendor/mini_assets/lib/asset/css.rb +19 -0
  58. data/lib/vendor/mini_assets/lib/asset/js.rb +17 -0
  59. data/lib/vendor/mini_assets/lib/asset.rb +71 -0
  60. data/lib/vendor/mini_assets/lib/base/javascript.rb +13 -0
  61. data/lib/vendor/mini_assets/lib/base/stylesheet.rb +5 -0
  62. data/lib/vendor/mini_assets/lib/base.rb +69 -0
  63. data/lib/vendor/mini_assets/lib/manifest.rb +18 -0
  64. data/lib/vendor/mini_assets/lib/opts.rb +16 -0
  65. data/lib/vendor/mini_assets/mini_assets.rb +74 -0
  66. metadata +23 -10
  67. data/lib/common/class_method_params.rb +0 -94
  68. data/lib/overload/hash_wia.rb +0 -282
  69. data/lib/overload/inflections.rb +0 -199
  70. data/lib/vendor/mini_assets/mini_asset/base.rb +0 -167
  71. data/lib/vendor/mini_assets/mini_asset/css.rb +0 -38
  72. data/lib/vendor/mini_assets/mini_asset/js.rb +0 -38
  73. data/lib/vendor/mini_assets/mini_asset.rb +0 -31
@@ -0,0 +1,352 @@
1
+ class HashWithIndifferentAccess
2
+ def initialize data=nil
3
+ @data = {}
4
+ merge! data if data
5
+ end
6
+
7
+ def merge! data
8
+ data.each { |key, value| @data[convert_key(key)] = convert_value(value) }
9
+ end
10
+ alias_method :update, :merge!
11
+
12
+ def merge data
13
+ copy = self.class.new @data
14
+ copy.merge! data
15
+ copy
16
+ end
17
+
18
+ def [] key
19
+ @data[convert_key(key)]
20
+ end
21
+
22
+ def []= key, value
23
+ @data[convert_key(key)] = convert_value(value)
24
+ end
25
+ alias_method :store, :[]=
26
+
27
+ def key? name
28
+ @data.key? convert_key(name)
29
+ end
30
+ alias_method :include?, :key?
31
+ alias_method :has_key?, :key?
32
+ alias_method :member?, :key?
33
+
34
+ def to_json opts=nil
35
+ @data.to_json opts
36
+ end
37
+
38
+ def delete_if &block
39
+ @data.delete_if(&block)
40
+ end
41
+
42
+ def delete key
43
+ @data.delete convert_key(key)
44
+ end
45
+
46
+ def dig *args
47
+ list = args.map{ |_| _.class == Symbol ? _.to_s : _ }
48
+ @data.dig *list
49
+ end
50
+
51
+ def clear
52
+ @data.keys.each { |key| @data.delete(key) }
53
+ end
54
+
55
+ def each; @data.each { |k,v| yield(k,v) }; end
56
+ def keys; @data.keys; end
57
+ def values; @data.keys; end
58
+ def to_hash; @data; end
59
+
60
+ private
61
+
62
+ def convert_key key
63
+ key.kind_of?(Symbol) ? key.to_s : key
64
+ end
65
+
66
+ def convert_value value
67
+ value.is_a?(Hash) ? self.class.new(value) : value
68
+ end
69
+ end
70
+
71
+
72
+ # exrtacted from Rails
73
+ # class HashWithIndifferentAccess < Hash
74
+ # # Returns +true+ so that <tt>Array#extract_options!</tt> finds members of
75
+ # # this class.
76
+ # def extractable_options?
77
+ # true
78
+ # end
79
+
80
+ # def with_indifferent_access
81
+ # dup
82
+ # end
83
+
84
+ # def initialize(constructor = {})
85
+ # if constructor.respond_to?(:to_hash)
86
+ # super()
87
+ # update(constructor)
88
+
89
+ # hash = constructor.to_hash
90
+ # self.default = hash.default if hash.default
91
+ # self.default_proc = hash.default_proc if hash.default_proc
92
+ # else
93
+ # super(constructor)
94
+ # end
95
+ # end
96
+
97
+ # def default(*args)
98
+ # arg_key = args.first
99
+
100
+ # if include?(key = convert_key(arg_key))
101
+ # self[key]
102
+ # else
103
+ # super
104
+ # end
105
+ # end
106
+
107
+ # def self.[](*args)
108
+ # new.merge!(Hash[*args])
109
+ # end
110
+
111
+ # alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
112
+ # alias_method :regular_update, :update unless method_defined?(:regular_update)
113
+
114
+ # # Assigns a new value to the hash:
115
+ # #
116
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new
117
+ # # hash[:key] = 'value'
118
+ # #
119
+ # # This value can be later fetched using either +:key+ or <tt>'key'</tt>.
120
+ # def []=(key, value)
121
+ # regular_writer(convert_key(key), convert_value(value, for: :assignment))
122
+ # end
123
+
124
+ # alias_method :store, :[]=
125
+
126
+ # # Updates the receiver in-place, merging in the hash passed as argument:
127
+ # #
128
+ # # hash_1 = ActiveSupport::HashWithIndifferentAccess.new
129
+ # # hash_1[:key] = 'value'
130
+ # #
131
+ # # hash_2 = ActiveSupport::HashWithIndifferentAccess.new
132
+ # # hash_2[:key] = 'New Value!'
133
+ # #
134
+ # # hash_1.update(hash_2) # => {"key"=>"New Value!"}
135
+ # #
136
+ # # The argument can be either an
137
+ # # <tt>ActiveSupport::HashWithIndifferentAccess</tt> or a regular +Hash+.
138
+ # # In either case the merge respects the semantics of indifferent access.
139
+ # #
140
+ # # If the argument is a regular hash with keys +:key+ and +"key"+ only one
141
+ # # of the values end up in the receiver, but which one is unspecified.
142
+ # #
143
+ # # When given a block, the value for duplicated keys will be determined
144
+ # # by the result of invoking the block with the duplicated key, the value
145
+ # # in the receiver, and the value in +other_hash+. The rules for duplicated
146
+ # # keys follow the semantics of indifferent access:
147
+ # #
148
+ # # hash_1[:key] = 10
149
+ # # hash_2['key'] = 12
150
+ # # hash_1.update(hash_2) { |key, old, new| old + new } # => {"key"=>22}
151
+ # def update(other_hash)
152
+ # if other_hash.is_a? HashWithIndifferentAccess
153
+ # super(other_hash)
154
+ # else
155
+ # other_hash.to_hash.each_pair do |key, value|
156
+ # if block_given? && key?(key)
157
+ # value = yield(convert_key(key), self[key], value)
158
+ # end
159
+ # regular_writer(convert_key(key), convert_value(value))
160
+ # end
161
+ # self
162
+ # end
163
+ # end
164
+
165
+ # alias_method :merge!, :update
166
+
167
+ # # Checks the hash for a key matching the argument passed in:
168
+ # #
169
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new
170
+ # # hash['key'] = 'value'
171
+ # # hash.key?(:key) # => true
172
+ # # hash.key?('key') # => true
173
+ # def key?(key)
174
+ # super(convert_key(key))
175
+ # end
176
+
177
+ # alias_method :include?, :key?
178
+ # alias_method :has_key?, :key?
179
+ # alias_method :member?, :key?
180
+
181
+ # # Same as <tt>Hash#[]</tt> where the key passed as argument can be
182
+ # # either a string or a symbol:
183
+ # #
184
+ # # counters = ActiveSupport::HashWithIndifferentAccess.new
185
+ # # counters[:foo] = 1
186
+ # #
187
+ # # counters['foo'] # => 1
188
+ # # counters[:foo] # => 1
189
+ # # counters[:zoo] # => nil
190
+ # def [](key)
191
+ # super(convert_key(key))
192
+ # end
193
+
194
+ # # Same as <tt>Hash#fetch</tt> where the key passed as argument can be
195
+ # # either a string or a symbol:
196
+ # #
197
+ # # counters = ActiveSupport::HashWithIndifferentAccess.new
198
+ # # counters[:foo] = 1
199
+ # #
200
+ # # counters.fetch('foo') # => 1
201
+ # # counters.fetch(:bar, 0) # => 0
202
+ # # counters.fetch(:bar) { |key| 0 } # => 0
203
+ # # counters.fetch(:zoo) # => KeyError: key not found: "zoo"
204
+ # def fetch(key, *extras)
205
+ # super(convert_key(key), *extras)
206
+ # end
207
+
208
+ # # Returns an array of the values at the specified indices:
209
+ # #
210
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new
211
+ # # hash[:a] = 'x'
212
+ # # hash[:b] = 'y'
213
+ # # hash.values_at('a', 'b') # => ["x", "y"]
214
+ # def values_at(*indices)
215
+ # indices.collect { |key| self[convert_key(key)] }
216
+ # end
217
+
218
+ # # Returns an array of the values at the specified indices, but also
219
+ # # raises an exception when one of the keys can't be found.
220
+ # #
221
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new
222
+ # # hash[:a] = 'x'
223
+ # # hash[:b] = 'y'
224
+ # # hash.fetch_values('a', 'b') # => ["x", "y"]
225
+ # # hash.fetch_values('a', 'c') { |key| 'z' } # => ["x", "z"]
226
+ # # hash.fetch_values('a', 'c') # => KeyError: key not found: "c"
227
+ # def fetch_values(*indices, &block)
228
+ # indices.collect { |key| fetch(key, &block) }
229
+ # end if Hash.method_defined?(:fetch_values)
230
+
231
+ # # Returns a shallow copy of the hash.
232
+ # #
233
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new({ a: { b: 'b' } })
234
+ # # dup = hash.dup
235
+ # # dup[:a][:c] = 'c'
236
+ # #
237
+ # # hash[:a][:c] # => nil
238
+ # # dup[:a][:c] # => "c"
239
+ # def dup
240
+ # self.class.new(self).tap do |new_hash|
241
+ # set_defaults(new_hash)
242
+ # end
243
+ # end
244
+
245
+ # # This method has the same semantics of +update+, except it does not
246
+ # # modify the receiver but rather returns a new hash with indifferent
247
+ # # access with the result of the merge.
248
+ # def merge(hash, &block)
249
+ # dup.update(hash, &block)
250
+ # end
251
+
252
+ # # Like +merge+ but the other way around: Merges the receiver into the
253
+ # # argument and returns a new hash with indifferent access as result:
254
+ # #
255
+ # # hash = ActiveSupport::HashWithIndifferentAccess.new
256
+ # # hash['a'] = nil
257
+ # # hash.reverse_merge(a: 0, b: 1) # => {"a"=>nil, "b"=>1}
258
+ # def reverse_merge(other_hash)
259
+ # super(self.class.new(other_hash))
260
+ # end
261
+ # alias_method :with_defaults, :reverse_merge
262
+
263
+ # # Same semantics as +reverse_merge+ but modifies the receiver in-place.
264
+ # def reverse_merge!(other_hash)
265
+ # replace(reverse_merge(other_hash))
266
+ # end
267
+ # alias_method :with_defaults!, :reverse_merge!
268
+
269
+ # # Replaces the contents of this hash with other_hash.
270
+ # #
271
+ # # h = { "a" => 100, "b" => 200 }
272
+ # # h.replace({ "c" => 300, "d" => 400 }) # => {"c"=>300, "d"=>400}
273
+ # def replace(other_hash)
274
+ # super(self.class.new(other_hash))
275
+ # end
276
+
277
+ # # Removes the specified key from the hash.
278
+ # def delete(key)
279
+ # super(convert_key(key))
280
+ # end
281
+
282
+ # def stringify_keys!; self end
283
+ # def deep_stringify_keys!; self end
284
+ # def stringify_keys; dup end
285
+ # def deep_stringify_keys; dup end
286
+ # # undef :symbolize_keys!
287
+ # # undef :deep_symbolize_keys!
288
+ # def symbolize_keys; to_hash.symbolize_keys! end
289
+ # def deep_symbolize_keys; to_hash.deep_symbolize_keys! end
290
+ # def to_options!; self end
291
+
292
+ # def select(*args, &block)
293
+ # return to_enum(:select) unless block_given?
294
+ # dup.tap { |hash| hash.select!(*args, &block) }
295
+ # end
296
+
297
+ # def reject(*args, &block)
298
+ # return to_enum(:reject) unless block_given?
299
+ # dup.tap { |hash| hash.reject!(*args, &block) }
300
+ # end
301
+
302
+ # def transform_values(*args, &block)
303
+ # return to_enum(:transform_values) unless block_given?
304
+ # dup.tap { |hash| hash.transform_values!(*args, &block) }
305
+ # end
306
+
307
+ # def compact
308
+ # dup.tap(&:compact!)
309
+ # end
310
+
311
+ # # Convert to a regular hash with string keys.
312
+ # def to_hash
313
+ # _new_hash = Hash.new
314
+ # set_defaults(_new_hash)
315
+
316
+ # each do |key, value|
317
+ # _new_hash[key] = convert_value(value, for: :to_hash)
318
+ # end
319
+ # _new_hash
320
+ # end
321
+
322
+ # private
323
+ # def convert_key(key) # :doc:
324
+ # key.kind_of?(Symbol) ? key.to_s : key
325
+ # end
326
+
327
+ # def convert_value(value, options = {}) # :doc:
328
+ # if value.is_a? Hash
329
+ # if options[:for] == :to_hash
330
+ # value.to_hash
331
+ # else
332
+ # value.class == Hash ? HashWithIndifferentAccess.new(value) : value
333
+ # end
334
+ # elsif value.is_a?(Array)
335
+ # if options[:for] != :assignment || value.frozen?
336
+ # value = value.dup
337
+ # end
338
+ # value.map! { |e| convert_value(e, options) }
339
+ # else
340
+ # value
341
+ # end
342
+ # end
343
+
344
+ # def set_defaults(target) # :doc:
345
+ # if default_proc
346
+ # target.default_proc = default_proc.dup
347
+ # else
348
+ # target.default = default
349
+ # end
350
+ # end
351
+ # end
352
+
@@ -0,0 +1,69 @@
1
+ # class Foo
2
+ # method_attr :name
3
+ # method_attr :param do |field, type=String, opts={}|
4
+ # opts[:name] = field
5
+ # opts[:type] ||= String
6
+ # opts
7
+ # end
8
+
9
+ # name "Test method desc"
10
+ # param :email, :email
11
+ # def test
12
+ # end
13
+ # end
14
+
15
+ # ap Foo.method_attr
16
+ # {
17
+ # "test": {
18
+ # "name": [
19
+ # "Test method desc"
20
+ # ],
21
+ # "param": [
22
+ # {
23
+ # "name": "email",
24
+ # "type": "String"
25
+ # }
26
+ # ]
27
+ # }
28
+ # }
29
+
30
+ module MethodAttributes
31
+ extend self
32
+
33
+ @@G_OPTS = {}
34
+ @@M_OPTS = {}
35
+
36
+ def define klass, param_name, &block
37
+ klass.define_singleton_method(param_name) do |*args|
38
+ @@M_OPTS[param_name] ||= []
39
+ @@M_OPTS[param_name].push block ? block.call(*args) : args[0]
40
+ end
41
+
42
+ klass.define_singleton_method(:method_added) do |name|
43
+ return unless @@M_OPTS.keys.first
44
+
45
+ @@G_OPTS[to_s] ||= {}
46
+ @@G_OPTS[to_s][name] = @@M_OPTS.dup
47
+ @@M_OPTS.clear
48
+ end
49
+ end
50
+
51
+ def get klass, method_name=nil
52
+ return @@G_OPTS[klass.to_s] unless method_name
53
+
54
+ klass.ancestors.map(&:to_s).each do |a_klass|
55
+ v = @@G_OPTS[a_klass][method_name]
56
+ return v if v
57
+ end
58
+ end
59
+ end
60
+
61
+ ###
62
+
63
+ class Object
64
+ def method_attr name=nil, &block
65
+ return MethodAttributes.get(self).or({}) if name.nil?
66
+
67
+ MethodAttributes.define self, name, &block
68
+ end
69
+ end
data/lib/lux/api/api.rb CHANGED
@@ -10,9 +10,9 @@
10
10
  # 503 Service Unavailable
11
11
 
12
12
  class Lux::Api
13
+ attr_accessor :message, :response
13
14
 
14
15
  BeforeAndAfter.define self, :before, :after
15
-
16
16
  Lux::RescueFrom.define(self)
17
17
 
18
18
  class << self
@@ -60,54 +60,55 @@ class Lux::Api
60
60
 
61
61
  klass.new.call(action.to_sym, params)
62
62
  end
63
-
64
63
  end
65
64
 
66
- def call(action, params={})
67
- @@rescue_from_ivar.call do
68
- rescued_call(action, params)
69
- BeforeAndAfter.execute(self, :after)
70
- end
65
+ ###
71
66
 
72
- @response
67
+ def call action, params={}
68
+ @@rescue_from_ivar.call(self) { rescued_call action, params }
69
+
70
+ BeforeAndAfter.execute(self, :after)
71
+
72
+ response.render
73
73
  end
74
74
 
75
75
  # internal method for running actions
76
76
  # UserApi.new.call(:login, { email:'', pass:'' })
77
- def rescued_call(action, params={})
77
+ def rescued_call action, params={}
78
78
  raise ForbidenError, "Protected action call" if [:call, :rescued_call, :params, :error].index action
79
79
  raise NotFoundError, "Action #{action} not found in #{self.class.to_s}" unless respond_to? action
80
80
 
81
- @response = {}
82
- @message = nil
83
- @params = params
81
+ @response = Lux::Api::Response.new
82
+ @params = params
84
83
  @class_name = self.class.to_s.sub(/Api$/,'')
85
84
 
86
85
  # load default object
87
86
  if @params[:_id]
88
87
  eval "@object = @#{@class_name.underscore} = #{@class_name}[@params[:_id].to_i]"
89
88
  @params.delete(:_id)
90
- @response[:path] = @object.path rescue nil if @object
89
+ @response.meta :path, @object.path if @object.respond_to?(:path)
91
90
  end
92
91
 
92
+ check_params_and_mock_instance_variables action
93
+ return if response.errors?
94
+
93
95
  # execte api call and verify params if possible
94
96
  BeforeAndAfter.execute(self, :before)
95
97
 
96
- return unless check_params_and_mock_instance_variables action
98
+ api_data = send action
97
99
 
98
- api_data = send(action)
99
- format_response!(api_data)
100
+ format_response! api_data
100
101
  end
101
102
 
102
103
  def params
103
104
  @params
104
105
  end
105
106
 
106
- def error(what)
107
- raise StandardError, what
107
+ def error what
108
+ raise Lux::Api::Error.new(what)
108
109
  end
109
110
 
110
- def format_response!(api_data=nil)
111
+ def format_response! api_data=nil
111
112
  if api_data
112
113
  # api_data = instance_eval(&res) if api_data.kind_of?(Proc)
113
114
  api_data = api_data.all.map{ |el| el.attributes } if api_data.class.name == 'ActiveRecord::Relation'
@@ -123,27 +124,25 @@ class Lux::Api
123
124
  api_data = api_data.attributes.reject{ |f| ['updated_by', 'updated_at', 'created_by', 'created_at'].index(f) }
124
125
  end
125
126
 
126
- @response[:data] = api_data
127
- @response[:message] = @message.to_s unless @message.nil?
128
- # @response[:message] = api_data if !@message && api_data.kind_of?(String)
127
+ response.data = api_data
129
128
 
130
129
  # if we define _redirect then we will be redirected to exact page
131
130
  # useful for file uploads
132
131
  if @params[:_redirect]
133
- if @response[:error]
134
- Lux.page.flash.error @response[:error]
135
- elsif @response[:message]
132
+ if response.errors
133
+ Lux.page.flash.error @response[:errors].join(', ')
134
+ elsif response.message
136
135
  Lux.page.flash.info @response[:message]
137
136
  end
138
137
  Lux.page.redirect(@params[:_redirect])
139
138
  end
140
139
  end
141
140
 
142
- ap @response if Lux.config.debug_api_response
141
+ ap response.render if Lux.config.log_to_stdout
143
142
  end
144
143
 
145
144
  def message(what)
146
- @message = what
145
+ response.message = what
147
146
  end
148
147
 
149
148
  end
@@ -1,15 +1,34 @@
1
1
  class ApplicationApi < Lux::Api
2
2
 
3
+ method_attr :user do |value|
4
+ raise 'Method attr :%s for :user is not allowed value' % value unless [:user, :guest, :admin].include?(value)
5
+ value
6
+ end
7
+
8
+ before do
9
+ if params[:api_key]
10
+ User.current = User.find_by api_token: params[:api_key]
11
+ error 'Invalid api key' unless User.current
12
+ end
13
+
14
+ case @method_attr[:user].try(:first)
15
+ when :user
16
+ error 'Dostupno registriranim korinsicima' unless User.current
17
+ when :admin
18
+ error 'Samo za ADMIN usere' unless User.current.try(:is_admin)
19
+ end
20
+ end
21
+
3
22
  # called at the end of response
4
- def decorate_response!(data=nil)
5
- @response = data if data
23
+ def decorate_response!
6
24
  if Lux.page
7
- @response[:ip] = Lux.page.request.ip
8
- @response[:user] = Lux.page.var.user ? Lux.page.var.user.email : nil
9
- @response[:http_status] = Lux.page.status(200)
10
- @response[:error] ||= 'Bad request' if Lux.page.status != 200
25
+ response.meta :ip, Lux.page.request.ip
26
+ response.meta :user, Lux.page.var.user ? Lux.page.var.user.email : nil
27
+ response.meta :http_status, Lux.page.status(200)
28
+ # response.error 'Bad request' if response.errors? && Lux.page.status != 200
11
29
  end
12
- @response
30
+
31
+ response.render
13
32
  end
14
33
 
15
34
  def after
@@ -1,18 +1,19 @@
1
- class Lux::Api
2
- class << self
3
- # list all availabe actions in a class
4
- def actions
5
- instance_level_actions = UserApi.instance_methods - Object.instance_methods - [:sinatra, :instance_run, :params]
6
- @@actions[self.to_s].keys + instance_level_actions
7
- end
1
+ # class Lux::Api
2
+ # class << self
3
+ # # list all availabe actions in a class
4
+ # def actions
5
+ # UserApi.instance_methods - UserApi.ancestors[1].instance_methods
6
+ # instance_level_actions = UserApi.instance_methods - Object.instance_methods - [:sinatra, :instance_run, :params]
7
+ # @@actions[self.to_s].keys + instance_level_actions
8
+ # end
8
9
 
9
- # get details about action
10
- def action_details(name)
11
- @@actions[self.to_s][name] ||= {}
12
- details = @@actions[self.to_s][name].reject { |key| [:proc].index(key) }
13
- details[:name] ||= "#{name.to_s} action"
14
- details[:action] ||= name
15
- details.h
16
- end
17
- end
18
- end
10
+ # # get details about action
11
+ # def action_details(name)
12
+ # @@actions[self.to_s][name] ||= {}
13
+ # details = @@actions[self.to_s][name].reject { |key| [:proc].index(key) }
14
+ # details[:name] ||= "#{name.to_s} action"
15
+ # details[:action] ||= name
16
+ # details.h
17
+ # end
18
+ # end
19
+ # end