cbt 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +221 -0
- data/ROADMAP +33 -0
- data/Rakefile +3 -0
- data/bin/cbt +130 -0
- data/cbt.gemspec +19 -0
- data/config/components.yml +20 -0
- data/config/members.yml +16 -0
- data/docs/css/jsgantt.css +53 -0
- data/docs/gantt.html +330 -0
- data/docs/js/jsgantt.js +1681 -0
- data/examples/config/components.yml +19 -0
- data/lib/cbt.rb +13 -0
- data/lib/cbt/app.rb +93 -0
- data/lib/cbt/checkout.rb +155 -0
- data/lib/cbt/cleanup.rb +7 -0
- data/lib/cbt/component.rb +91 -0
- data/lib/cbt/creator.rb +75 -0
- data/lib/cbt/diagram.rb +50 -0
- data/lib/cbt/digester.rb +59 -0
- data/lib/cbt/girc.rb +169 -0
- data/lib/cbt/version.rb +3 -0
- data/lib/luobo/cbt.rb +25 -0
- data/lib/luobo/lua.rb +3 -0
- data/lib/luobo/settings.rb +4 -0
- data/lib/luobo/spec.rb +4 -0
- data/spec/app_spec.rb +49 -0
- data/spec/creator_spec.rb +39 -0
- data/spec/digester_spec.rb +55 -0
- data/spec/spec_helper.rb +8 -0
- data/templates/Class.lua.erb +18 -0
- data/templates/Class.mock.lua.erb +20 -0
- data/templates/Class_with_super.lua.erb +22 -0
- data/templates/Class_with_super.mock.lua.erb +23 -0
- data/templates/main.lua.erb +2 -0
- data/templates/part.lua.erb +9 -0
- data/templates/part.mock.lua.erb +11 -0
- data/templates/part_with_super.lua.erb +13 -0
- data/templates/part_with_super.mock.lua.erb +13 -0
- data/templates/spec.lua.erb +3 -0
- metadata +143 -0
data/README.md
ADDED
@@ -0,0 +1,221 @@
|
|
1
|
+
CBT - A Bundle of Corona SDK Build Tools
|
2
|
+
==============================================
|
3
|
+
|
4
|
+
Concepts
|
5
|
+
------------
|
6
|
+
|
7
|
+
You split your CoronaSDK based mobile app into many `component`s.
|
8
|
+
|
9
|
+
Each component contains one or more `.lua` module files, a series of `*_spec.lua`
|
10
|
+
unit-test files, a `main.lua` file used to run the unit-tests, and may also have
|
11
|
+
some asset files (pictures and audio files).
|
12
|
+
|
13
|
+
The default location to store components under `components/` folder, one
|
14
|
+
sub-folder corresponds for one component. You create/edit your `.lua` files
|
15
|
+
under the `components/` folder, and use
|
16
|
+
|
17
|
+
$ cbt
|
18
|
+
|
19
|
+
to copy those files along with other component files to `workspace` folder, where
|
20
|
+
you check the behavior of your component using Corona's simulator. Cbt command will
|
21
|
+
figure out which component you are working on from the current git branch name (we will
|
22
|
+
describe more options and commands later).
|
23
|
+
|
24
|
+
All your components are configured in `config/components.yml` file.
|
25
|
+
|
26
|
+
Every `.lua` file and asset file may have several platform-specific versions, include:
|
27
|
+
|
28
|
+
- iOS: for iphone and ipad build
|
29
|
+
- android: for android build
|
30
|
+
- mock: provide a **mock-up** module for other component's development
|
31
|
+
- debug: the default file that used for development and test
|
32
|
+
|
33
|
+
For example you may have `Timer.mock.lua`, `Timer.android.lua` ... Where `cbt` will
|
34
|
+
chose one of them to use. Also, there is a mechanism to include platform specific
|
35
|
+
code inside a file using Luobo syntax (we will reveal the details later).
|
36
|
+
|
37
|
+
Component Development
|
38
|
+
--------------------------
|
39
|
+
|
40
|
+
A **workspace** is a sub-folder under `workspaces`, like `workspace/component_platform`.
|
41
|
+
|
42
|
+
You use `cbt checkout` command to create and update a workspace.
|
43
|
+
|
44
|
+
For example,
|
45
|
+
|
46
|
+
$ cbt checkout --platform ios --require debug component_a
|
47
|
+
|
48
|
+
Will create (or update existing contents inside) `workspaces/component_a_ios`, the
|
49
|
+
`.lua` and asset files for component `components_a` are copied to the workspace using
|
50
|
+
their `ios` version, but files that `components_a` requires from other components
|
51
|
+
will be copied using their `debug` version.
|
52
|
+
|
53
|
+
The default value for the developing component and required components are `debug` and `mock`, so
|
54
|
+
|
55
|
+
$ cbt checkout component_a
|
56
|
+
|
57
|
+
means
|
58
|
+
|
59
|
+
$ cbt checkout --platform debug --require mock component_a
|
60
|
+
|
61
|
+
Work with Dev-flow Tool
|
62
|
+
---------------------------
|
63
|
+
|
64
|
+
Create tasks with the component name in format like one of the follows
|
65
|
+
|
66
|
+
[++] component/component_name: xxxxxx
|
67
|
+
[++] comp/component_name: xxxxxx
|
68
|
+
[++] ct/component_name: xxxxxx
|
69
|
+
|
70
|
+
`cbt` commands will respect `component_name` as the current working component
|
71
|
+
so you do not need to specify it in the command line:
|
72
|
+
|
73
|
+
$ cbt checkout
|
74
|
+
|
75
|
+
under `ct/comp_a` branch will checkout `comp_a`. Also, `checkout` is the default
|
76
|
+
command for cbt tool, so the above command can be write as simple as:
|
77
|
+
|
78
|
+
$ cbt
|
79
|
+
|
80
|
+
(same as `cbt checkout --platform debug --require mock component_a` if you are
|
81
|
+
in a proper git branch).
|
82
|
+
|
83
|
+
**NOTE**: do not edit any file under `workspace` folder. Usually you should add
|
84
|
+
`workspace` in you `.gitignore` file.
|
85
|
+
|
86
|
+
Start A New Component
|
87
|
+
--------------------------
|
88
|
+
|
89
|
+
To begin a new component development, first you add an entry in `config/components.yml` like:
|
90
|
+
|
91
|
+
components:
|
92
|
+
component_name1:
|
93
|
+
lua_modules: [lua_file1, SomeClass<SuperClass]
|
94
|
+
|
95
|
+
This defined a component `component_name1` and two `.lua` module files inside the component.
|
96
|
+
|
97
|
+
If your component only have one module `.lua` file and has the same name as the component itself,
|
98
|
+
you can omit the `module` key in component definitions.
|
99
|
+
|
100
|
+
`SomeClass<SuperClass` means `SomeClass` will inherited from `SuperClass`.
|
101
|
+
|
102
|
+
Then you can:
|
103
|
+
|
104
|
+
$ cbt create component_name1
|
105
|
+
|
106
|
+
to create file skeleton for those `.lua` files under `components/component_name1`.
|
107
|
+
|
108
|
+
Then you:
|
109
|
+
|
110
|
+
$ cbt checkout component_name1
|
111
|
+
|
112
|
+
to create a folder under `workspaces/component_name1`, include the `debug` version of `lua_file1.lua` ...
|
113
|
+
and `mock` version of _ALL_ other files from other components.
|
114
|
+
|
115
|
+
$ cbt cleanup
|
116
|
+
|
117
|
+
or
|
118
|
+
|
119
|
+
$ cbt close
|
120
|
+
|
121
|
+
Will safely delete files and folders under workspace.
|
122
|
+
|
123
|
+
Platforms
|
124
|
+
--------------------
|
125
|
+
|
126
|
+
Each `.lua` module file and asset file may has several platform-specific versions of them.
|
127
|
+
|
128
|
+
The current supported platforms include `ios`, `android`, `mock` and `debug`. You name you file like:
|
129
|
+
|
130
|
+
comp.ios.lua
|
131
|
+
comp.mock.lua
|
132
|
+
...
|
133
|
+
|
134
|
+
Debug is the default platform so you could use just `comp.lua`.
|
135
|
+
|
136
|
+
Asset files use the similar naming role, such as `slash.png`, `slash.mock.png`, `slash.ios.png` ...
|
137
|
+
|
138
|
+
The debug version `component.lua` is the _default_ version, will be used if other version is not available.
|
139
|
+
Ensure it exists otherwise `cbt` raise errors.
|
140
|
+
|
141
|
+
Usually you do not need a `component.debug.lua` (as `component.lua` is the debug version already),
|
142
|
+
but you can provide this file if you will edit `component.lua` for a while, but do not prevent others from
|
143
|
+
build a debug app use your stable version of `component.lua` file.
|
144
|
+
|
145
|
+
Luobo Converters
|
146
|
+
--------------------
|
147
|
+
|
148
|
+
The `mock` version of the component should be implement as quickly as possible, provide only
|
149
|
+
`mocking` functions of public APIs. This helps other component's development, as they can interact with
|
150
|
+
a quick version of _your_ component.
|
151
|
+
|
152
|
+
For `ios`, `android` and `debug` versions of your component, usually they are not so different so you
|
153
|
+
do not need to separate them to different files. An other way to provide platform-specific code is use
|
154
|
+
Luobo (search luobo-gem) converter's syntax:
|
155
|
+
|
156
|
+
IOS ->
|
157
|
+
some_code_only_for_iOS
|
158
|
+
|
159
|
+
Android ->
|
160
|
+
some_code_only_for_android
|
161
|
+
|
162
|
+
DEBUG ->
|
163
|
+
...
|
164
|
+
|
165
|
+
Use indent to end the code block. If you want no indent before your code, use:
|
166
|
+
|
167
|
+
IOS: noindent ->
|
168
|
+
code_without_indent
|
169
|
+
|
170
|
+
Refer `luobo-gem` for more syntax details.
|
171
|
+
|
172
|
+
By this way, usually you only need platform-specific lua file `component_name.lua` and
|
173
|
+
`component_name.mock.lua`, and occasionally provide a `component_name.debug.lua` while
|
174
|
+
you make a long term development on that component.
|
175
|
+
|
176
|
+
API and SPEC tests
|
177
|
+
----------------------
|
178
|
+
|
179
|
+
You should provide the same API for both build and mock version of your component.
|
180
|
+
|
181
|
+
You should have a `component_lua_file_spec.lua` file as unit test for each `.lua` module file.
|
182
|
+
|
183
|
+
This spec file should in `Luobo::CoronaSpec` format.
|
184
|
+
|
185
|
+
Components Diagram
|
186
|
+
---------------------
|
187
|
+
|
188
|
+
Based on `components.yml` and API function definition in your source lua file (the debug version
|
189
|
+
will be parsed),
|
190
|
+
|
191
|
+
$ cbt diagram
|
192
|
+
|
193
|
+
will create a series of diagram png file reflect component relationships under `docs` folder.
|
194
|
+
|
195
|
+
Class inherit relations and class method definitions will automatically handled. You can also create
|
196
|
+
custom relationship with:
|
197
|
+
|
198
|
+
# diagram -> SomeLuaModule related to
|
199
|
+
|
200
|
+
Strings after SomeLuaModule will become `label` of Graphviz's edge (arrow).
|
201
|
+
|
202
|
+
When you done your development of all components, issue `cbt build` to create a device build of
|
203
|
+
the whole app.
|
204
|
+
|
205
|
+
Build the Entire Application
|
206
|
+
---------------------------------
|
207
|
+
|
208
|
+
For example if you have a application names `dulcinea`, you define `main` as `lua_module` in it,
|
209
|
+
then you can build a distribution version as:
|
210
|
+
|
211
|
+
$ cbt checkout --platform ios --require_platform ios dulcinea
|
212
|
+
|
213
|
+
`build` is a alias of command `checkout` and will force `require_platform` to the same of `platform`
|
214
|
+
option. So the above command also can be issued as:
|
215
|
+
|
216
|
+
$ cbt build -p ios dulcinea
|
217
|
+
|
218
|
+
Which will results a `workspaces/dulcinea_ios` folder that contains files you can use to build
|
219
|
+
you application to distribute to AppStore.
|
220
|
+
|
221
|
+
|
data/ROADMAP
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
% ----
|
2
|
+
title: CBT - Corona Build Tools
|
3
|
+
status: producing
|
4
|
+
leader: huangw
|
5
|
+
moderator: xuyc
|
6
|
+
team: [liudx cuibg wangqh]
|
7
|
+
year: 2013
|
8
|
+
% ----
|
9
|
+
|
10
|
+
[+] design: define the interface of command line program 04/06 @huangw:04/06
|
11
|
+
[++] readme: rewrite readme document 04/06 @huangw:04/06
|
12
|
+
[++] test_design: design test strategy 04/06 @huangw:04/06
|
13
|
+
|
14
|
+
[+] alpha_release: implement all features 04/06-04/15 @huangw:04/08
|
15
|
+
[++] struct: create new directory structure 04/06-04/07 @huangw:04/07
|
16
|
+
[++] copy: copy library files to build directory 04/08-04/09 @huangw:04/08
|
17
|
+
|
18
|
+
[+] alpha2: implement all features under new design 04/06-04/20 @huangw:05/23
|
19
|
+
[++] review_readme: review readme again 04/08 @huangw:04/08
|
20
|
+
[++] revise_cmd: revise command line options again 04/12 @huangw:04/12
|
21
|
+
[++] create: create skeleton files 04/12 @huangw:04/12
|
22
|
+
[++] digest: a mechanism for file contestency 04/12-04/13 @huangw:04/12
|
23
|
+
[++] revise_again: revise command structure again 04/15 @huangw:04/15
|
24
|
+
[++] cout: checkout lua and asset files 04/13-04/15 @huangw:04/17
|
25
|
+
[++] spec: spec test mechanism with TTS function 04/16-04/22 @huangw:04/19
|
26
|
+
[++] erd: create component-relationship diagram 04/22-04/23 @huangw:05/23
|
27
|
+
|
28
|
+
[+] release_v0.0.1: create gem for the first time 06/03 @huangw:06/04
|
29
|
+
|
30
|
+
[+] beta_release: fix functionalities 04/23-04/27 @huangw
|
31
|
+
[++] rewrite_beta: review and rewrite all functions 04/23-04/25 @huangw:10
|
32
|
+
|
33
|
+
[+] release_v0.1.0: first public release 04/27 @huangw
|
data/Rakefile
ADDED
data/bin/cbt
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: syn=ruby
|
3
|
+
|
4
|
+
# $: << 'lib' # debug only
|
5
|
+
|
6
|
+
require "cbt"
|
7
|
+
require "optparse"
|
8
|
+
require "term/ansicolor"
|
9
|
+
class String; include Term::ANSIColor end
|
10
|
+
require "dev_flow"
|
11
|
+
|
12
|
+
# setup for some constants
|
13
|
+
known_platforms = %w[ios android mock debug]
|
14
|
+
cmd_alias = {co: 'checkout', close: 'cleanup'}
|
15
|
+
|
16
|
+
# parse command line options
|
17
|
+
options = {}
|
18
|
+
optparse = OptionParser.new do |opt|
|
19
|
+
opt.banner = "Usage: cbt [OPTIONS] COMMAND [COMPONENT,COMPONENT,...]"
|
20
|
+
opt.separator ""
|
21
|
+
opt.separator "Commands:"
|
22
|
+
opt.separator " checkout: checkout file to workspace for development"
|
23
|
+
opt.separator " build : an alias of checkout, but force require files use"
|
24
|
+
opt.separator " the same platform version as the current component"
|
25
|
+
opt.separator " create : create skeleton files for a component"
|
26
|
+
opt.separator " diagram : create/update component relationship diagram"
|
27
|
+
opt.separator " cleanup : safely delete a workspace folder"
|
28
|
+
opt.separator ""
|
29
|
+
opt.separator "Platforms: " + known_platforms.join(', ')
|
30
|
+
opt.separator ""
|
31
|
+
opt.separator ""
|
32
|
+
|
33
|
+
# ------------------------
|
34
|
+
options[:components_dir] = 'components'
|
35
|
+
opt.on('--components_dir DIR', 'direcctory name contains all components') do |dir|
|
36
|
+
options[:components_dir] = dir
|
37
|
+
end
|
38
|
+
|
39
|
+
options[:workspace_dir] = 'workspaces'
|
40
|
+
opt.on('-w DIR', '--workspace_dir DIR', 'direcctory for development') do |dir|
|
41
|
+
options[:workspace_dir] = dir
|
42
|
+
end
|
43
|
+
|
44
|
+
options[:assets_dir] = 'assets'
|
45
|
+
opt.on('-t DIR', '--assets_dir DIR', 'global assets directory') do |dir|
|
46
|
+
options[:assets_dir] = dir
|
47
|
+
end
|
48
|
+
|
49
|
+
options[:config_file] = 'config/components.yml'
|
50
|
+
opt.on('-c FILE', '--config_file FILE', 'specify the components definition file') do |file|
|
51
|
+
options[:config_file] = file
|
52
|
+
end
|
53
|
+
|
54
|
+
options[:platform] = 'debug'
|
55
|
+
opt.on("-p PLATFORM", "--platform PLATFORM", 'platform version for component') do |platform|
|
56
|
+
raise "unknown platform #{platform}" unless known_platforms.include? platform
|
57
|
+
options[:platform] = platform
|
58
|
+
end
|
59
|
+
|
60
|
+
options[:require_platform] = 'mock'
|
61
|
+
opt.on("-r PLATFORM", "--require_platform PLATFORM", 'platform version for required components') do |rp|
|
62
|
+
raise "unknown platform #{rp}" unless known_platforms.include? rp
|
63
|
+
options[:require_platform] = rp
|
64
|
+
end
|
65
|
+
|
66
|
+
opt.on('-a', '--all', 'apply to all components') do
|
67
|
+
options[:all] = true
|
68
|
+
end
|
69
|
+
|
70
|
+
opt.on('-v', '--verbose', 'print more messages') do
|
71
|
+
options[:verbose] = true
|
72
|
+
end
|
73
|
+
|
74
|
+
opt.on('-f', '--force', 'create/checkout even if file exists') do
|
75
|
+
options[:force] = true
|
76
|
+
end
|
77
|
+
|
78
|
+
opt.on('--no-consistency-check', 'checkout without check file consistency') do
|
79
|
+
options[:no_consistency_check] = true
|
80
|
+
end
|
81
|
+
|
82
|
+
opt.on('--all-spec', 'copy spec test files from all components') do
|
83
|
+
options[:all_spec] = true
|
84
|
+
end
|
85
|
+
|
86
|
+
opt.on('-s', '--similation', 'do not actually copy files, only show file list') do
|
87
|
+
options[:simulation] = true
|
88
|
+
end
|
89
|
+
|
90
|
+
# restrict output for models with those tag only
|
91
|
+
options[:tag] = []
|
92
|
+
opt.on('-t', '--tag TAG,LIST', 'restrict diagram for modules with those tag only') do |list|
|
93
|
+
options[:tag] = list.split(/\s*,\s*/)
|
94
|
+
end
|
95
|
+
|
96
|
+
opt.on_tail('-h', '--help', 'Display this screen') do
|
97
|
+
puts opt
|
98
|
+
exit
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
optparse.parse!(ARGV)
|
103
|
+
command = ARGV[0]
|
104
|
+
options[:component] = ARGV[1]
|
105
|
+
|
106
|
+
unless command
|
107
|
+
# puts "Use 'checkout' as default command"
|
108
|
+
command = 'checkout'
|
109
|
+
end
|
110
|
+
|
111
|
+
# if the user used a short version of command
|
112
|
+
command = cmd_alias[command.to_sym] if cmd_alias[command.to_sym]
|
113
|
+
|
114
|
+
if command == 'build'
|
115
|
+
options[:build] = true
|
116
|
+
command = 'checkout'
|
117
|
+
end
|
118
|
+
|
119
|
+
case command
|
120
|
+
when 'create'
|
121
|
+
Cbt::Creator.new(options).process!
|
122
|
+
when 'checkout'
|
123
|
+
Cbt::Checkout.new(options).process!
|
124
|
+
when 'cleanup'
|
125
|
+
Cbt::Cleanup.new(options).process!
|
126
|
+
when 'diagram'
|
127
|
+
Cbt::Diagram.new(options).process!
|
128
|
+
else
|
129
|
+
raise "use one of the commands: create/checkout/build/cleanup/diagram"
|
130
|
+
end
|
data/cbt.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'cbt/version'
|
3
|
+
|
4
|
+
Gem::Specification.new 'cbt', Cbt::VERSION do |s|
|
5
|
+
s.description = "Cbt is a bundle of tools for build and test corona based applications."
|
6
|
+
s.summary = "Cbt is a bundle of tools for build and test corona based applications."
|
7
|
+
s.executables << "cbt"
|
8
|
+
s.authors = ["Huang Wei"]
|
9
|
+
s.email = "huangw@pe-po.com"
|
10
|
+
s.homepage = "https://github.com/huangw/cbt-gem"
|
11
|
+
s.files = `git ls-files`.split("\n") - %w[.gitignore]
|
12
|
+
s.test_files = Dir.glob("{spec,test}/**/*.rb")
|
13
|
+
s.rdoc_options = %w[--line-numbers --inline-source --title Cbt --main README.rdoc --encoding=UTF-8]
|
14
|
+
|
15
|
+
s.add_development_dependency 'rspec', '~> 2.5'
|
16
|
+
s.add_dependency 'erubis'
|
17
|
+
s.add_dependency 'rviz'
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
components:
|
2
|
+
utils:
|
3
|
+
lua_modules: [util,timer]
|
4
|
+
tag: utils
|
5
|
+
LiveObject:
|
6
|
+
tag: ui.base
|
7
|
+
Panel:
|
8
|
+
lua_modules: [Panel<LiveObject]
|
9
|
+
tag: ui.full
|
10
|
+
dulcinea:
|
11
|
+
lua_modules: [main]
|
12
|
+
tag: utils
|
13
|
+
|
14
|
+
tags:
|
15
|
+
_default: {shape: record, style: filled, fillcolor: beige}
|
16
|
+
utils: {fillcolor: bisque3}
|
17
|
+
ui: {shape: Mrecord}
|
18
|
+
ui.base: {fillcolor: bisque3}
|
19
|
+
ui.full: {fillcolor: cornflowerblue}
|
20
|
+
|
data/config/members.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
members:
|
2
|
+
huangw: ['黄巍', 'huangw@pe-po.com']
|
3
|
+
xuyc: ['徐以臣', 'xuyc@pe-po.com']
|
4
|
+
sunyr: ['孙云蕊', 'sunyr@pe-po.com']
|
5
|
+
lizh: ['李中华', 'lizh@pe-po.com']
|
6
|
+
songcy: ['宋春月', 'songcy@pe-po.com']
|
7
|
+
du: ['杜丽玲', 'du@pe-po.com']
|
8
|
+
zhaogl: ['赵桂兰', 'zhaogl@pe-po.com']
|
9
|
+
wangh: ['王浩', 'wangh@pe-po.com']
|
10
|
+
liudx: ['刘东旭', 'liudx@pe-po.com']
|
11
|
+
zhangy: ['张祎', 'zhangy@pe-po.com']
|
12
|
+
wangqh: ['王清华', 'wangqh@pe-po.com']
|
13
|
+
cuibg: ['崔保国', 'cuibg@pe-po.com']
|
14
|
+
lixf: ['李现凤', 'lixf@pe-po.com']
|
15
|
+
zhaoxx: ['赵秀秀', 'zhaoxx@pe-po.com']
|
16
|
+
|