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.
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.