nested 0.0.29 → 0.0.30

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 238405f893ac3d421bb7847af4cf7e9b7193d60b
4
- data.tar.gz: c69edcdd615637531b1b590f3f724d233b366c37
3
+ metadata.gz: e2dc4320c86fbb50e5eb18ba56f3e0586eebdf59
4
+ data.tar.gz: 5a317c9502f9e660ff115d1ae2082427f8487651
5
5
  SHA512:
6
- metadata.gz: bcc98a9dddd3ad23d069cd5247beea3a72e68a2f59907c6362b772952b04e608bd14d77afa592babdc4c026d701202d0c60cdebcc2b549fd5d6135324568f183
7
- data.tar.gz: be247d2bb96f5b2b8518b6b2da5070cbdc006c37664b8573818f47e6e9c84e350870907a22b24fee088d6ee1cb48a8d244f563b07039d7a4838aa8c3f8f4acb7
6
+ metadata.gz: 8cee76f95bcb3362c969b6a4ed8521d23f5954fd2693b36be368a11fd90a917d1299a29ff517ceea4d244a63fe3985152461739ca0304726f98e0bf6765d86ca
7
+ data.tar.gz: e655d4103dbe7824ebd3c870f5a5d582fdc9f5fcad1acdd60026565569624c6d8b28d4f7964a63ad6cfbef0f8b0aec84b665d6c4f08ef33828ff5b3bda36e451
data/lib/nested/app.rb CHANGED
@@ -2,11 +2,12 @@ module Nested
2
2
  class App
3
3
  def self.inherited(clazz)
4
4
  (class << clazz; self; end).instance_eval do
5
- attr_accessor :sinatra, :behaviors
5
+ attr_accessor :sinatra, :behaviors, :conditions
6
6
  end
7
7
  clazz.sinatra = Class.new(Sinatra::Base)
8
8
  clazz.instance_variable_set("@config", {})
9
9
  clazz.instance_variable_set("@behaviors", {})
10
+ clazz.instance_variable_set("@conditions", {})
10
11
  end
11
12
 
12
13
  def self.behavior(name, &block)
@@ -14,6 +15,16 @@ module Nested
14
15
  self
15
16
  end
16
17
 
18
+ def self.condition(name, block)
19
+ @conditions[name] = block
20
+
21
+ @sinatra.send(:define_method, :"#{name}?") do
22
+ instance_exec(&block)
23
+ end
24
+
25
+ self
26
+ end
27
+
17
28
  def self.child_resource(name, clazz, resource_if_block, model_block, &block)
18
29
  clazz.new(self, sinatra, name, nil, resource_if_block, model_block)
19
30
  .tap{|r| r.instance_eval(&(block||Proc.new{ }))}
@@ -43,15 +43,13 @@ module Nested
43
43
  js << " }"
44
44
 
45
45
  if [:get, :delete].include?(method)
46
- args << "data" if !block_args.empty?
47
-
48
- js << " impl.#{fun_name} = function(#{args.join(',')}){"
46
+ js << " impl.#{fun_name} = function(#{(args + ['data']).join(',')}){"
49
47
  js << " var deferred = $q.defer()"
50
48
  js << " $q.all([#{when_args.join(',')}]).then(function(values){"
51
49
  js << " $http({"
52
50
  js << " method: '#{method}', "
53
- js << (" url: '#{route}'" + (block_args.empty? ? "" : ","))
54
- js << " params: data" unless block_args.empty?
51
+ js << " url: '#{route}', "
52
+ js << " params: data||{}"
55
53
  js << " })"
56
54
  js << " .success(function(responseData){"
57
55
  js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
@@ -60,6 +58,24 @@ module Nested
60
58
  js << " });"
61
59
  js << " return deferred.promise"
62
60
  js << " }"
61
+
62
+ # args << "data" if !block_args.empty?
63
+
64
+ # js << " impl.#{fun_name} = function(#{args.join(',')}){"
65
+ # js << " var deferred = $q.defer()"
66
+ # js << " $q.all([#{when_args.join(',')}]).then(function(values){"
67
+ # js << " $http({"
68
+ # js << " method: '#{method}', "
69
+ # js << (" url: '#{route}'" + (block_args.empty? ? "" : ","))
70
+ # js << " params: data" unless block_args.empty?
71
+ # js << " })"
72
+ # js << " .success(function(responseData){"
73
+ # js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
74
+ # js << " })"
75
+ # js << " .error(function(){ deferred.reject() })"
76
+ # js << " });"
77
+ # js << " return deferred.promise"
78
+ # js << " }"
63
79
  elsif method == :post
64
80
  js << " impl.#{fun_name} = function(#{(args+['data']).join(',')}){"
65
81
  js << " var deferred = $q.defer()"
data/lib/nested/many.rb CHANGED
@@ -15,7 +15,7 @@ module Nested
15
15
  end
16
16
 
17
17
  def one_if(resource_if_block, &block)
18
- child_resource(self.name.to_s.singularize.to_sym, One, resource_if_block, nil, &block)
18
+ child_resource(self.name.to_s.singularize.to_sym, One, resource_if_block.is_a?(Symbol) ? @app.conditions[resource_if_block] : resource_if_block, nil, &block)
19
19
  end
20
20
 
21
21
  def default_model_block
@@ -71,12 +71,12 @@ module Nested
71
71
  end
72
72
 
73
73
  def serialize_include_if(condition, *args)
74
- args.each {|arg| @serializer + SerializerField.new(arg, condition) }
74
+ args.each {|arg| @serializer + SerializerField.new(arg, condition.is_a?(Symbol) ? @app.conditions[condition] : condition) }
75
75
  self
76
76
  end
77
77
 
78
78
  def serialize_exclude_if(condition, *args)
79
- args.each {|arg| @serializer - SerializerField.new(arg, condition) }
79
+ args.each {|arg| @serializer - SerializerField.new(arg, condition.is_a?(Symbol) ? @app.conditions[condition] : condition) }
80
80
  self
81
81
  end
82
82
 
@@ -103,7 +103,7 @@ module Nested
103
103
  end
104
104
 
105
105
  define_method :"#{method}_if" do |method_if_block, action=nil, &block|
106
- create_sinatra_route method, action, method_if_block, &(block||proc {})
106
+ create_sinatra_route method, action, method_if_block.is_a?(Symbol) ? @app.conditions[method_if_block] : method_if_block, &(block||proc {})
107
107
  self
108
108
  end
109
109
  end
@@ -155,36 +155,37 @@ module Nested
155
155
  end
156
156
 
157
157
  def sinatra_exec_get_block(sinatra, &block)
158
- sinatra_init_data(:get, sinatra, &block)
158
+ # sinatra_init_data(:get, sinatra, &block)
159
159
  sinatra.instance_exec(*sinatra.instance_variable_get("@__data"), &block)
160
160
  end
161
161
 
162
162
  def sinatra_exec_delete_block(sinatra, &block)
163
- sinatra_init_data(:delete, sinatra, &block)
163
+ # sinatra_init_data(:delete, sinatra, &block)
164
164
  sinatra.instance_exec(*sinatra.instance_variable_get("@__data"), &block)
165
165
  end
166
166
 
167
- def sinatra_init_data(method, sinatra, &block)
168
- raw_data = if [:put, :post].include?(method)
169
- sinatra.request.body.rewind
170
- HashWithIndifferentAccess.new(JSON.parse(sinatra.request.body.read))
171
- elsif [:get, :delete].include?(method)
172
- sinatra.params
173
- else
174
- {}
175
- end
167
+ # def sinatra_init_data(method, sinatra, &block)
168
+ # raw_data = if [:put, :post].include?(method)
169
+ # sinatra.request.body.rewind
170
+ # body = sinatra.request.body.read
171
+ # HashWithIndifferentAccess.new(JSON.parse(body))
172
+ # elsif [:get, :delete].include?(method)
173
+ # sinatra.params
174
+ # else
175
+ # {}
176
+ # end
176
177
 
177
- sinatra.instance_variable_set("@__raw_data", raw_data)
178
- sinatra.instance_variable_set("@__data", raw_data.values_at(*block.parameters.map(&:last)))
179
- end
178
+ # sinatra.instance_variable_set("@__raw_data", raw_data)
179
+ # sinatra.instance_variable_set("@__data", raw_data.values_at(*block.parameters.map(&:last)))
180
+ # end
180
181
 
181
182
  def sinatra_exec_put_block(sinatra, &block)
182
- sinatra_init_data(:put, sinatra, &block)
183
+ # sinatra_init_data(:put, sinatra, &block)
183
184
  sinatra.instance_exec(*sinatra.instance_variable_get("@__data"), &block)
184
185
  end
185
186
 
186
187
  def sinatra_exec_post_block(sinatra, &block)
187
- sinatra_init_data(:post, sinatra, &block)
188
+ # sinatra_init_data(:post, sinatra, &block)
188
189
  res = sinatra.instance_exec(*sinatra.instance_variable_get("@__data"), &block)
189
190
  sinatra.instance_variable_set("@#{self.instance_variable_name}", res)
190
191
  # TODO: do we need to check for existing variables here?
@@ -240,6 +241,20 @@ module Nested
240
241
  {data: sinatra_errors_to_hash(errors), ok: false}
241
242
  end
242
243
 
244
+ def sinatra_init_data_extract_body(sinatra)
245
+ JSON.parse(sinatra.request.body.read)
246
+ end
247
+
248
+ def sinatra_init_data(sinatra, method, &block)
249
+ if [:put, :post].include?(method)
250
+ sinatra.request.body.rewind
251
+ sinatra.params.merge! HashWithIndifferentAccess.new(sinatra_init_data_extract_body(sinatra))
252
+ end
253
+
254
+ sinatra.instance_variable_set("@__raw_data", HashWithIndifferentAccess.new(sinatra.params))
255
+ sinatra.instance_variable_set("@__data", HashWithIndifferentAccess.new(sinatra.params).values_at(*block.parameters.map(&:last)))
256
+ end
257
+
243
258
  def create_sinatra_route(method, action, method_if_block, &block)
244
259
  @actions << {method: method, action: action, block: block}
245
260
 
@@ -259,6 +274,8 @@ module Nested
259
274
  begin
260
275
  content_type :json
261
276
 
277
+ resource.sinatra_init_data(self, method, &block)
278
+
262
279
  resource.self_and_parents.reverse.each do |res|
263
280
  res.sinatra_init(self)
264
281
  end
@@ -273,21 +290,31 @@ module Nested
273
290
  context_arr << "route: #{route}"
274
291
  context_arr << "method: #{method}"
275
292
  context_arr << "action: #{action}"
293
+ context_arr << "params: #{params.inspect}"
294
+ context_arr << "__raw_data: #{@__raw_data.inspect}"
295
+ context_arr << "__data: #{@__data.inspect}"
296
+
276
297
 
277
298
  context_arr << "resource: #{resource.name} (#{resource.class.name})"
278
299
  resource_object = instance_variable_get("@#{resource.instance_variable_name}")
279
300
  context_arr << "@#{resource.instance_variable_name}: #{resource_object.inspect}"
280
301
 
281
- parent = resource.try(:parent)
282
-
283
- if parent
302
+ resource.parents.each do |parent|
284
303
  context_arr << "parent: #{parent.name} (#{parent.class.name})"
285
304
  parent_object = instance_variable_get("@#{parent.instance_variable_name}")
286
305
  context_arr << "@#{parent.instance_variable_name}: #{parent_object.inspect}"
287
306
  end
288
307
 
308
+ # parent = resource.try(:parent)
309
+
310
+ # if parent
311
+ # context_arr << "parent: #{parent.name} (#{parent.class.name})"
312
+ # parent_object = instance_variable_get("@#{parent.instance_variable_name}")
313
+ # context_arr << "@#{parent.instance_variable_name}: #{parent_object.inspect}"
314
+ # end
315
+
289
316
  puts context_arr.join("\n")
290
- raise e
317
+ puts e.message
291
318
  end
292
319
  end
293
320
  end
@@ -5,7 +5,7 @@ module Nested
5
5
  end
6
6
 
7
7
  def many_if(resource_if_block, name, model_block=nil, &block)
8
- child_resource(name, Many, resource_if_block, model_block, &block)
8
+ child_resource(name, Many, resource_if_block.is_a?(Symbol) ? @app.conditions[resource_if_block] : resource_if_block, model_block, &block)
9
9
  end
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  module Nested
2
2
  module WithModelBlock
3
- def model(&block)
3
+ def model(block)
4
4
  raise "do not use model() when you already set a model block" if @model_block != default_model_block && @model_block != Nested::PROC_NIL
5
5
  @model_block = block
6
6
  self
@@ -5,7 +5,7 @@ module Nested
5
5
  end
6
6
 
7
7
  def singleton_if(resource_if_block, name, model_block=nil, &block)
8
- child_resource(name, Singleton, resource_if_block, model_block, &block)
8
+ child_resource(name, Singleton, resource_if_block.is_a?(Symbol) ? @app.conditions[resource_if_block] : resource_if_block, model_block, &block)
9
9
  end
10
10
  end
11
11
  end
data/nested.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "nested"
3
- s.version = "0.0.29"
3
+ s.version = "0.0.30"
4
4
 
5
5
  s.authors = ["Jan Zimmek"]
6
6
  s.email = %q{jan.zimmek@web.de}
data/test/app_test.rb CHANGED
@@ -27,6 +27,11 @@ class NestedTest < Test::Unit::TestCase
27
27
  assert_equal ({:test => b}), app.behavior(:test, &b).instance_variable_get("@behaviors")
28
28
  end
29
29
 
30
+ def test_condition
31
+ b = ->{}
32
+ assert_equal ({:test => b}), app.condition(:test, b).instance_variable_get("@conditions")
33
+ end
34
+
30
35
  def test__before
31
36
  a = app
32
37
 
data/test/nested_test.rb CHANGED
@@ -73,7 +73,7 @@ class NestedTest < Test::Unit::TestCase
73
73
  def test_model_block
74
74
  model_block = ->{ }
75
75
  r = singleton(:project)
76
- assert_equal r, r.model(&model_block)
76
+ assert_equal r, r.model(model_block)
77
77
  assert_equal model_block, r.model_block
78
78
  end
79
79
 
@@ -435,12 +435,21 @@ class NestedTest < Test::Unit::TestCase
435
435
  def test_model
436
436
  model_block = ->{}
437
437
  r = singleton(:project)
438
- assert_equal r, r.model(&model_block)
438
+ assert_equal r, r.model(model_block)
439
439
  assert_equal model_block, r.instance_variable_get("@model_block")
440
440
 
441
441
  assert_raise RuntimeError do
442
- singleton(:project, ->{ 10 }).model(&->{ 20 })
442
+ singleton(:project, ->{ 10 }).model(->{ 20 })
443
443
  end
444
+
445
+ many(:projects, nil).model(model_block)
444
446
  end
445
447
 
448
+ # def test_conditions
449
+ # r = singleton(:project)
450
+ # app = r.instance_variable_get("@app")
451
+ # app.condition :mycondition, ->{ true }
452
+ # assert_equal true, app.sinatra.new.mycondition?
453
+ # end
454
+
446
455
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nested
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.29
4
+ version: 0.0.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Zimmek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-07 00:00:00.000000000 Z
11
+ date: 2014-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport