rest-in-peace 4.2.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZWE2NzNkZWMyZWI4ZjBhODBjNTljNWZkZjMyYTM3MTY0NjZmYWY4ZQ==
5
- data.tar.gz: !binary |-
6
- YTFhOTVlNGI1NjA1ZWE3OTE1ZThhMWNkMjJlZjE1MDIxMDc3OWQ4Zg==
2
+ SHA1:
3
+ metadata.gz: b1b164cd072c9e5feed0664b99ce7a65d9308277
4
+ data.tar.gz: 368a7a06efc5bcc51f731de460d52445193d45d0
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MTM1YjViZjJkMDcwNGI5NzEwMWRjYjhiY2VhMmIwNzk2MzMzNzRiZGUwNDAz
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.9.3-p547
1
+ 2.2.4
data/.travis.yml CHANGED
@@ -11,3 +11,4 @@ gemfile:
11
11
  - gemfiles/Gemfile.rails-4.2.x
12
12
  script:
13
13
  - bundle exec rake spec
14
+ before_install: gem install bundler
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
- 4.2.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 == total_pages
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, "Unknown parameter for token :#{token} found" unless param
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
- changed.each do |key|
23
- value = send(key)
24
- hash_representation[key.to_sym] = hash_representation_of_object(value)
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 parameters' do
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 parameters' do
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 parameters' do
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 parameters' do
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 parameters' do
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 parameters' do
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 parameters' do
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.2.1
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: 2015-07-31 00:00:00.000000000 Z
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.8
189
+ rubygems_version: 2.4.5.1
190
190
  signing_key:
191
191
  specification_version: 4
192
192
  summary: REST in peace