fixed-motion 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: