bubble-wrap 1.3.0 → 1.4.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 +6 -14
- data/.travis.yml +2 -1
- data/CHANGELOG.md +26 -2
- data/GETTING_STARTED.md +1 -1
- data/Gemfile.lock +1 -1
- data/HACKING.md +6 -4
- data/README.md +83 -3
- data/Rakefile +9 -7
- data/lib/bubble-wrap/all.rb +2 -2
- data/lib/bubble-wrap/mail.rb +9 -0
- data/lib/bubble-wrap/sms.rb +9 -0
- data/lib/bubble-wrap/ui.rb +6 -2
- data/lib/bubble-wrap/version.rb +1 -1
- data/motion/core.rb +1 -1
- data/motion/core/app.rb +7 -2
- data/motion/core/device/ios/camera.rb +3 -2
- data/motion/core/device/ios/screen.rb +19 -0
- data/motion/core/ios/app.rb +13 -1
- data/motion/core/ios/device.rb +5 -0
- data/motion/core/json.rb +1 -3
- data/motion/core/kvo.rb +11 -13
- data/motion/core/persistence.rb +8 -1
- data/motion/core/string.rb +3 -3
- data/motion/core/time.rb +5 -0
- data/motion/http.rb +1 -1
- data/motion/http/query.rb +39 -19
- data/motion/http/response.rb +4 -4
- data/motion/mail/mail.rb +59 -0
- data/motion/mail/result.rb +29 -0
- data/motion/reactor/eventable.rb +3 -2
- data/motion/reactor/periodic_timer.rb +12 -8
- data/motion/reactor/timer.rb +11 -7
- data/motion/sms/result.rb +24 -0
- data/motion/sms/sms.rb +47 -0
- data/motion/ui/pollute.rb +4 -1
- data/motion/ui/ui_alert_view.rb +15 -8
- data/motion/ui/ui_control_wrapper.rb +16 -0
- data/motion/ui/ui_view_controller_wrapper.rb +13 -0
- data/motion/ui/ui_view_wrapper.rb +55 -0
- data/resources/Localizable.strings +1 -0
- data/samples/gesture/Gemfile +2 -2
- data/samples/location/Gemfile +1 -1
- data/samples/osx/Gemfile +2 -2
- data/spec/motion/core/app_spec.rb +6 -0
- data/spec/motion/core/device/ios/camera_spec.rb +3 -3
- data/spec/motion/core/device/ios/screen_spec.rb +45 -0
- data/spec/motion/core/ios/app_spec.rb +29 -0
- data/spec/motion/core/persistence_spec.rb +25 -0
- data/spec/motion/core/string_spec.rb +2 -2
- data/spec/motion/core/time_spec.rb +14 -4
- data/spec/motion/core_spec.rb +9 -8
- data/spec/motion/http/query_spec.rb +92 -15
- data/spec/motion/http/response_spec.rb +4 -3
- data/spec/motion/location/location_spec.rb +1 -1
- data/spec/motion/mail/mail_spec.rb +125 -0
- data/spec/motion/mail/result_spec.rb +53 -0
- data/spec/motion/reactor/eventable_spec.rb +85 -0
- data/spec/motion/reactor_spec.rb +0 -20
- data/spec/motion/sms/result_spec.rb +38 -0
- data/spec/motion/sms/sms_spec.rb +71 -0
- data/spec/motion/ui/pollute_spec.rb +13 -0
- data/spec/motion/ui/ui_bar_button_item_spec.rb +8 -8
- data/spec/motion/ui/ui_control_wrapper_spec.rb +35 -0
- data/spec/motion/ui/ui_view_controller_wrapper_spec.rb +34 -0
- data/spec/motion/ui/ui_view_wrapper_spec.rb +62 -0
- data/travis.sh +7 -0
- metadata +52 -22
- data/motion/ui/gestures.rb +0 -57
- data/motion/ui/ui_control.rb +0 -14
- data/motion/ui/ui_view_controller.rb +0 -11
- data/spec/motion/ui/gestures_spec.rb +0 -62
- data/spec/motion/ui/ui_control_spec.rb +0 -42
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YjY5ZTNmMjc2NzIzMGUxZmI1NDYyN2U1NGQwNWYxY2VlYjI0OTExMWU5MTJk
|
10
|
-
NWRjODAzMTNjYmVmODg0NWZhZWI5MDE2N2NiZDg2ZmJhZTcyNDgzZThkZjYz
|
11
|
-
MzUyYzViMzU4MzM2ODU3NGIzZjA0OWVkNDM2OTVhNGEwOTg2MDk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MGEyZmMyNDRjYjdiNjFhZWQ5NmMxMjJiNWMyNWUwZmE5NzE2ODMwMjBiZmYz
|
14
|
-
MDk3YjIzZTY2ZTQ4MmVkZDBlYTVlOGVjY2YzYTUyNzM4NGU1ZWMxMzAzZGVj
|
15
|
-
ZmE4ODc4NjZiM2Q5ZGU2ZTE0MGMyNDhhYzM4YWYwNjI5MDRkMTM=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f49e903b8cbae3bf9a475a04c9fa209aa944ab60
|
4
|
+
data.tar.gz: aa486c325db87d7d54eb5647f8acce0e28ef6e48
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 83bf22da6648b81fbc4b7717445ea63154ad10fad278767958fb074ec41c2fce7d792022d87ff629925940e5d6f20cea2791e97614155963e071aa8580f82867
|
7
|
+
data.tar.gz: 1e5d77f5ec252c58a78fe372eddb3a0f7468d13b36344dd4cb12cf6162d3fdd70ba1db5d9911f709b4865d978ca698b040a9e0dba27a64e930aa99e054e84647
|
data/.travis.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
language: objective-c
|
2
2
|
before_install:
|
3
3
|
- (ruby --version)
|
4
|
-
|
4
|
+
before_script: sudo chown -R travis ~/Library/RubyMotion
|
5
|
+
script: ./travis.sh
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,40 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
[Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.4.0...master)
|
4
|
+
|
5
|
+
## 1.4.0
|
6
|
+
|
3
7
|
[Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.3.0...master)
|
4
8
|
|
9
|
+
* Added `BW::Mail` for sending emails ([#247](https://github.com/rubymotion/BubbleWrap/pull/247))
|
10
|
+
* Added `BW::SMS` for sending SMS/iMessages ([#287](https://github.com/rubymotion/BubbleWrap/pull/287))
|
11
|
+
* Added `App::Persistence.delete` ([#286](https://github.com/rubymotion/BubbleWrap/pull/286))
|
12
|
+
* Added `BW::HTTP::Response#error`, which is an `NSError` instance ([#284](https://github.com/rubymotion/BubbleWrap/pull/284))
|
13
|
+
* Added `BW::HTTP::Query#cancel` to chancel URL requests ([#278](https://github.com/rubymotion/BubbleWrap/pull/278))
|
14
|
+
* Added `App.info_plist` ([#273](https://github.com/rubymotion/BubbleWrap/pull/273/))
|
15
|
+
* Added `BW::Device.interface_orientation` ([#265](https://github.com/rubymotion/BubbleWrap/pull/265))
|
16
|
+
* Added `OPTIONS` request method to `BW::HTTP` ([#260](https://github.com/rubymotion/BubbleWrap/pull/260))
|
17
|
+
* Added `Time.iso8601_with_timezone` ([#255](https://github.com/rubymotion/BubbleWrap/pull/255))
|
18
|
+
* Added `:encoding` option to `BW::HTTP` ([#251](https://github.com/rubymotion/BubbleWrap/pull/251))
|
19
|
+
* Moved `BW::Reactor::Timer` and `BW::Reactor::PeriodicTimer` from `NSTimer` to GCD `Dispatch::Source.timer` ([#242](https://github.com/rubymotion/BubbleWrap/pull/242))
|
20
|
+
* Option `:common_modes` for BW::Reactor::PeriodicTimer has been deprecated, it's not needed anymore.
|
21
|
+
* Fixed App#window (and thus `BW::Camera`) to work with iOS7 modals ([#305](https://github.com/rubymotion/BubbleWrap/pull/305))
|
22
|
+
* Fixed patches on `String` to be on `NSString` ([#292](https://github.com/rubymotion/BubbleWrap/pull/292))
|
23
|
+
* Fixed `BW::HTTP` success heuristic to match RFC 2616 ([#282](https://github.com/rubymotion/BubbleWrap/pull/282))
|
24
|
+
* Fixed `BW::HTTP` to correctly identify `false` parameters ([#261](https://github.com/rubymotion/BubbleWrap/issues/261) [#262](https://github.com/rubymotion/BubbleWrap/pull/262))
|
25
|
+
* Fixed `BW::Reactor` to correctly handle unregistered procs ([#253](https://github.com/rubymotion/BubbleWrap/pull/253))
|
26
|
+
* Fixed `BW::localized_string` to mirror Cocoa API by returning the `key` if no localization exists ([#181](https://github.com/rubymotion/BubbleWrap/pull/181))
|
27
|
+
* Addressed a few memory related problems ([#270](https://github.com/rubymotion/BubbleWrap/pull/270) [#275](https://github.com/rubymotion/BubbleWrap/pull/275) [#276](https://github.com/rubymotion/BubbleWrap/pull/276))
|
28
|
+
|
5
29
|
## 1.3.0
|
6
30
|
|
7
31
|
[Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.2.0...v1.3.0)
|
8
32
|
|
9
33
|
* Added OS X support for RubyMotion 2.0 ([#233](https://github.com/rubymotion/BubbleWrap/pull/233)). BubbleWrap *drops support* for RubyMotion 1.x.
|
10
|
-
* Changed `BW::UIBarButtonItem` internals; `.build` is now deprecated and forwards to `.
|
34
|
+
* Changed `BW::UIBarButtonItem` internals; `.build` is now deprecated and forwards to `.new` ([#226](https://github.com/rubymotion/BubbleWrap/pull/226))
|
11
35
|
* Changed `HTTP` to present credentials with an `Authorization` header *before* any requests are made, unless the `:present_credentials` option `== false` ([#199](https://github.com/rubymotion/BubbleWrap/pull/199))
|
12
36
|
* Fixed `HTTP` to not append a question-mark (`?`) at the end of URL requests with empty `:payload`s ([#221](https://github.com/rubymotion/BubbleWrap/pull/221))
|
13
|
-
* Fixed `HTTP` to
|
37
|
+
* Fixed `HTTP` to correctly parameterize an array of hashes, Rails-style ([#219](https://github.com/rubymotion/BubbleWrap/pull/219))
|
14
38
|
|
15
39
|
## 1.2.0
|
16
40
|
|
data/GETTING_STARTED.md
CHANGED
@@ -12,7 +12,7 @@ RubyMotion install take a look at the [getting started guide](http://www.rubymot
|
|
12
12
|
## Create a new RubyMotion project
|
13
13
|
|
14
14
|
RubyMotion ships with the `motion` command-line tool to handle creating projects,
|
15
|
-
updating and
|
15
|
+
updating and creating support tickets.
|
16
16
|
|
17
17
|
```
|
18
18
|
$ motion create bw-demo
|
data/Gemfile.lock
CHANGED
data/HACKING.md
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
## A library in two parts
|
4
4
|
|
5
|
-
RubyMotion forces a certain background-radiation of
|
5
|
+
RubyMotion forces a certain background-radiation of schizophrenia
|
6
6
|
due to the fact that it's build tools run using the system ruby
|
7
7
|
via Rake. BubbleWrap manipulates the build environment in order
|
8
8
|
to make it possible to include itself (and other code) into the
|
9
|
-
build process from
|
9
|
+
build process from outside the project hierarchy.
|
10
10
|
|
11
11
|
### Part the first: `lib/`
|
12
12
|
|
@@ -17,7 +17,9 @@ code when you call
|
|
17
17
|
require 'bubble-wrap'
|
18
18
|
```
|
19
19
|
|
20
|
-
When `bubble-wrap` is required it immediately requires `bubble-wrap/loader`
|
20
|
+
When `bubble-wrap` is required it immediately requires `bubble-wrap/loader`
|
21
|
+
which sets up the infrastructure needed to manipulate the `Rakefile` build process.
|
22
|
+
Once that is done we can freely call
|
21
23
|
|
22
24
|
```ruby
|
23
25
|
BubbleWrap.require 'motion/core/**/*.rb'
|
@@ -76,7 +78,7 @@ of RubyMotion users that use BubbleWrap in their daily development then
|
|
76
78
|
feel free to fork [the repository on GitHub](https://github.com/mattetti/BubbleWrap)
|
77
79
|
and send us a pull request.
|
78
80
|
|
79
|
-
You should place your
|
81
|
+
You should place your implementation files in a subdirectory of `motion`
|
80
82
|
(eg `motion/my_awesome_project`), your tests in a subdirectory of `spec`
|
81
83
|
(eg `spec/my_awesome_project`) and you can create a require file in
|
82
84
|
`lib/bubble-wrap` for example `lib/bubble-wrap/my_awesome_project.rb`:
|
data/README.md
CHANGED
@@ -81,6 +81,18 @@ If you wish to only include the `Media` wrapper:
|
|
81
81
|
require 'bubble-wrap/media'
|
82
82
|
```
|
83
83
|
|
84
|
+
If you wish to only include the `Mail` wrapper:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
require 'bubble-wrap/mail'
|
88
|
+
```
|
89
|
+
|
90
|
+
If you wish to only include the `SMS` wrapper:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
require 'bubble-wrap/sms'
|
94
|
+
```
|
95
|
+
|
84
96
|
If you want to include everything (ie kitchen sink mode) you can save time and do:
|
85
97
|
|
86
98
|
```ruby
|
@@ -207,6 +219,8 @@ Examples:
|
|
207
219
|
# true
|
208
220
|
> Device.orientation
|
209
221
|
# :portrait
|
222
|
+
> Device.interface_orientation
|
223
|
+
# :portrait
|
210
224
|
> Device.simulator?
|
211
225
|
# true
|
212
226
|
> Device.ios_version
|
@@ -246,7 +260,7 @@ end
|
|
246
260
|
|
247
261
|
### JSON
|
248
262
|
|
249
|
-
`BW::JSON` wraps `NSJSONSerialization` available in iOS5 and offers the same API as Ruby's JSON std lib.
|
263
|
+
`BW::JSON` wraps `NSJSONSerialization` available in iOS5 and offers the same API as Ruby's JSON std lib. For apps building for iOS4, we suggest a different JSON alternative, like [AnyJSON](https://github.com/mattt/AnyJSON).
|
250
264
|
|
251
265
|
```ruby
|
252
266
|
BW::JSON.generate({'foo => 1, 'bar' => [1,2,3], 'baz => 'awesome'})
|
@@ -271,7 +285,7 @@ def viewWillAppear(animated)
|
|
271
285
|
loadAndRefresh
|
272
286
|
end
|
273
287
|
|
274
|
-
@reload_observer = App.notification_center.observe ReloadNotification do |notification|
|
288
|
+
@reload_observer = App.notification_center.observe 'ReloadNotification' do |notification|
|
275
289
|
loadAndRefresh
|
276
290
|
end
|
277
291
|
end
|
@@ -282,7 +296,7 @@ def viewWillDisappear(animated)
|
|
282
296
|
end
|
283
297
|
|
284
298
|
def reload
|
285
|
-
App.notification_center.post ReloadNotification
|
299
|
+
App.notification_center.post 'ReloadNotification'
|
286
300
|
end
|
287
301
|
```
|
288
302
|
|
@@ -302,6 +316,8 @@ simple interface:
|
|
302
316
|
# ['NBC', 'ABC', 'Fox', 'CBS', 'PBS']
|
303
317
|
> App::Persistence['channels'] = ['TF1', 'France 2', 'France 3']
|
304
318
|
# ['TF1', 'France 2', 'France 3']
|
319
|
+
> App::Persistence.delete('channels')
|
320
|
+
# ['TF1', 'France 2', 'France 3']
|
305
321
|
> App::Persistence['something__new'] # something previously never stored
|
306
322
|
# nil
|
307
323
|
```
|
@@ -386,6 +402,50 @@ end
|
|
386
402
|
BW::Media.play_modal("http://www.hrupin.com/wp-content/uploads/mp3/testsong_20_sec.mp3")
|
387
403
|
```
|
388
404
|
|
405
|
+
## Mail
|
406
|
+
|
407
|
+
Wrapper for showing an in-app mail composer view.
|
408
|
+
|
409
|
+
```ruby
|
410
|
+
# Opens as a modal in the current UIViewController
|
411
|
+
BW::Mail.compose {
|
412
|
+
delegate: self, # optional, defaults to rootViewController
|
413
|
+
to: [ "tom@example.com" ],
|
414
|
+
cc: [ "itchy@example.com", "scratchy@example.com" ],
|
415
|
+
bcc: [ "jerry@example.com" ],
|
416
|
+
html: false,
|
417
|
+
subject: "My Subject",
|
418
|
+
message: "This is my message. It isn't very long.",
|
419
|
+
animated: false
|
420
|
+
} do |result, error|
|
421
|
+
result.sent? # => boolean
|
422
|
+
result.canceled? # => boolean
|
423
|
+
result.saved? # => boolean
|
424
|
+
result.failed? # => boolean
|
425
|
+
error # => NSError
|
426
|
+
end
|
427
|
+
```
|
428
|
+
|
429
|
+
## SMS
|
430
|
+
|
431
|
+
Wrapper for showing an in-app message (SMS) composer view.
|
432
|
+
|
433
|
+
```ruby
|
434
|
+
# Opens as a modal in the current UIViewController
|
435
|
+
BW::SMS.compose (
|
436
|
+
{
|
437
|
+
delegate: self, # optional, will use root view controller by default
|
438
|
+
to: [ "1(234)567-8910" ],
|
439
|
+
message: "This is my message. It isn't very long.",
|
440
|
+
animated: false
|
441
|
+
}) {|result, error|
|
442
|
+
result.sent? # => boolean
|
443
|
+
result.canceled? # => boolean
|
444
|
+
result.failed? # => boolean
|
445
|
+
error # => NSError
|
446
|
+
}
|
447
|
+
```
|
448
|
+
|
389
449
|
## UI
|
390
450
|
|
391
451
|
### Gestures
|
@@ -571,6 +631,20 @@ would be a Proc that takes two arguments: a float representing the
|
|
571
631
|
amount of data currently received and another float representing the
|
572
632
|
total amount of data expected.
|
573
633
|
|
634
|
+
Connections can also be cancelled. Just keep a refrence,
|
635
|
+
|
636
|
+
```ruby
|
637
|
+
@conn = BW::HTTP.get("https://api.github.com/users/mattetti") do |response|
|
638
|
+
p response.body.to_str
|
639
|
+
end
|
640
|
+
```
|
641
|
+
|
642
|
+
and send the `cancel` method to it asynchronously as desired. The block will not be executed.
|
643
|
+
|
644
|
+
```ruby
|
645
|
+
@conn.cancel
|
646
|
+
```
|
647
|
+
|
574
648
|
### Gotchas
|
575
649
|
|
576
650
|
Because of how RubyMotion currently works, you sometimes need to assign objects as `@instance_variables` in order to retain their callbacks.
|
@@ -650,6 +724,12 @@ end
|
|
650
724
|
def when_parser_is_done
|
651
725
|
p "The feed is entirely parsed, congratulations!"
|
652
726
|
end
|
727
|
+
|
728
|
+
def when_parser_errors
|
729
|
+
p "The parser encountered an error"
|
730
|
+
ns_error = feed_parser.parserError
|
731
|
+
p ns_error.localizedDescription
|
732
|
+
end
|
653
733
|
```
|
654
734
|
|
655
735
|
These delegate methods are optional, however, you might find the
|
data/Rakefile
CHANGED
@@ -11,13 +11,15 @@ Bundler.require
|
|
11
11
|
require 'bubble-wrap/all'
|
12
12
|
require 'bubble-wrap/test'
|
13
13
|
|
14
|
-
module Motion
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
module Motion
|
15
|
+
module Project
|
16
|
+
class Config
|
17
|
+
def spec_files=(spec_files)
|
18
|
+
@spec_files = spec_files
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
|
-
end
|
22
|
+
end
|
21
23
|
|
22
24
|
Motion::Project::App.setup do |app|
|
23
25
|
app.name = 'testSuite'
|
@@ -26,7 +28,7 @@ Motion::Project::App.setup do |app|
|
|
26
28
|
app.spec_files
|
27
29
|
if Motion::Project::App.osx?
|
28
30
|
app.spec_files -= Dir.glob("./spec/motion/**/ios/**.rb")
|
29
|
-
["font", "location", "media", "ui"].each do |package|
|
31
|
+
["font", "location", "media", "ui", "mail", "sms"].each do |package|
|
30
32
|
app.spec_files -= Dir.glob("./spec/motion/#{package}/**/*.rb")
|
31
33
|
end
|
32
34
|
else
|
@@ -43,4 +45,4 @@ namespace :spec do
|
|
43
45
|
task :motion => 'spec'
|
44
46
|
|
45
47
|
task :all => [:lib, :motion]
|
46
|
-
end
|
48
|
+
end
|
data/lib/bubble-wrap/all.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
require File.expand_path('../loader', __FILE__)
|
2
|
-
['core', 'http', 'reactor', 'rss_parser', 'ui', 'location', 'media', 'font'].each { |sub|
|
2
|
+
['core', 'http', 'reactor', 'rss_parser', 'ui', 'location', 'media', 'font', 'mail','sms'].each { |sub|
|
3
3
|
require File.expand_path("../#{sub}", __FILE__)
|
4
|
-
}
|
4
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'bubble-wrap/loader'
|
2
|
+
|
3
|
+
BubbleWrap.require_ios("mail") do
|
4
|
+
BubbleWrap.require('motion/core/app.rb')
|
5
|
+
BubbleWrap.require('motion/mail/**/*.rb') do
|
6
|
+
file('motion/mail/mail.rb').depends_on('motion/mail/result.rb')
|
7
|
+
file('motion/mail/mail.rb').uses_framework('MessageUI')
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'bubble-wrap/loader'
|
2
|
+
|
3
|
+
BubbleWrap.require_ios("sms") do
|
4
|
+
BubbleWrap.require('motion/core/app.rb')
|
5
|
+
BubbleWrap.require('motion/sms/**/*.rb') do
|
6
|
+
file('motion/sms/sms.rb').depends_on('motion/sms/result.rb')
|
7
|
+
file('motion/sms/sms.rb').uses_framework('MessageUI')
|
8
|
+
end
|
9
|
+
end
|
data/lib/bubble-wrap/ui.rb
CHANGED
@@ -2,6 +2,10 @@ require 'bubble-wrap/loader'
|
|
2
2
|
|
3
3
|
BubbleWrap.require_ios("ui") do
|
4
4
|
BubbleWrap.require('motion/ui/**/*.rb') do
|
5
|
-
file('motion/ui/pollute.rb').depends_on
|
5
|
+
file('motion/ui/pollute.rb').depends_on %w(
|
6
|
+
motion/ui/ui_control_wrapper.rb
|
7
|
+
motion/ui/ui_view_wrapper.rb
|
8
|
+
motion/ui/ui_view_controller_wrapper.rb
|
9
|
+
)
|
6
10
|
end
|
7
|
-
end
|
11
|
+
end
|
data/lib/bubble-wrap/version.rb
CHANGED
data/motion/core.rb
CHANGED
data/motion/core/app.rb
CHANGED
@@ -43,8 +43,12 @@ module BubbleWrap
|
|
43
43
|
@states
|
44
44
|
end
|
45
45
|
|
46
|
+
def info_plist
|
47
|
+
NSBundle.mainBundle.infoDictionary
|
48
|
+
end
|
49
|
+
|
46
50
|
def name
|
47
|
-
|
51
|
+
info_plist['CFBundleDisplayName']
|
48
52
|
end
|
49
53
|
|
50
54
|
def identifier
|
@@ -52,7 +56,7 @@ module BubbleWrap
|
|
52
56
|
end
|
53
57
|
|
54
58
|
def version
|
55
|
-
|
59
|
+
info_plist['CFBundleVersion']
|
56
60
|
end
|
57
61
|
|
58
62
|
# @return [NSLocale] locale of user settings
|
@@ -90,5 +94,6 @@ module BubbleWrap
|
|
90
94
|
Kernel.const_defined?(:UIApplication)
|
91
95
|
end
|
92
96
|
end
|
97
|
+
|
93
98
|
end
|
94
99
|
::App = BubbleWrap::App unless defined?(::App)
|
@@ -17,6 +17,8 @@ module BubbleWrap
|
|
17
17
|
|
18
18
|
MEDIA_TYPE_HASH = {movie: KUTTypeMovie, image: KUTTypeImage}
|
19
19
|
|
20
|
+
CAMERA_LOCATIONS = [:front, :rear, :none]
|
21
|
+
|
20
22
|
# The camera location; if :none, then we can't use source_type: :camera
|
21
23
|
# in #picture
|
22
24
|
# [:front, :rear, :none]
|
@@ -42,7 +44,7 @@ module BubbleWrap
|
|
42
44
|
end
|
43
45
|
|
44
46
|
def location=(location)
|
45
|
-
if not
|
47
|
+
if not CAMERA_LOCATIONS.member? location
|
46
48
|
raise Error::INVALID_CAMERA_LOCATION, "#{location} is not a valid camera location"
|
47
49
|
end
|
48
50
|
@location = location
|
@@ -137,7 +139,6 @@ module BubbleWrap
|
|
137
139
|
# instead of UIImagePickerControllerThisForm, and then sends it
|
138
140
|
# to the callback
|
139
141
|
def imagePickerController(picker, didFinishPickingMediaWithInfo: info)
|
140
|
-
delete_keys = []
|
141
142
|
callback_info = {}
|
142
143
|
|
143
144
|
info.keys.each { |k|
|
@@ -35,6 +35,25 @@ module BubbleWrap
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
# Figure out the current orientation of the interface
|
39
|
+
# @return [:portrait, :portrait_upside_down, :landscape_left, :landscape_right]
|
40
|
+
def interface_orientation(device_orientation=UIDevice.currentDevice.orientation, fallback=true)
|
41
|
+
case device_orientation
|
42
|
+
when UIInterfaceOrientationPortrait then :portrait
|
43
|
+
when UIInterfaceOrientationPortraitUpsideDown then :portrait_upside_down
|
44
|
+
when UIInterfaceOrientationLandscapeLeft then :landscape_left
|
45
|
+
when UIInterfaceOrientationLandscapeRight then :landscape_right
|
46
|
+
else
|
47
|
+
# In some cases, the accelerometer can't get an accurate read of orientation so we fall back on the orientation of
|
48
|
+
# the status bar.
|
49
|
+
if fallback && (device_orientation != UIApplication.sharedApplication.statusBarOrientation)
|
50
|
+
orientation(UIApplication.sharedApplication.statusBarOrientation)
|
51
|
+
else
|
52
|
+
:unknown
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
38
57
|
# The width of the device's screen.
|
39
58
|
# The real resolution is dependant on the scale
|
40
59
|
# factor (see `retina?`) but the coordinate system
|