falsework 2.1.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +19 -59
- data/Rakefile +28 -20
- data/bin/falsework +266 -73
- data/doc/NEWS.rdoc +24 -0
- data/doc/README.rdoc +19 -59
- data/doc/TODO.org +16 -6
- data/doc/template-tutorial.rdoc +49 -12
- data/dynamic.yaml +4 -0
- data/falsework.gemspec +10 -1
- data/lib/falsework/cliconfig.rb +14 -9
- data/lib/falsework/cliutils.rb +0 -2
- data/lib/falsework/meta.rb +2 -1
- data/lib/falsework/mould.rb +121 -192
- data/lib/falsework/upgrader.rb +120 -0
- data/lib/falsework/utils.rb +23 -0
- data/templates/c-glib/#config.yaml +18 -0
- data/{lib/falsework/templates → templates}/c-glib/README +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/#doc.ascii +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/%%@project%%.1.asciidoc +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/LICENSE +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/#exe.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/#exe.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/%%@project%%.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/%%@project%%.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/untest.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/untest.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/utils.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/utils.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/#test.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/Makefile.test.mk +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/mycat.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/semis/text/empty.txt +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/test_utils.c +0 -0
- data/templates/ruby-cli/#config.yaml +26 -0
- data/{lib/falsework/templates → templates}/ruby-cli/%%@project%%.gemspec +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/.gitignore +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/.gitignore.#erb +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/Gemfile +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/README.rdoc +17 -19
- data/{lib/falsework/templates → templates}/ruby-cli/Rakefile +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/bin/%%@project%% +3 -3
- data/{lib/falsework/templates → templates}/ruby-cli/doc/#doc.rdoc +16 -18
- data/{lib/falsework/templates → templates}/ruby-cli/doc/LICENSE +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/doc/NEWS.rdoc +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/doc/README.rdoc +17 -19
- data/templates/ruby-cli/etc/%%@project%%.yaml +2 -0
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/cliconfig.rb +14 -11
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/cliutils.rb +0 -4
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/meta.rb +1 -0
- data/{lib/falsework/templates → templates}/ruby-cli/test/helper.rb +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/test/helper_cliutils.rb +0 -3
- data/{lib/falsework/templates → templates}/ruby-cli/test/test_%%@project%%.rb +0 -0
- data/test/example/note/full +10 -0
- data/test/example/note/project-too-old +8 -0
- data/test/example/note/template-unknown +8 -0
- data/test/helper.rb +11 -0
- data/test/helper_cliutils.rb +0 -1
- data/test/templates/config-01.yaml +1 -1
- data/test/{test_exe.rb → test_cli.rb} +52 -29
- data/test/test_mould.rb +41 -16
- data/test/test_upgrader.rb +96 -0
- metadata +76 -50
- data/dynamic.ruby-cli +0 -3
- data/lib/falsework/templates/c-glib/#config.yaml +0 -18
- data/lib/falsework/templates/ruby-cli/#config.yaml +0 -15
- data/lib/falsework/templates/ruby-cli/etc/%%@project%%.yaml +0 -2
- data/test/rake_erb_templates.rb +0 -60
- data/test/templates/config-02.yaml +0 -2
- data/test/test_cl.rb +0 -33
data/doc/README.rdoc
CHANGED
@@ -17,21 +17,23 @@ Initially the template spec was designed only for Ruby projects but
|
|
17
17
|
later (from version 1.3.0) hard-coded Ruby staff was removed which added
|
18
18
|
more flexibility.
|
19
19
|
|
20
|
-
|
21
|
-
can also add skeletons for tests end executables <
|
20
|
+
Generated projects <b>are not dependent</b> on falsework. The utility
|
21
|
+
can also add skeletons for tests end executables <b>after</b> the
|
22
22
|
project generation.
|
23
23
|
|
24
24
|
|
25
25
|
==Ruby Template
|
26
26
|
|
27
|
-
... is default. It generates a scaffold which
|
27
|
+
... is default. It generates a scaffold which has:
|
28
28
|
|
29
29
|
* auto-created git (but not github) project;
|
30
30
|
|
31
|
-
* <tt>
|
32
|
-
|
31
|
+
* <tt>gemspec</tt> (a file list is pulled from the git repository),
|
32
|
+
<tt>doc</tt>, <tt>test</tt> targets; +build+, +install+ & +release+
|
33
|
+
bundler targets.
|
33
34
|
|
34
|
-
* easy to use configuration parser/loader. This includes scanning
|
35
|
+
* easy to use configuration parser/loader. This includes auto-scanning
|
36
|
+
for:
|
35
37
|
|
36
38
|
* env variable(s);
|
37
39
|
* the flat YAML configuration file;
|
@@ -45,83 +47,41 @@ Version & name of your project can be located at generated
|
|
45
47
|
|
46
48
|
==Options
|
47
49
|
|
48
|
-
|
50
|
+
Run
|
49
51
|
|
50
|
-
|
51
|
-
templates. You can add your own templates in
|
52
|
-
<tt>~/.falsework/templates</tt> directory.
|
52
|
+
$ falsework -h
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
directory by modifying <tt>tdir</tt> option
|
57
|
-
in the config file. (<tt>tdir</tt> is an
|
58
|
-
array).
|
59
|
-
|
60
|
-
new NAME:: Create a new project. It creates a directory
|
61
|
-
<i>NAME</i> and populates it with files.
|
54
|
+
to read all possible commands & global options. All of them, except
|
55
|
+
+new+ & +list+, work from the root project directory.
|
62
56
|
|
63
|
-
|
57
|
+
Some of the commands support <tt>-h</tt> option too, for example:
|
64
58
|
|
65
|
-
|
66
|
-
project and a corresponding doc in
|
67
|
-
<tt>doc</tt> sub-directory.
|
68
|
-
|
69
|
-
doc NAME:: Add a new doc file in
|
70
|
-
<tt>doc</tt> sub-directory.
|
71
|
-
|
72
|
-
test NAME:: Add a new test in
|
73
|
-
<tt>test</tt> sub-directory.
|
74
|
-
|
75
|
-
upgrade:: 'Inject' or upgrade some vital files from the
|
76
|
-
template into the project. Currently only
|
77
|
-
'ruby-cli' template supports this.
|
78
|
-
|
79
|
-
The options are as follows:
|
80
|
-
|
81
|
-
-t:: A template name.
|
82
|
-
|
83
|
-
-b:: A batch mode. (No questions asked.)
|
84
|
-
|
85
|
-
--no-git:: Don't create a Git repository. Don't use
|
86
|
-
this for 'ruby-cli' template.
|
87
|
-
|
88
|
-
--config-dirs:: List all possible locations for the
|
89
|
-
configuration file. The first found wins.
|
90
|
-
|
91
|
-
--config NAME:: The name of the configuration file. If
|
92
|
-
it contains <tt>/</tt> in it, the list from
|
93
|
-
<tt>--config-dirs</tt> is ignored.
|
94
|
-
|
95
|
-
-V:: Show falsework version and exit.
|
96
|
-
|
97
|
-
-v:: Be more verbose. You can supply it several
|
98
|
-
times, viz. <tt>-vv</tt> dumps even more
|
99
|
-
debug info.
|
59
|
+
$ falsework upgrade -h
|
100
60
|
|
101
61
|
|
102
62
|
==Examples
|
103
63
|
|
104
64
|
Create a new project:
|
105
65
|
|
106
|
-
|
66
|
+
$ falsework -v new foobar
|
107
67
|
|
108
68
|
Add another CL util to the existing project:
|
109
69
|
|
110
|
-
|
70
|
+
$ pwd
|
111
71
|
.../foobar
|
112
|
-
|
72
|
+
$ falsework exe foo
|
113
73
|
|
114
74
|
(It will appear in <tt>bin/</tt> sub-directory.)
|
115
75
|
|
116
76
|
Add another test file:
|
117
77
|
|
118
|
-
|
78
|
+
$ falsework test foo
|
119
79
|
|
120
80
|
(It will appear in <tt>test/</tt> sub-directory.)
|
121
81
|
|
122
82
|
Create a project from another template:
|
123
83
|
|
124
|
-
|
84
|
+
$ falsework -t c-glib -v new foo-bar
|
125
85
|
|
126
86
|
|
127
87
|
==Bugs
|
data/doc/TODO.org
CHANGED
@@ -1,14 +1,24 @@
|
|
1
|
-
* TODO In the distant future [
|
1
|
+
* TODO In the distant future [9/12] [75%]
|
2
2
|
|
3
|
-
- [-] more templates [1/
|
3
|
+
- [-] more templates [1/3]
|
4
4
|
- [X] c glib
|
5
|
-
- [ ] java android
|
6
5
|
- [ ] ruby sinatra
|
7
|
-
- [ ] ruby cli but a lighter one
|
6
|
+
- [ ] ruby cli, but a lighter one
|
8
7
|
- [X] write a small tutorial 'how to write a template'
|
9
|
-
- [
|
8
|
+
- [X] release to rubygems.org (it must run test, pull to github, tag,
|
10
9
|
create gem & upload it)
|
11
10
|
- [ ] describe c-glib template
|
12
11
|
- [X] normalize 'name' of the project before actually making a template
|
13
12
|
- [X] target_uuid variable for exe/doc/test templates
|
14
|
-
- [
|
13
|
+
- [X] relocate templates from lib/falsework directory to project root
|
14
|
+
- [X] project creation
|
15
|
+
- [X] embed a note--'.falsework' file into a new generated project
|
16
|
+
- [X] options to do not embed a note file
|
17
|
+
- [X] new upgrade command
|
18
|
+
- [X] check if current project can be upgraded
|
19
|
+
- [X] list upgradeable files
|
20
|
+
- [X] list obsolete files
|
21
|
+
- [X] upgrade in overwrite mode
|
22
|
+
- [X] check in 'falsework' executable for exceptions in mould.rb
|
23
|
+
- [ ] move project creation factory to utils.rb
|
24
|
+
- [X] make dynamic.ruby-cli a static file
|
data/doc/template-tutorial.rdoc
CHANGED
@@ -15,6 +15,11 @@ Your personal templates must be in <tt>~/.falsework/templates</tt>
|
|
15
15
|
directory. To view all currently available templates, run <tt>falsework
|
16
16
|
list</tt>.
|
17
17
|
|
18
|
+
To add another directory to a search list (visible via <tt>falsework
|
19
|
+
list dirs</tt>), modify value of +tdir+ key in
|
20
|
+
<tt>~/.falsework/falsework.yaml</tt>. The value must be an array of
|
21
|
+
readable directories.
|
22
|
+
|
18
23
|
|
19
24
|
== Hierarchy
|
20
25
|
|
@@ -85,20 +90,20 @@ set it permission afterwards.
|
|
85
90
|
The default configuration is:
|
86
91
|
|
87
92
|
---
|
88
|
-
|
89
|
-
-
|
90
|
-
|
91
|
-
|
93
|
+
exe:
|
94
|
+
- src: null
|
95
|
+
dest: bin/%s'
|
96
|
+
mode_int: 0744
|
92
97
|
|
93
|
-
|
94
|
-
-
|
95
|
-
|
96
|
-
|
98
|
+
doc:
|
99
|
+
- src: null
|
100
|
+
dest: 'doc/%s.rdoc'
|
101
|
+
mode_int: null
|
97
102
|
|
98
|
-
|
99
|
-
-
|
100
|
-
|
101
|
-
|
103
|
+
test:
|
104
|
+
- src: null
|
105
|
+
dest: 'test/test_%s.rb'
|
106
|
+
mode_int: null
|
102
107
|
|
103
108
|
The value of each top level key is an array, so you can inject several
|
104
109
|
files at once.
|
@@ -111,3 +116,35 @@ dest:: Sub-key can have <tt>%s</tt> in it which will be replaced with
|
|
111
116
|
target value ('foobar' in the example above).
|
112
117
|
|
113
118
|
mode_int:: Permission bits.
|
119
|
+
|
120
|
+
Top level keys must be one of: +exe+, +doc+, +test+ or +file+ string
|
121
|
+
values. Each of these strings correspond to a hard-coded command in
|
122
|
+
+falsework+ executable.
|
123
|
+
|
124
|
+
|
125
|
+
== Upgrade command
|
126
|
+
|
127
|
+
Any template may have instructions for updating files in old
|
128
|
+
projects. To make your template 'upgradable', add to
|
129
|
+
<tt>#config.yaml</tt>:
|
130
|
+
|
131
|
+
version: 2.3.4
|
132
|
+
upgrade:
|
133
|
+
obsolete:
|
134
|
+
- some/file
|
135
|
+
files:
|
136
|
+
- foo
|
137
|
+
- bar/baz
|
138
|
+
from: 1.2.3
|
139
|
+
|
140
|
+
where
|
141
|
+
|
142
|
+
version:: Sets a current version of the template. Required.
|
143
|
+
|
144
|
+
obsolete:: Means a list of files that user may delete. Optional.
|
145
|
+
|
146
|
+
files:: A list of 'upgradable' files. It must be relative to the
|
147
|
+
template directory. Required.
|
148
|
+
|
149
|
+
from:: A minimal template version number from which it is possible to
|
150
|
+
perform an upgrade. Required.
|
data/dynamic.yaml
ADDED
data/falsework.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.homepage = Meta::HOMEPAGE
|
11
11
|
|
12
12
|
gem.files = `git ls-files`.split($\)
|
13
|
-
gem.files.concat
|
13
|
+
gem.files.concat YAML.load_file('dynamic.yaml').keys
|
14
14
|
|
15
15
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
16
|
gem.test_files = gem.files.grep(%r{^test/test_.+\.rb})
|
@@ -20,9 +20,18 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.required_ruby_version = '>= 1.9.2'
|
21
21
|
gem.extra_rdoc_files = gem.files.grep(%r{^doc/})
|
22
22
|
gem.rdoc_options << '-m' << 'doc/README.rdoc' << '-x' << 'lib/.+/templates/'
|
23
|
+
|
24
|
+
gem.post_install_message = <<-MESSAGE
|
25
|
+
Users of 2.x! Your custom templates must be updated--format
|
26
|
+
of #config.yaml has changed.
|
27
|
+
|
28
|
+
See also doc/NEWS.rdoc file even if you don't have custom templates.
|
29
|
+
MESSAGE
|
23
30
|
|
24
31
|
gem.add_dependency "open4", "~> 1.3.0"
|
25
32
|
gem.add_dependency "rdoc", "~> 3.12"
|
26
33
|
gem.add_dependency "bundler", "~> 1.1.3"
|
27
34
|
gem.add_dependency "git", "~>1.2.5"
|
35
|
+
|
36
|
+
gem.add_development_dependency "fakefs", "~> 0.4.0"
|
28
37
|
end
|
data/lib/falsework/cliconfig.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# :erb: ruby-cli
|
2
|
-
|
3
1
|
require 'pathname'
|
4
2
|
require 'yaml'
|
5
3
|
require 'optparse'
|
@@ -31,6 +29,7 @@ module Falsework
|
|
31
29
|
@conf[:config_name] = Meta::NAME + '.yaml'
|
32
30
|
@conf[:config_env] = Meta::NAME.upcase + '_CONF'
|
33
31
|
@conf[:config_dirs] = DIR_CONFIG
|
32
|
+
@conf[:cl_parse_in_order] = false
|
34
33
|
end
|
35
34
|
|
36
35
|
# Setter for @conf
|
@@ -55,7 +54,7 @@ module Falsework
|
|
55
54
|
}
|
56
55
|
end
|
57
56
|
|
58
|
-
CliUtils.warnx "
|
57
|
+
CliUtils.warnx "config file '#{@conf[:config_name]}' not found" if @conf[:verbose] >= 2
|
59
58
|
return nil
|
60
59
|
end
|
61
60
|
|
@@ -75,15 +74,15 @@ module Falsework
|
|
75
74
|
# Check if options in array opts are in @conf.
|
76
75
|
def requiredOptions?(opts)
|
77
76
|
opts.each {|idx|
|
78
|
-
if !@conf.key?(idx
|
79
|
-
CliUtils.errx EX_CONFIG, "option #{idx} is either nil or missing"
|
77
|
+
if !@conf.key?(idx) || !@conf[idx]
|
78
|
+
CliUtils.errx EX_CONFIG, "option '#{idx}' is either nil or missing"
|
80
79
|
end
|
81
80
|
}
|
82
81
|
end
|
83
82
|
|
84
83
|
# Parse CLO and env variable. If block is given it is passed with
|
85
84
|
# OptionParser object as a parameter.
|
86
|
-
def optParse
|
85
|
+
def optParse argv
|
87
86
|
OptionParser.new do |o|
|
88
87
|
o.on('-v', 'Be more verbose.') { |i|
|
89
88
|
self[:verbose] += 1
|
@@ -118,7 +117,13 @@ module Falsework
|
|
118
117
|
env = ENV[@conf[:config_env]].shellsplit if ENV.key?(@conf[:config_env])
|
119
118
|
|
120
119
|
begin
|
121
|
-
[env,
|
120
|
+
[env, argv].each { |i|
|
121
|
+
if @conf[:cl_parse_in_order]
|
122
|
+
o.order!(i) if i
|
123
|
+
else
|
124
|
+
o.parse!(i) if i
|
125
|
+
end
|
126
|
+
}
|
122
127
|
rescue
|
123
128
|
CliUtils.errx EX_USAGE, $!.to_s
|
124
129
|
end
|
@@ -129,8 +134,8 @@ module Falsework
|
|
129
134
|
#
|
130
135
|
# [reqOpts] an array of requied options
|
131
136
|
# [&block] a optional block for OptionParser
|
132
|
-
def load(reqOpts = [], &block)
|
133
|
-
optParse(&block)
|
137
|
+
def load(reqOpts = [], argv = ARGV, &block)
|
138
|
+
optParse(argv, &block)
|
134
139
|
loadFile
|
135
140
|
requiredOptions?(reqOpts)
|
136
141
|
end
|
data/lib/falsework/cliutils.rb
CHANGED
data/lib/falsework/meta.rb
CHANGED