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 +4 -4
- data/lib/nested/app.rb +12 -1
- data/lib/nested/integration/angular.rb +21 -5
- data/lib/nested/many.rb +1 -1
- data/lib/nested/resource.rb +50 -23
- data/lib/nested/with_many.rb +1 -1
- data/lib/nested/with_model_block.rb +1 -1
- data/lib/nested/with_singleton.rb +1 -1
- data/nested.gemspec +1 -1
- data/test/app_test.rb +5 -0
- data/test/nested_test.rb +12 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2dc4320c86fbb50e5eb18ba56f3e0586eebdf59
|
4
|
+
data.tar.gz: 5a317c9502f9e660ff115d1ae2082427f8487651
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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 <<
|
54
|
-
js << " params: data"
|
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
|
data/lib/nested/resource.rb
CHANGED
@@ -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
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
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
|
-
|
178
|
-
|
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
|
-
|
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
|
-
|
317
|
+
puts e.message
|
291
318
|
end
|
292
319
|
end
|
293
320
|
end
|
data/lib/nested/with_many.rb
CHANGED
@@ -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
|
@@ -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
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(
|
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(
|
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(
|
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.
|
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-
|
11
|
+
date: 2014-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|