flexirest 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +24 -6
- data/lib/flexirest/request.rb +15 -0
- data/lib/flexirest/validation.rb +27 -1
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/request_spec.rb +19 -0
- data/spec/lib/validation_spec.rb +185 -69
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f549201f0bdade7d62e8972d7015cdf04f0f2aaa
|
4
|
+
data.tar.gz: b5ed62790c87fd8253bdb1d18bca02dfcbc8331c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b6d0e9794750161edab543b97aec47a956f3bc570fa65e35c5216ed857fa8ed7830c661ce1fbc0092d0743298c68fc0734db9d38932597a9d3470d5164036a9
|
7
|
+
data.tar.gz: 5297d2f938e3777a5264212465270792dbe7202f758d5c4cfa572ad7e6fa32fc244f66931623933e8bbc0cd7a62ac5202051245c2cd4b10fdfffbdf3216e6140
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.2.2
|
4
|
+
|
5
|
+
Features:
|
6
|
+
|
7
|
+
- Adds `existence`, `numericality`, `presence` and `inclusion` validations (thanks Tom Hoen)
|
8
|
+
- Adds `full_error_messages` method (thanks Tom Hoen)
|
9
|
+
- Adds `requires` options to the method mapping
|
10
|
+
|
11
|
+
## 1.2.1
|
12
|
+
|
13
|
+
**Forked Which's ActiveRestClient to be Flexirest**
|
14
|
+
|
3
15
|
## 1.2.0
|
4
16
|
|
5
17
|
Features:
|
data/README.md
CHANGED
@@ -241,8 +241,8 @@ end
|
|
241
241
|
You can then access Ads by specifying their magazine IDs:
|
242
242
|
|
243
243
|
```ruby
|
244
|
-
|
245
|
-
|
244
|
+
Ad.all(magazine_id: 1)
|
245
|
+
Ad.create(magazine_id: 1, title: "My Add Title")
|
246
246
|
```
|
247
247
|
|
248
248
|
#### Combined Example
|
@@ -708,6 +708,19 @@ end
|
|
708
708
|
@people = Person.all(active:false)
|
709
709
|
```
|
710
710
|
|
711
|
+
### Required Parameters
|
712
|
+
|
713
|
+
If you want to specify that certain parameters are required for a specific call, you can specify them like:
|
714
|
+
|
715
|
+
```ruby
|
716
|
+
class Person < Flexirest::Base
|
717
|
+
get :all, '/people', :requires => [:active]
|
718
|
+
end
|
719
|
+
|
720
|
+
@people = Person.all # raises Flexirest::MissingParametersException
|
721
|
+
@people = Person.all(active:false)
|
722
|
+
```
|
723
|
+
|
711
724
|
### HTTP/Parse Error Handling
|
712
725
|
|
713
726
|
Sometimes the backend server may respond with a non-200/304 header, in which case the code will raise an `Flexirest::HTTPClientException` for 4xx errors or an `Flexirest::HTTPServerException` for 5xx errors. These both have a `status` accessor and a `result` accessor (for getting access to the parsed body):
|
@@ -728,10 +741,13 @@ You can create validations on your objects just like Rails' built in ActiveModel
|
|
728
741
|
|
729
742
|
```ruby
|
730
743
|
class Person < Flexirest::Base
|
731
|
-
validates :first_name, presence:true
|
732
|
-
validates :
|
733
|
-
validates :
|
734
|
-
validates :
|
744
|
+
validates :first_name, presence: true #ensures that the value is present and not blank
|
745
|
+
validates :last_name, existence: true #ensures that the value is non-nil only
|
746
|
+
validates :password, length: {within:6..12}
|
747
|
+
validates :post_code, length: {minimum:6, maximum:8}
|
748
|
+
validates :salary, numericality: true, minimum: 20_000, maximum: 50_000
|
749
|
+
validates :age, numericality: { minumum: 18, maximum: 65 }
|
750
|
+
validates :suffix, inclusion: { in: %w{Dr. Mr. Mrs. Ms.}}
|
735
751
|
|
736
752
|
validates :first_name do |object, name, value|
|
737
753
|
object.errors[name] << "must be over 4 chars long" if value.length <= 4
|
@@ -745,6 +761,8 @@ Note the block based validation is responsible for adding errors to `object.erro
|
|
745
761
|
|
746
762
|
Validations are run when calling `valid?` or when calling any API on an instance (and then only if it is `valid?` will the API go on to be called).
|
747
763
|
|
764
|
+
`full_error_messages` returns an array of attributes with their associated error messages, i.e. `["age must be at least 18"]`
|
765
|
+
|
748
766
|
### Debugging
|
749
767
|
|
750
768
|
You can turn on verbose debugging to see what is sent to the API server and what is returned in one of these two ways:
|
data/lib/flexirest/request.rb
CHANGED
@@ -225,6 +225,20 @@ module Flexirest
|
|
225
225
|
@post_params = default_params.merge(params || {})
|
226
226
|
@get_params = {}
|
227
227
|
end
|
228
|
+
|
229
|
+
if @method[:options][:requires]
|
230
|
+
requires = @method[:options][:requires].dup
|
231
|
+
merged_params = @get_params.merge(@post_params || {})
|
232
|
+
missing = []
|
233
|
+
requires.each do |key|
|
234
|
+
if merged_params[key.to_sym].blank? && ![true, false].include?(merged_params[key.to_sym])
|
235
|
+
missing << key
|
236
|
+
end
|
237
|
+
end
|
238
|
+
if missing.any?
|
239
|
+
raise Flexirest::MissingParametersException.new("The following parameters weren't specifed: #{missing.join(", ")}")
|
240
|
+
end
|
241
|
+
end
|
228
242
|
end
|
229
243
|
|
230
244
|
def prepare_url
|
@@ -547,6 +561,7 @@ module Flexirest
|
|
547
561
|
class RequestException < StandardError ; end
|
548
562
|
|
549
563
|
class InvalidRequestException < RequestException ; end
|
564
|
+
class MissingParametersException < RequestException ; end
|
550
565
|
class ResponseParseException < RequestException
|
551
566
|
attr_accessor :status, :body
|
552
567
|
def initialize(options)
|
data/lib/flexirest/validation.rb
CHANGED
@@ -24,7 +24,13 @@ module Flexirest
|
|
24
24
|
if type == :presence
|
25
25
|
if value.nil?
|
26
26
|
@errors[validation[:field_name]] << "must be present"
|
27
|
+
elsif value.blank?
|
28
|
+
@errors[validation[:field_name]] << "must be present"
|
27
29
|
end
|
30
|
+
elsif type == :existence
|
31
|
+
if value.nil?
|
32
|
+
@errors[validation[:field_name]] << "must be not be nil"
|
33
|
+
end
|
28
34
|
elsif type == :length
|
29
35
|
if options[:within]
|
30
36
|
@errors[validation[:field_name]] << "must be within range #{options[:within]}" unless options[:within].include?(value.to_s.length )
|
@@ -37,11 +43,24 @@ module Flexirest
|
|
37
43
|
end
|
38
44
|
elsif type == :numericality
|
39
45
|
numeric = (true if Float(value) rescue false)
|
40
|
-
|
46
|
+
if !numeric
|
47
|
+
@errors[validation[:field_name]] << "must be numeric"
|
48
|
+
else
|
49
|
+
if options.is_a?(Hash)
|
50
|
+
if options[:minimum]
|
51
|
+
@errors[validation[:field_name]] << "must be at least #{options[:minimum]}" unless value.to_f >= options[:minimum]
|
52
|
+
end
|
53
|
+
if options[:maximum]
|
54
|
+
@errors[validation[:field_name]] << "must be no more than #{options[:minimum]}" unless value.to_f <= options[:maximum]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
41
58
|
elsif type == :minimum && !value.nil?
|
42
59
|
@errors[validation[:field_name]] << "must be at least #{options}" unless value.to_f >= options.to_f
|
43
60
|
elsif type == :maximum && !value.nil?
|
44
61
|
@errors[validation[:field_name]] << "must be no more than #{options}" unless value.to_f <= options.to_f
|
62
|
+
elsif type == :inclusion
|
63
|
+
@errors[validation[:field_name]] << "must be included in #{options[:in].join(", ")}" unless options[:in].include?(value)
|
45
64
|
end
|
46
65
|
end
|
47
66
|
if validation[:block]
|
@@ -51,6 +70,13 @@ module Flexirest
|
|
51
70
|
@errors.empty?
|
52
71
|
end
|
53
72
|
|
73
|
+
def full_error_messages
|
74
|
+
return "" unless _errors.present?
|
75
|
+
_errors.reduce([]) do |memo, (field, errors)|
|
76
|
+
memo << "#{field.to_s} #{errors.join(' and ')}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
54
80
|
def _errors
|
55
81
|
@errors ||= Hash.new {|h,k| h[k] = []}
|
56
82
|
@errors
|
data/lib/flexirest/version.rb
CHANGED
data/spec/lib/request_spec.rb
CHANGED
@@ -37,6 +37,7 @@ describe Flexirest::Request do
|
|
37
37
|
get :fake, "/fake", fake:"{\"result\":true, \"list\":[1,2,3,{\"test\":true}], \"child\":{\"grandchild\":{\"test\":true}}}"
|
38
38
|
get :fake_proc, "/fake", fake:->(request) { "{\"result\":#{request.get_params[:id]}}" }
|
39
39
|
get :defaults, "/defaults", defaults:{overwrite:"no", persist:"yes"}
|
40
|
+
get :requires, "/requires", requires:[:name, :age]
|
40
41
|
end
|
41
42
|
|
42
43
|
class AuthenticatedExampleClient < Flexirest::Base
|
@@ -113,6 +114,24 @@ describe Flexirest::Request do
|
|
113
114
|
ExampleClient.defaults overwrite:"yes"
|
114
115
|
end
|
115
116
|
|
117
|
+
it "should ensure any required parameters are specified" do
|
118
|
+
expect_any_instance_of(Flexirest::Connection).to_not receive(:get)
|
119
|
+
expect{ExampleClient.requires}.to raise_error(Flexirest::MissingParametersException)
|
120
|
+
expect{ExampleClient.requires name: "John"}.to raise_error(Flexirest::MissingParametersException)
|
121
|
+
expect{ExampleClient.requires age: 21}.to raise_error(Flexirest::MissingParametersException)
|
122
|
+
expect{ExampleClient.requires name: nil, age: nil}.to raise_error(Flexirest::MissingParametersException)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should makes the request if all required parameters are specified" do
|
126
|
+
expect_any_instance_of(Flexirest::Connection).to receive(:get).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
|
127
|
+
expect{ExampleClient.requires name: "John", age: 21}.not_to raise_error
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should makes the request if all required parameters are specified, even if boolean" do
|
131
|
+
expect_any_instance_of(Flexirest::Connection).to receive(:get).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
|
132
|
+
expect{ExampleClient.requires name: true, age: false}.not_to raise_error
|
133
|
+
end
|
134
|
+
|
116
135
|
it "should pass through url parameters" do
|
117
136
|
expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/1234", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
|
118
137
|
ExampleClient.find id:1234
|
data/spec/lib/validation_spec.rb
CHANGED
@@ -3,100 +3,216 @@ require 'spec_helper'
|
|
3
3
|
describe "Flexirest::Validation" do
|
4
4
|
class SimpleValidationExample < OpenStruct
|
5
5
|
include Flexirest::Validation
|
6
|
-
validates :first_name, presence:true
|
7
|
-
validates :
|
8
|
-
validates :
|
9
|
-
validates :
|
6
|
+
validates :first_name, presence: true
|
7
|
+
validates :last_name, existence: true
|
8
|
+
validates :password, length: { within: 6..12 }
|
9
|
+
validates :post_code, length: { minimum: 6, maximum: 8 }
|
10
|
+
validates :salary, numericality: true, minimum: 20_000, maximum: 50_000
|
11
|
+
validates :age, numericality: { minimum: 18, maximum: 65 }
|
12
|
+
validates :suffix, inclusion: { in: %w{Dr. Mr. Mrs. Ms.}}
|
10
13
|
end
|
11
14
|
|
12
15
|
it "should be able to register a validation" do
|
13
|
-
expect(SimpleValidationExample._validations.size).to eq(
|
16
|
+
expect(SimpleValidationExample._validations.size).to eq(7)
|
14
17
|
end
|
15
18
|
|
16
|
-
|
17
|
-
a = SimpleValidationExample.new
|
18
|
-
a.first_name = nil
|
19
|
-
a.valid?
|
20
|
-
expect(a._errors[:first_name].size).to eq(1)
|
21
|
-
end
|
19
|
+
context "when validating presence" do
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
it "should be invalid if a required value isn't present" do
|
22
|
+
a = SimpleValidationExample.new
|
23
|
+
a.first_name = nil
|
24
|
+
a.valid?
|
25
|
+
expect(a._errors[:first_name].size).to eq(1)
|
26
|
+
end
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
it "should be invalid if a required value is present but blank" do
|
29
|
+
a = SimpleValidationExample.new
|
30
|
+
a.first_name = ""
|
31
|
+
a.valid?
|
32
|
+
expect(a._errors[:first_name].size).to eq(1)
|
33
|
+
end
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
it "should be invalid if a required value is present but is an empty array" do
|
36
|
+
a = SimpleValidationExample.new
|
37
|
+
a.first_name = []
|
38
|
+
a.valid?
|
39
|
+
expect(a._errors[:first_name].size).to eq(1)
|
40
|
+
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
it "should be invalid if a required value is present but is an empty hash" do
|
43
|
+
a = SimpleValidationExample.new
|
44
|
+
a.first_name = {}
|
45
|
+
a.valid?
|
46
|
+
expect(a._errors[:first_name].size).to eq(1)
|
47
|
+
end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
it "should be valid if a required value is present" do
|
50
|
+
a = SimpleValidationExample.new
|
51
|
+
a.first_name = "John"
|
52
|
+
a.valid?
|
53
|
+
expect(a._errors[:first_name]).to be_empty
|
54
|
+
end
|
52
55
|
end
|
53
56
|
|
54
|
-
|
55
|
-
a
|
56
|
-
|
57
|
-
|
57
|
+
context "when validating existence" do
|
58
|
+
it "should be invalid if a required value isn't present" do
|
59
|
+
a = SimpleValidationExample.new
|
60
|
+
a.last_name = nil
|
61
|
+
a.valid?
|
62
|
+
expect(a._errors[:last_name].size).to eq(1)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be valid if a required value is present but blank" do
|
66
|
+
a = SimpleValidationExample.new
|
67
|
+
a.last_name = ""
|
68
|
+
a.valid?
|
69
|
+
expect(a._errors[:last_name]).to be_empty
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should be valid if a required value is present" do
|
73
|
+
a = SimpleValidationExample.new
|
74
|
+
a.last_name = "John"
|
75
|
+
a.valid?
|
76
|
+
expect(a._errors[:last_name]).to be_empty
|
77
|
+
end
|
58
78
|
end
|
59
79
|
|
60
|
-
|
61
|
-
a
|
62
|
-
|
63
|
-
|
80
|
+
context "when validating length" do
|
81
|
+
it "should be invalid if a length within value is outside the range" do
|
82
|
+
a = SimpleValidationExample.new(password:"12345")
|
83
|
+
a.valid?
|
84
|
+
expect(a._errors[:password].size).to eq(1)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should be valid if a length within value is inside the range" do
|
88
|
+
a = SimpleValidationExample.new(password:"123456")
|
89
|
+
a.valid?
|
90
|
+
expect(a._errors[:password].size).to eq(0)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should be invalid if a length is below the minimum" do
|
94
|
+
a = SimpleValidationExample.new(post_code:"12345")
|
95
|
+
a.valid?
|
96
|
+
expect(a._errors[:post_code].size).to eq(1)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should be valid if a length is above or equal to the minimum and below the maximum" do
|
100
|
+
a = SimpleValidationExample.new(post_code:"123456")
|
101
|
+
a.valid?
|
102
|
+
expect(a._errors[:post_code].size).to eq(0)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should be invalid if a length is above the maximum" do
|
106
|
+
a = SimpleValidationExample.new(post_code:"123456789")
|
107
|
+
a.valid?
|
108
|
+
expect(a._errors[:post_code].size).to eq(1)
|
109
|
+
end
|
64
110
|
end
|
65
111
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
112
|
+
|
113
|
+
context "when validating numericality" do
|
114
|
+
context "using the original format with min and max as types" do
|
115
|
+
it "should be able to validate that a field is numeric" do
|
116
|
+
a = SimpleValidationExample.new(salary:"Bob")
|
117
|
+
a.valid?
|
118
|
+
expect(a._errors[:salary].size).to be > 0
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should be able to validate that a numeric field is above or equal to a minimum" do
|
122
|
+
a = SimpleValidationExample.new(salary:10_000)
|
123
|
+
a.valid?
|
124
|
+
expect(a._errors[:salary].size).to be > 0
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should be able to validate that a numeric field is above or equal to a minimum" do
|
128
|
+
a = SimpleValidationExample.new(salary:100_000)
|
129
|
+
a.valid?
|
130
|
+
expect(a._errors[:salary].size).to be > 0
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should be valid that a numeric field is above or equal to a minimum" do
|
134
|
+
a = SimpleValidationExample.new(salary:30_000)
|
135
|
+
a.valid?
|
136
|
+
expect(a._errors[:salary].size).to eq(0)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
context "using the original format with min and max as types" do
|
142
|
+
it "should be able to validate that a field is numeric" do
|
143
|
+
a = SimpleValidationExample.new(age:"Bob")
|
144
|
+
a.valid?
|
145
|
+
expect(a._errors[:age].size).to be > 0
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should be able to validate that a numeric field is above or equal to a minimum" do
|
149
|
+
a = SimpleValidationExample.new(age: 17)
|
150
|
+
a.valid?
|
151
|
+
expect(a._errors[:age].size).to be > 0
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should be able to validate that a numeric field is above or equal to a minimum" do
|
155
|
+
a = SimpleValidationExample.new(age: 70)
|
156
|
+
a.valid?
|
157
|
+
expect(a._errors[:age].size).to be > 0
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should be valid that a numeric field is above or equal to a minimum" do
|
161
|
+
a = SimpleValidationExample.new(age: 30)
|
162
|
+
a.valid?
|
163
|
+
expect(a._errors[:age].size).to eq(0)
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
70
167
|
end
|
71
168
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
169
|
+
context "when validating inclusion" do
|
170
|
+
it "should be invalid if the value is not contained in the list" do
|
171
|
+
a = SimpleValidationExample.new(suffix: "Baz")
|
172
|
+
a.valid?
|
173
|
+
expect(a._errors[:suffix].size).to be > 0
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should be valid if the value is contained in the list" do
|
177
|
+
a = SimpleValidationExample.new(suffix: "Dr.")
|
178
|
+
a.valid?
|
179
|
+
expect(a._errors[:suffix].size).to eq(0)
|
180
|
+
end
|
76
181
|
end
|
77
182
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
183
|
+
context "when passing a block" do
|
184
|
+
it "should be invalid when a block adds an error" do
|
185
|
+
class ValidationExample1 < OpenStruct
|
186
|
+
include Flexirest::Validation
|
187
|
+
validates :first_name do |object, name, value|
|
188
|
+
object._errors[name] << "must be over 4 chars long" if value.length <= 4
|
189
|
+
end
|
83
190
|
end
|
191
|
+
a = ValidationExample1.new(first_name:"John")
|
192
|
+
a.valid?
|
193
|
+
expect(a._errors[:first_name].size).to eq(1)
|
84
194
|
end
|
85
|
-
a = ValidationExample1.new(first_name:"John")
|
86
|
-
a.valid?
|
87
|
-
expect(a._errors[:first_name].size).to eq(1)
|
88
|
-
end
|
89
195
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
196
|
+
it "should be valid when a block doesn't add an error" do
|
197
|
+
class ValidationExample2 < OpenStruct
|
198
|
+
include Flexirest::Validation
|
199
|
+
validates :first_name do |object, name, value|
|
200
|
+
object._errors[name] << "must be over 4 chars long" if value.length <= 4
|
201
|
+
end
|
95
202
|
end
|
203
|
+
a = ValidationExample2.new(first_name:"Johnny")
|
204
|
+
a.valid?
|
205
|
+
expect(a._errors[:first_name]).to be_empty
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe "#full_error_messages" do
|
210
|
+
it "should return an array of strings that combines the attribute name and the error message" do
|
211
|
+
a = SimpleValidationExample.new(age:"Bob", suffix: "Baz")
|
212
|
+
a.valid?
|
213
|
+
expect(a.full_error_messages).to include("age must be numeric")
|
214
|
+
expect(a.full_error_messages).to include("suffix must be included in Dr., Mr., Mrs., Ms.")
|
96
215
|
end
|
97
|
-
a = ValidationExample2.new(first_name:"Johnny")
|
98
|
-
a.valid?
|
99
|
-
expect(a._errors[:first_name]).to be_empty
|
100
216
|
end
|
101
217
|
|
102
218
|
it "should call valid? before making a request" do
|
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.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Jeffries
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -315,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
315
|
version: '0'
|
316
316
|
requirements: []
|
317
317
|
rubyforge_project:
|
318
|
-
rubygems_version: 2.4.
|
318
|
+
rubygems_version: 2.4.5
|
319
319
|
signing_key:
|
320
320
|
specification_version: 4
|
321
321
|
summary: This gem is for accessing REST services in a flexible way. ActiveResource
|
@@ -342,4 +342,3 @@ test_files:
|
|
342
342
|
- spec/lib/validation_spec.rb
|
343
343
|
- spec/lib/xml_spec.rb
|
344
344
|
- spec/spec_helper.rb
|
345
|
-
has_rdoc:
|