rack-mongoid_adapter 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d729b10b99a641d5ce49303bbe71325eb59a9701
4
- data.tar.gz: fb6323b7d5d935c8c6a50d71cd0564322bb255ae
3
+ metadata.gz: 102e4ece3407cbf13e0b951505d9bc0fc0befb28
4
+ data.tar.gz: 495da19c17ef093f7e1c87984647e5c6b4291547
5
5
  SHA512:
6
- metadata.gz: 7330079aed1a4d7401548a4e75b697a1f48e928e2b7ad449c1f092bd7c4c6438a79337ea0ce40c015d1c83b147a5ab44c611425c0ccedc792fb831dea0cff76b
7
- data.tar.gz: a89e4e991c6e74df10d25c504291569996f22724f2377844da87c1b386097401c08a50ccb6b6a3ddbd8dcc1795fc236f36ba50719d5e2e164eeff6b6989e745f
6
+ metadata.gz: 1315d24bba545128f170ce477ebf72f4f43a18a59ba80200e6fb982ee9e273e21844fdba04ea639210448cba11ad5a7c7440621b441f2852cc99e07e8cf5e3a0
7
+ data.tar.gz: 8dd54c5e31c9508a5702ac1264766d7fcdadc86067fcfd7d3611329e6b3814f63984d130b8830da31db9059ac15680b3027b5c0cd6f08f41ad3e6fc335f67fd4
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## 0.0.2
2
+ * Accepts JSON request body on POST and PUT request
3
+ * Return response body on PUT and DELETE request
4
+
5
+ ## 0.0.1
6
+ * 1st release
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
  Provides RESTful interface for MongoDB as a rack middleware.
3
3
 
4
4
  ## Usage
5
- Here is the simplest example for Heroku with MongoLab plugin.
5
+ Here is the simplest example for Heroku with MongoLab plugin.
6
+ You can try this example via [r7kamura/rack-mongoid_adapter-example](https://github.com/r7kamura/rack-mongoid_adapter-example).
6
7
 
7
8
  ### Operation
8
9
  ```
@@ -23,13 +24,6 @@ $ git push heroku master
23
24
  ### Code
24
25
  ```yaml
25
26
  # config/mongoid.yml
26
- development:
27
- sessions:
28
- default:
29
- database: default
30
- hosts:
31
- - localhost:27017
32
-
33
27
  production:
34
28
  sessions:
35
29
  default:
@@ -48,7 +42,7 @@ source "https://rubygems.org"
48
42
  gem "rack-mongoid_adapter"
49
43
  ```
50
44
 
51
- ### POST /{resource_type} - Create a new entry
45
+ ### POST /{resource_name} - Create a new entry
52
46
  ```
53
47
  $ curl http://my-test-app.herokuapp.com/entries -d "attributes[foo]=bar" -i
54
48
  HTTP/1.1 201 Created
@@ -60,7 +54,7 @@ Connection: keep-alive
60
54
  {"foo":"bar","_id":"53188c5b3536340002000000"}
61
55
  ```
62
56
 
63
- ### GET /{resource_type} - Get all entries
57
+ ### GET /{resource_name} - Get all entries
64
58
  ```
65
59
  $ curl http://my-test-app.herokuapp.com/entries -i
66
60
  HTTP/1.1 200 OK
@@ -72,7 +66,7 @@ Connection: keep-alive
72
66
  [{"foo":"bar","_id":"53188c5b3536340002000000"}]
73
67
  ```
74
68
 
75
- ### GET /{resource_type}/{id} - Get the entry
69
+ ### GET /{resource_name}/{id} - Get the entry
76
70
  ```
77
71
  $ curl http://my-test-app.herokuapp.com/entries/53188c5b3536340002000000 -i
78
72
  HTTP/1.1 200 OK
@@ -84,20 +78,24 @@ Connection: keep-alive
84
78
  {"foo":"bar","_id":"53188c5b3536340002000000"}
85
79
  ```
86
80
 
87
- ### PUT /{resource_type}/{id} - Update the entry
81
+ ### PUT /{resource_name}/{id} - Update the entry
88
82
  ```
89
83
  $ curl http://my-test-app.herokuapp.com/entries/53188c5b3536340002000000 -X PUT -d "attributes[foo]=baz" -i
90
- HTTP/1.1 204 No Content
84
+ HTTP/1.1 200 OK
91
85
  Date: Thu, 06 Mar 2014 14:59:04 GMT
92
86
  Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
93
87
  Connection: keep-alive
88
+
89
+ {"foo":"baz","_id":"53188c5b3536340002000000"}
94
90
  ```
95
91
 
96
- ### DELETE /{resource_type}/{id} - Delete the entry
92
+ ### DELETE /{resource_name}/{id} - Delete the entry
97
93
  ```
98
94
  $ curl http://my-test-app.herokuapp.com/entries/53188c5b3536340002000000 -X DELETE -i
99
- HTTP/1.1 204 No Content
95
+ HTTP/1.1 200 OK
100
96
  Date: Thu, 06 Mar 2014 14:59:50 GMT
101
97
  Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
102
98
  Connection: keep-alive
99
+
100
+ {"foo":"bar","_id":"53188c5b3536340002000000"}
103
101
  ```
@@ -25,7 +25,7 @@ module Rack
25
25
  end
26
26
 
27
27
  def response_header
28
- {}
28
+ { "Content-Type" => "application/json" }
29
29
  end
30
30
 
31
31
  def response_body
@@ -44,20 +44,27 @@ module Rack
44
44
  @response ||= Rack::Response.new([response_body], response_status, response_header)
45
45
  end
46
46
 
47
- def resource_type
48
- request.params["resource_type"]
47
+ def resource_name
48
+ request.params["resource_name"]
49
49
  end
50
50
 
51
51
  def connection
52
- ::Mongoid.default_session[resource_type]
52
+ ::Mongoid.default_session[resource_name]
53
53
  end
54
54
 
55
55
  def params
56
- request.params
56
+ case
57
+ when request.request_method == "GET"
58
+ request.GET
59
+ when !request_body.empty?
60
+ JSON.parse(request_body)
61
+ else
62
+ {}
63
+ end
57
64
  end
58
65
 
59
- def given_attributes
60
- params["attributes"]
66
+ def request_body
67
+ @request_body ||= request.body.read.tap { request.body.rewind }
61
68
  end
62
69
  end
63
70
  end
@@ -9,7 +9,7 @@ module Rack
9
9
  end
10
10
 
11
11
  def response_body
12
- attributes = given_attributes.merge(_id: BSON::ObjectId.new.to_s)
12
+ attributes = params.merge(_id: BSON::ObjectId.new.to_s)
13
13
  connection.insert(attributes)
14
14
  attributes.to_json
15
15
  end
@@ -4,7 +4,7 @@ module Rack
4
4
  class DestroyController < SingleResourceController
5
5
  def response_status
6
6
  if resource
7
- 204
7
+ 200
8
8
  else
9
9
  404
10
10
  end
@@ -13,7 +13,7 @@ module Rack
13
13
  def response_body
14
14
  if resource
15
15
  connection.find(_id: id).remove
16
- ""
16
+ resource.to_json
17
17
  else
18
18
  response_body_for_not_found
19
19
  end
@@ -6,7 +6,7 @@ module Rack
6
6
 
7
7
  def response_status
8
8
  if resource
9
- 204
9
+ 200
10
10
  else
11
11
  404
12
12
  end
@@ -14,9 +14,9 @@ module Rack
14
14
 
15
15
  def response_body
16
16
  if resource
17
- attributes = resource.merge(given_attributes)
17
+ attributes = resource.merge(params)
18
18
  connection.find(_id: id).update(attributes)
19
- ""
19
+ attributes.to_json
20
20
  else
21
21
  response_body_for_not_found
22
22
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class MongoidAdapter
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -44,11 +44,11 @@ module Rack
44
44
 
45
45
  def router
46
46
  @router ||= Rack::Multiplexer.new(@app) do
47
- get "/:resource_type", Controllers::IndexController
48
- get "/:resource_type/:id", Controllers::ShowController
49
- post "/:resource_type", Controllers::CreateController
50
- put "/:resource_type/:id", Controllers::UpdateController
51
- delete "/:resource_type/:id", Controllers::DestroyController
47
+ get "/:resource_name", Controllers::IndexController
48
+ get "/:resource_name/:id", Controllers::ShowController
49
+ post "/:resource_name", Controllers::CreateController
50
+ put "/:resource_name/:id", Controllers::UpdateController
51
+ delete "/:resource_name/:id", Controllers::DestroyController
52
52
  end
53
53
  end
54
54
  end
@@ -32,25 +32,38 @@ describe Rack::MongoidAdapter do
32
32
  resource["_id"]
33
33
  end
34
34
 
35
- let(:resource_type) do
35
+ let(:resource_name) do
36
36
  "recipes"
37
37
  end
38
38
 
39
39
  let(:resource) do
40
- post "/#{resource_type}", { attributes: { name: "test" } }, env
40
+ post "/#{resource_name}", { name: "test" }.to_json, env
41
41
  JSON.parse(last_response.body)
42
42
  end
43
43
 
44
- describe "GET /:resource_type" do
44
+ let(:request_body) do
45
+ case method
46
+ when "POST", "PUT"
47
+ params.to_json
48
+ else
49
+ params
50
+ end
51
+ end
52
+
53
+ subject do
54
+ send method.downcase, path, request_body, env
55
+ response.status
56
+ end
57
+
58
+ describe "GET /:resource_name" do
45
59
  let(:method) do
46
- :get
60
+ "GET"
47
61
  end
48
62
 
49
63
  let(:path) do
50
- "/#{resource_type}"
64
+ "/#{resource_name}"
51
65
  end
52
66
 
53
-
54
67
  context "with valid condition" do
55
68
  it "returns 200 with an array of resources" do
56
69
  should == 200
@@ -59,13 +72,13 @@ describe Rack::MongoidAdapter do
59
72
  end
60
73
  end
61
74
 
62
- describe "GET /:resource_type/:id" do
75
+ describe "GET /:resource_name/:id" do
63
76
  let(:method) do
64
- :get
77
+ "GET"
65
78
  end
66
79
 
67
80
  let(:path) do
68
- "/#{resource_type}/#{id}"
81
+ "/#{resource_name}/#{id}"
69
82
  end
70
83
 
71
84
  context "when resource is not found" do
@@ -87,61 +100,70 @@ describe Rack::MongoidAdapter do
87
100
  end
88
101
  end
89
102
 
90
- describe "POST /:resource_type" do
103
+ describe "POST /:resource_name" do
91
104
  before do
92
- params[:attributes] = { name: "test" }
105
+ params[:name] = "test"
93
106
  end
94
107
 
95
108
  let(:method) do
96
- :post
109
+ "POST"
97
110
  end
98
111
 
99
112
  let(:path) do
100
- "/#{resource_type}"
113
+ "/#{resource_name}"
101
114
  end
102
115
 
103
116
  context "with valid condition" do
104
117
  it "returns 201 with a newly-created resource" do
105
118
  should == 201
106
- response.body.should be_json_as(params[:attributes].merge(_id: String))
119
+ response.body.should be_json_as(
120
+ _id: String,
121
+ name: "test"
122
+ )
107
123
  end
108
124
  end
109
125
  end
110
126
 
111
- describe "PUT /:resource_type/:id" do
127
+ describe "PUT /:resource_name/:id" do
112
128
  before do
113
- params[:attributes] = { name: "test" }
129
+ params[:name] = "test"
114
130
  end
115
131
 
116
132
  let(:method) do
117
- :put
133
+ "PUT"
118
134
  end
119
135
 
120
136
  let(:path) do
121
- "/#{resource_type}/#{id}"
137
+ "/#{resource_name}/#{id}"
122
138
  end
123
139
 
124
140
  context "with valid condition" do
125
- it "returns 204" do
126
- should == 204
127
- response.body.should be_empty
141
+ it "returns 200" do
142
+ should == 200
143
+ response.body.should be_json_as(
144
+ _id: String,
145
+ name: "test",
146
+ )
128
147
  end
129
148
  end
130
149
  end
131
150
 
132
- describe "DELETE /:resource_type/:id" do
151
+ describe "DELETE /:resource_name/:id" do
133
152
  let(:method) do
134
- :delete
153
+ "DELETE"
135
154
  end
136
155
 
137
156
  let(:path) do
138
- "/#{resource_type}/#{id}"
157
+ "/#{resource_name}/#{id}"
139
158
  end
140
159
 
141
160
  context "with valid condition" do
142
- it "returns 204" do
143
- should == 204
144
- response.body.should be_empty
161
+ it "returns 200" do
162
+ should == 200
163
+ response.body.should be_json_as(
164
+ _id: String,
165
+ name: "test",
166
+ )
145
167
  end
146
168
  end
147
169
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-mongoid_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-06 00:00:00.000000000 Z
11
+ date: 2014-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bson_ext
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.5.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.5.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mem
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.0.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.0.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mongoid
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 4.0.0.alpha2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 4.0.0.alpha2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-multiplexer
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.0.6
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.0.6
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '1.5'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.5'
97
97
  - !ruby/object:Gem::Dependency
@@ -126,14 +126,14 @@ dependencies:
126
126
  name: rake
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
@@ -171,7 +171,8 @@ executables: []
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
- - .gitignore
174
+ - ".gitignore"
175
+ - CHANGELOG.md
175
176
  - Gemfile
176
177
  - LICENSE.txt
177
178
  - README.md
@@ -200,17 +201,17 @@ require_paths:
200
201
  - lib
201
202
  required_ruby_version: !ruby/object:Gem::Requirement
202
203
  requirements:
203
- - - '>='
204
+ - - ">="
204
205
  - !ruby/object:Gem::Version
205
206
  version: '0'
206
207
  required_rubygems_version: !ruby/object:Gem::Requirement
207
208
  requirements:
208
- - - '>='
209
+ - - ">="
209
210
  - !ruby/object:Gem::Version
210
211
  version: '0'
211
212
  requirements: []
212
213
  rubyforge_project:
213
- rubygems_version: 2.0.3
214
+ rubygems_version: 2.2.2
214
215
  signing_key:
215
216
  specification_version: 4
216
217
  summary: A rack application working as an adapter for Mongoid