serviceable 0.6 → 0.6.1
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/serviceable.rb +32 -38
- metadata +4 -3
data/lib/serviceable.rb
CHANGED
@@ -118,24 +118,8 @@ module Serviceable
|
|
118
118
|
opts = {key => params[key]} if params[key]
|
119
119
|
merged_options = merged_options.merge(opts) if opts
|
120
120
|
end
|
121
|
-
|
122
|
-
|
123
|
-
elsif params[:include].kind_of?(Array)
|
124
|
-
requested_includes = Hash[params[:include].map {|e| [e,{}]}]
|
125
|
-
elsif params[:include].kind_of?(String)
|
126
|
-
requested_includes = Hash[params[:include].split(',').map {|e| [e,{}]}]
|
127
|
-
else
|
128
|
-
requested_includes = {}
|
129
|
-
end
|
130
|
-
if defaults[:allowed_includes].kind_of?(Hash)
|
131
|
-
allowed_includes = defaults[:allowed_includes]
|
132
|
-
elsif defaults[:allowed_includes].kind_of?(Array)
|
133
|
-
allowed_includes = Hash[defaults[:allowed_includes].map {|e| [e,{}]}]
|
134
|
-
elsif defaults[:allowed_includes].kind_of?(String)
|
135
|
-
allowed_includes = Hash[defaults[:allowed_includes].split(',').map {|e| [e,{}]}]
|
136
|
-
else
|
137
|
-
allowed_includes = {}
|
138
|
-
end
|
121
|
+
requested_includes = hash_for(params[:includes])
|
122
|
+
allowed_includes = hash_for(defaults[:allowed_includes])
|
139
123
|
requested_includes = deep_sym(requested_includes)
|
140
124
|
allowed_includes = deep_sym(allowed_includes)
|
141
125
|
whitelisted_includes = {}
|
@@ -160,26 +144,10 @@ module Serviceable
|
|
160
144
|
end
|
161
145
|
merged_options = merged_options.merge({include: whitelisted_includes}) if whitelisted_includes.keys.any?
|
162
146
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
elsif params[:methods].kind_of?(String)
|
168
|
-
requested_methods = params[:methods].split(',')
|
169
|
-
else
|
170
|
-
requested_methods = []
|
171
|
-
end
|
172
|
-
if defaults[:allowed_methods].kind_of?(Hash)
|
173
|
-
allowed_methods = defaults[:allowed_methods].keys
|
174
|
-
elsif defaults[:allowed_methods].kind_of?(Array)
|
175
|
-
allowed_methods = defaults[:allowed_methods]
|
176
|
-
elsif defaults[:allowed_methods].kind_of?(String)
|
177
|
-
allowed_methods = defaults[:allowed_methods].split(',')
|
178
|
-
else
|
179
|
-
allowed_methods = []
|
180
|
-
end
|
181
|
-
requested_methods = requested_methods.map(&:to_sym)
|
182
|
-
allowed_methods = allowed_methods.map(&:to_sym)
|
147
|
+
requested_methods = array_for(params[:methods])
|
148
|
+
allowed_methods = array_for(defaults[:allowed_methods])
|
149
|
+
requested_methods = requested_methods.map(&:to_s).map(&:to_sym)
|
150
|
+
allowed_methods = allowed_methods.map(&:to_s).map(&:to_sym)
|
183
151
|
whitelisted_methods = requested_methods & allowed_methods
|
184
152
|
merged_options = merged_options.merge({methods: whitelisted_methods}) if whitelisted_methods.any?
|
185
153
|
merged_options = deep_split(merged_options.compact)
|
@@ -254,6 +222,19 @@ module Serviceable
|
|
254
222
|
end
|
255
223
|
end
|
256
224
|
|
225
|
+
define_method("array_for") do |obj|
|
226
|
+
if obj.kind_of?(Hash)
|
227
|
+
arr = params[:methods].keys
|
228
|
+
elsif obj.kind_of?(Array)
|
229
|
+
arr = params[:methods]
|
230
|
+
elsif obj.kind_of?(String)
|
231
|
+
arr = params[:methods].split(',')
|
232
|
+
else
|
233
|
+
arr = Array(obj)
|
234
|
+
end
|
235
|
+
arr.compact.uniq rescue []
|
236
|
+
end
|
237
|
+
|
257
238
|
# designed to traverse an entire hash, replacing delimited strings with arrays of symbols
|
258
239
|
define_method("deep_split") do |hash={},pivot=','|
|
259
240
|
Hash[hash.reject {|k,v| k.nil? || v.nil?}.map {|k,v| [k.to_sym,v.kind_of?(String) ? v.split(pivot).compact.map(&:to_sym) : (v.kind_of?(Hash) ? deep_split(v,pivot) : v)]}]
|
@@ -267,6 +248,19 @@ module Serviceable
|
|
267
248
|
obj.kind_of?(Array) ? obj : (obj.kind_of?(Hash) ? obj.keys : (obj==nil ? [] : [obj]))
|
268
249
|
end
|
269
250
|
|
251
|
+
define_method("hash_for") do |obj|
|
252
|
+
if obj.kind_of?(Hash)
|
253
|
+
hash = obj
|
254
|
+
elsif obj.kind_of?(Array)
|
255
|
+
hash = Hash[obj.map {|e| [e,{}]}]
|
256
|
+
elsif obj.kind_of?(String)
|
257
|
+
hash = Hash[obj.split(',').map {|e| [e,{}]}]
|
258
|
+
else
|
259
|
+
hash = {}
|
260
|
+
end
|
261
|
+
hash
|
262
|
+
end
|
263
|
+
|
270
264
|
define_method("required_fields") do
|
271
265
|
object.to_s.capitalize.constantize.accessible_attributes.select {|e| is_required_column?(e)}
|
272
266
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serviceable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
|
9
|
+
- 1
|
10
|
+
version: 0.6.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Aubrey Goodman
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2013-09-
|
18
|
+
date: 2013-09-05 00:00:00 Z
|
18
19
|
dependencies: []
|
19
20
|
|
20
21
|
description: Decorate your controller classes with acts_as_service :model_name, and instantly support JSON/XML CRUD interface. Allow client to specify response contents using query string filter parameters.
|