bubble-wrap 1.1.0 → 1.1.1

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.1.1
2
+
3
+ * Fixed a bug with the way JSON payloads were handled in the HTTP
4
+ wrapper.
5
+ * Improved the RSSParser by providing a delegate to handle errors.
6
+ * Added support for symbols as selectors to the KVO module.
7
+ * Fixed a bug with the way the headers and content types were handled in
8
+ the HTTP wrapper.
9
+
1
10
  ## 1.1.0
2
11
 
3
12
  [Commit history](https://github.com/rubymotion/BubbleWrap/compare/1.0...1.1])
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bubble-wrap (1.1.0)
4
+ bubble-wrap (1.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -291,13 +291,13 @@ class ExampleViewController < UIViewController
291
291
  @label.text = ""
292
292
  view.addSubview @label
293
293
 
294
- observe(@label, "text") do |old_value, new_value|
294
+ observe(@label, :text) do |old_value, new_value|
295
295
  puts "Hello from viewDidLoad!"
296
296
  end
297
297
  end
298
298
 
299
299
  def viewDidAppear(animated)
300
- observe(@label, "text") do |old_value, new_value|
300
+ observe(@label, :text) do |old_value, new_value|
301
301
  puts "Hello from viewDidAppear!"
302
302
  end
303
303
  end
@@ -1,3 +1,3 @@
1
1
  module BubbleWrap
2
- VERSION = '1.1.0' unless defined?(BubbleWrap::VERSION)
2
+ VERSION = '1.1.1' unless defined?(BubbleWrap::VERSION)
3
3
  end
data/motion/core.rb CHANGED
@@ -22,9 +22,7 @@ module BubbleWrap
22
22
 
23
23
  def create_uuid
24
24
  uuid = CFUUIDCreate(nil)
25
- uuid_string = CFUUIDCreateString(nil, uuid)
26
- CFRelease(uuid)
27
- uuid_string
25
+ CFUUIDCreateString(nil, uuid)
28
26
  end
29
-
27
+
30
28
  end
data/motion/core/kvo.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  # Usage example:
2
2
  #
3
3
  # class ExampleViewController < UIViewController
4
- # include BW::KVO
4
+ # include BubbleWrap::KVO
5
5
  #
6
6
  # def viewDidLoad
7
7
  # @label = UILabel.alloc.initWithFrame [[20,20],[280,44]]
8
8
  # @label.text = ""
9
9
  # view.addSubview @label
10
10
  #
11
- # observe(@label, "text") do |old_value, new_value|
11
+ # observe(@label, :text) do |old_value, new_value|
12
12
  # puts "Changed #{old_value} to #{new_value}"
13
13
  # end
14
14
  # end
@@ -48,7 +48,7 @@ module BubbleWrap
48
48
 
49
49
  private
50
50
  def registered?(target, key_path)
51
- !@targets.nil? && !@targets[target].nil? && @targets[target].has_key?(key_path)
51
+ !@targets.nil? && !@targets[target].nil? && @targets[target].has_key?(key_path.to_s)
52
52
  end
53
53
 
54
54
  def add_observer_block(target, key_path, &block)
@@ -56,16 +56,16 @@ module BubbleWrap
56
56
 
57
57
  @targets ||= {}
58
58
  @targets[target] ||= {}
59
- @targets[target][key_path] ||= []
60
- @targets[target][key_path] << block
59
+ @targets[target][key_path.to_s] ||= []
60
+ @targets[target][key_path.to_s] << block
61
61
  end
62
62
 
63
63
  def remove_observer_block(target, key_path)
64
64
  return if @targets.nil? || target.nil? || key_path.nil?
65
65
 
66
66
  key_paths = @targets[target]
67
- if !key_paths.nil? && key_paths.has_key?(key_path)
68
- key_paths.delete(key_path)
67
+ if !key_paths.nil? && key_paths.has_key?(key_path.to_s)
68
+ key_paths.delete(key_path.to_s)
69
69
  end
70
70
  end
71
71
 
@@ -8,17 +8,17 @@ module BubbleWrap
8
8
  end
9
9
 
10
10
  def []=(key, value)
11
- storage.setObject(value, forKey: storage_key(key.to_s))
11
+ storage.setObject(value, forKey: storage_key(key))
12
12
  storage.synchronize
13
13
  end
14
14
 
15
15
  def [](key)
16
- storage.objectForKey storage_key(key.to_s)
16
+ storage.objectForKey storage_key(key)
17
17
  end
18
18
 
19
19
  def merge(values)
20
20
  values.each do |key, value|
21
- storage.setObject(value, forKey: storage_key(key.to_s))
21
+ storage.setObject(value, forKey: storage_key(key))
22
22
  end
23
23
  storage.synchronize
24
24
  end
data/motion/http.rb CHANGED
@@ -22,19 +22,19 @@ module BubbleWrap
22
22
  options[:action] = block if block_given?
23
23
  HTTP::Query.new(url, :get, options)
24
24
  end
25
-
25
+
26
26
  # Make a POST request
27
27
  def self.post(url, options={}, &block)
28
28
  options[:action] = block if block_given?
29
29
  HTTP::Query.new(url, :post, options)
30
30
  end
31
-
31
+
32
32
  # Make a PUT request
33
33
  def self.put(url, options={}, &block)
34
34
  options[:action] = block if block_given?
35
35
  HTTP::Query.new(url, :put, options)
36
36
  end
37
-
37
+
38
38
  # Make a DELETE request
39
39
  def self.delete(url, options={}, &block)
40
40
  options[:action] = block if block_given?
@@ -155,7 +155,9 @@ Cache policy: #{@cache_policy}, response: #{@response.inspect} >"
155
155
  end
156
156
 
157
157
  def connection(connection, willSendRequest:request, redirectResponse:redirect_response)
158
- log "HTTP redirected info: #{request} - #{self.description}"
158
+ @redirection ||= 0
159
+ @redirection += 1
160
+ log "##{@redirection} HTTP redirection: #{request} - #{self.description}"
159
161
  new_request = request.mutableCopy
160
162
  # new_request.setValue(@credentials.inspect, forHTTPHeaderField:'Authorization') # disabled while we figure this one out
161
163
  new_request.setAllHTTPHeaderFields(@headers) if @headers
@@ -218,14 +220,23 @@ Cache policy: #{@cache_policy}, response: #{@response.inspect} >"
218
220
  def create_request_body
219
221
  return nil if (@method == "GET" || @method == "HEAD")
220
222
  return nil unless (@payload || @files)
221
- @headers = {"Content-Type" => "multipart/form-data; boundary=#{@boundary}"} if @headers.nil?
223
+
224
+ # if no headers provided, set content-type automatically
225
+ if @headers.nil?
226
+ @headers = {"Content-Type" => "multipart/form-data; boundary=#{@boundary}"}
227
+ # else set content type unless it is specified
228
+ # if content-type is specified, you should probably also specify
229
+ # the :boundary key
230
+ else
231
+ @headers['Content-Type'] = "multipart/form-data; boundary=#{@boundary}" unless @headers.keys.find {|k| k.downcase == 'content-type'}
232
+ end
222
233
 
223
234
  body = NSMutableData.data
224
235
 
225
236
  append_payload(body) if @payload
226
237
  append_files(body) if @files
227
- body.appendData("\r\n--#{@boundary}--\r\n".dataUsingEncoding NSUTF8StringEncoding)
228
-
238
+ append_body_boundary(body) if @set_body_to_close_boundary
239
+
229
240
  log "Built HTTP body: \n #{body.to_str}"
230
241
  body
231
242
  end
@@ -236,17 +247,25 @@ Cache policy: #{@cache_policy}, response: #{@response.inspect} >"
236
247
  else
237
248
  append_form_params(body)
238
249
  end
250
+ body
239
251
  end
240
252
 
241
253
  def append_form_params(body)
242
- @payload.each do |key, value|
243
- form_data = NSMutableData.new
244
- s = "\r\n--#{@boundary}\r\n"
245
- s += "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
246
- s += value.to_s
247
- form_data.appendData(s.dataUsingEncoding NSUTF8StringEncoding)
248
- body.appendData(form_data)
254
+ # puts "*** append_form #{@payload}"
255
+ if @payload.is_a?(String)
256
+ body.appendData(@payload.dataUsingEncoding NSUTF8StringEncoding)
257
+ else
258
+ @payload.each do |key, value|
259
+ form_data = NSMutableData.new
260
+ s = "\r\n--#{@boundary}\r\n"
261
+ s += "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
262
+ s += value.to_s
263
+ form_data.appendData(s.dataUsingEncoding NSUTF8StringEncoding)
264
+ body.appendData(form_data)
265
+ end
266
+ @set_body_to_close_boundary = true
249
267
  end
268
+ body
250
269
  end
251
270
 
252
271
  def append_files(body)
@@ -259,6 +278,12 @@ Cache policy: #{@cache_policy}, response: #{@response.inspect} >"
259
278
  file_data.appendData(value)
260
279
  body.appendData(file_data)
261
280
  end
281
+ @set_body_to_close_boundary = true
282
+ body
283
+ end
284
+
285
+ def append_body_boundary(body)
286
+ body.appendData("\r\n--#{@boundary}--\r\n".dataUsingEncoding NSUTF8StringEncoding)
262
287
  end
263
288
 
264
289
  def create_url(url_string)
@@ -301,14 +326,14 @@ Cache policy: #{@cache_policy}, response: #{@response.inspect} >"
301
326
  def escape_line_feeds(hash)
302
327
  return nil if hash.nil?
303
328
  escaped_hash = {}
304
-
329
+
305
330
  hash.each{|k,v| escaped_hash[k] = v.gsub("\n", '\\n') }
306
331
  escaped_hash
307
332
  end
308
333
 
309
334
  def patch_nsurl_request(request)
310
335
  request.instance_variable_set("@done_loading", false)
311
-
336
+
312
337
  def request.done_loading; @done_loading; end
313
338
  def request.done_loading!; @done_loading = true; end
314
339
  end
data/motion/rss_parser.rb CHANGED
@@ -5,6 +5,7 @@
5
5
  # def when_parser_initializes; end
6
6
  # def when_parser_parses; end
7
7
  # def when_parser_is_done; end
8
+ # def when_parser_errors; end
8
9
  #
9
10
  # @see https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html
10
11
  #
@@ -21,7 +22,7 @@
21
22
  module BubbleWrap
22
23
  class RSSParser
23
24
 
24
- attr_accessor :parser, :source, :doc, :debug, :delegate
25
+ attr_accessor :parser, :source, :doc, :debug, :delegate, :parser_error
25
26
  attr_reader :state
26
27
 
27
28
  # RSSItem is a simple class that holds all of RSS items.
@@ -84,8 +85,8 @@ module BubbleWrap
84
85
 
85
86
  # Delegate getting called when parsing starts
86
87
  def parserDidStartDocument(parser)
87
- self.state = :parses
88
88
  puts "starting parsing.." if debug
89
+ self.state = :parses
89
90
  end
90
91
 
91
92
  # Delegate being called when an element starts being processed
@@ -97,33 +98,45 @@ module BubbleWrap
97
98
  end
98
99
  @current_element = element
99
100
  end
100
-
101
+
101
102
  # as the parser finds characters, this method is being called
102
103
  def parser(parser, foundCharacters:string)
103
104
  if @current_element && @current_item && @current_item.respond_to?(@current_element)
104
- el = @current_item.send(@current_element)
105
+ el = @current_item.send(@current_element)
105
106
  el << string if el.respond_to?(:<<)
106
107
  end
107
108
  end
108
-
109
+
109
110
  # method called when an element is done being parsed
110
111
  def parser(parser, didEndElement:element, namespaceURI:uri, qualifiedName:name)
111
112
  if element == 'item'
112
113
  @block.call(@current_item) if @block
113
- else
114
+ else
114
115
  @current_element = nil
115
116
  end
116
117
  end
117
-
118
+
119
+ # method called when the parser encounters an error
120
+ # error can be retrieved with parserError
121
+ def parser(parser, parseErrorOccurred:parse_error)
122
+ puts "parseErrorOccurred" if debug
123
+ @parse_error = parse_error
124
+
125
+ self.state = :errors
126
+ end
127
+
118
128
  # delegate getting called when the parsing is done
119
129
  # If a block was set, it will be called on each parsed items
120
130
  def parserDidEndDocument(parser)
121
- self.state = :is_done
122
131
  puts "done parsing" if debug
132
+ self.state = :is_done
133
+ end
134
+
135
+ def parserError
136
+ @parser_error || @parser.parserError
123
137
  end
124
138
 
125
139
  # TODO: implement
126
- # parser:parseErrorOccurred:
127
140
  # parser:validationErrorOccurred:
128
141
  # parser:foundCDATA:
129
142
 
@@ -1,7 +1,7 @@
1
- describe "KVOHelper" do
1
+ describe BubbleWrap::KVO do
2
2
 
3
3
  class KvoExample
4
- include BW::KVO
4
+ include BubbleWrap::KVO
5
5
 
6
6
  attr_accessor :label
7
7
  attr_accessor :items
@@ -16,15 +16,15 @@ describe "KVOHelper" do
16
16
  # Test helper
17
17
 
18
18
  def observe_label(&block)
19
- observe(@label, "text", &block)
19
+ observe(@label, :text, &block)
20
20
  end
21
21
 
22
22
  def observe_collection(&block)
23
- observe(self, "items", &block)
23
+ observe(self, :items, &block)
24
24
  end
25
25
 
26
26
  def unobserve_label
27
- unobserve(@label, "text")
27
+ unobserve(@label, :text)
28
28
  end
29
29
 
30
30
  # def unobserve_all
@@ -34,7 +34,6 @@ describe "KVOHelper" do
34
34
 
35
35
  end
36
36
 
37
-
38
37
  describe "Callbacks" do
39
38
  before do
40
39
  @example = KvoExample.new
@@ -104,8 +104,7 @@ describe BubbleWrap::String do
104
104
  end
105
105
  end
106
106
 
107
- describe "A UIColor should not be created from an invalid String wuth" do
108
-
107
+ describe "A UIColor should not be created from an invalid String" do
109
108
 
110
109
  it "an invalid hex color" do
111
110
  should.raise( ArgumentError ) {
@@ -118,7 +117,6 @@ describe BubbleWrap::String do
118
117
  'FFFF'.to_color
119
118
  }
120
119
  end
121
-
122
120
 
123
121
  end
124
122
  end
@@ -1,17 +1,16 @@
1
1
  describe "Time" do
2
2
 
3
- describe "Caching the date formatter" do
3
+ describe "Caching the date formatter" do
4
4
 
5
- it "should reuse the created formatter" do
6
- #this is a bad test, relies on implementation.
7
- #I'll rewrite it when the better idea comes on my mind..
8
- 100.times do
9
- Time.iso8601("2011-04-11T13:22:21Z")
10
- end
11
- Thread.current[:date_formatters].count.should.equal 1
12
- Thread.current[:date_formatters]["yyyy-MM-dd'T'HH:mm:ss'Z'"].should.not.equal nil
5
+ it "should reuse the created formatter" do
6
+ 100.times do
7
+ Time.iso8601("2011-04-11T13:22:21Z")
13
8
  end
14
9
 
10
+ Thread.current[:date_formatters].count.should.equal 1
11
+ Thread.current[:date_formatters]["yyyy-MM-dd'T'HH:mm:ss'Z'"].should.not.equal nil
12
+ end
13
+
15
14
  end
16
15
 
17
16
 
@@ -24,9 +23,10 @@ describe "Time" do
24
23
  @time.instance_of?(Time).should == true
25
24
  end
26
25
 
27
- it "should be converted to the local timezone automatically" do
28
- @time.zone.should == Time.now.zone
29
- end
26
+ # # Crashes Buggy RubyMotion 1.18
27
+ # it "should be converted to the local timezone automatically" do
28
+ # @time.zone.should == Time.now.zone
29
+ # end
30
30
 
31
31
  it "should have a valid year" do
32
32
  @time.utc.year.should == 2012
@@ -22,13 +22,13 @@ describe "HTTP" do
22
22
  end
23
23
 
24
24
  it ".get .post .put .delete .head .patch should properly generate the HTTP::Query" do
25
- [:get, :post, :put, :delete, :head, :patch].each do |method|
25
+ [:get, :post, :put, :delete, :head, :patch].each do |method|
26
26
  test_http_method method
27
27
  end
28
28
  end
29
29
 
30
30
  it "uses the block instead of action passed in " do
31
- [:get, :post, :put, :delete, :head, :patch].each do |method|
31
+ [:get, :post, :put, :delete, :head, :patch].each do |method|
32
32
  called = false
33
33
  expected_delegator = Proc.new {|response| called = true }
34
34
 
@@ -36,7 +36,7 @@ describe "HTTP" do
36
36
  query.instance_variable_get(:@delegator).should.equal expected_delegator
37
37
  query.connectionDidFinishLoading(query.connection)
38
38
  called.should.equal true
39
- end
39
+ end
40
40
  end
41
41
 
42
42
  # [:get, :post, :put, :delete, :head, :patch].each do |verb|
@@ -100,8 +100,8 @@ describe "HTTP" do
100
100
 
101
101
  before do
102
102
  @credentials = { username: 'mneorr', password: '123456xx!@crazy' }
103
- @payload = {
104
- user: { name: 'marin', surname: 'usalj' },
103
+ @payload = {
104
+ user: { name: 'marin', surname: 'usalj' },
105
105
  twitter: '@mneorr',
106
106
  website: 'mneorr.com',
107
107
  values: ['apple', 'orange', 'peach'],
@@ -112,15 +112,15 @@ describe "HTTP" do
112
112
  @leftover_option = 'trololo'
113
113
  @headers = { 'User-Agent' => "Mozilla/5.0 (X11; Linux x86_64; rv:12.0) \n Gecko/20100101 Firefox/12.0" }
114
114
  @files = {
115
- fake_file: NSJSONSerialization.dataWithJSONObject({ fake: 'json' }, options:0, error:nil),
115
+ fake_file: NSJSONSerialization.dataWithJSONObject({ fake: 'json' }, options:0, error:nil),
116
116
  empty_file: NSMutableData.data
117
117
  }
118
- @options = {
119
- action: @action,
118
+ @options = {
119
+ action: @action,
120
120
  files: @files,
121
- payload: @payload,
122
- credentials: @credentials,
123
- headers: @headers,
121
+ payload: @payload,
122
+ credentials: @credentials,
123
+ headers: @headers,
124
124
  cache_policy: @cache_policy,
125
125
  leftover_option: @leftover_option
126
126
  }
@@ -152,7 +152,7 @@ describe "HTTP" do
152
152
  @query.instance_variable_get(:@delegator).should.equal @action
153
153
  @options.should.not.has_key? :action
154
154
  end
155
-
155
+
156
156
  it "sets the files to instance variable" do
157
157
  @query.instance_variable_get(:@files).should.equal @files
158
158
  @options.should.not.has_key? :files
@@ -190,36 +190,38 @@ describe "HTTP" do
190
190
  @query.instance_variable_get(:@payload).should.equal payload
191
191
  @options.should.not.has_key? :payload
192
192
  end
193
-
193
+
194
194
  it "should check if @payload is a hash before generating GET params" do
195
195
  query_string_payload = BubbleWrap::HTTP::Query.new( 'nil' , :get, { payload: "name=apple&model=macbook"} )
196
196
  query_string_payload.instance_variable_get(:@payload).should.equal 'name=apple&model=macbook'
197
197
  end
198
198
 
199
199
  it "should check if payload is nil" do
200
- lambda{
201
- BubbleWrap::HTTP::Query.new( 'nil' , :post, {} )
202
- }.should.not.raise NoMethodError
203
- end
200
+ lambda{
201
+ BubbleWrap::HTTP::Query.new( 'nil' , :post, {} )
202
+ }.should.not.raise NoMethodError
203
+ end
204
204
 
205
205
  it "should set the payload in URL only for GET and HEAD requests" do
206
206
  [:post, :put, :delete, :patch].each do |method|
207
207
  query = BubbleWrap::HTTP::Query.new( @localhost_url , method, { payload: @payload } )
208
208
  query.instance_variable_get(:@url).description.should.equal @localhost_url
209
- end
209
+ end
210
210
 
211
211
  payload = {name: 'marin'}
212
212
  [:get, :head].each do |method|
213
213
  query = BubbleWrap::HTTP::Query.new( @localhost_url , method, { payload: payload } )
214
214
  query.instance_variable_get(:@url).description.should.equal "#{@localhost_url}?name=marin"
215
- end
215
+ end
216
216
  end
217
217
 
218
218
  it "sets the HTTPBody DATA to @request for all methods except GET and HEAD" do
219
219
  payload = { name: 'apple', model: 'macbook'}
220
220
  files = { twitter: sample_data, site: "mneorr.com".dataUsingEncoding(NSUTF8StringEncoding) }
221
221
 
222
+ puts "\n"
222
223
  [:post, :put, :delete, :patch].each do |method|
224
+ puts " - #{method}\n"
223
225
  query = BubbleWrap::HTTP::Query.new( 'nil' , method, { payload: payload, files: files } )
224
226
  uuid = query.instance_variable_get(:@boundary)
225
227
  real_payload = NSString.alloc.initWithData(query.request.HTTPBody, encoding:NSUTF8StringEncoding)
@@ -227,6 +229,7 @@ describe "HTTP" do
227
229
  end
228
230
 
229
231
  [:get, :head].each do |method|
232
+ puts " - #{method}\n"
230
233
  query = BubbleWrap::HTTP::Query.new( 'nil' , method, { payload: payload } )
231
234
  real_payload = NSString.alloc.initWithData(query.request.HTTPBody, encoding:NSUTF8StringEncoding)
232
235
  real_payload.should.be.empty
@@ -238,6 +241,17 @@ describe "HTTP" do
238
241
  lambda { query = create_query(data, nil) }.should.not.raise NoMethodError
239
242
  end
240
243
 
244
+ it "sets the payload as a string if JSON" do
245
+ json = BW::JSON.generate({foo:42, bar:'BubbleWrap'})
246
+ puts "\n"
247
+ [:put, :post, :delete, :patch].each do |method|
248
+ puts " - #{method}\n"
249
+ query = BubbleWrap::HTTP::Query.new( 'nil' , method, { payload: json } )
250
+ set_payload = NSString.alloc.initWithData(query.request.HTTPBody, encoding:NSUTF8StringEncoding)
251
+ set_payload.should.equal json
252
+ end
253
+ end
254
+
241
255
  end
242
256
 
243
257
  it "should set default timeout to 30s or the one from hash" do
@@ -287,7 +301,7 @@ describe "HTTP" do
287
301
 
288
302
  it "should turn on the network indicator" do
289
303
  UIApplication.sharedApplication.isNetworkActivityIndicatorVisible.should.equal true
290
- end
304
+ end
291
305
 
292
306
  end
293
307
 
@@ -310,7 +324,7 @@ describe "HTTP" do
310
324
 
311
325
  it "should patch the NSURLRequest with done_loading and done_loading!" do
312
326
  @query.request.done_loading.should.equal @query.request.instance_variable_get(:@done_loading)
313
-
327
+
314
328
  @query.request.instance_variable_set(:@done_loading, false)
315
329
  @query.request.done_loading.should.equal false
316
330
  @query.request.done_loading!
@@ -324,18 +338,45 @@ describe "HTTP" do
324
338
 
325
339
  end
326
340
 
341
+ describe "create POST request" do
342
+
343
+ before do
344
+ @url_string = 'http://initiated-request.dev/post'
345
+ @headers = { fake: 'headers' }
346
+ @payload = { key:'abc1234' }
347
+ @post_query = BubbleWrap::HTTP::Query.new(@url_string, :post, {headers: @headers, payload: @payload})
348
+ end
349
+
350
+ it "should automatically provide Content-Type if a payload is provided" do
351
+ @post_query.request.allHTTPHeaderFields.should.include?('Content-Type')
352
+ end
353
+
354
+ it "should not add Content-Type if you provide one yourself" do
355
+ # also ensures check is case insenstive
356
+ @headers = { fake: 'headers', 'CONTENT-TYPE' => 'x-banana' }
357
+ @post_query = BubbleWrap::HTTP::Query.new(@url_string, :post, {headers: @headers, payload: @payload})
358
+ @post_query.request.allHTTPHeaderFields['CONTENT-TYPE'].should.equal @headers['CONTENT-TYPE']
359
+ end
360
+
361
+ it "should not add additional headers if no payload is given" do
362
+ @post_query = BubbleWrap::HTTP::Query.new(@url_string, :post, {headers: @headers})
363
+ @post_query.request.allHTTPHeaderFields.should.equal @headers
364
+ end
365
+
366
+ end
367
+
327
368
  describe "Generating GET params" do
328
369
 
329
370
  it "should create params with nested hashes with prefix[key]=value" do
330
371
  expected_params = [
331
- 'user[name]=marin',
332
- 'user[surname]=usalj',
372
+ 'user[name]=marin',
373
+ 'user[surname]=usalj',
333
374
  'twitter=@mneorr',
334
375
  'website=mneorr.com',
335
376
  'values[]=apple',
336
377
  'values[]=orange',
337
378
  'values[]=peach',
338
- "credentials[username]=mneorr",
379
+ "credentials[username]=mneorr",
339
380
  "credentials[password]=123456xx!@crazy"
340
381
  ]
341
382
  @query.send(:generate_get_params, @payload).should.equal expected_params
@@ -378,7 +419,7 @@ describe "HTTP" do
378
419
 
379
420
  @query.connection(nil, didReceiveData:data)
380
421
  query_received_data.length.should.equal 48
381
- end
422
+ end
382
423
 
383
424
  end
384
425
 
@@ -392,7 +433,7 @@ describe "HTTP" do
392
433
  it "should turn off network indicator" do
393
434
  UIApplication.sharedApplication.isNetworkActivityIndicatorVisible.should == true
394
435
  @query.connection(nil, didFailWithError:@fake_error)
395
- UIApplication.sharedApplication.isNetworkActivityIndicatorVisible.should == false
436
+ UIApplication.sharedApplication.isNetworkActivityIndicatorVisible.should == false
396
437
  end
397
438
 
398
439
  it "should set request_done to true" do
@@ -544,7 +585,7 @@ describe "HTTP" do
544
585
  end
545
586
 
546
587
  class BubbleWrap::HTTP::Query
547
- def create_connection(request, delegate); FakeURLConnection.new(request, delegate); end
588
+ def create_connection(request, delegate); FakeURLConnection.new(request, delegate); end
548
589
  end
549
590
 
550
591
  class FakeURLConnection < NSURLConnection
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bubble-wrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-07-11 00:00:00.000000000 Z
14
+ date: 2012-07-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bacon
18
- requirement: &70234673289720 !ruby/object:Gem::Requirement
18
+ requirement: &70352193392320 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: '0'
24
24
  type: :development
25
25
  prerelease: false
26
- version_requirements: *70234673289720
26
+ version_requirements: *70352193392320
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mocha-on-bacon
29
- requirement: &70234673289140 !ruby/object:Gem::Requirement
29
+ requirement: &70352193391900 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
- version_requirements: *70234673289140
37
+ version_requirements: *70352193391900
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: rake
40
- requirement: &70234673288260 !ruby/object:Gem::Requirement
40
+ requirement: &70352193391480 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,7 +45,7 @@ dependencies:
45
45
  version: '0'
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *70234673288260
48
+ version_requirements: *70352193391480
49
49
  description: RubyMotion wrappers and helpers (Ruby for iOS) - Making Cocoa APIs more
50
50
  Ruby like, one API at a time. Fork away and send your pull request.
51
51
  email:
@@ -219,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
219
  version: '0'
220
220
  segments:
221
221
  - 0
222
- hash: -2985939029825210852
222
+ hash: -1922890315766679291
223
223
  required_rubygems_version: !ruby/object:Gem::Requirement
224
224
  none: false
225
225
  requirements:
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
228
  version: '0'
229
229
  segments:
230
230
  - 0
231
- hash: -2985939029825210852
231
+ hash: -1922890315766679291
232
232
  requirements: []
233
233
  rubyforge_project:
234
234
  rubygems_version: 1.8.16