nested 0.0.29 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
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