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