flexirest 1.9.13 → 1.9.18
Sign up to get free protection for your applications and to get access to all the features.
- 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
|