roda-rest_api 1.2.1 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/roda/plugins/rest_api.rb +28 -7
  3. metadata +15 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42c73fcdd8dc133305e3e284ce92f28bd5385b65
4
- data.tar.gz: 15e78dd9fc92f0908a1e03db07ed0b328ca88028
3
+ metadata.gz: 21df76a3e9ee8bb54ae50ad5b35f6d1731f8a235
4
+ data.tar.gz: a12ad2291415d7ef2e29f00d467dc5b16c3214d5
5
5
  SHA512:
6
- metadata.gz: 3a0757b51b9020966a968300ea5a4917ce87fbb48ea6cdf6fdf23542cecb3f505f1055eb4897e1759305e5b5d613b1a5fd5cff4b71f1cec2c10e7bd5f8847279
7
- data.tar.gz: 1dbe2aae5b951805f37f21b1bed5d29dbb78ba9d6bc92dfeeb0d08e8f88ca2225056da3e84c8a6dec6b180cb31728875f9c5fea2df644ed5e8ea217e97219640
6
+ metadata.gz: af5bac9086c6c6de7d0a94a78769615820624166dd1f2d3c82bfaa7a38f87354037e0598424253b932adacbca7a457cc2a192b334238c756f23650664c6c2ddb
7
+ data.tar.gz: 949761e444322abd461c95cc21f7f7d28d19b41531dca6155699bc7adb31d061b14cb5974db0b190b5455f1347640dc3396e797789551ad79b8123d9f2bc4c88
@@ -73,10 +73,14 @@ class Roda
73
73
  @routes.each { |route| @request.send(route) }
74
74
  end
75
75
 
76
+ POST_BODY = 'rack.input'.freeze
77
+ FORM_INPUT = 'rack.request.form_input'.freeze
78
+ FORM_HASH = 'rack.request.form_hash'.freeze
79
+
80
+
76
81
  def perform(method, id = nil)
77
82
  begin
78
- args = method === :save ? JSON.parse(@request.body) : @request.GET
79
- args = permitted_params(args)
83
+ args = self.arguments(method)
80
84
  args.merge!(@primary_key.to_sym => id) if id
81
85
  args.merge!(@parent_key.to_sym => @captures[0]) if @captures
82
86
  self.send(method).call(args)
@@ -86,23 +90,40 @@ class Roda
86
90
  end
87
91
  end
88
92
 
93
+ protected
94
+
95
+ def arguments(method)
96
+ args = if method === :save
97
+ if @request.media_type == "application/x-www-form-urlencoded"
98
+ @request.POST
99
+ else
100
+ JSON.parse(@request.body.read)
101
+ end
102
+ else
103
+ @request.GET
104
+ end
105
+ args = permitted_args(args)
106
+ end
107
+
108
+
89
109
  private
90
110
 
91
- def permitted_params(params, keypath = [])
111
+
112
+ def permitted_args(args, keypath = [])
92
113
  permitted = nil
93
- case params
114
+ case args
94
115
  when Hash
95
116
  permitted = Hash.new
96
- params.each_pair do |k,v|
117
+ args.each_pair do |k,v|
97
118
  keypath << k.to_sym
98
119
  if permitted?(keypath)
99
- value = permitted_params(v, keypath)
120
+ value = permitted_args(v, keypath)
100
121
  permitted[k.to_sym] = value if value
101
122
  end
102
123
  keypath.pop
103
124
  end
104
125
  else
105
- permitted = params if permitted?(keypath)
126
+ permitted = args if permitted?(keypath)
106
127
  end
107
128
  permitted
108
129
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda-rest_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Benevento
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-test
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
55
69
  description: A Roda plugin for RESTful APIs
56
70
  email: michelbenevento@yahoo.com
57
71
  executables: []