afmotion 2.6 → 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 -13
- data/.gitignore +2 -1
- data/AFMotion.gemspec +2 -2
- data/README.md +40 -46
- data/Rakefile +3 -2
- data/lib/afmotion.rb +1 -1
- data/lib/afmotion/client_shared.rb +63 -79
- 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 +26 -11
- data/lib/afmotion/http_result.rb +11 -18
- 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 +2 -2
- data/spec/session_client_spec.rb +51 -23
- data/swiftlytalking4_avatar.png +0 -0
- data/swiftlytalking4_avatar@2x.png +0 -0
- data/vendor/Podfile.lock +20 -20
- metadata +29 -26
- data/Gemfile.lock +0 -74
- data/lib/afmotion/http_client.rb +0 -136
- data/spec/http_client_spec.rb +0 -225
data/Gemfile.lock
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
afmotion (2.5)
|
5
|
-
motion-cocoapods (>= 1.4.1)
|
6
|
-
motion-require (>= 0.1)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activesupport (4.2.1)
|
12
|
-
i18n (~> 0.7)
|
13
|
-
json (~> 1.7, >= 1.7.7)
|
14
|
-
minitest (~> 5.1)
|
15
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
16
|
-
tzinfo (~> 1.1)
|
17
|
-
claide (0.8.1)
|
18
|
-
cocoapods (0.36.0)
|
19
|
-
activesupport (>= 3.2.15)
|
20
|
-
claide (~> 0.8.1)
|
21
|
-
cocoapods-core (= 0.36.0)
|
22
|
-
cocoapods-downloader (~> 0.8.1)
|
23
|
-
cocoapods-plugins (~> 0.4.1)
|
24
|
-
cocoapods-trunk (~> 0.6.0)
|
25
|
-
cocoapods-try (~> 0.4.3)
|
26
|
-
colored (~> 1.2)
|
27
|
-
escape (~> 0.0.4)
|
28
|
-
molinillo (~> 0.2.1)
|
29
|
-
nap (~> 0.8)
|
30
|
-
open4 (~> 1.3)
|
31
|
-
xcodeproj (~> 0.23.0)
|
32
|
-
cocoapods-core (0.36.0)
|
33
|
-
activesupport (>= 3.2.15)
|
34
|
-
fuzzy_match (~> 2.0.4)
|
35
|
-
nap (~> 0.8.0)
|
36
|
-
cocoapods-downloader (0.8.1)
|
37
|
-
cocoapods-plugins (0.4.1)
|
38
|
-
nap
|
39
|
-
cocoapods-trunk (0.6.0)
|
40
|
-
nap (>= 0.8)
|
41
|
-
netrc (= 0.7.8)
|
42
|
-
cocoapods-try (0.4.3)
|
43
|
-
colored (1.2)
|
44
|
-
escape (0.0.4)
|
45
|
-
fuzzy_match (2.0.4)
|
46
|
-
i18n (0.7.0)
|
47
|
-
json (1.8.2)
|
48
|
-
minitest (5.5.1)
|
49
|
-
molinillo (0.2.1)
|
50
|
-
motion-cocoapods (1.7.0)
|
51
|
-
cocoapods (>= 0.34)
|
52
|
-
motion-require (0.2.0)
|
53
|
-
nap (0.8.0)
|
54
|
-
netrc (0.7.8)
|
55
|
-
open4 (1.3.4)
|
56
|
-
rake (10.4.2)
|
57
|
-
thread_safe (0.3.5)
|
58
|
-
tzinfo (1.2.2)
|
59
|
-
thread_safe (~> 0.1)
|
60
|
-
webstub (1.1.2)
|
61
|
-
xcodeproj (0.23.0)
|
62
|
-
activesupport (>= 3)
|
63
|
-
colored (~> 1.2)
|
64
|
-
|
65
|
-
PLATFORMS
|
66
|
-
ruby
|
67
|
-
|
68
|
-
DEPENDENCIES
|
69
|
-
afmotion!
|
70
|
-
rake
|
71
|
-
webstub (~> 1.1)
|
72
|
-
|
73
|
-
BUNDLED WITH
|
74
|
-
1.10.4
|
data/lib/afmotion/http_client.rb
DELETED
@@ -1,136 +0,0 @@
|
|
1
|
-
motion_require 'version'
|
2
|
-
motion_require 'client_shared'
|
3
|
-
|
4
|
-
module AFMotion
|
5
|
-
class Client
|
6
|
-
class << self
|
7
|
-
attr_accessor :shared
|
8
|
-
|
9
|
-
# Returns an instance of AFHTTPRequestOperationManager
|
10
|
-
def build(base_url, &block)
|
11
|
-
operation_manager = AFHTTPRequestOperationManager.alloc.initWithBaseURL(base_url.to_url)
|
12
|
-
if block
|
13
|
-
dsl = AFMotion::ClientDSL.new(operation_manager)
|
14
|
-
case block.arity
|
15
|
-
when 0
|
16
|
-
dsl.instance_eval(&block)
|
17
|
-
when 1
|
18
|
-
block.call(dsl)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
if !operation_manager.operationQueue
|
22
|
-
operation_manager.operationQueue = NSOperationQueue.mainQueue
|
23
|
-
end
|
24
|
-
operation_manager
|
25
|
-
end
|
26
|
-
|
27
|
-
# Sets AFMotion::Client.shared as the built client
|
28
|
-
def build_shared(base_url, &block)
|
29
|
-
self.shared = self.build(base_url, &block)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
module AFMotion
|
36
|
-
class ClientDSL
|
37
|
-
def initialize(operation_manager)
|
38
|
-
@operation_manager = WeakRef.new(operation_manager)
|
39
|
-
end
|
40
|
-
|
41
|
-
def header(header, value)
|
42
|
-
@headers ||= {}
|
43
|
-
@headers[header] = value
|
44
|
-
apply_header(header, value)
|
45
|
-
end
|
46
|
-
|
47
|
-
def authorization(options = {})
|
48
|
-
@authorization = options
|
49
|
-
apply_authorization(options)
|
50
|
-
end
|
51
|
-
|
52
|
-
def operation_queue(operation_queue)
|
53
|
-
@operation_manager.operationQueue = operation_queue
|
54
|
-
end
|
55
|
-
|
56
|
-
OPERATION_TO_REQUEST_SERIALIZER = {
|
57
|
-
json: AFJSONRequestSerializer,
|
58
|
-
plist: AFPropertyListRequestSerializer
|
59
|
-
}
|
60
|
-
def request_serializer(serializer)
|
61
|
-
if serializer.is_a?(Symbol) || serializer.is_a?(String)
|
62
|
-
@operation_manager.requestSerializer = OPERATION_TO_REQUEST_SERIALIZER[serializer.to_sym].serializer
|
63
|
-
elsif serializer.is_a?(Class)
|
64
|
-
@operation_manager.requestSerializer = serializer.serializer
|
65
|
-
else
|
66
|
-
@operation_manager.requestSerializer = serializer
|
67
|
-
end
|
68
|
-
reapply_options
|
69
|
-
end
|
70
|
-
|
71
|
-
OPERATION_TO_RESPONSE_SERIALIZER = {
|
72
|
-
json: AFJSONResponseSerializer,
|
73
|
-
xml: AFXMLParserResponseSerializer,
|
74
|
-
plist: AFPropertyListResponseSerializer,
|
75
|
-
image: AFImageResponseSerializer,
|
76
|
-
http: AFHTTPResponseSerializer,
|
77
|
-
form: AFHTTPResponseSerializer
|
78
|
-
}
|
79
|
-
def response_serializer(serializer)
|
80
|
-
write_json_options = true
|
81
|
-
if serializer.is_a?(Symbol) || serializer.is_a?(String)
|
82
|
-
@operation_manager.responseSerializer = OPERATION_TO_RESPONSE_SERIALIZER[serializer.to_sym].serializer
|
83
|
-
elsif serializer.is_a?(Class)
|
84
|
-
@operation_manager.responseSerializer = serializer.serializer
|
85
|
-
else
|
86
|
-
@operation_manager.responseSerializer = serializer
|
87
|
-
write_json_options = false
|
88
|
-
end
|
89
|
-
af_serializer = @operation_manager.responseSerializer
|
90
|
-
if af_serializer.is_a?(AFJSONResponseSerializer) && write_json_options
|
91
|
-
af_serializer.readingOptions = NSJSONReadingMutableContainers
|
92
|
-
end
|
93
|
-
af_serializer
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def reapply_options
|
99
|
-
@headers.each{ |h,v| apply_header(h, v) } unless @headers.nil?
|
100
|
-
apply_authorization(@authorization) unless @authorization.nil?
|
101
|
-
end
|
102
|
-
|
103
|
-
def apply_header(header, value)
|
104
|
-
@operation_manager.headers[header] = value
|
105
|
-
end
|
106
|
-
|
107
|
-
def apply_authorization(options)
|
108
|
-
@operation_manager.requestSerializer.authorization = options
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class AFHTTPRequestOperationManager
|
115
|
-
include AFMotion::ClientShared
|
116
|
-
|
117
|
-
AFMotion::HTTP_METHODS.each do |method|
|
118
|
-
# EX client.get('my/resource.json')
|
119
|
-
define_method "#{method}", -> (path, parameters = nil, &callback) do
|
120
|
-
create_operation(method, path, parameters, &callback)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# options = {parameters: , constructingBodyWithBlock: , success:, failure:}
|
125
|
-
def PUT(url_string, options = {})
|
126
|
-
parameters = options[:parameters]
|
127
|
-
block = options[:constructingBodyWithBlock]
|
128
|
-
success = options[:success]
|
129
|
-
failure = options[:failure]
|
130
|
-
request = self.requestSerializer.multipartFormRequestWithMethod("PUT", URLString: NSURL.URLWithString(url_string, relativeToURL:self.baseURL).absoluteString, parameters: parameters, constructingBodyWithBlock:block)
|
131
|
-
operation = self.HTTPRequestOperationWithRequest(request, success:success, failure:failure)
|
132
|
-
self.operationQueue.addOperation(operation)
|
133
|
-
|
134
|
-
operation
|
135
|
-
end
|
136
|
-
end
|
data/spec/http_client_spec.rb
DELETED
@@ -1,225 +0,0 @@
|
|
1
|
-
describe "AFMotion::ClientDSL" do
|
2
|
-
before do
|
3
|
-
@client = AFHTTPRequestOperationManager.alloc.initWithBaseURL("http://url".to_url)
|
4
|
-
@dsl = AFMotion::ClientDSL.new(@client)
|
5
|
-
end
|
6
|
-
|
7
|
-
describe "#header" do
|
8
|
-
it "should set header" do
|
9
|
-
@dsl.header "Accept", "application/json"
|
10
|
-
@client.requestSerializer.HTTPRequestHeaders["Accept"].should == "application/json"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "#authorization" do
|
15
|
-
it "should set authorization" do
|
16
|
-
@dsl.authorization username: "clay", password: "test"
|
17
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].nil?.should == false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#request_serializer" do
|
22
|
-
it "should set request_serializer if provided type" do
|
23
|
-
@dsl.request_serializer AFJSONRequestSerializer
|
24
|
-
@client.requestSerializer.is_a?(AFJSONRequestSerializer).should == true
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should set request_serializer if provided string" do
|
28
|
-
[["json", AFJSONRequestSerializer], ["plist", AFPropertyListRequestSerializer]].each do |op, op_class|
|
29
|
-
@dsl.request_serializer op
|
30
|
-
@client.requestSerializer.is_a?(op_class).should == true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should retain header configuration" do
|
35
|
-
@dsl.header "X-Order", "agnostic"
|
36
|
-
@dsl.request_serializer :json
|
37
|
-
@client.requestSerializer.HTTPRequestHeaders["X-Order"].should == "agnostic"
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should retain authorization" do
|
41
|
-
@dsl.authorization username: "clay", password: "test"
|
42
|
-
@dsl.request_serializer :json
|
43
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].nil?.should == false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#response_serializer" do
|
48
|
-
it "should set response_serializer if provided type" do
|
49
|
-
@dsl.response_serializer AFJSONResponseSerializer
|
50
|
-
@client.responseSerializer.is_a?(AFJSONResponseSerializer).should == true
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should set response_serializer if provided string" do
|
54
|
-
[["json", AFJSONResponseSerializer],
|
55
|
-
["form", AFHTTPResponseSerializer],
|
56
|
-
["http", AFHTTPResponseSerializer],
|
57
|
-
["xml", AFXMLParserResponseSerializer],
|
58
|
-
["plist", AFPropertyListResponseSerializer],
|
59
|
-
["image", AFImageResponseSerializer]].each do |enc, enc_class|
|
60
|
-
@dsl.response_serializer enc
|
61
|
-
@client.responseSerializer.is_a?(enc_class).should == true
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should set mutable reading options for JSON serializer" do
|
66
|
-
@dsl.response_serializer :json
|
67
|
-
@client.responseSerializer.readingOptions.should == NSJSONReadingMutableContainers
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should not set reading options for JSON serializer if raw one supplied" do
|
71
|
-
@dsl.response_serializer AFJSONResponseSerializer.serializer
|
72
|
-
@client.responseSerializer.readingOptions.should.not == NSJSONReadingMutableContainers
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "AFMotion::Client" do
|
78
|
-
describe ".build" do
|
79
|
-
it "should return an AFHTTPRequestOperationManager" do
|
80
|
-
client = AFMotion::Client.build("http://url")
|
81
|
-
client.is_a?(AFHTTPRequestOperationManager).should == true
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe ".build_shared" do
|
86
|
-
it "should set AFMotion::Client.shared" do
|
87
|
-
client = AFMotion::Client.build_shared("http://url")
|
88
|
-
AFMotion::Client.shared.should == client
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should call progress when given to a chared client" do
|
92
|
-
image_path = "images/srpr/logo3w.png"
|
93
|
-
client = AFMotion::Client.build_shared("https://www.google.com/")
|
94
|
-
@progression = []
|
95
|
-
progress_block = Proc.new do |bytesRead, totalBytesRead, totalBytesExpectedToRead|
|
96
|
-
@progression << [bytesRead, totalBytesRead, totalBytesExpectedToRead]
|
97
|
-
end
|
98
|
-
|
99
|
-
client.get(image_path, {progress_block: progress_block}) do |result|
|
100
|
-
@result = result
|
101
|
-
resume
|
102
|
-
end
|
103
|
-
wait_max(10) do
|
104
|
-
@progression.empty?.should == false
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "AFHTTPClient" do
|
111
|
-
before do
|
112
|
-
@client = AFHTTPRequestOperationManager.alloc.initWithBaseURL("http://google.com/".to_url)
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "URL Helpers" do
|
116
|
-
it "should exist" do
|
117
|
-
AFMotion::HTTP_METHODS.each do |method|
|
118
|
-
@client.respond_to?(method).should == true
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# Pretty basic test
|
124
|
-
it "should work" do
|
125
|
-
@result = nil
|
126
|
-
@client.get("") do |result|
|
127
|
-
@result = result
|
128
|
-
resume
|
129
|
-
end
|
130
|
-
wait_max(10) do
|
131
|
-
@result.nil?.should == false
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "#authorization=" do
|
136
|
-
it "should set basic auth" do
|
137
|
-
@client.authorization = {username: "clay", password: "pass"}
|
138
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].split[0].should == "Basic"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe "#build_shared" do
|
143
|
-
it "should set AFMotion::Client.shared" do
|
144
|
-
@client.authorization = {token: "clay"}
|
145
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].split[0].should == "Token"
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
describe "#headers" do
|
150
|
-
describe "#[]" do
|
151
|
-
it "should return a header" do
|
152
|
-
@client.requestSerializer.setValue("test_value", forHTTPHeaderField: "test")
|
153
|
-
@client.headers["test"].should == "test_value"
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
describe "#[]=" do
|
158
|
-
it "should set a header" do
|
159
|
-
@client.headers["test"] = "test_set_value"
|
160
|
-
@client.requestSerializer.HTTPRequestHeaders["test"].should == "test_set_value"
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe "#delete" do
|
165
|
-
it "should remove a header" do
|
166
|
-
@client.requestSerializer.setValue("test_value", forHTTPHeaderField: "test")
|
167
|
-
@client.headers.delete("test").should == "test_value"
|
168
|
-
@client.requestSerializer.HTTPRequestHeaders["test"].should == nil
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
["multipart_post", "multipart_put"].each do |multipart_method|
|
174
|
-
describe "##{multipart_method}" do
|
175
|
-
it "should trigger multipart request" do
|
176
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data|
|
177
|
-
@result = result
|
178
|
-
resume if result
|
179
|
-
end
|
180
|
-
|
181
|
-
wait_max(10) do
|
182
|
-
@result.should.not == nil
|
183
|
-
@result.operation.request.valueForHTTPHeaderField("Content-Type").include?("multipart/form-data").should == true
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
it "should work with form data" do
|
188
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data|
|
189
|
-
if result
|
190
|
-
resume
|
191
|
-
else
|
192
|
-
@form_data = form_data
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
wait_max(10) do
|
197
|
-
@form_data.should.not == nil
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should have upload callback with raw progress" do
|
202
|
-
image = UIImage.imageNamed("test")
|
203
|
-
@data = UIImagePNGRepresentation(image)
|
204
|
-
@file_added = false
|
205
|
-
@client = AFHTTPRequestOperationManager.alloc.initWithBaseURL("http://bing.com/".to_url)
|
206
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data, progress|
|
207
|
-
if form_data
|
208
|
-
@file_added = true
|
209
|
-
form_data.appendPartWithFileData(@data, name: "test", fileName:"test.png", mimeType: "image/png")
|
210
|
-
elsif progress
|
211
|
-
@progress ||= progress
|
212
|
-
elsif result
|
213
|
-
resume
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
wait_max(20) do
|
218
|
-
@file_added.should == true
|
219
|
-
@progress.should <= 1.0
|
220
|
-
@progress.should.not == nil
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|