arrest 0.0.20 → 0.0.21
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.
- data/lib/arrest/abstract_resource.rb +2 -12
- data/lib/arrest/http_source.rb +4 -0
- data/lib/arrest/mem_source.rb +41 -1
- data/lib/arrest/root_resource.rb +7 -1
- data/lib/arrest/version.rb +1 -1
- metadata +22 -22
@@ -35,11 +35,6 @@ module Arrest
|
|
35
35
|
def build(hash)
|
36
36
|
resource = self.new(hash, true)
|
37
37
|
|
38
|
-
# traverse fields for subresources and fill them in
|
39
|
-
self.all_fields.find_all{|f| f.is_a?(HasManySubResourceAttribute)}.each do |attr|
|
40
|
-
ids = AbstractResource::source.get_one("#{resource.resource_location}/#{attr.sub_resource_field_name}")
|
41
|
-
resource.send("#{attr.name}=", body_root(ids))
|
42
|
-
end
|
43
38
|
resource
|
44
39
|
end
|
45
40
|
|
@@ -80,13 +75,8 @@ module Arrest
|
|
80
75
|
add_attribute(hm_attr)
|
81
76
|
|
82
77
|
send :define_method, method_name do # e.g. define 'teams' method for notation 'has_many :teams'
|
83
|
-
|
84
|
-
|
85
|
-
end
|
86
|
-
if @has_many_collections[method_name] == nil
|
87
|
-
@has_many_collections[method_name] = HasManyCollection.new(self, hm_attr)
|
88
|
-
end
|
89
|
-
|
78
|
+
@has_many_collections ||= {}
|
79
|
+
@has_many_collections[method_name] ||= HasManyCollection.new(self, hm_attr)
|
90
80
|
@has_many_collections[method_name]
|
91
81
|
end
|
92
82
|
end
|
data/lib/arrest/http_source.rb
CHANGED
data/lib/arrest/mem_source.rb
CHANGED
@@ -97,6 +97,23 @@ module Arrest
|
|
97
97
|
[]
|
98
98
|
end
|
99
99
|
|
100
|
+
def get_many_other_ids(path)
|
101
|
+
matcher = /^.+\/([^\/]+)\/([^\/]+)_ids$/.match(path)
|
102
|
+
return [] unless matcher
|
103
|
+
object_id = matcher[1]
|
104
|
+
relation = matcher[2] + 's'
|
105
|
+
if (object_id && relation && @@edge_matrix[object_id])
|
106
|
+
id_list = []
|
107
|
+
@@edge_matrix[object_id].each do |edge|
|
108
|
+
if (edge.name.to_s == relation)
|
109
|
+
id_list << edge.id
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
wrap id_list, id_list.length
|
115
|
+
end
|
116
|
+
|
100
117
|
def get_many(sub, filters = {})
|
101
118
|
Arrest::debug sub + (hash_to_query filters)
|
102
119
|
# filters are ignored by mem impl so far
|
@@ -236,9 +253,32 @@ module Arrest
|
|
236
253
|
end
|
237
254
|
|
238
255
|
def put_sub_resource(rest_resource, sub_url, ids)
|
256
|
+
=begin
|
257
|
+
matcher = /^.+\/([^\/]+)\/([^\/]+)_ids$/.match(resource_path)
|
258
|
+
return [] unless matcher
|
259
|
+
object_id = matcher[1]
|
260
|
+
relation = matcher[2] + 's'
|
239
261
|
location = "#{rest_resource.resource_location}/#{sub_url}"
|
240
262
|
body = ids.to_json
|
241
|
-
|
263
|
+
|
264
|
+
@@edge_matrix[object_id] ||= []
|
265
|
+
|
266
|
+
alread_included = @@edge_matrix[object_id].find_all do |e|
|
267
|
+
e.name.to_s == sub_url && ids.include?(e.id)
|
268
|
+
end
|
269
|
+
|
270
|
+
@@edge_matrix[object_id].delete_if do |e|
|
271
|
+
e.name.to_s == sub_url && !ids.include?(e.id)
|
272
|
+
end
|
273
|
+
|
274
|
+
need_to_create = ids - alread_included
|
275
|
+
need_to_create.each do |id|
|
276
|
+
@@edge_matrix[object_id] << Edge.new(foreign_key, url_part, id, true)
|
277
|
+
end
|
278
|
+
|
279
|
+
|
280
|
+
=end
|
281
|
+
true
|
242
282
|
end
|
243
283
|
|
244
284
|
def put(rest_resource)
|
data/lib/arrest/root_resource.rb
CHANGED
@@ -54,7 +54,13 @@ module Arrest
|
|
54
54
|
Arrest::logger.info "DocumentNotFoundError for #{self.resource_path}/#{id}"
|
55
55
|
raise Errors::DocumentNotFoundError.new
|
56
56
|
end
|
57
|
-
self.build body.merge({:id => id})
|
57
|
+
resource = self.build body.merge({:id => id})
|
58
|
+
# traverse fields for subresources and fill them in
|
59
|
+
self.all_fields.find_all{|f| f.is_a?(HasManySubResourceAttribute)}.each do |attr|
|
60
|
+
ids = AbstractResource::source.get_many_other_ids("#{resource.resource_location}/#{attr.sub_resource_field_name}")
|
61
|
+
resource.send("#{attr.name}=", body_root(ids))
|
62
|
+
end
|
63
|
+
resource
|
58
64
|
end
|
59
65
|
|
60
66
|
def filter name, &aproc
|
data/lib/arrest/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &2162871400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2162871400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: faraday
|
27
|
-
requirement: &
|
27
|
+
requirement: &2162870800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.7.5
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2162870800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activemodel
|
38
|
-
requirement: &
|
38
|
+
requirement: &2162870200 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2162870200
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &2162869240 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2162869240
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &2162867920 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2162867920
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdoc
|
71
|
-
requirement: &
|
71
|
+
requirement: &2162855360 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2162855360
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &2162854620 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '2'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2162854620
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rr
|
93
|
-
requirement: &
|
93
|
+
requirement: &2162853620 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2162853620
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: simplecov
|
104
|
-
requirement: &
|
104
|
+
requirement: &2162852820 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2162852820
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rack
|
115
|
-
requirement: &
|
115
|
+
requirement: &2162852180 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2162852180
|
124
124
|
description: Consume a rest API in a AR like fashion
|
125
125
|
email:
|
126
126
|
- axel.tetzlaff@fortytools.com
|