serviceable 0.6 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/serviceable.rb +32 -38
  2. 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
- if params[:include].kind_of?(Hash)
122
- requested_includes = params[:include]
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
- if params[:methods].kind_of?(Hash)
164
- requested_methods = params[:methods].keys
165
- elsif params[:methods].kind_of?(Array)
166
- requested_methods = params[:methods]
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: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- version: "0.6"
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-03 00:00:00 Z
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.