rest-in-peace 4.2.1 → 5.0.0
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.
- checksums.yaml +5 -13
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/README.md +13 -2
- data/VERSION +1 -1
- data/examples/pagination_with_headers.rb +1 -1
- data/lib/rest_in_peace/definition_proxy/resource_method_definitions.rb +2 -2
- data/lib/rest_in_peace/template_sanitizer.rb +1 -1
- data/lib/rest_in_peace.rb +8 -4
- data/spec/rest_in_peace/definition_proxy/resource_method_definitions_spec.rb +20 -7
- metadata +30 -30
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YTFhOTVlNGI1NjA1ZWE3OTE1ZThhMWNkMjJlZjE1MDIxMDc3OWQ4Zg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b1b164cd072c9e5feed0664b99ce7a65d9308277
|
4
|
+
data.tar.gz: 368a7a06efc5bcc51f731de460d52445193d45d0
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
YWY0NmRmZjNiNjExZWFlYzRhZjY0OGFjZTkxMWYyOGRhMTFiYjY1NDBkODI0
|
11
|
-
MWM4NjQ2ZjU4NTQwYjdlMWY1YzExYzEwNmFkMDRiMzViMzZiZDA=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZmQ0Mjg0ZGMwZmNiNDVkZjk5ZjU3MzY0MDM2ODBlNDRkMDI4MjNlZGE2MWYw
|
14
|
-
NTFjZDMwN2FiMDVkNWJlOTc2ZjliOTVlZDQ0ZTg2YTlmNjMwNWUyMzhmNmRj
|
15
|
-
ZjA3OWFmZTc1ODU1YzAzNTAwMDBkYzg0NGJkYTAxM2E5ZTRmNTA=
|
6
|
+
metadata.gz: e43b2dfa0f0c1fb9bbc96186e8034b63ce0a373351731ef08b8755f36ed4c853f3cfc72518b50ea52e1e44401b545baaf9664b06cade4ad0ffe78fc2a94bbe99
|
7
|
+
data.tar.gz: f20641b4c22b64451ebd5e8acc99543888cc210c8ab1686e8c91c73d1edd47172a392635c4e0f52f108f2155da56ff2ac48153616cba0288f4b1a057e742df5b
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.2.4
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -97,8 +97,6 @@ resource.create # calls "POST /rip"
|
|
97
97
|
resource.reload # calls "GET /rip/1"
|
98
98
|
```
|
99
99
|
|
100
|
-
**For any writing action (`:post`, `:put`, `:patch`) RESTinPeace will include the *changed* attributes in the body and `id`.**
|
101
|
-
|
102
100
|
#### Collection
|
103
101
|
|
104
102
|
If you define anything inside the `collection` block, it will define a method on the class:
|
@@ -119,6 +117,19 @@ resource = Resource.find(id: 1) # calls "GET /rip/1"
|
|
119
117
|
resource = Resource.find_on_other(other_id: 42, id: 1337) # calls "GET /other/42/rip/1337"
|
120
118
|
```
|
121
119
|
|
120
|
+
#### HTTP Verb differences
|
121
|
+
|
122
|
+
Depending on the given HTTP verb, a different set of attributes will be used as payload and query parameters.
|
123
|
+
|
124
|
+
HTTP Verb | passed | all | only changed and id | only id
|
125
|
+
------------------- | :----: | :-: | :-----------------: | :-----:
|
126
|
+
`GET` on collection | ✔ | ✘ | ✘ | ✘
|
127
|
+
`GET` on resource | ✘ | ✔ | ✘ | ✘
|
128
|
+
`POST` | ✘ | ✔ | ✘ | ✘
|
129
|
+
`PUT` | ✘ | ✔ | ✘ | ✘
|
130
|
+
`PATCH` | ✘ | ✘ | ✔ | ✘
|
131
|
+
`DELETE` | ✘ | ✘ | ✘ | ✔
|
132
|
+
|
122
133
|
#### Pagination
|
123
134
|
|
124
135
|
You can define your own pagination module which will be mixed in when calling the API:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
5.0.0
|
@@ -15,7 +15,7 @@ module MyClient
|
|
15
15
|
|
16
16
|
# Only make a request to get the next page if we have not
|
17
17
|
# reached the last page yet.
|
18
|
-
raise StopIteration if current_page
|
18
|
+
raise StopIteration if current_page >= total_pages
|
19
19
|
@params.merge!(page: current_page + 1)
|
20
20
|
result = api.get(url, @params)
|
21
21
|
current_page = result.env.response_headers['X-Page'].to_i
|
@@ -24,7 +24,7 @@ module RESTinPeace
|
|
24
24
|
def post(method_name, url_template)
|
25
25
|
@target.rip_registry[:resource] << { method: :post, name: method_name, url: url_template }
|
26
26
|
@target.send(:define_method, method_name) do
|
27
|
-
call = RESTinPeace::ApiCall.new(api, url_template, self, payload)
|
27
|
+
call = RESTinPeace::ApiCall.new(api, url_template, self, payload(false))
|
28
28
|
call.post
|
29
29
|
end
|
30
30
|
end
|
@@ -32,7 +32,7 @@ module RESTinPeace
|
|
32
32
|
def put(method_name, url_template)
|
33
33
|
@target.rip_registry[:resource] << { method: :put, name: method_name, url: url_template }
|
34
34
|
@target.send(:define_method, method_name) do
|
35
|
-
call = RESTinPeace::ApiCall.new(api, url_template, self, payload)
|
35
|
+
call = RESTinPeace::ApiCall.new(api, url_template, self, payload(false))
|
36
36
|
call.put
|
37
37
|
end
|
38
38
|
end
|
@@ -18,7 +18,7 @@ module RESTinPeace
|
|
18
18
|
tokens.each do |token|
|
19
19
|
param = @params.delete(token.to_sym)
|
20
20
|
param ||= @klass.send(token) if @klass.respond_to?(token)
|
21
|
-
raise IncompleteParams, "
|
21
|
+
raise IncompleteParams, "No parameter for token :#{token} found" unless param
|
22
22
|
@url.sub!(%r{:#{token}}, param.to_s)
|
23
23
|
end
|
24
24
|
@url
|
data/lib/rest_in_peace.rb
CHANGED
@@ -17,11 +17,15 @@ module RESTinPeace
|
|
17
17
|
set_attributes attributes
|
18
18
|
end
|
19
19
|
|
20
|
-
def payload
|
20
|
+
def payload(changes_only = true)
|
21
21
|
hash_representation = { id: id }
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
if changes_only
|
23
|
+
changed.each do |key|
|
24
|
+
value = send(key)
|
25
|
+
hash_representation[key.to_sym] = hash_representation_of_object(value)
|
26
|
+
end
|
27
|
+
else
|
28
|
+
hash_representation = to_h
|
25
29
|
end
|
26
30
|
if self.class.rip_namespace
|
27
31
|
{ id: id, self.class.rip_namespace => hash_representation }
|
@@ -37,7 +37,20 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
shared_examples_for 'an instance method with
|
40
|
+
shared_examples_for 'an instance method with all attributes' do
|
41
|
+
describe 'parameter and arguments handling' do
|
42
|
+
it 'uses all the attributes of the class' do
|
43
|
+
expect(RESTinPeace::ApiCall).to receive(:new).
|
44
|
+
with(target.api, url_template, instance, instance.payload(false)).
|
45
|
+
and_return(api_call_double)
|
46
|
+
|
47
|
+
subject.send(http_verb, method_name, url_template)
|
48
|
+
instance.send(method_name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
shared_examples_for 'an instance method with changed attributes' do
|
41
54
|
describe 'parameter and arguments handling' do
|
42
55
|
it 'uses the attributes of the class' do
|
43
56
|
expect(RESTinPeace::ApiCall).to receive(:new).
|
@@ -50,7 +63,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
50
63
|
end
|
51
64
|
end
|
52
65
|
|
53
|
-
shared_examples_for 'an instance method without
|
66
|
+
shared_examples_for 'an instance method without attributes' do
|
54
67
|
describe 'parameter and arguments handling' do
|
55
68
|
it 'provides the id only' do
|
56
69
|
expect(RESTinPeace::ApiCall).to receive(:new).
|
@@ -71,7 +84,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
71
84
|
end
|
72
85
|
|
73
86
|
describe 'the created method' do
|
74
|
-
it_behaves_like 'an instance method with
|
87
|
+
it_behaves_like 'an instance method with changed attributes' do
|
75
88
|
let(:http_verb) { :get }
|
76
89
|
let(:method_name) { :reload }
|
77
90
|
let(:url_template) { '/a/:id' }
|
@@ -87,7 +100,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
87
100
|
end
|
88
101
|
|
89
102
|
describe 'the created method' do
|
90
|
-
it_behaves_like 'an instance method with
|
103
|
+
it_behaves_like 'an instance method with changed attributes' do
|
91
104
|
let(:http_verb) { :patch }
|
92
105
|
let(:method_name) { :save }
|
93
106
|
let(:url_template) { '/a/:id' }
|
@@ -103,7 +116,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
103
116
|
end
|
104
117
|
|
105
118
|
describe 'the created method' do
|
106
|
-
it_behaves_like 'an instance method with
|
119
|
+
it_behaves_like 'an instance method with all attributes' do
|
107
120
|
let(:http_verb) { :post }
|
108
121
|
let(:method_name) { :create }
|
109
122
|
let(:url_template) { '/a/:id' }
|
@@ -119,7 +132,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
119
132
|
end
|
120
133
|
|
121
134
|
describe 'the created method' do
|
122
|
-
it_behaves_like 'an instance method with
|
135
|
+
it_behaves_like 'an instance method with all attributes' do
|
123
136
|
let(:http_verb) { :put }
|
124
137
|
let(:method_name) { :update }
|
125
138
|
let(:url_template) { '/a/:id' }
|
@@ -135,7 +148,7 @@ describe RESTinPeace::DefinitionProxy::ResourceMethodDefinitions do
|
|
135
148
|
end
|
136
149
|
|
137
150
|
describe 'the created method' do
|
138
|
-
it_behaves_like 'an instance method without
|
151
|
+
it_behaves_like 'an instance method without attributes' do
|
139
152
|
let(:http_verb) { :delete }
|
140
153
|
let(:method_name) { :destroy }
|
141
154
|
let(:url_template) { '/a/:id' }
|
metadata
CHANGED
@@ -1,121 +1,121 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-in-peace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raffael Schmid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.2'
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '5'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '3.2'
|
30
|
-
- - <
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - ~>
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '10.0'
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - ~>
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '10.0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - ~>
|
51
|
+
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '3.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - ~>
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '3.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: guard
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - ~>
|
65
|
+
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '2.6'
|
68
|
-
- -
|
68
|
+
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: 2.6.1
|
71
71
|
type: :development
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- - ~>
|
75
|
+
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '2.6'
|
78
|
-
- -
|
78
|
+
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: 2.6.1
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: guard-rspec
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- - ~>
|
85
|
+
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '4.2'
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: 4.2.0
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - ~>
|
95
|
+
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '4.2'
|
98
|
-
- -
|
98
|
+
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: 4.2.0
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: simplecov
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- - ~>
|
105
|
+
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '0.8'
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.8.2
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - ~>
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0.8'
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: 0.8.2
|
121
121
|
description: Let your api REST in peace.
|
@@ -125,11 +125,11 @@ executables: []
|
|
125
125
|
extensions: []
|
126
126
|
extra_rdoc_files: []
|
127
127
|
files:
|
128
|
-
- .gitignore
|
129
|
-
- .rspec
|
130
|
-
- .ruby-gemset
|
131
|
-
- .ruby-version
|
132
|
-
- .travis.yml
|
128
|
+
- ".gitignore"
|
129
|
+
- ".rspec"
|
130
|
+
- ".ruby-gemset"
|
131
|
+
- ".ruby-version"
|
132
|
+
- ".travis.yml"
|
133
133
|
- Gemfile
|
134
134
|
- Guardfile
|
135
135
|
- LICENSE.txt
|
@@ -176,17 +176,17 @@ require_paths:
|
|
176
176
|
- lib
|
177
177
|
required_ruby_version: !ruby/object:Gem::Requirement
|
178
178
|
requirements:
|
179
|
-
- -
|
179
|
+
- - ">="
|
180
180
|
- !ruby/object:Gem::Version
|
181
181
|
version: '0'
|
182
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
|
-
- -
|
184
|
+
- - ">="
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.4.
|
189
|
+
rubygems_version: 2.4.5.1
|
190
190
|
signing_key:
|
191
191
|
specification_version: 4
|
192
192
|
summary: REST in peace
|