fixed-motion 0.0.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/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # fixed-motion
2
+
3
+ Workarounds for RubyMotion.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'fixed-motion'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install fixed-motion
18
+
19
+ ## Usage
20
+
21
+ Presently, there is only one function, `FixedMotion::ObjcBlock(proc)`. This
22
+ workaround is to convert a RubyMotion Proc instance into a native Objective-C
23
+ block. Currently with RubyMotion, if a block argument is declared as type `id`,
24
+ RubyMotion does not convert the Proc into an Objective-C block. By using
25
+ `FixedMotion::ObjcBlock()`, Procs can be converted into an Objective-C block to
26
+ be supplied to a native method. The limitation is that the Proc must have a
27
+ fixed number of arguments, not exceeding 15.
28
+
29
+ ## Contributing
30
+
31
+ 1. Fork it
32
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
33
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
34
+ 4. Push to the branch (`git push origin my-new-feature`)
35
+ 5. Create new Pull Request
data/ext/FixedMotion.h ADDED
@@ -0,0 +1,39 @@
1
+ //
2
+ // FixedMotion.h
3
+ //
4
+
5
+ #import <Foundation/Foundation.h>
6
+
7
+ typedef id (^FMBlock0)(void);
8
+ typedef id (^FMBlock1)(id);
9
+ typedef id (^FMBlock2)(id,id);
10
+ typedef id (^FMBlock3)(id,id,id);
11
+ typedef id (^FMBlock4)(id,id,id,id);
12
+ typedef id (^FMBlock5)(id,id,id,id,id);
13
+ typedef id (^FMBlock6)(id,id,id,id,id,id);
14
+ typedef id (^FMBlock7)(id,id,id,id,id,id,id);
15
+ typedef id (^FMBlock8)(id,id,id,id,id,id,id,id);
16
+ typedef id (^FMBlock9)(id,id,id,id,id,id,id,id,id);
17
+ typedef id (^FMBlock10)(id,id,id,id,id,id,id,id,id,id);
18
+ typedef id (^FMBlock11)(id,id,id,id,id,id,id,id,id,id,id);
19
+ typedef id (^FMBlock12)(id,id,id,id,id,id,id,id,id,id,id,id);
20
+ typedef id (^FMBlock13)(id,id,id,id,id,id,id,id,id,id,id,id,id);
21
+ typedef id (^FMBlock14)(id,id,id,id,id,id,id,id,id,id,id,id,id,id);
22
+ typedef id (^FMBlock15)(id,id,id,id,id,id,id,id,id,id,id,id,id,id,id);
23
+
24
+ id FXMProcToObjcBlock0(FMBlock0 block);
25
+ id FXMProcToObjcBlock1(FMBlock1 block);
26
+ id FXMProcToObjcBlock2(FMBlock2 block);
27
+ id FXMProcToObjcBlock3(FMBlock3 block);
28
+ id FXMProcToObjcBlock4(FMBlock4 block);
29
+ id FXMProcToObjcBlock5(FMBlock5 block);
30
+ id FXMProcToObjcBlock6(FMBlock6 block);
31
+ id FXMProcToObjcBlock7(FMBlock7 block);
32
+ id FXMProcToObjcBlock8(FMBlock8 block);
33
+ id FXMProcToObjcBlock9(FMBlock9 block);
34
+ id FXMProcToObjcBlock10(FMBlock10 block);
35
+ id FXMProcToObjcBlock11(FMBlock11 block);
36
+ id FXMProcToObjcBlock12(FMBlock12 block);
37
+ id FXMProcToObjcBlock13(FMBlock13 block);
38
+ id FXMProcToObjcBlock14(FMBlock14 block);
39
+ id FXMProcToObjcBlock15(FMBlock15 block);
data/ext/FixedMotion.m ADDED
@@ -0,0 +1,27 @@
1
+ //
2
+ // FixedMotion.m
3
+ //
4
+
5
+ #import "FixedMotion.h"
6
+
7
+ #define FXMDefineProcToObjcBlockFunction(arity) \
8
+ id FXMProcToObjcBlock##arity(FMBlock##arity block) { \
9
+ return block; \
10
+ }
11
+
12
+ FXMDefineProcToObjcBlockFunction(0)
13
+ FXMDefineProcToObjcBlockFunction(1)
14
+ FXMDefineProcToObjcBlockFunction(2)
15
+ FXMDefineProcToObjcBlockFunction(3)
16
+ FXMDefineProcToObjcBlockFunction(4)
17
+ FXMDefineProcToObjcBlockFunction(5)
18
+ FXMDefineProcToObjcBlockFunction(6)
19
+ FXMDefineProcToObjcBlockFunction(7)
20
+ FXMDefineProcToObjcBlockFunction(8)
21
+ FXMDefineProcToObjcBlockFunction(9)
22
+ FXMDefineProcToObjcBlockFunction(10)
23
+ FXMDefineProcToObjcBlockFunction(11)
24
+ FXMDefineProcToObjcBlockFunction(12)
25
+ FXMDefineProcToObjcBlockFunction(13)
26
+ FXMDefineProcToObjcBlockFunction(14)
27
+ FXMDefineProcToObjcBlockFunction(15)
@@ -0,0 +1,11 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ lib_dir_path = File.dirname(File.expand_path(__FILE__))
6
+ ext_dir_path = File.join(File.dirname(lib_dir_path), 'ext')
7
+
8
+ Motion::Project::App.setup do |app|
9
+ app.files.unshift(Dir.glob(File.join(lib_dir_path, "fixed-motion/**/*.rb")))
10
+ app.vendor_project(ext_dir_path, :static)
11
+ end
@@ -0,0 +1,24 @@
1
+ module FixedMotion
2
+ def self.ObjcBlock(proc)
3
+ case proc.arity
4
+ when 0 then FXMProcToObjcBlock0(proc)
5
+ when 1 then FXMProcToObjcBlock1(proc)
6
+ when 2 then FXMProcToObjcBlock2(proc)
7
+ when 3 then FXMProcToObjcBlock3(proc)
8
+ when 4 then FXMProcToObjcBlock4(proc)
9
+ when 5 then FXMProcToObjcBlock5(proc)
10
+ when 6 then FXMProcToObjcBlock6(proc)
11
+ when 7 then FXMProcToObjcBlock7(proc)
12
+ when 8 then FXMProcToObjcBlock8(proc)
13
+ when 9 then FXMProcToObjcBlock9(proc)
14
+ when 10 then FXMProcToObjcBlock10(proc)
15
+ when 11 then FXMProcToObjcBlock11(proc)
16
+ when 12 then FXMProcToObjcBlock12(proc)
17
+ when 13 then FXMProcToObjcBlock13(proc)
18
+ when 14 then FXMProcToObjcBlock14(proc)
19
+ when 15 then FXMProcToObjcBlock15(proc)
20
+ else
21
+ raise "Unable to convert proc with #{proc.arity} arity to objc block"
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fixed-motion
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dave Lee
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Workarounds for RubyMotion
31
+ email:
32
+ - dave@kastiglione.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - README.md
38
+ - lib/fixed-motion/fixed-motion.rb
39
+ - lib/fixed-motion.rb
40
+ - ext/FixedMotion.h
41
+ - ext/FixedMotion.m
42
+ homepage: https://github.com/kastiglione/fixed-motion
43
+ licenses:
44
+ - MIT
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 1.8.23
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Workarounds for RubyMotion
67
+ test_files: []
68
+ has_rdoc: