roda-rest_api 1.2.1 → 1.3

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 (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: []