flexirest 1.9.13 → 1.9.18
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 +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +30 -0
- data/docs/faking-calls.md +11 -0
- data/flexirest.gemspec +2 -1
- data/lib/flexirest/base_without_validation.rb +2 -1
- data/lib/flexirest/caching.rb +4 -1
- data/lib/flexirest/request.rb +11 -2
- data/lib/flexirest/result_iterator.rb +6 -2
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/base_without_validation_spec.rb +14 -0
- data/spec/lib/caching_spec.rb +12 -0
- data/spec/lib/request_spec.rb +11 -1
- data/spec/spec_helper.rb +2 -2
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a602c593b7748bb16605a196b249920ad733152fee9c7969fa56445b8c07003
|
4
|
+
data.tar.gz: 1e75b70398bcc73ee2fbd68a169c9f30ed1cbdd968e2f0d74272a1ed1b254737
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d868df5a25277b88e0482e5cae4ba4398aa0ae4082766321988172365d7e1d955f6254f4a29eccd927f6d95d3734e81333f55760c1fbc0847f1ba6a249ae922
|
7
|
+
data.tar.gz: 2710c351b4f5770a4cc177d5ca7509aff9e988ff7b89a892bf4f57c35bb5834c5f41ca193ae22023b15de71118b19799c52491682dad86d041fd21dad9773a32
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.9.18
|
4
|
+
|
5
|
+
Security:
|
6
|
+
|
7
|
+
- Upgrade rest-client development dependency to a CVE-fixed version.
|
8
|
+
|
9
|
+
## 1.9.17
|
10
|
+
|
11
|
+
Feature:
|
12
|
+
|
13
|
+
- Methods can be specified as a symbol for generating fake data (thanks to Niall Duggan for the feature request).
|
14
|
+
|
15
|
+
## 1.9.16
|
16
|
+
|
17
|
+
Bugfix:
|
18
|
+
|
19
|
+
- Cached responses were always returning as `dirty?`/`changed?` (thanks to AKRathore for the bug report).
|
20
|
+
|
21
|
+
## 1.9.15
|
22
|
+
|
23
|
+
Bugfix:
|
24
|
+
|
25
|
+
- Fix not marking unchanged attributes as dirty (thanks to Khairi Adnan for the bug report).
|
26
|
+
|
27
|
+
## 1.9.14
|
28
|
+
|
29
|
+
Bugfix:
|
30
|
+
|
31
|
+
- Remove deprecation warning for `URI.escape` on Ruby 2.7.x.
|
32
|
+
|
3
33
|
## 1.9.13
|
4
34
|
|
5
35
|
Change:
|
data/docs/faking-calls.md
CHANGED
@@ -16,6 +16,17 @@ class Person < Flexirest::Base
|
|
16
16
|
end
|
17
17
|
```
|
18
18
|
|
19
|
+
Alternatively, you can specify a symbol as the `fake` parameter, and Flexirest will call that method to get a string JSON as if it was the request body:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
class Person < Flexirest::Base
|
23
|
+
get :all, '/people', fake: :get_data
|
24
|
+
|
25
|
+
def get_data
|
26
|
+
{result: true}.to_json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
```
|
19
30
|
|
20
31
|
-----
|
21
32
|
|
data/flexirest.gemspec
CHANGED
@@ -36,9 +36,10 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_development_dependency "simplecov"
|
37
37
|
spec.add_development_dependency "simplecov-rcov"
|
38
38
|
spec.add_development_dependency 'coveralls'
|
39
|
-
spec.add_development_dependency "api-auth", ">= 1.3.1"
|
39
|
+
spec.add_development_dependency "api-auth", ">= 1.3.1", "< 2.4"
|
40
40
|
spec.add_development_dependency 'typhoeus'
|
41
41
|
spec.add_development_dependency 'activemodel'
|
42
|
+
spec.add_development_dependency 'rest-client', ">= 1.8.0"
|
42
43
|
|
43
44
|
spec.add_runtime_dependency "mime-types"
|
44
45
|
spec.add_runtime_dependency "multi_json"
|
@@ -41,6 +41,7 @@ module Flexirest
|
|
41
41
|
def _copy_from(result)
|
42
42
|
@attributes = result._attributes
|
43
43
|
@_status = result._status
|
44
|
+
_clean!
|
44
45
|
end
|
45
46
|
|
46
47
|
def dirty?
|
@@ -189,7 +190,7 @@ module Flexirest
|
|
189
190
|
old_value = @dirty_attributes[key.to_sym]
|
190
191
|
old_value = @attributes[key.to_sym] unless old_value
|
191
192
|
old_value = old_value[0] if old_value and old_value.is_a? Array
|
192
|
-
@dirty_attributes[key.to_sym] = [old_value, value]
|
193
|
+
@dirty_attributes[key.to_sym] = [old_value, value] if old_value != value
|
193
194
|
@attributes[key.to_sym] = value
|
194
195
|
end
|
195
196
|
|
data/lib/flexirest/caching.rb
CHANGED
@@ -110,9 +110,12 @@ module Flexirest
|
|
110
110
|
if @result.is_a?(Array)
|
111
111
|
ri = ResultIterator.new(self)
|
112
112
|
ri.items = @result.map{|i| @class_name.constantize.new(i)}
|
113
|
+
ri._clean!
|
113
114
|
ri
|
114
115
|
else
|
115
|
-
@class_name.constantize.new(@result)
|
116
|
+
obj = @class_name.constantize.new(@result)
|
117
|
+
obj._clean!
|
118
|
+
obj
|
116
119
|
end
|
117
120
|
end
|
118
121
|
end
|
data/lib/flexirest/request.rb
CHANGED
@@ -191,9 +191,18 @@ module Flexirest
|
|
191
191
|
@body = nil
|
192
192
|
prepare_params
|
193
193
|
prepare_url
|
194
|
-
|
194
|
+
fake = @method[:options][:fake]
|
195
|
+
if fake.present?
|
195
196
|
if fake.respond_to?(:call)
|
196
197
|
fake = fake.call(self)
|
198
|
+
elsif @object.respond_to?(fake)
|
199
|
+
fake = @object.send(fake)
|
200
|
+
elsif @object.class.respond_to?(fake)
|
201
|
+
fake = @object.class.send(fake)
|
202
|
+
elsif @object.new.respond_to?(fake)
|
203
|
+
fake = @object.new.send(fake)
|
204
|
+
elsif @object.class.new.respond_to?(fake)
|
205
|
+
fake = @object.class.new.send(fake)
|
197
206
|
end
|
198
207
|
Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{@instrumentation_name} - Faked response found"
|
199
208
|
content_type = @method[:options][:fake_content_type] || "application/json"
|
@@ -380,7 +389,7 @@ module Flexirest
|
|
380
389
|
if target.to_s.blank?
|
381
390
|
missing << token
|
382
391
|
end
|
383
|
-
@url.gsub!(":#{token}", URI.
|
392
|
+
@url.gsub!(":#{token}", URI.encode_www_form_component(target.to_s))
|
384
393
|
end
|
385
394
|
end
|
386
395
|
|
@@ -15,6 +15,10 @@ module Flexirest
|
|
15
15
|
@items << item
|
16
16
|
end
|
17
17
|
|
18
|
+
def _clean!
|
19
|
+
@items.map(&:_clean!)
|
20
|
+
end
|
21
|
+
|
18
22
|
def size
|
19
23
|
@items.size
|
20
24
|
end
|
@@ -62,8 +66,8 @@ module Flexirest
|
|
62
66
|
self
|
63
67
|
end
|
64
68
|
|
65
|
-
def delete_if
|
66
|
-
@items = @items.delete_if &
|
69
|
+
def delete_if(&block)
|
70
|
+
@items = @items.delete_if &block
|
67
71
|
self
|
68
72
|
end
|
69
73
|
|
data/lib/flexirest/version.rb
CHANGED
@@ -126,6 +126,13 @@ describe Flexirest::BaseWithoutValidation do
|
|
126
126
|
expect(client).to be_dirty
|
127
127
|
end
|
128
128
|
|
129
|
+
it "should not mark attributes that don't change as dirty" do
|
130
|
+
client = EmptyExample.new(test: "Foo")
|
131
|
+
client._clean!
|
132
|
+
client.test = client.test
|
133
|
+
expect(client).to_not be_dirty
|
134
|
+
end
|
135
|
+
|
129
136
|
it "should store attribute set using []= array notation and mark them as dirty" do
|
130
137
|
client = EmptyExample.new()
|
131
138
|
client["test"] = "Something"
|
@@ -171,6 +178,13 @@ describe Flexirest::BaseWithoutValidation do
|
|
171
178
|
expect(client).to be_dirty
|
172
179
|
end
|
173
180
|
|
181
|
+
it "should not mark a freshly retrieved object as changed" do
|
182
|
+
expect_any_instance_of(Flexirest::Connection).to receive(:get).with('/find/1', anything).and_return(::FaradayResponseMock.new(OpenStruct.new(status:200, response_headers:{}, body:"{\"first_name\":\"Billy\"}")))
|
183
|
+
client = AlteringClientExample.find(id: 1)
|
184
|
+
expect(client).to_not be_changed
|
185
|
+
expect(client.changes).to eq({})
|
186
|
+
end
|
187
|
+
|
174
188
|
it 'should respond_to? attributes defined in the response' do
|
175
189
|
client = EmptyExample.new(hello: "World")
|
176
190
|
expect(client.respond_to?(:hello)).to be_truthy
|
data/spec/lib/caching_spec.rb
CHANGED
@@ -184,6 +184,18 @@ describe Flexirest::Caching do
|
|
184
184
|
expect(ret.first_name).to eq("Johnny")
|
185
185
|
end
|
186
186
|
|
187
|
+
it "cache read objects shouldn't be marked as changed" do
|
188
|
+
cached_response = Flexirest::CachedResponse.new(
|
189
|
+
status:200,
|
190
|
+
result:@cached_object,
|
191
|
+
expires:Time.now + 30)
|
192
|
+
expect_any_instance_of(CachingExampleCacheStore5).to receive(:read).once.with("Person:/").and_return(Marshal.dump(cached_response))
|
193
|
+
expect_any_instance_of(Flexirest::Connection).not_to receive(:get)
|
194
|
+
ret = Person.all
|
195
|
+
expect(ret).to_not be_changed
|
196
|
+
expect(ret.changes).to eq({})
|
197
|
+
end
|
198
|
+
|
187
199
|
it "should read from the cache store and restore to the same object" do
|
188
200
|
cached_response = Flexirest::CachedResponse.new(
|
189
201
|
status:200,
|
data/spec/lib/request_spec.rb
CHANGED
@@ -55,6 +55,7 @@ describe Flexirest::Request do
|
|
55
55
|
get :hal, "/hal", fake:"{\"_links\":{\"child\": {\"href\": \"/child/1\"}, \"other\": {\"href\": \"/other/1\"}, \"cars\":[{\"href\": \"/car/1\", \"name\":\"car1\"}, {\"href\": \"/car/2\", \"name\":\"car2\"}, {\"href\": \"/car/not-embed\", \"name\":\"car_not_embed\"} ], \"lazy\": {\"href\": \"/lazy/load\"}, \"invalid\": [{\"href\": \"/invalid/1\"}]}, \"_embedded\":{\"other\":{\"name\":\"Jane\"},\"child\":{\"name\":\"Billy\"}, \"cars\":[{\"_links\": {\"self\": {\"href\": \"/car/1\"} }, \"make\": \"Bugatti\", \"model\": \"Veyron\"}, {\"_links\": {\"self\": {\"href\": \"/car/2\"} }, \"make\": \"Ferrari\", \"model\": \"F458 Italia\"} ], \"invalid\": [{\"present\":true, \"_links\": {} } ] } }", has_many:{other:ExampleOtherClient}
|
56
56
|
get :fake_object, "/fake", fake:"{\"result\":true, \"list\":[1,2,3,{\"test\":true}], \"child\":{\"grandchild\":{\"test\":true}}}"
|
57
57
|
get :fake_proc_object, "/fake", fake:->(request) { "{\"result\":#{request.get_params[:id]}}" }
|
58
|
+
get :fake_method, "/fake", fake: :generate_fake_data
|
58
59
|
get :fake_array, "/fake", fake:"[1,2,3,{\"test\":true},null]"
|
59
60
|
get :fake_proc_array, "/fake", fake:->(request) { "[{\"result\":#{request.get_params[:id]}},null]" }
|
60
61
|
get :defaults, "/defaults", defaults:{overwrite:"no", persist:"yes"}
|
@@ -62,6 +63,10 @@ describe Flexirest::Request do
|
|
62
63
|
patch :only_changed_1, "/changed1", only_changed: true
|
63
64
|
patch :only_changed_2, "/changed2", only_changed: [:debug1, :debug2]
|
64
65
|
patch :only_changed_3, "/changed3", only_changed: { debug1: false, debug2: true }
|
66
|
+
|
67
|
+
def generate_fake_data
|
68
|
+
"{\"result\":true, \"list\":[1,2,3,{\"test\":true}], \"child\":{\"grandchild\":{\"test\":true}}}"
|
69
|
+
end
|
65
70
|
end
|
66
71
|
|
67
72
|
class ExampleLoadBalancedClient < Flexirest::Base
|
@@ -344,7 +349,7 @@ describe Flexirest::Request do
|
|
344
349
|
end
|
345
350
|
|
346
351
|
it "should pass URL-encode URL parameters" do
|
347
|
-
expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/foo
|
352
|
+
expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/foo+bar", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
|
348
353
|
ExampleClient.find id:"foo bar"
|
349
354
|
end
|
350
355
|
|
@@ -576,6 +581,11 @@ describe Flexirest::Request do
|
|
576
581
|
expect(object.result).to eq(1234)
|
577
582
|
end
|
578
583
|
|
584
|
+
it "should parse JSON object from a fake response generated by method defined as a symbol" do
|
585
|
+
object = ExampleClient.fake_method id:1234
|
586
|
+
expect(object.result).to eq(true)
|
587
|
+
end
|
588
|
+
|
579
589
|
it "should parse JSON array and return a nice result iterator for faked responses" do
|
580
590
|
object = ExampleClient.fake_array debug:true
|
581
591
|
expect(object).to be_instance_of(Flexirest::ResultIterator)
|
data/spec/spec_helper.rb
CHANGED
@@ -66,12 +66,12 @@ class FaradayResponseMock < ::Flexirest::FaradayResponseProxy
|
|
66
66
|
@finished = false
|
67
67
|
end
|
68
68
|
|
69
|
-
def on_complete
|
69
|
+
def on_complete(&block)
|
70
70
|
if @auto_resolve
|
71
71
|
@finished = true
|
72
72
|
yield(@response)
|
73
73
|
else
|
74
|
-
@callback =
|
74
|
+
@callback = block
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexirest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Jeffries
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,6 +129,9 @@ dependencies:
|
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 1.3.1
|
132
|
+
- - "<"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '2.4'
|
132
135
|
type: :development
|
133
136
|
prerelease: false
|
134
137
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -136,6 +139,9 @@ dependencies:
|
|
136
139
|
- - ">="
|
137
140
|
- !ruby/object:Gem::Version
|
138
141
|
version: 1.3.1
|
142
|
+
- - "<"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '2.4'
|
139
145
|
- !ruby/object:Gem::Dependency
|
140
146
|
name: typhoeus
|
141
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +170,20 @@ dependencies:
|
|
164
170
|
- - ">="
|
165
171
|
- !ruby/object:Gem::Version
|
166
172
|
version: '0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: rest-client
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 1.8.0
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 1.8.0
|
167
187
|
- !ruby/object:Gem::Dependency
|
168
188
|
name: mime-types
|
169
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -364,7 +384,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
364
384
|
- !ruby/object:Gem::Version
|
365
385
|
version: '0'
|
366
386
|
requirements: []
|
367
|
-
rubygems_version: 3.
|
387
|
+
rubygems_version: 3.1.2
|
368
388
|
signing_key:
|
369
389
|
specification_version: 4
|
370
390
|
summary: This gem is for accessing REST services in a flexible way. ActiveResource
|