motion-util 0.1.4 → 0.1.6
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 +13 -7
- data/lib/motion-util/command/generator.rb +6 -2
- data/lib/motion-util/command/ib_header.rb +24 -8
- data/lib/motion-util/version.rb +1 -1
- data/template/class/navigation_controller.rb +24 -0
- data/template/class/tab_bar_controller.rb +23 -0
- data/template/class/table_view_controller.rb +55 -13
- data/template/class/view_controller.rb +24 -0
- data/test/test_generator.rb +11 -1
- data/test/test_ib_header.rb +3 -0
- metadata +3 -3
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Installation
|
|
12
12
|
Usage
|
13
13
|
===
|
14
14
|
|
15
|
-
Generate class file.
|
15
|
+
### Generate class file.
|
16
16
|
|
17
17
|
motion-util generate model Foo
|
18
18
|
motion-util generate controller Foo
|
@@ -26,7 +26,7 @@ Generate class file.
|
|
26
26
|
motion-util g model Foo
|
27
27
|
motion-util generation model Foo
|
28
28
|
|
29
|
-
Generate Objective-C header file for Interface Builder.
|
29
|
+
### Generate Objective-C header file for Interface Builder.
|
30
30
|
|
31
31
|
motion-util ib_header
|
32
32
|
|
@@ -34,7 +34,8 @@ Generate Objective-C header file for Interface Builder.
|
|
34
34
|
motion-util ibh
|
35
35
|
|
36
36
|
|
37
|
-
|
37
|
+
Your ruby motion class:
|
38
|
+
|
38
39
|
<pre>
|
39
40
|
# app_delegate.rb
|
40
41
|
class AppDelegate
|
@@ -47,19 +48,24 @@ class AppDelegate
|
|
47
48
|
@window.makeKeyAndVisible
|
48
49
|
true
|
49
50
|
end
|
51
|
+
|
52
|
+
def showDialog sender # IBAction
|
53
|
+
end
|
54
|
+
|
50
55
|
end
|
51
56
|
</pre>
|
52
57
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
58
|
+
@type_info is a marker to describe a class by Objective-C.
|
59
|
+
If it's not specified it will be id type.
|
60
|
+
|
61
|
+
After execution 'motion-util ibh', AppDelegate.h was generated in tmp/header directory like this.
|
57
62
|
|
58
63
|
<pre>
|
59
64
|
// AppDelegate.h
|
60
65
|
@interface AppDelegate : NSObject
|
61
66
|
@property (strong, nonatomic) IBOutlet UIWindow *window;
|
62
67
|
@property (strong, nonatomic) IBOutlet UIViewController *controller;
|
68
|
+
- (IBAction)showDialog:(id)sender;
|
63
69
|
@end
|
64
70
|
</pre>
|
65
71
|
|
@@ -38,13 +38,13 @@ module Motion
|
|
38
38
|
|
39
39
|
def context
|
40
40
|
c = File.read File.join(@template_dir, "class", file_type + ".rb")
|
41
|
-
c.gsub! /#\{class_name\}/,
|
41
|
+
c.gsub! /#\{class_name\}/, objc_class_name
|
42
42
|
c
|
43
43
|
end
|
44
44
|
|
45
45
|
def spec_context
|
46
46
|
c = File.read File.join(@template_dir, "spec", "spec.rb")
|
47
|
-
c.gsub! /#\{class_name\}/,
|
47
|
+
c.gsub! /#\{class_name\}/, objc_class_name
|
48
48
|
c.gsub! /#\{camelized_file_type\}/, camelized_file_type
|
49
49
|
c
|
50
50
|
end
|
@@ -103,6 +103,10 @@ module Motion
|
|
103
103
|
@class_name
|
104
104
|
end
|
105
105
|
|
106
|
+
def objc_class_name
|
107
|
+
class_name.split('_').collect{|e| e.capitalize}.join
|
108
|
+
end
|
109
|
+
|
106
110
|
def camelized_file_type
|
107
111
|
case file_type
|
108
112
|
when "general", "model"
|
@@ -22,7 +22,7 @@ module Motion
|
|
22
22
|
|
23
23
|
class IbHeader
|
24
24
|
|
25
|
-
attr_reader :class_name, :super_name, :properties
|
25
|
+
attr_reader :class_name, :super_name, :properties, :actions
|
26
26
|
|
27
27
|
def source= source
|
28
28
|
@source = source
|
@@ -32,6 +32,7 @@ module Motion
|
|
32
32
|
def context
|
33
33
|
lines = []
|
34
34
|
lines << "@interface #{@class_name} : #{@super_name || 'NSObject'}"
|
35
|
+
|
35
36
|
properties.each do |k, v|
|
36
37
|
if v[:readonly]
|
37
38
|
lines << "@property (strong, nonatomic, readonly) IBOutlet #{type_name_of v[:type]}#{k};"
|
@@ -39,6 +40,11 @@ module Motion
|
|
39
40
|
lines << "@property (strong, nonatomic) IBOutlet #{type_name_of v[:type]}#{k};"
|
40
41
|
end
|
41
42
|
end
|
43
|
+
|
44
|
+
actions.each do |a|
|
45
|
+
lines << "- (IBAction)#{a[0]}:(id)#{a[1]};"
|
46
|
+
end
|
47
|
+
|
42
48
|
lines << "@end"
|
43
49
|
lines << ""
|
44
50
|
lines.join "\n"
|
@@ -59,14 +65,24 @@ module Motion
|
|
59
65
|
@super_name = $3
|
60
66
|
|
61
67
|
@properties = {}
|
68
|
+
@actions = []
|
62
69
|
@source.split("\n").each do |l|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
+
|
71
|
+
case l
|
72
|
+
|
73
|
+
# property
|
74
|
+
when /(attr_accessor|attr_reader)\s+([A-Za-z0-9:, ]+)(#\s*(@type_info\s+(\w+)?)?)?/
|
75
|
+
type = type_of $5
|
76
|
+
$2.split(",").each do |p|
|
77
|
+
p = eval(p.strip)
|
78
|
+
@properties[p] = { type:type }
|
79
|
+
@properties[p].merge!(readonly:true) if $1 == "attr_reader"
|
80
|
+
end if $2
|
81
|
+
|
82
|
+
# action
|
83
|
+
when /def\s+(.+)\s+(.+)\s+#\s*IBAction/
|
84
|
+
actions << [$1, $2]
|
85
|
+
end
|
70
86
|
end
|
71
87
|
end
|
72
88
|
|
data/lib/motion-util/version.rb
CHANGED
@@ -19,16 +19,40 @@ class #{class_name}NavigationController < UINavigationController
|
|
19
19
|
end
|
20
20
|
=end
|
21
21
|
|
22
|
+
=begin
|
23
|
+
def viewDidAppear animated
|
24
|
+
super
|
25
|
+
end
|
26
|
+
=end
|
27
|
+
|
22
28
|
=begin
|
23
29
|
def viewWillDisappear animated
|
24
30
|
super
|
25
31
|
end
|
26
32
|
=end
|
27
33
|
|
34
|
+
=begin
|
35
|
+
def viewDidDisappear animated
|
36
|
+
super
|
37
|
+
end
|
38
|
+
=end
|
39
|
+
|
28
40
|
=begin
|
29
41
|
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
30
42
|
interfaceOrientation == UIInterfaceOrientationPortrait
|
31
43
|
end
|
32
44
|
=end
|
33
45
|
|
46
|
+
=begin
|
47
|
+
def shouldAutorotate
|
48
|
+
true
|
49
|
+
end
|
50
|
+
=end
|
51
|
+
|
52
|
+
=begin
|
53
|
+
def supportedInterfaceOrientations
|
54
|
+
UIInterfaceOrientationMaskPortrait
|
55
|
+
end
|
56
|
+
=end
|
57
|
+
|
34
58
|
end
|
@@ -19,17 +19,40 @@ class #{class_name}TabBarController < UITabBarController
|
|
19
19
|
end
|
20
20
|
=end
|
21
21
|
|
22
|
+
=begin
|
23
|
+
def viewDidAppear animated
|
24
|
+
super
|
25
|
+
end
|
26
|
+
=end
|
27
|
+
|
22
28
|
=begin
|
23
29
|
def viewWillDisappear animated
|
24
30
|
super
|
25
31
|
end
|
26
32
|
=end
|
27
33
|
|
34
|
+
=begin
|
35
|
+
def viewDidDisappear animated
|
36
|
+
super
|
37
|
+
end
|
38
|
+
=end
|
39
|
+
|
28
40
|
=begin
|
29
41
|
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
30
42
|
interfaceOrientation == UIInterfaceOrientationPortrait
|
31
43
|
end
|
32
44
|
=end
|
33
45
|
|
46
|
+
=begin
|
47
|
+
def shouldAutorotate
|
48
|
+
true
|
49
|
+
end
|
50
|
+
=end
|
51
|
+
|
52
|
+
=begin
|
53
|
+
def supportedInterfaceOrientations
|
54
|
+
UIInterfaceOrientationMaskPortrait
|
55
|
+
end
|
56
|
+
=end
|
34
57
|
|
35
58
|
end
|
@@ -27,18 +27,42 @@ class #{class_name}TableViewController < UITableViewController
|
|
27
27
|
end
|
28
28
|
=end
|
29
29
|
|
30
|
+
=begin
|
31
|
+
def viewDidAppear animated
|
32
|
+
super
|
33
|
+
end
|
34
|
+
=end
|
35
|
+
|
30
36
|
=begin
|
31
37
|
def viewWillDisappear animated
|
32
38
|
super
|
33
39
|
end
|
34
40
|
=end
|
35
41
|
|
42
|
+
=begin
|
43
|
+
def viewDidDisappear animated
|
44
|
+
super
|
45
|
+
end
|
46
|
+
=end
|
47
|
+
|
36
48
|
=begin
|
37
49
|
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
38
50
|
interfaceOrientation == UIInterfaceOrientationPortrait
|
39
51
|
end
|
40
52
|
=end
|
41
53
|
|
54
|
+
=begin
|
55
|
+
def shouldAutorotate
|
56
|
+
true
|
57
|
+
end
|
58
|
+
=end
|
59
|
+
|
60
|
+
=begin
|
61
|
+
def supportedInterfaceOrientations
|
62
|
+
UIInterfaceOrientationMaskPortrait
|
63
|
+
end
|
64
|
+
=end
|
65
|
+
|
42
66
|
|
43
67
|
=begin
|
44
68
|
def numberOfSectionsInTableView tableView
|
@@ -52,21 +76,50 @@ class #{class_name}TableViewController < UITableViewController
|
|
52
76
|
end
|
53
77
|
=end
|
54
78
|
|
79
|
+
=begin
|
80
|
+
def tableView tableView, titleForHeaderInSection:section
|
81
|
+
nil
|
82
|
+
end
|
83
|
+
=end
|
84
|
+
|
55
85
|
=begin
|
56
86
|
CellIdentifier = "Cell"
|
57
87
|
def tableView tableView, cellForRowAtIndexPath:indexPath
|
58
|
-
cell = tableView.dequeueReusableCellWithIdentifier CellIdentifier
|
59
|
-
cell ||= UITableViewCell.alloc.initWithStyle UITableViewCellStyleDefault, reuseIdentifier:CellIdentifier
|
88
|
+
cell = tableView.dequeueReusableCellWithIdentifier CellIdentifier, forIndexPath:indexPath
|
60
89
|
cell.textLabel.text = "Ruby Motion"
|
61
90
|
cell
|
62
91
|
end
|
63
92
|
=end
|
64
93
|
|
94
|
+
=begine
|
95
|
+
def tableView tableView, didSelectRowAtIndexPath:indexPath
|
96
|
+
tableView.deselectRowAtIndexPath indexPath, animated:true
|
97
|
+
end
|
98
|
+
=end
|
99
|
+
|
65
100
|
=begin
|
66
101
|
def tableView tableView, canEditRowAtIndexPath:indexPath
|
67
102
|
true
|
68
103
|
end
|
69
104
|
=end
|
105
|
+
|
106
|
+
=begine
|
107
|
+
def tableView tableView, editingStyleForRowAtIndexPath:indexPath
|
108
|
+
UITableViewCellEditingStyleDelete
|
109
|
+
end
|
110
|
+
=end
|
111
|
+
|
112
|
+
=begin
|
113
|
+
def tableView tableView, canMoveRowAtIndexPath:indexPath
|
114
|
+
true
|
115
|
+
end
|
116
|
+
=end
|
117
|
+
|
118
|
+
=begin
|
119
|
+
def tableView tableView, moveRowAtIndexPath:fromIndexPath, toIndexPath:toIndexPath
|
120
|
+
toIndexPath
|
121
|
+
end
|
122
|
+
=end
|
70
123
|
|
71
124
|
=begin
|
72
125
|
def tableView tableView, commitEditingStyle:editingStyle, forRowAtIndexPath:indexPath
|
@@ -79,15 +132,4 @@ class #{class_name}TableViewController < UITableViewController
|
|
79
132
|
end
|
80
133
|
=end
|
81
134
|
|
82
|
-
=begin
|
83
|
-
def tableView tableView, moveRowAtIndexPath:fromIndexPath, toIndexPath:toIndexPath
|
84
|
-
end
|
85
|
-
=end
|
86
|
-
|
87
|
-
=begin
|
88
|
-
def tableView tableView, canMoveRowAtIndexPath:indexPath
|
89
|
-
true
|
90
|
-
end
|
91
|
-
=end
|
92
|
-
|
93
135
|
end
|
@@ -26,16 +26,40 @@ class #{class_name}ViewController < UIViewController
|
|
26
26
|
end
|
27
27
|
=end
|
28
28
|
|
29
|
+
=begin
|
30
|
+
def viewDidAppear animated
|
31
|
+
super
|
32
|
+
end
|
33
|
+
=end
|
34
|
+
|
29
35
|
=begin
|
30
36
|
def viewWillDisappear animated
|
31
37
|
super
|
32
38
|
end
|
33
39
|
=end
|
34
40
|
|
41
|
+
=begin
|
42
|
+
def viewDidDisappear animated
|
43
|
+
super
|
44
|
+
end
|
45
|
+
=end
|
46
|
+
|
35
47
|
=begin
|
36
48
|
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
37
49
|
interfaceOrientation == UIInterfaceOrientationPortrait
|
38
50
|
end
|
39
51
|
=end
|
40
52
|
|
53
|
+
=begin
|
54
|
+
def shouldAutorotate
|
55
|
+
true
|
56
|
+
end
|
57
|
+
=end
|
58
|
+
|
59
|
+
=begin
|
60
|
+
def supportedInterfaceOrientations
|
61
|
+
UIInterfaceOrientationMaskPortrait
|
62
|
+
end
|
63
|
+
=end
|
64
|
+
|
41
65
|
end
|
data/test/test_generator.rb
CHANGED
@@ -4,6 +4,12 @@ require 'motion-util'
|
|
4
4
|
|
5
5
|
|
6
6
|
include Motion::Util
|
7
|
+
class Generator
|
8
|
+
def get_objc_class_name
|
9
|
+
objc_class_name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
|
8
14
|
class TestGenerate < Test::Unit::TestCase
|
9
15
|
|
@@ -167,6 +173,10 @@ end
|
|
167
173
|
EOF
|
168
174
|
assert_equal expected, @generator.spec_context
|
169
175
|
end
|
170
|
-
|
176
|
+
|
177
|
+
test "check objc class name" do
|
178
|
+
ARGV.replace %w(generate model foo_bar)
|
179
|
+
assert_equal "FooBar", @generator.get_objc_class_name
|
180
|
+
end
|
171
181
|
end
|
172
182
|
|
data/test/test_ib_header.rb
CHANGED
@@ -56,6 +56,8 @@ class Foo
|
|
56
56
|
attr_accessor :foo # no type
|
57
57
|
attr_accessor :bar # @type_info UILabel
|
58
58
|
attr_reader :hoge # @type_info UIView
|
59
|
+
def action sender # IBAction
|
60
|
+
end
|
59
61
|
end
|
60
62
|
EOF
|
61
63
|
|
@@ -64,6 +66,7 @@ end
|
|
64
66
|
@property (strong, nonatomic) IBOutlet id foo;
|
65
67
|
@property (strong, nonatomic) IBOutlet UILabel *bar;
|
66
68
|
@property (strong, nonatomic, readonly) IBOutlet UIView *hoge;
|
69
|
+
- (IBAction)action:(id)sender;
|
67
70
|
@end
|
68
71
|
EOF
|
69
72
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: It generate class and spec files.
|
15
15
|
email:
|
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
63
|
version: '0'
|
64
64
|
requirements: []
|
65
65
|
rubyforge_project: motion-util
|
66
|
-
rubygems_version: 1.8.
|
66
|
+
rubygems_version: 1.8.25
|
67
67
|
signing_key:
|
68
68
|
specification_version: 3
|
69
69
|
summary: Convenient command set for Ruby Motion.
|