bubble-wrap 1.2.0 → 1.3.0.osx
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 +8 -8
- data/CHANGELOG.md +4 -2
- data/Gemfile.lock +1 -1
- data/README.md +217 -7
- data/Rakefile +23 -2
- data/lib/bubble-wrap/camera.rb +10 -6
- data/lib/bubble-wrap/core.rb +14 -1
- data/lib/bubble-wrap/ext/motion_project_app.rb +8 -0
- data/lib/bubble-wrap/font.rb +3 -1
- data/lib/bubble-wrap/http.rb +2 -0
- data/lib/bubble-wrap/loader.rb +17 -2
- data/lib/bubble-wrap/location.rb +9 -6
- data/lib/bubble-wrap/media.rb +10 -6
- data/lib/bubble-wrap/test.rb +6 -1
- data/lib/bubble-wrap/ui.rb +5 -2
- data/lib/bubble-wrap/version.rb +2 -7
- data/motion/core.rb +6 -1
- data/motion/core/app.rb +3 -64
- data/motion/core/device.rb +0 -55
- data/motion/core/device/{camera.rb → ios/camera.rb} +0 -0
- data/motion/core/device/{camera_wrapper.rb → ios/camera_wrapper.rb} +0 -0
- data/motion/core/device/ios/screen.rb +75 -0
- data/motion/core/device/osx/screen.rb +18 -0
- data/motion/core/device/screen.rb +1 -69
- data/motion/core/ios/app.rb +71 -0
- data/motion/core/ios/device.rb +59 -0
- data/motion/core/osx/app.rb +15 -0
- data/motion/core/osx/device.rb +6 -0
- data/motion/core/string.rb +3 -2
- data/motion/http.rb +0 -364
- data/motion/http/query.rb +367 -0
- data/motion/http/response.rb +32 -0
- data/motion/test_suite_delegate.rb +58 -0
- data/motion/ui/ui_alert_view.rb +169 -0
- data/motion/ui/ui_bar_button_item.rb +55 -53
- data/motion/util/constants.rb +34 -32
- data/samples/alert/.gitignore +16 -0
- data/samples/alert/Gemfile +3 -0
- data/samples/alert/Rakefile +10 -0
- data/samples/alert/app/app_delegate.rb +8 -0
- data/samples/alert/app/controllers/alert_view_controller.rb +74 -0
- data/samples/alert/resources/Default-568h@2x.png +0 -0
- data/samples/alert/spec/main_spec.rb +9 -0
- data/samples/media/.gitignore +16 -0
- data/samples/media/Rakefile +11 -0
- data/samples/media/app/app_delegate.rb +8 -0
- data/samples/media/app/controllers/play_controller.rb +46 -0
- data/samples/media/resources/Default-568h@2x.png +0 -0
- data/samples/media/resources/test.mp3 +0 -0
- data/samples/media/spec/main_spec.rb +9 -0
- data/samples/osx/Gemfile +3 -0
- data/samples/osx/Gemfile.lock +10 -0
- data/samples/osx/Rakefile +11 -0
- data/samples/osx/app/app_delegate.rb +69 -0
- data/samples/osx/app/menu.rb +108 -0
- data/samples/osx/resources/Credits.rtf +29 -0
- data/samples/osx/spec/main_spec.rb +9 -0
- data/spec/motion/core/app_spec.rb +5 -164
- data/spec/motion/core/device/{camera_spec.rb → ios/camera_spec.rb} +0 -0
- data/spec/motion/core/device/{camera_wrapper_spec.rb → ios/camera_wrapper_spec.rb} +0 -0
- data/spec/motion/core/device/ios/device_spec.rb +74 -0
- data/spec/motion/core/device/{screen_spec.rb → ios/screen_spec.rb} +2 -1
- data/spec/motion/core/device/osx/screen_spec.rb +26 -0
- data/spec/motion/core/device_spec.rb +0 -71
- data/spec/motion/core/ios/app_spec.rb +180 -0
- data/spec/motion/core/kvo_spec.rb +23 -7
- data/spec/motion/core/ns_index_path_spec.rb +10 -2
- data/spec/motion/core/osx/app_spec.rb +15 -0
- data/spec/motion/core/string_spec.rb +11 -5
- data/spec/motion/core_spec.rb +13 -2
- data/spec/motion/http/query_spec.rb +731 -0
- data/spec/motion/http/response_spec.rb +44 -0
- data/spec/motion/http_spec.rb +0 -722
- data/spec/motion/{core → ui}/gestures_spec.rb +0 -0
- data/spec/motion/ui/ui_alert_view_spec.rb +1188 -0
- data/spec/motion/{core → ui}/ui_bar_button_item_spec.rb +80 -24
- data/spec/motion/{core → ui}/ui_control_spec.rb +0 -0
- data/spec/motion/util/constants_spec.rb +4 -4
- metadata +86 -26
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmE3N2Q1N2NjYTZmY2ZmYTU5OWU3YjMwMDk3OGM4OTU5MTc1MzY3ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MGM1YzNkMmZlZTExMTRlM2RkMmFlZmNkNGUxY2ExN2E2NjgzY2QwMA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NGM0ZjAzMzU5MDBmMGRjMDIyNGFiN2IwZWVkZDY1YjczZTM1Yjk4NjExMjgz
|
10
|
+
ZDZmOTlhMmYyZmQwNDc1MzcyYTIxMmE2NjNlMjA5MDhjMWM2M2I3MmExMjgy
|
11
|
+
OWIxMTBkNzg2NDMzZDUyYjJlM2I5M2I0Y2M4ZDUyNmI2NGRhY2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2VhOWU4ZTE1NWRkYmZjMWIzM2E2NjA0NmUzZmZjMDA2MDc4NzY0OTMzOTMy
|
14
|
+
OTg3YTI4ODE3MmZjNjBlMjMyODM5ZTYxOWZjNjljYzJlODAzNDFjYTQ2MTRj
|
15
|
+
ZWNhZTU4MTUwMmNmM2EzNTRlNTE1OWE0NDMwNDU0M2FmZjhkNWE=
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
-
|
3
|
+
[Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.2.0...master)
|
4
4
|
|
5
|
-
|
5
|
+
## 1.2.0
|
6
|
+
|
7
|
+
[Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.1.5...v1.2.0)
|
6
8
|
|
7
9
|
* Added `BW::UIBarButtonItem`, a factory-esque wrapper for `UIBarButtonItem` ([#202](https://github.com/rubymotion/BubbleWrap/pull/202))
|
8
10
|
* Added `BW::Font`, a wrapper for creating `UIFont` objects ([#206](https://github.com/rubymotion/BubbleWrap/pull/206))
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -413,7 +413,11 @@ end
|
|
413
413
|
|
414
414
|
### UIBarButtonItem
|
415
415
|
|
416
|
-
`BW::UIBarButtonItem`
|
416
|
+
`BW::UIBarButtonItem` is a subclass of `UIBarButtonItem` with an natural Ruby syntax.
|
417
|
+
|
418
|
+
#### Constructors
|
419
|
+
|
420
|
+
Instead specifying a target-action pair, each constructor method accepts an optional block. When the button is tapped, the block is executed.
|
417
421
|
|
418
422
|
```ruby
|
419
423
|
BW::UIBarButtonItem.system(:save) do
|
@@ -443,21 +447,21 @@ end
|
|
443
447
|
# NOTE: The block is attached to the view as a single tap gesture recognizer.
|
444
448
|
```
|
445
449
|
|
446
|
-
|
450
|
+
The `.new` constructor provides a flexible, builder-style syntax.
|
447
451
|
|
448
452
|
```ruby
|
449
453
|
options = { :system => :save }
|
450
|
-
BW::UIBarButtonItem.
|
454
|
+
BW::UIBarButtonItem.new(options) do
|
451
455
|
# ...
|
452
456
|
end
|
453
457
|
|
454
458
|
options = { :styled => :plain, :title => "Friends" }
|
455
|
-
BW::UIBarButtonItem.
|
459
|
+
BW::UIBarButtonItem.new(options) do
|
456
460
|
# ...
|
457
461
|
end
|
458
462
|
|
459
463
|
options = { :styled => :bordered, :image => UIImage.alloc.init }
|
460
|
-
BW::UIBarButtonItem.
|
464
|
+
BW::UIBarButtonItem.new(options) do
|
461
465
|
# ...
|
462
466
|
end
|
463
467
|
|
@@ -466,17 +470,19 @@ options = {
|
|
466
470
|
:image => UIImage.alloc.init,
|
467
471
|
:landscape => UIImage.alloc.init
|
468
472
|
}
|
469
|
-
BW::UIBarButtonItem.
|
473
|
+
BW::UIBarButtonItem.new(options) do
|
470
474
|
# ...
|
471
475
|
end
|
472
476
|
|
473
477
|
options = { :custom => UIView.alloc.init }
|
474
|
-
BW::UIBarButtonItem.
|
478
|
+
BW::UIBarButtonItem.new(options) do
|
475
479
|
# ...
|
476
480
|
end
|
477
481
|
# NOTE: The block is attached to the view as a single tap gesture recognizer.
|
478
482
|
```
|
479
483
|
|
484
|
+
#### Button types
|
485
|
+
|
480
486
|
The `.styled` button types are:
|
481
487
|
|
482
488
|
```ruby
|
@@ -514,6 +520,184 @@ And the `.system` button types are:
|
|
514
520
|
:page_curl
|
515
521
|
```
|
516
522
|
|
523
|
+
### UIAlertView
|
524
|
+
|
525
|
+
`BW::UIAlertView` is a subclass of `UIAlertView` with an natural Ruby syntax.
|
526
|
+
|
527
|
+
#### Default alert
|
528
|
+
|
529
|
+
The `.default` constructor accepts an optional `Hash` of options and returns a `BW::UIAlertView` instance in the `UIAlertViewStyleDefault` style. The instance can then be given an `#on_click` callback to be executed when it's button is clicked. For example:
|
530
|
+
|
531
|
+

|
532
|
+
|
533
|
+
```ruby
|
534
|
+
options = { :title => "Are you ready?" }
|
535
|
+
ready_alert = BW::UIAlertView.default(options).on_click do |alert|
|
536
|
+
# ...
|
537
|
+
end
|
538
|
+
|
539
|
+
ready_alert.show
|
540
|
+
```
|
541
|
+
|
542
|
+
#### Input alerts
|
543
|
+
|
544
|
+
`BW::UIAlertView` has constructors for input alerts too.
|
545
|
+
|
546
|
+
`.plain_text_input` returns an instance in the `UIAlertViewStylePlainTextInput` style.
|
547
|
+
|
548
|
+

|
549
|
+
|
550
|
+
```ruby
|
551
|
+
options = { :title => "Replicator" }
|
552
|
+
replicator_alert = BW::UIAlertView.plain_text_input(options).on_click do |alert|
|
553
|
+
alert.plain_text_field.text #=> "Tea. Early Grey. Hot."
|
554
|
+
end
|
555
|
+
|
556
|
+
replicator_alert.show
|
557
|
+
```
|
558
|
+
|
559
|
+
`.secure_text_input` returns an instance in the `UIAlertViewStyleSecureTextInput` style.
|
560
|
+
|
561
|
+

|
562
|
+
|
563
|
+
```ruby
|
564
|
+
options = { :title => "Authorization" }
|
565
|
+
replicator_alert = BW::UIAlertView.secure_text_input(options).on_click do |alert|
|
566
|
+
alert.secure_text_field.text #=> "Theta2997"
|
567
|
+
end
|
568
|
+
|
569
|
+
replicator_alert.show
|
570
|
+
```
|
571
|
+
|
572
|
+
And `.login_and_password_input` returns an instance in the `UIAlertViewStyleLoginAndPasswordInput` style.
|
573
|
+
|
574
|
+

|
575
|
+
|
576
|
+
```ruby
|
577
|
+
options = { :title => "Authorization" }
|
578
|
+
auth_alert = BW::UIAlertView.login_and_password_input(options).on_click do |alert|
|
579
|
+
alert.login_text_field.text #=> "La Forge"
|
580
|
+
alert.password_text_field.text #=> "Theta2997"
|
581
|
+
end
|
582
|
+
|
583
|
+
auth_alert.show
|
584
|
+
```
|
585
|
+
|
586
|
+
#### Buttons
|
587
|
+
|
588
|
+
Each alert style has sane, default button titles. Yet they're fully customizable by providing either a `String` to the constructor's `:buttons` argument
|
589
|
+
|
590
|
+

|
591
|
+
|
592
|
+
```ruby
|
593
|
+
alert = BW::UIAlertView.default(:title => "BubbleWrap is", :buttons => "Awesome")
|
594
|
+
|
595
|
+
alert.show
|
596
|
+
```
|
597
|
+
|
598
|
+
Or an `Array` of strings to the constructor's `:buttons` argument.
|
599
|
+
|
600
|
+

|
601
|
+
|
602
|
+
```ruby
|
603
|
+
options = {
|
604
|
+
:title => "Dinner this Friday?",
|
605
|
+
:message => "My treat!",
|
606
|
+
:buttons => ["No", "Maybe", "Yes"]
|
607
|
+
}
|
608
|
+
alert = BW::UIAlertView.default(options)
|
609
|
+
|
610
|
+
alert.show
|
611
|
+
```
|
612
|
+
|
613
|
+
Inside a callback, the `#clicked_button` method contains the `index` and `title` of the clicked button.
|
614
|
+
|
615
|
+

|
616
|
+
|
617
|
+
```ruby
|
618
|
+
options = {
|
619
|
+
:title => "Warp Engine Online",
|
620
|
+
:message => "Plot a course for Starbase 118. Warp 7.",
|
621
|
+
:buttons => ["Cancel", "Engage"],
|
622
|
+
}
|
623
|
+
warp_alert = BW::UIAlertView.default(options).on_click do |alert|
|
624
|
+
if alert.clicked_button.index == 0
|
625
|
+
# ...
|
626
|
+
else
|
627
|
+
# ...
|
628
|
+
end
|
629
|
+
|
630
|
+
if alert.clicked_button.title == "Cancel"
|
631
|
+
# ...
|
632
|
+
else
|
633
|
+
# ...
|
634
|
+
end
|
635
|
+
end
|
636
|
+
|
637
|
+
warp_alert.show
|
638
|
+
```
|
639
|
+
|
640
|
+
When the constructor's `:cancel_button_index` argument is provided, the `clicked_button` knows whether or not it's a `cancel?` button. Conveniently, the argument is automatically set to `0` for all constructors **EXCEPT** `.default` and `.new`.
|
641
|
+
|
642
|
+

|
643
|
+
|
644
|
+
```ruby
|
645
|
+
options = {
|
646
|
+
:title => "Warp Engine Online",
|
647
|
+
:message => "Plot a course for Starbase 118. Warp 7.",
|
648
|
+
:buttons => ["Cancel", "Engage"],
|
649
|
+
:cancel_button_index => 0 # set for all constructors EXCEPT `.default` and `.new`
|
650
|
+
}
|
651
|
+
warp_alert = BW::UIAlertView.default(options).on_click do |alert|
|
652
|
+
# NOTE: uses the :cancel_button_index argument
|
653
|
+
if alert.clicked_button.cancel?
|
654
|
+
# ...
|
655
|
+
else
|
656
|
+
# ...
|
657
|
+
end
|
658
|
+
end
|
659
|
+
|
660
|
+
warp_alert.show
|
661
|
+
```
|
662
|
+
|
663
|
+
#### Callbacks
|
664
|
+
|
665
|
+
`BW::UIAlertView` instances are their own delegate. The complete `UIAlertViewDelegte` protocol is available via callbacks.
|
666
|
+
|
667
|
+
```ruby
|
668
|
+
alert = BW::UIAlertView.default
|
669
|
+
|
670
|
+
alert.will_present do |alert|
|
671
|
+
# aka willPresentAlertView:
|
672
|
+
end
|
673
|
+
|
674
|
+
alert.did_present do |alert|
|
675
|
+
# aka didPresentAlertView:
|
676
|
+
end
|
677
|
+
|
678
|
+
alert.on_click do |alert|
|
679
|
+
# aka alertView:clickedButtonAtIndex:
|
680
|
+
end
|
681
|
+
|
682
|
+
alert.will_dismiss do |alert|
|
683
|
+
# aka alertView:willDismissWithButtonIndex:
|
684
|
+
end
|
685
|
+
|
686
|
+
alert.did_dismiss do |alert|
|
687
|
+
# aka alertView:didDismissWithButtonIndex:
|
688
|
+
end
|
689
|
+
|
690
|
+
alert.on_system_cancel do |alert|
|
691
|
+
# aka alertViewCancel:
|
692
|
+
end
|
693
|
+
|
694
|
+
alert.enable_first_other_button? do |alert|
|
695
|
+
# aka alertViewShouldEnableFirstOtherButton:
|
696
|
+
# NOTE: must return a boolean
|
697
|
+
true
|
698
|
+
end
|
699
|
+
```
|
700
|
+
|
517
701
|
## HTTP
|
518
702
|
|
519
703
|
`BW::HTTP` wraps `NSURLRequest`, `NSURLConnection` and friends to provide Ruby developers with a more familiar and easier to use API.
|
@@ -557,6 +741,32 @@ would be a Proc that takes two arguments: a float representing the
|
|
557
741
|
amount of data currently received and another float representing the
|
558
742
|
total amount of data expected.
|
559
743
|
|
744
|
+
### Gotchas
|
745
|
+
|
746
|
+
Because of how RubyMotion currently works, you sometimes need to assign objects as `@instance_variables` in order to retain their callbacks.
|
747
|
+
|
748
|
+
For example:
|
749
|
+
|
750
|
+
```ruby
|
751
|
+
class HttpClient
|
752
|
+
def get_user(user_id, &callback)
|
753
|
+
BW::HTTP.get(user_url(user_id)) do |response|
|
754
|
+
# ..
|
755
|
+
end
|
756
|
+
end
|
757
|
+
end
|
758
|
+
```
|
759
|
+
|
760
|
+
This class should be invoked in your code as:
|
761
|
+
|
762
|
+
```ruby
|
763
|
+
@http_client = HttpClient.new
|
764
|
+
@http_client.get_user(user_id) do |user|
|
765
|
+
# ..
|
766
|
+
end
|
767
|
+
```
|
768
|
+
|
769
|
+
(instead of doing an instance-variable-less `HttpClient.new.get_user`)
|
560
770
|
|
561
771
|
## RSS Parser
|
562
772
|
**Since: > version 1.0.0**
|
data/Rakefile
CHANGED
@@ -1,16 +1,37 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
$:.unshift("/Library/RubyMotion/lib")
|
3
|
-
|
3
|
+
if ENV['osx']
|
4
|
+
require 'motion/project/template/osx'
|
5
|
+
else
|
6
|
+
require 'motion/project/template/ios'
|
7
|
+
end
|
4
8
|
Bundler.setup
|
5
9
|
Bundler.require
|
6
10
|
|
7
11
|
require 'bubble-wrap/all'
|
8
12
|
require 'bubble-wrap/test'
|
9
13
|
|
14
|
+
module Motion; module Project
|
15
|
+
class Config
|
16
|
+
def spec_files=(spec_files)
|
17
|
+
@spec_files = spec_files
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end; end
|
21
|
+
|
10
22
|
Motion::Project::App.setup do |app|
|
11
23
|
app.name = 'testSuite'
|
12
24
|
app.identifier = 'io.bubblewrap.testSuite'
|
13
25
|
app.specs_dir = './spec/motion'
|
26
|
+
app.spec_files
|
27
|
+
if Motion::Project::App.osx?
|
28
|
+
app.spec_files -= Dir.glob("./spec/motion/**/ios/**.rb")
|
29
|
+
["font", "location", "media", "ui"].each do |package|
|
30
|
+
app.spec_files -= Dir.glob("./spec/motion/#{package}/**/*.rb")
|
31
|
+
end
|
32
|
+
else
|
33
|
+
app.spec_files -= Dir.glob("./spec/motion/**/osx/**.rb")
|
34
|
+
end
|
14
35
|
app.version = '1.2.3'
|
15
36
|
end
|
16
37
|
|
@@ -22,4 +43,4 @@ namespace :spec do
|
|
22
43
|
task :motion => 'spec'
|
23
44
|
|
24
45
|
task :all => [:lib, :motion]
|
25
|
-
end
|
46
|
+
end
|
data/lib/bubble-wrap/camera.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'bubble-wrap/loader'
|
2
|
-
|
3
|
-
BubbleWrap.
|
4
|
-
BubbleWrap.require('motion/
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
|
3
|
+
BubbleWrap.require_ios("camera") do
|
4
|
+
BubbleWrap.require('motion/util/constants.rb')
|
5
|
+
BubbleWrap.require('motion/core/device.rb')
|
6
|
+
BubbleWrap.require('motion/core/device/*.rb')
|
7
|
+
BubbleWrap.require('motion/core/device/ios/*.rb') do
|
8
|
+
file('motion/core/device/ios/camera_wrapper.rb').depends_on 'motion/core/device/ios/camera.rb'
|
9
|
+
file('motion/core/device/ios/camera.rb').depends_on ['motion/core/ios/device.rb', 'motion/util/constants.rb']
|
10
|
+
file('motion/core/device/ios/screen.rb').depends_on 'motion/core/ios/device.rb'
|
11
|
+
end
|
8
12
|
end
|
data/lib/bubble-wrap/core.rb
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
require 'bubble-wrap/loader'
|
2
|
+
|
2
3
|
BubbleWrap.require('motion/core.rb')
|
3
|
-
BubbleWrap.require('motion/core
|
4
|
+
BubbleWrap.require('motion/core/*.rb') do
|
4
5
|
file('motion/core/pollute.rb').depends_on 'motion/core/ns_index_path.rb'
|
5
6
|
end
|
7
|
+
BubbleWrap.require('motion/core/device/*.rb')
|
8
|
+
|
9
|
+
BubbleWrap.require_ios do
|
10
|
+
BubbleWrap.require('motion/core/ios/**/*.rb')
|
11
|
+
BubbleWrap.require('motion/core/device/ios/**/*.rb')
|
12
|
+
end
|
13
|
+
|
14
|
+
BubbleWrap.require_osx do
|
15
|
+
BubbleWrap.require('motion/core/osx/**/*.rb')
|
16
|
+
BubbleWrap.require('motion/core/device/osx/**/*.rb')
|
17
|
+
end
|
18
|
+
|
6
19
|
require 'bubble-wrap/camera'
|
7
20
|
require 'bubble-wrap/ui'
|
@@ -19,7 +19,15 @@ module BubbleWrap
|
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
22
|
+
|
23
|
+
module Platforms
|
24
|
+
def osx?
|
25
|
+
self.respond_to?(:template) && self.template == :osx
|
26
|
+
end
|
27
|
+
end
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
31
|
Motion::Project::App.extend(BubbleWrap::Ext::BuildTask)
|
32
|
+
|
33
|
+
Motion::Project::App.extend(BubbleWrap::Ext::Platforms)
|
data/lib/bubble-wrap/font.rb
CHANGED
data/lib/bubble-wrap/http.rb
CHANGED
data/lib/bubble-wrap/loader.rb
CHANGED
@@ -4,8 +4,8 @@ end
|
|
4
4
|
|
5
5
|
unless defined?(BubbleWrap::LOADER_PRESENT)
|
6
6
|
require 'bubble-wrap/version' unless defined?(VERSION)
|
7
|
-
if
|
8
|
-
raise "BubbleWrap #{BubbleWrap::VERSION} requires at least
|
7
|
+
if Gem::Version.new(Motion::Version) < Gem::Version.new(BubbleWrap::MIN_MOTION_VERSION)
|
8
|
+
raise "BubbleWrap #{BubbleWrap::VERSION} requires at least RubyMotion #{BubbleWrap::MIN_MOTION_VERSION}"
|
9
9
|
end
|
10
10
|
|
11
11
|
require 'bubble-wrap/ext'
|
@@ -24,6 +24,21 @@ unless defined?(BubbleWrap::LOADER_PRESENT)
|
|
24
24
|
Requirement.scan(caller.first, file_spec, &block)
|
25
25
|
end
|
26
26
|
|
27
|
+
def require_ios(requirement = nil, &callback)
|
28
|
+
if !Motion::Project::App.osx?
|
29
|
+
callback.call
|
30
|
+
else
|
31
|
+
puts "bubble-wrap/#{requirement} requires iOS to use." if requirement
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def require_osx(requirement = nil, &callback)
|
36
|
+
if Motion::Project::App.osx?
|
37
|
+
callback.call
|
38
|
+
else
|
39
|
+
puts "bubble-wrap/#{requirement} requires OS X to use." if requirement
|
40
|
+
end
|
41
|
+
end
|
27
42
|
end
|
28
43
|
|
29
44
|
BW = BubbleWrap unless defined?(BW)
|