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 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