ib 0.1.2 → 0.1.3
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 +24 -13
- data/ib.gemspec +1 -1
- data/lib/ib/outlets.rb +4 -1
- data/lib/ib/parser.rb +19 -6
- data/lib/ib/tasks.rb +1 -1
- data/lib/ib/version.rb +1 -1
- data/spec/fixtures/custom_view.rb +14 -0
- data/spec/generator_spec.rb +4 -0
- data/spec/parser_spec.rb +2 -2
- data/template/controller.erb +3 -7
- metadata +5 -5
data/README.md
CHANGED
@@ -47,17 +47,31 @@ extend your class with IB module
|
|
47
47
|
class HelloController < UIViewController
|
48
48
|
extend IB
|
49
49
|
|
50
|
-
attr_accessor :title
|
51
|
-
|
52
50
|
# define ib outlet
|
53
|
-
|
54
|
-
|
51
|
+
outlet_accessor :title, UILabel # IBOutlet UILabel * title;
|
52
|
+
outlet_accessor :untyped_label # IBOutlet id untyped_label;
|
55
53
|
|
56
|
-
|
54
|
+
# define ib action
|
55
|
+
def someAction sender
|
57
56
|
end
|
57
|
+
end
|
58
|
+
```
|
58
59
|
|
59
|
-
|
60
|
-
|
60
|
+
**NOTE:** If you include methods and attributes from module, you can use `ib_outlet` and `ib_action` to make them visible in designer
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
module TouchLogger
|
64
|
+
def controlTouched sender
|
65
|
+
puts "touched"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class LogController < UIViewController
|
70
|
+
extend IB
|
71
|
+
|
72
|
+
include TouchLogger
|
73
|
+
|
74
|
+
ib_action :controlTouched
|
61
75
|
end
|
62
76
|
```
|
63
77
|
|
@@ -78,19 +92,16 @@ The generated file:
|
|
78
92
|
class HelloController < UIViewController
|
79
93
|
extend IB
|
80
94
|
|
81
|
-
attr_accessor :data_source
|
95
|
+
attr_accessor :data_source
|
82
96
|
|
83
97
|
## ib outlets
|
84
|
-
|
85
|
-
|
98
|
+
outlet_accessor :scroller, UIScrollView
|
99
|
+
outlet_accessor :btn_hello
|
86
100
|
|
87
101
|
def say_hello(sender)
|
88
102
|
# TODO Implement action here
|
89
103
|
end
|
90
104
|
|
91
|
-
## ib action
|
92
|
-
ib_action :say_hello
|
93
|
-
|
94
105
|
end
|
95
106
|
```
|
96
107
|
|
data/ib.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/ib/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Yury Korolev", "Francis Chong"]
|
6
6
|
gem.email = ["yury.korolev@gmail.com", "francis@ignition.hk"]
|
7
|
-
gem.description = %q{
|
7
|
+
gem.description = %q{Magic rubymotion ib outlets support}
|
8
8
|
gem.summary = %q{Small portion of love to interface builder with rubymotion}
|
9
9
|
gem.homepage = ""
|
10
10
|
|
data/lib/ib/outlets.rb
CHANGED
data/lib/ib/parser.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
class IB::Parser
|
2
|
+
CLASS_REGEX = /^\s*class\s+([a-zA-Z][_a-zA-Z0-9]+)\s*<\s*([a-zA-Z][_a-zA-Z0-9]+)/
|
3
|
+
OUTLET_REGEX = /^\s+(ib_outlet|outlet_accessor)\s+:([a-zA-Z][_a-zA-Z0-9]*)\s*?(,\s*['"]?([a-zA-Z][_a-zA-Z0-9]+))?/
|
4
|
+
METHOD_REF_REGEX = /^\s+(ib_action)\s+:([a-zA-Z][_a-zA-Z0-9]*)/
|
5
|
+
METHOD_DEF_REGEX = /^\s+(def)\s+([a-zA-Z][_a-zA-Z0-9]*)([\s(]+)([a-zA-Z][_a-zA-Z0-9]*)([\s)]*)(#.*)?$/
|
6
|
+
ACTION_REGEX = Regexp.union METHOD_DEF_REGEX, METHOD_REF_REGEX
|
7
|
+
|
2
8
|
def find_all(dir)
|
3
9
|
all = {}
|
4
10
|
Dir.glob("#{dir}/**/*.rb") do |file|
|
@@ -12,11 +18,10 @@ class IB::Parser
|
|
12
18
|
def find(path)
|
13
19
|
src = File.read(path)
|
14
20
|
info = {class: find_class(src)}
|
15
|
-
|
21
|
+
|
16
22
|
return false if info[:class].length == 0
|
17
23
|
|
18
24
|
info[:outlets] = find_outlets(src)
|
19
|
-
|
20
25
|
info[:actions] = find_actions(src)
|
21
26
|
|
22
27
|
info[:path] = path
|
@@ -25,18 +30,26 @@ class IB::Parser
|
|
25
30
|
end
|
26
31
|
|
27
32
|
def find_class src
|
28
|
-
src.scan
|
33
|
+
src.scan CLASS_REGEX
|
29
34
|
end
|
30
35
|
|
31
36
|
def find_outlets src
|
32
37
|
outlets = []
|
33
|
-
src.scan
|
34
|
-
outlets << [groups[
|
38
|
+
src.scan OUTLET_REGEX do |groups|
|
39
|
+
outlets << [groups[1], groups[3] || "id"]
|
35
40
|
end
|
36
41
|
outlets
|
37
42
|
end
|
38
43
|
|
39
44
|
def find_actions src
|
40
|
-
|
45
|
+
actions = []
|
46
|
+
src.scan ACTION_REGEX do |groups|
|
47
|
+
if groups[0] == "def"
|
48
|
+
actions << [groups[1]]
|
49
|
+
elsif groups[6] == "ib_action"
|
50
|
+
actions << [groups[7]]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
actions.uniq
|
41
54
|
end
|
42
55
|
end
|
data/lib/ib/tasks.rb
CHANGED
data/lib/ib/version.rb
CHANGED
@@ -6,6 +6,20 @@ class CustomView < UIView
|
|
6
6
|
|
7
7
|
ib_outlet :untyped_label
|
8
8
|
|
9
|
+
outlet_accessor :yellowLabel
|
10
|
+
|
9
11
|
ib_action :someAction
|
12
|
+
|
13
|
+
def anotherAction button
|
14
|
+
end
|
15
|
+
|
16
|
+
def actionWithComment sender # test
|
17
|
+
end
|
18
|
+
|
19
|
+
def actionWithBrackets(sender)
|
20
|
+
end
|
21
|
+
|
22
|
+
def notAction with, toArgs
|
23
|
+
end
|
10
24
|
|
11
25
|
end
|
data/spec/generator_spec.rb
CHANGED
@@ -12,8 +12,12 @@ describe IB::Generator do
|
|
12
12
|
@property IBOutlet UIGreenLabel * greenLabel;
|
13
13
|
@property IBOutlet UILabel * redLabel;
|
14
14
|
@property IBOutlet id untyped_label;
|
15
|
+
@property IBOutlet id yellowLabel;
|
15
16
|
|
16
17
|
-(IBAction) someAction:(id) sender;
|
18
|
+
-(IBAction) anotherAction:(id) sender;
|
19
|
+
-(IBAction) actionWithComment:(id) sender;
|
20
|
+
-(IBAction) actionWithBrackets:(id) sender;
|
17
21
|
|
18
22
|
@end
|
19
23
|
|
data/spec/parser_spec.rb
CHANGED
@@ -6,8 +6,8 @@ describe IB::Parser do
|
|
6
6
|
it "finds outlets and actions" do
|
7
7
|
info = IB::Parser.new.find("spec/fixtures/custom_view.rb")
|
8
8
|
info[:class].should == [["CustomView", "UIView"]]
|
9
|
-
info[:outlets].should == [["greenLabel", "UIGreenLabel"], ["redLabel", "UILabel"], ["untyped_label", "id"]]
|
10
|
-
info[:actions].should == [["someAction"]]
|
9
|
+
info[:outlets].should == [["greenLabel", "UIGreenLabel"], ["redLabel", "UILabel"], ["untyped_label", "id"], ["yellowLabel", "id"]]
|
10
|
+
info[:actions].should == [["someAction"], ["anotherAction"], ["actionWithComment"], ["actionWithBrackets"]]
|
11
11
|
end
|
12
12
|
|
13
13
|
it "detects simple classes" do
|
data/template/controller.erb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
class <%= controller_name %> < <%= controller_type %>
|
2
2
|
extend IB
|
3
3
|
|
4
|
-
attr_accessor <%=
|
4
|
+
attr_accessor <%= options[:accessors].collect{|acc| ":#{acc}"}.join(", ") %>
|
5
5
|
|
6
6
|
<% if options[:outlets].length > 0 %>
|
7
7
|
## ib outlets
|
8
8
|
<% options[:outlets].each do |name, type| -%>
|
9
9
|
<% if type.empty? || type == "id" -%>
|
10
|
-
|
10
|
+
outlet_accessor :<%= name %>
|
11
11
|
<% else -%>
|
12
|
-
|
12
|
+
outlet_accessor :<%= name %>, <%= type %>
|
13
13
|
<% end -%>
|
14
14
|
<% end -%>
|
15
15
|
<% end -%>
|
@@ -21,10 +21,6 @@ class <%= controller_name %> < <%= controller_type %>
|
|
21
21
|
end
|
22
22
|
<% end -%>
|
23
23
|
|
24
|
-
## ib actions
|
25
|
-
<% options[:actions].each do |action| -%>
|
26
|
-
ib_action :<%= action %>
|
27
|
-
<% end -%>
|
28
24
|
<% end -%>
|
29
25
|
|
30
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-08-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: xcodeproj
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '2.0'
|
63
|
-
description:
|
63
|
+
description: Magic rubymotion ib outlets support
|
64
64
|
email:
|
65
65
|
- yury.korolev@gmail.com
|
66
66
|
- francis@ignition.hk
|
@@ -108,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '0'
|
109
109
|
segments:
|
110
110
|
- 0
|
111
|
-
hash:
|
111
|
+
hash: 4072317502199486980
|
112
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
version: '0'
|
118
118
|
segments:
|
119
119
|
- 0
|
120
|
-
hash:
|
120
|
+
hash: 4072317502199486980
|
121
121
|
requirements: []
|
122
122
|
rubyforge_project:
|
123
123
|
rubygems_version: 1.8.24
|