afmotion 2.2.0 → 3.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 +5 -5
- data/.gitignore +2 -1
- data/.travis.yml +17 -4
- data/AFMotion.gemspec +3 -2
- data/README.md +44 -49
- data/Rakefile +5 -1
- data/lib/afmotion.rb +2 -2
- data/lib/afmotion/client_shared.rb +65 -76
- data/lib/afmotion/ext/AFHTTPSessionManager.rb +73 -0
- data/lib/afmotion/{patch → ext}/NSString_NSUrl.rb +0 -0
- data/lib/afmotion/{patch → ext}/UIImageView_url.rb +0 -0
- data/lib/afmotion/http.rb +28 -11
- data/lib/afmotion/http_result.rb +18 -15
- data/lib/afmotion/operation.rb +3 -52
- data/lib/afmotion/serializer.rb +0 -2
- data/lib/afmotion/session_client.rb +15 -116
- data/lib/afmotion/session_client_dsl.rb +143 -0
- data/lib/afmotion/version.rb +1 -1
- data/motionuser12_avatar.png +0 -0
- data/motionuser12_avatar@2x.png +0 -0
- data/railsuser3_avatar.png +0 -0
- data/railsuser3_avatar@2x.png +0 -0
- data/spec/http_spec.rb +32 -2
- data/spec/integration_spec.rb +77 -0
- data/spec/session_client_spec.rb +62 -25
- data/swiftlytalking4_avatar.png +0 -0
- data/swiftlytalking4_avatar@2x.png +0 -0
- data/vendor/Podfile.lock +20 -18
- metadata +41 -22
- data/Gemfile.lock +0 -64
- data/lib/afmotion/http_client.rb +0 -109
- data/spec/http_client_spec.rb +0 -186
data/lib/afmotion/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/spec/http_spec.rb
CHANGED
@@ -4,6 +4,19 @@ describe "AFMotion" do
|
|
4
4
|
|
5
5
|
modules.each do |_module|
|
6
6
|
describe _module.to_s do
|
7
|
+
extend WebStub::SpecHelpers
|
8
|
+
|
9
|
+
before do
|
10
|
+
disable_network_access!
|
11
|
+
@result = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
enable_network_access!
|
16
|
+
reset_stubs
|
17
|
+
end
|
18
|
+
|
19
|
+
|
7
20
|
it "should have all the HTTP methods" do
|
8
21
|
AFMotion::HTTP_METHODS.each do |method|
|
9
22
|
_module.respond_to?(method).should == true
|
@@ -16,7 +29,7 @@ describe "AFMotion" do
|
|
16
29
|
end
|
17
30
|
|
18
31
|
it "should work with string" do
|
19
|
-
_module.get("
|
32
|
+
_module.get("https://google.com") do |result|
|
20
33
|
@result = result
|
21
34
|
resume
|
22
35
|
end
|
@@ -25,6 +38,23 @@ describe "AFMotion" do
|
|
25
38
|
end
|
26
39
|
end
|
27
40
|
end
|
41
|
+
|
42
|
+
describe ".head" do
|
43
|
+
before do
|
44
|
+
@result = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should work with string" do
|
48
|
+
_module.head("http://google.com") do |result|
|
49
|
+
@result = result
|
50
|
+
resume
|
51
|
+
end
|
52
|
+
wait_max(10) do
|
53
|
+
@result.nil?.should == false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
28
58
|
end
|
29
59
|
end
|
30
60
|
|
@@ -45,4 +75,4 @@ describe "AFMotion" do
|
|
45
75
|
end
|
46
76
|
end
|
47
77
|
end
|
48
|
-
end
|
78
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
describe "AFMotion" do
|
2
|
+
extend WebStub::SpecHelpers
|
3
|
+
|
4
|
+
before do
|
5
|
+
disable_network_access!
|
6
|
+
@object = nil
|
7
|
+
@result = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
enable_network_access!
|
12
|
+
reset_stubs
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "JSON" do
|
16
|
+
it "should use mutable containers" do
|
17
|
+
url = "http://example.com/"
|
18
|
+
stub_request(:get, url).
|
19
|
+
to_return(json: {"data" => ["thing"]}, delay: 0.3)
|
20
|
+
|
21
|
+
AFMotion::JSON.get(url) do |result|
|
22
|
+
@result = result
|
23
|
+
@object = result.object
|
24
|
+
resume
|
25
|
+
end
|
26
|
+
|
27
|
+
wait_max 1.0 do
|
28
|
+
array = @object['data']
|
29
|
+
array << 'derp'
|
30
|
+
array.count.should == 2
|
31
|
+
|
32
|
+
@object['hello'] = 'world'
|
33
|
+
@object.count.should == 2
|
34
|
+
|
35
|
+
@object.delete('data')
|
36
|
+
@object.count.should == 1
|
37
|
+
|
38
|
+
@result.status_code.should == 200
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "Client" do
|
44
|
+
describe "JSON" do
|
45
|
+
it "should use mutable containers" do
|
46
|
+
base_url = "http://example.com/"
|
47
|
+
path = "path"
|
48
|
+
stub_request(:get, base_url + path).
|
49
|
+
to_return(json: {"data" => ["thing"]}, delay: 0.3)
|
50
|
+
|
51
|
+
client = AFMotion::Client.build(base_url) do
|
52
|
+
response_serializer :json
|
53
|
+
end
|
54
|
+
|
55
|
+
client.get(path, params: nil) do |result|
|
56
|
+
@result = result
|
57
|
+
@object = result.object
|
58
|
+
resume
|
59
|
+
end
|
60
|
+
|
61
|
+
wait_max 1.0 do
|
62
|
+
array = @object['data']
|
63
|
+
array << 'derp'
|
64
|
+
array.count.should == 2
|
65
|
+
|
66
|
+
@object['hello'] = 'world'
|
67
|
+
@object.count.should == 2
|
68
|
+
|
69
|
+
@object.delete('data')
|
70
|
+
@object.count.should == 1
|
71
|
+
|
72
|
+
@result.status_code.should == 200
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/spec/session_client_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
describe "AFMotion::SessionClientDSL" do
|
2
2
|
before do
|
3
|
-
@dsl = AFMotion::SessionClientDSL.new("
|
3
|
+
@dsl = AFMotion::SessionClientDSL.new("https://url")
|
4
4
|
end
|
5
5
|
|
6
6
|
describe "#header" do
|
@@ -48,6 +48,16 @@ describe "AFMotion::SessionClientDSL" do
|
|
48
48
|
@dsl.to_session_manager.responseSerializer.is_a?(enc_class).should == true
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
it "should set mutable reading options for JSON serializer" do
|
53
|
+
@dsl.response_serializer :json
|
54
|
+
@dsl.to_session_manager.responseSerializer.readingOptions.should == NSJSONReadingMutableContainers
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not set reading options for JSON serializer if raw one supplied" do
|
58
|
+
@dsl.response_serializer AFJSONResponseSerializer.serializer
|
59
|
+
@dsl.to_session_manager.responseSerializer.readingOptions.should.not == NSJSONReadingMutableContainers
|
60
|
+
end
|
51
61
|
end
|
52
62
|
|
53
63
|
describe "#session_configuration" do
|
@@ -88,7 +98,7 @@ end
|
|
88
98
|
describe "AFMotion::SessionClient" do
|
89
99
|
describe ".build" do
|
90
100
|
it "should return an AFHTTPSessionManager" do
|
91
|
-
client = AFMotion::SessionClient.build("
|
101
|
+
client = AFMotion::SessionClient.build("https://url") do
|
92
102
|
end
|
93
103
|
client.is_a?(AFHTTPSessionManager).should == true
|
94
104
|
end
|
@@ -96,7 +106,7 @@ describe "AFMotion::SessionClient" do
|
|
96
106
|
|
97
107
|
describe ".build_shared" do
|
98
108
|
it "should set AFMotion::SessionClient.shared" do
|
99
|
-
client = AFMotion::SessionClient.build_shared("
|
109
|
+
client = AFMotion::SessionClient.build_shared("https://url") do
|
100
110
|
end
|
101
111
|
AFMotion::SessionClient.shared.should == client
|
102
112
|
end
|
@@ -104,9 +114,19 @@ describe "AFMotion::SessionClient" do
|
|
104
114
|
end
|
105
115
|
|
106
116
|
describe "AFHTTPSessionManager" do
|
117
|
+
extend WebStub::SpecHelpers
|
118
|
+
|
107
119
|
before do
|
108
|
-
@
|
109
|
-
|
120
|
+
@url = "https://url.com"
|
121
|
+
@client = AFMotion::SessionClient.build(@url)
|
122
|
+
|
123
|
+
disable_network_access!
|
124
|
+
@result = nil
|
125
|
+
end
|
126
|
+
|
127
|
+
after do
|
128
|
+
enable_network_access!
|
129
|
+
reset_stubs
|
110
130
|
end
|
111
131
|
|
112
132
|
describe "URL Helpers" do
|
@@ -119,13 +139,15 @@ describe "AFHTTPSessionManager" do
|
|
119
139
|
|
120
140
|
# Pretty basic test
|
121
141
|
it "should work" do
|
122
|
-
@
|
142
|
+
stub_request(:get, @url).to_return(body: "")
|
143
|
+
|
123
144
|
@client.get("") do |result|
|
124
145
|
@result = result
|
125
146
|
resume
|
126
147
|
end
|
127
148
|
wait_max(10) do
|
128
149
|
@result.nil?.should == false
|
150
|
+
@result.error.should == nil
|
129
151
|
end
|
130
152
|
end
|
131
153
|
|
@@ -136,13 +158,6 @@ describe "AFHTTPSessionManager" do
|
|
136
158
|
end
|
137
159
|
end
|
138
160
|
|
139
|
-
describe "#build_shared" do
|
140
|
-
it "should set AFMotion::Client.shared" do
|
141
|
-
@client.authorization = {token: "clay"}
|
142
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].split[0].should == "Token"
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
161
|
describe "#headers" do
|
147
162
|
describe "#[]" do
|
148
163
|
it "should return a header" do
|
@@ -167,23 +182,32 @@ describe "AFHTTPSessionManager" do
|
|
167
182
|
end
|
168
183
|
end
|
169
184
|
|
170
|
-
|
171
185
|
["multipart_post", "multipart_put"].each do |multipart_method|
|
172
186
|
describe "##{multipart_method}" do
|
173
187
|
it "should trigger multipart request" do
|
174
|
-
|
188
|
+
stub_request(multipart_method.gsub(/^multipart_/, "").to_sym, @url).to_return(body: "", delay: 0.5)
|
189
|
+
|
190
|
+
@client.send(multipart_method, "", params: { test: "Herp" }) do |result, form_data|
|
175
191
|
@result = result
|
176
192
|
resume if result
|
177
193
|
end
|
178
194
|
|
179
195
|
wait_max(10) do
|
180
196
|
@result.should.not == nil
|
197
|
+
|
198
|
+
if @result.error
|
199
|
+
puts "HTTP ERROR: #{@result.error.localizedDescription}"
|
200
|
+
end
|
201
|
+
|
202
|
+
@result.error.should == nil
|
181
203
|
@result.task.currentRequest.valueForHTTPHeaderField("Content-Type").include?("multipart/form-data").should == true
|
182
204
|
end
|
183
205
|
end
|
184
206
|
|
185
207
|
it "should work with form data" do
|
186
|
-
|
208
|
+
stub_request(multipart_method.gsub(/^multipart_/, "").to_sym, @url).to_return(body: "", delay: 0.5)
|
209
|
+
|
210
|
+
@client.send(multipart_method, "", params: { test: "Herp" }) do |result, form_data|
|
187
211
|
if result
|
188
212
|
resume
|
189
213
|
else
|
@@ -196,16 +220,20 @@ describe "AFHTTPSessionManager" do
|
|
196
220
|
end
|
197
221
|
end
|
198
222
|
|
199
|
-
it "should have upload callback with
|
223
|
+
it "should have upload callback with progress" do
|
224
|
+
stub_request(multipart_method.gsub(/^multipart_/, "").to_sym, @url).to_return(json: "", delay: 0.5)
|
225
|
+
|
200
226
|
image = UIImage.imageNamed("test")
|
201
227
|
@data = UIImagePNGRepresentation(image)
|
202
228
|
@file_added = nil
|
203
|
-
|
229
|
+
progress_block = proc do |progress|
|
230
|
+
@progress = progress
|
231
|
+
end
|
232
|
+
|
233
|
+
@client.send(multipart_method, "", params: { test: "Herp" }, progress_block: progress_block) do |result, form_data|
|
204
234
|
if form_data
|
205
235
|
@file_added = true
|
206
236
|
form_data.appendPartWithFileData(@data, name: "test", fileName:"test.png", mimeType: "image/png")
|
207
|
-
elsif progress
|
208
|
-
@progress ||= progress
|
209
237
|
elsif result
|
210
238
|
@result = result
|
211
239
|
resume
|
@@ -213,14 +241,23 @@ describe "AFHTTPSessionManager" do
|
|
213
241
|
end
|
214
242
|
|
215
243
|
wait_max(20) do
|
216
|
-
@
|
217
|
-
|
218
|
-
|
219
|
-
@
|
244
|
+
@result.should.not == nil
|
245
|
+
|
246
|
+
if @result.error
|
247
|
+
puts "HTTP ERROR: #{@result.error.localizedDescription}"
|
220
248
|
end
|
249
|
+
|
250
|
+
@result.error.should == nil
|
251
|
+
@file_added.should == true
|
252
|
+
|
253
|
+
# with updated webstub, I wasn't able to get progress to report at all (but it works in the sample app)
|
254
|
+
# if (Object.const_defined?("UIDevice") && UIDevice.currentDevice.model =~ /simulator/i).nil?
|
255
|
+
# @progress.should.not == nil
|
256
|
+
# @progress.fractionCompleted.should <= 1.0
|
257
|
+
# end
|
221
258
|
@result.should.not == nil
|
222
259
|
end
|
223
260
|
end
|
224
261
|
end
|
225
262
|
end
|
226
|
-
end
|
263
|
+
end
|
Binary file
|
Binary file
|
data/vendor/Podfile.lock
CHANGED
@@ -1,28 +1,30 @@
|
|
1
1
|
PODS:
|
2
|
-
- AFNetworking (
|
3
|
-
- AFNetworking/
|
4
|
-
- AFNetworking/
|
5
|
-
- AFNetworking/
|
6
|
-
- AFNetworking/
|
7
|
-
- AFNetworking/
|
8
|
-
|
9
|
-
- AFNetworking/NSURLConnection (2.2.4):
|
2
|
+
- AFNetworking (4.0.1):
|
3
|
+
- AFNetworking/NSURLSession (= 4.0.1)
|
4
|
+
- AFNetworking/Reachability (= 4.0.1)
|
5
|
+
- AFNetworking/Security (= 4.0.1)
|
6
|
+
- AFNetworking/Serialization (= 4.0.1)
|
7
|
+
- AFNetworking/UIKit (= 4.0.1)
|
8
|
+
- AFNetworking/NSURLSession (4.0.1):
|
10
9
|
- AFNetworking/Reachability
|
11
10
|
- AFNetworking/Security
|
12
11
|
- AFNetworking/Serialization
|
13
|
-
- AFNetworking/
|
14
|
-
|
15
|
-
- AFNetworking/
|
16
|
-
- AFNetworking/
|
17
|
-
- AFNetworking/Serialization (2.2.4)
|
18
|
-
- AFNetworking/UIKit (2.2.4):
|
19
|
-
- AFNetworking/NSURLConnection
|
12
|
+
- AFNetworking/Reachability (4.0.1)
|
13
|
+
- AFNetworking/Security (4.0.1)
|
14
|
+
- AFNetworking/Serialization (4.0.1)
|
15
|
+
- AFNetworking/UIKit (4.0.1):
|
20
16
|
- AFNetworking/NSURLSession
|
21
17
|
|
22
18
|
DEPENDENCIES:
|
23
|
-
- AFNetworking (~>
|
19
|
+
- AFNetworking (~> 4.0.0)
|
20
|
+
|
21
|
+
SPEC REPOS:
|
22
|
+
trunk:
|
23
|
+
- AFNetworking
|
24
24
|
|
25
25
|
SPEC CHECKSUMS:
|
26
|
-
AFNetworking:
|
26
|
+
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
|
27
|
+
|
28
|
+
PODFILE CHECKSUM: 22ee56e144b87d6a6d6c7d940a77dd21f0574b3c
|
27
29
|
|
28
|
-
COCOAPODS:
|
30
|
+
COCOAPODS: 1.8.0
|
metadata
CHANGED
@@ -1,57 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: afmotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '3.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clay Allsopp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: motion-cocoapods
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.9.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.9.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: motion-require
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: webstub
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.6
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.1.6
|
55
69
|
description: A RubyMotion Wrapper for AFNetworking
|
56
70
|
email:
|
57
71
|
- clay.allsopp@gmail.com
|
@@ -59,30 +73,36 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
64
78
|
- AFMotion.gemspec
|
65
79
|
- Gemfile
|
66
|
-
- Gemfile.lock
|
67
80
|
- LICENSE
|
68
81
|
- README.md
|
69
82
|
- Rakefile
|
70
83
|
- app/app_delegate.rb
|
71
84
|
- lib/afmotion.rb
|
72
85
|
- lib/afmotion/client_shared.rb
|
86
|
+
- lib/afmotion/ext/AFHTTPSessionManager.rb
|
87
|
+
- lib/afmotion/ext/NSString_NSUrl.rb
|
88
|
+
- lib/afmotion/ext/UIImageView_url.rb
|
73
89
|
- lib/afmotion/http.rb
|
74
|
-
- lib/afmotion/http_client.rb
|
75
90
|
- lib/afmotion/http_result.rb
|
76
91
|
- lib/afmotion/operation.rb
|
77
|
-
- lib/afmotion/patch/NSString_NSUrl.rb
|
78
|
-
- lib/afmotion/patch/UIImageView_url.rb
|
79
92
|
- lib/afmotion/serializer.rb
|
80
93
|
- lib/afmotion/session_client.rb
|
94
|
+
- lib/afmotion/session_client_dsl.rb
|
81
95
|
- lib/afmotion/version.rb
|
96
|
+
- motionuser12_avatar.png
|
97
|
+
- motionuser12_avatar@2x.png
|
98
|
+
- railsuser3_avatar.png
|
99
|
+
- railsuser3_avatar@2x.png
|
82
100
|
- resources/test.png
|
83
|
-
- spec/http_client_spec.rb
|
84
101
|
- spec/http_spec.rb
|
102
|
+
- spec/integration_spec.rb
|
85
103
|
- spec/session_client_spec.rb
|
104
|
+
- swiftlytalking4_avatar.png
|
105
|
+
- swiftlytalking4_avatar@2x.png
|
86
106
|
- vendor/Podfile.lock
|
87
107
|
homepage: https://github.com/clayallsopp/AFMotion
|
88
108
|
licenses:
|
@@ -94,21 +114,20 @@ require_paths:
|
|
94
114
|
- lib
|
95
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
116
|
requirements:
|
97
|
-
- -
|
117
|
+
- - ">="
|
98
118
|
- !ruby/object:Gem::Version
|
99
119
|
version: '0'
|
100
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
121
|
requirements:
|
102
|
-
- -
|
122
|
+
- - ">="
|
103
123
|
- !ruby/object:Gem::Version
|
104
124
|
version: '0'
|
105
125
|
requirements: []
|
106
|
-
|
107
|
-
rubygems_version: 2.0.3
|
126
|
+
rubygems_version: 3.1.2
|
108
127
|
signing_key:
|
109
128
|
specification_version: 4
|
110
129
|
summary: A RubyMotion Wrapper for AFNetworking
|
111
130
|
test_files:
|
112
|
-
- spec/http_client_spec.rb
|
113
131
|
- spec/http_spec.rb
|
132
|
+
- spec/integration_spec.rb
|
114
133
|
- spec/session_client_spec.rb
|