afmotion 2.2.0 → 3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/Gemfile.lock
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
afmotion (2.2.0)
|
5
|
-
motion-cocoapods (>= 1.4.1)
|
6
|
-
motion-require (>= 0.1)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activesupport (3.2.18)
|
12
|
-
i18n (~> 0.6, >= 0.6.4)
|
13
|
-
multi_json (~> 1.0)
|
14
|
-
claide (0.6.1)
|
15
|
-
cocoapods (0.33.1)
|
16
|
-
activesupport (>= 3.2.15, < 4)
|
17
|
-
claide (~> 0.6.1)
|
18
|
-
cocoapods-core (= 0.33.1)
|
19
|
-
cocoapods-downloader (~> 0.6.1)
|
20
|
-
cocoapods-plugins (~> 0.2.0)
|
21
|
-
cocoapods-trunk (~> 0.1.1)
|
22
|
-
cocoapods-try (~> 0.3.0)
|
23
|
-
colored (~> 1.2)
|
24
|
-
escape (~> 0.0.4)
|
25
|
-
json_pure (~> 1.8)
|
26
|
-
nap (~> 0.7)
|
27
|
-
open4 (~> 1.3)
|
28
|
-
xcodeproj (~> 0.17.0)
|
29
|
-
cocoapods-core (0.33.1)
|
30
|
-
activesupport (>= 3.2.15)
|
31
|
-
fuzzy_match (~> 2.0.4)
|
32
|
-
json_pure (~> 1.8)
|
33
|
-
nap (~> 0.5)
|
34
|
-
cocoapods-downloader (0.6.1)
|
35
|
-
cocoapods-plugins (0.2.0)
|
36
|
-
nap
|
37
|
-
cocoapods-trunk (0.1.3)
|
38
|
-
json_pure (~> 1.8)
|
39
|
-
nap (>= 0.6)
|
40
|
-
netrc
|
41
|
-
cocoapods-try (0.3.0)
|
42
|
-
colored (1.2)
|
43
|
-
escape (0.0.4)
|
44
|
-
fuzzy_match (2.0.4)
|
45
|
-
i18n (0.6.9)
|
46
|
-
json_pure (1.8.1)
|
47
|
-
motion-cocoapods (1.5.0)
|
48
|
-
cocoapods (>= 0.32.1)
|
49
|
-
motion-require (0.2.0)
|
50
|
-
multi_json (1.10.1)
|
51
|
-
nap (0.7.0)
|
52
|
-
netrc (0.7.7)
|
53
|
-
open4 (1.3.4)
|
54
|
-
rake (10.1.0)
|
55
|
-
xcodeproj (0.17.0)
|
56
|
-
activesupport (~> 3.0)
|
57
|
-
colored (~> 1.2)
|
58
|
-
|
59
|
-
PLATFORMS
|
60
|
-
ruby
|
61
|
-
|
62
|
-
DEPENDENCIES
|
63
|
-
afmotion!
|
64
|
-
rake
|
data/lib/afmotion/http_client.rb
DELETED
@@ -1,109 +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
|
-
@operation_manager.headers[header] = value
|
43
|
-
end
|
44
|
-
|
45
|
-
def authorization(options = {})
|
46
|
-
@operation_manager.requestSerializer.authorization = options
|
47
|
-
end
|
48
|
-
|
49
|
-
def operation_queue(operation_queue)
|
50
|
-
@operation_manager.operationQueue = operation_queue
|
51
|
-
end
|
52
|
-
|
53
|
-
OPERATION_TO_REQUEST_SERIALIZER = {
|
54
|
-
json: AFJSONRequestSerializer,
|
55
|
-
plist: AFPropertyListRequestSerializer
|
56
|
-
}
|
57
|
-
def request_serializer(serializer)
|
58
|
-
if serializer.is_a?(Symbol) || serializer.is_a?(String)
|
59
|
-
@operation_manager.requestSerializer = OPERATION_TO_REQUEST_SERIALIZER[serializer.to_sym].serializer
|
60
|
-
elsif serializer.is_a?(Class)
|
61
|
-
@operation_manager.requestSerializer = serializer.serializer
|
62
|
-
else
|
63
|
-
@operation_manager.requestSerializer = serializer
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
OPERATION_TO_RESPONSE_SERIALIZER = {
|
68
|
-
json: AFJSONResponseSerializer,
|
69
|
-
xml: AFXMLParserResponseSerializer,
|
70
|
-
plist: AFPropertyListResponseSerializer,
|
71
|
-
image: AFImageResponseSerializer,
|
72
|
-
http: AFHTTPResponseSerializer,
|
73
|
-
form: AFHTTPResponseSerializer
|
74
|
-
}
|
75
|
-
def response_serializer(serializer)
|
76
|
-
if serializer.is_a?(Symbol) || serializer.is_a?(String)
|
77
|
-
@operation_manager.responseSerializer = OPERATION_TO_RESPONSE_SERIALIZER[serializer.to_sym].serializer
|
78
|
-
elsif serializer.is_a?(Class)
|
79
|
-
@operation_manager.responseSerializer = serializer.serializer
|
80
|
-
else
|
81
|
-
@operation_manager.responseSerializer = serializer
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class AFHTTPRequestOperationManager
|
88
|
-
include AFMotion::ClientShared
|
89
|
-
|
90
|
-
AFMotion::HTTP_METHODS.each do |method|
|
91
|
-
# EX client.get('my/resource.json')
|
92
|
-
define_method "#{method}", -> (path, parameters = {}, &callback) do
|
93
|
-
create_operation(method, path, parameters, &callback)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# options = {parameters: , constructingBodyWithBlock: , success:, failure:}
|
98
|
-
def PUT(url_string, options = {})
|
99
|
-
parameters = options[:parameters]
|
100
|
-
block = options[:constructingBodyWithBlock]
|
101
|
-
success = options[:success]
|
102
|
-
failure = options[:failure]
|
103
|
-
request = self.requestSerializer.multipartFormRequestWithMethod("PUT", URLString: NSURL.URLWithString(url_string, relativeToURL:self.baseURL).absoluteString, parameters: parameters, constructingBodyWithBlock:block)
|
104
|
-
operation = self.HTTPRequestOperationWithRequest(request, success:success, failure:failure)
|
105
|
-
self.operationQueue.addOperation(operation)
|
106
|
-
|
107
|
-
operation
|
108
|
-
end
|
109
|
-
end
|
data/spec/http_client_spec.rb
DELETED
@@ -1,186 +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
|
-
end
|
34
|
-
|
35
|
-
describe "#response_serializer" do
|
36
|
-
it "should set response_serializer if provided type" do
|
37
|
-
@dsl.response_serializer AFJSONResponseSerializer
|
38
|
-
@client.responseSerializer.is_a?(AFJSONResponseSerializer).should == true
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should set response_serializer if provided string" do
|
42
|
-
[["json", AFJSONResponseSerializer],
|
43
|
-
["form", AFHTTPResponseSerializer],
|
44
|
-
["http", AFHTTPResponseSerializer],
|
45
|
-
["xml", AFXMLParserResponseSerializer],
|
46
|
-
["plist", AFPropertyListResponseSerializer],
|
47
|
-
["image", AFImageResponseSerializer]].each do |enc, enc_class|
|
48
|
-
@dsl.response_serializer enc
|
49
|
-
@client.responseSerializer.is_a?(enc_class).should == true
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "AFMotion::Client" do
|
56
|
-
describe ".build" do
|
57
|
-
it "should return an AFHTTPRequestOperationManager" do
|
58
|
-
client = AFMotion::Client.build("http://url")
|
59
|
-
client.is_a?(AFHTTPRequestOperationManager).should == true
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe ".build_shared" do
|
64
|
-
it "should set AFMotion::Client.shared" do
|
65
|
-
client = AFMotion::Client.build_shared("http://url")
|
66
|
-
AFMotion::Client.shared.should == client
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "AFHTTPClient" do
|
72
|
-
before do
|
73
|
-
@client = AFHTTPRequestOperationManager.alloc.initWithBaseURL("http://google.com/".to_url)
|
74
|
-
end
|
75
|
-
|
76
|
-
describe "URL Helpers" do
|
77
|
-
it "should exist" do
|
78
|
-
AFMotion::HTTP_METHODS.each do |method|
|
79
|
-
@client.respond_to?(method).should == true
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# Pretty basic test
|
85
|
-
it "should work" do
|
86
|
-
@result = nil
|
87
|
-
@client.get("") do |result|
|
88
|
-
@result = result
|
89
|
-
resume
|
90
|
-
end
|
91
|
-
wait_max(10) do
|
92
|
-
@result.nil?.should == false
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "#authorization=" do
|
97
|
-
it "should set basic auth" do
|
98
|
-
@client.authorization = {username: "clay", password: "pass"}
|
99
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].split[0].should == "Basic"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "#build_shared" do
|
104
|
-
it "should set AFMotion::Client.shared" do
|
105
|
-
@client.authorization = {token: "clay"}
|
106
|
-
@client.requestSerializer.HTTPRequestHeaders["Authorization"].split[0].should == "Token"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "#headers" do
|
111
|
-
describe "#[]" do
|
112
|
-
it "should return a header" do
|
113
|
-
@client.requestSerializer.setValue("test_value", forHTTPHeaderField: "test")
|
114
|
-
@client.headers["test"].should == "test_value"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe "#[]=" do
|
119
|
-
it "should set a header" do
|
120
|
-
@client.headers["test"] = "test_set_value"
|
121
|
-
@client.requestSerializer.HTTPRequestHeaders["test"].should == "test_set_value"
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe "#delete" do
|
126
|
-
it "should remove a header" do
|
127
|
-
@client.requestSerializer.setValue("test_value", forHTTPHeaderField: "test")
|
128
|
-
@client.headers.delete("test").should == "test_value"
|
129
|
-
@client.requestSerializer.HTTPRequestHeaders["test"].should == nil
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
["multipart_post", "multipart_put"].each do |multipart_method|
|
135
|
-
describe "##{multipart_method}" do
|
136
|
-
it "should trigger multipart request" do
|
137
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data|
|
138
|
-
@result = result
|
139
|
-
resume if result
|
140
|
-
end
|
141
|
-
|
142
|
-
wait_max(10) do
|
143
|
-
@result.should.not == nil
|
144
|
-
@result.operation.request.valueForHTTPHeaderField("Content-Type").include?("multipart/form-data").should == true
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
it "should work with form data" do
|
149
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data|
|
150
|
-
if result
|
151
|
-
resume
|
152
|
-
else
|
153
|
-
@form_data = form_data
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
wait_max(10) do
|
158
|
-
@form_data.should.not == nil
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
it "should have upload callback with raw progress" do
|
163
|
-
image = UIImage.imageNamed("test")
|
164
|
-
@data = UIImagePNGRepresentation(image)
|
165
|
-
@file_added = false
|
166
|
-
@client = AFHTTPRequestOperationManager.alloc.initWithBaseURL("http://bing.com/".to_url)
|
167
|
-
@client.send(multipart_method, "", test: "Herp") do |result, form_data, progress|
|
168
|
-
if form_data
|
169
|
-
@file_added = true
|
170
|
-
form_data.appendPartWithFileData(@data, name: "test", fileName:"test.png", mimeType: "image/png")
|
171
|
-
elsif progress
|
172
|
-
@progress ||= progress
|
173
|
-
elsif result
|
174
|
-
resume
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
wait_max(20) do
|
179
|
-
@file_added.should == true
|
180
|
-
@progress.should <= 1.0
|
181
|
-
@progress.should.not == nil
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|