falsework 1.3.0 → 2.0.0

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.
Files changed (41) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +2 -2
  3. data/README.rdoc +6 -5
  4. data/Rakefile +14 -10
  5. data/bin/falsework +25 -25
  6. data/doc/NEWS.rdoc +18 -0
  7. data/doc/README.rdoc +6 -5
  8. data/doc/TODO.org +2 -1
  9. data/lib/falsework/cliconfig.rb +135 -0
  10. data/lib/falsework/cliutils.rb +112 -0
  11. data/lib/falsework/meta.rb +1 -1
  12. data/lib/falsework/mould.rb +23 -20
  13. data/lib/falsework/templates/{ruby-naive → ruby-cli}/#config.yaml +0 -0
  14. data/lib/falsework/templates/{ruby-naive → ruby-cli}/.gitignore.#erb +0 -0
  15. data/lib/falsework/templates/{ruby-naive → ruby-cli}/Gemfile +1 -1
  16. data/lib/falsework/templates/{ruby-naive/doc → ruby-cli}/README.rdoc +1 -1
  17. data/lib/falsework/templates/{ruby-naive → ruby-cli}/Rakefile +0 -0
  18. data/lib/falsework/templates/ruby-cli/bin/%%@project%% +26 -0
  19. data/lib/falsework/templates/{ruby-naive → ruby-cli}/doc/#doc.rdoc +1 -1
  20. data/lib/falsework/templates/{ruby-naive → ruby-cli}/doc/LICENSE +0 -0
  21. data/lib/falsework/templates/{ruby-naive → ruby-cli}/doc/NEWS.rdoc +0 -0
  22. data/lib/falsework/templates/{ruby-naive → ruby-cli/doc}/README.rdoc +1 -1
  23. data/lib/falsework/templates/{ruby-naive → ruby-cli}/etc/%%@project%%.yaml +0 -0
  24. data/lib/falsework/templates/ruby-cli/lib/%%@project%%/cliconfig.rb +137 -0
  25. data/lib/falsework/templates/ruby-cli/lib/%%@project%%/cliutils.rb +114 -0
  26. data/lib/falsework/templates/{ruby-naive → ruby-cli}/lib/%%@project%%/meta.rb +0 -0
  27. data/lib/falsework/templates/{ruby-naive → ruby-cli}/test/helper.rb +1 -1
  28. data/lib/falsework/templates/{ruby-naive/test/helper_trestle.rb → ruby-cli/test/helper_cliutils.rb} +4 -4
  29. data/lib/falsework/templates/{ruby-naive → ruby-cli}/test/rake_git.rb +2 -2
  30. data/lib/falsework/templates/{ruby-naive → ruby-cli}/test/test_%%@project%%.rb +0 -0
  31. data/test/helper.rb +1 -1
  32. data/test/{helper_trestle.rb → helper_cliutils.rb} +3 -3
  33. data/test/rake_erb_templates.rb +3 -3
  34. data/test/rake_git.rb +1 -1
  35. data/test/templates/config-02.yaml +2 -0
  36. data/test/test_cl.rb +9 -5
  37. data/test/test_exe.rb +26 -21
  38. metadata +31 -26
  39. data/lib/falsework/templates/ruby-naive/bin/%%@project%% +0 -31
  40. data/lib/falsework/templates/ruby-naive/lib/%%@project%%/trestle.rb +0 -230
  41. data/lib/falsework/trestle.rb +0 -228
data/test/test_exe.rb CHANGED
@@ -7,9 +7,9 @@ class TestFalsework < MiniTest::Unit::TestCase
7
7
  end
8
8
 
9
9
  def test_project_list
10
- r = Trestle.cmd_run "#{@cmd} list"
10
+ r = CliUtils.exec "#{@cmd} list"
11
11
  assert_equal(0, r[0])
12
- assert_match(/ruby-naive/, r[2])
12
+ assert_match(/ruby-cli/, r[2])
13
13
  end
14
14
 
15
15
  # very silly analogue of "sed -i'' -E 's/foo/bar/g' file"
@@ -18,9 +18,9 @@ class TestFalsework < MiniTest::Unit::TestCase
18
18
  File.open(file, 'w+') {|fp| fp.printf(o) }
19
19
  end
20
20
 
21
- def test_project_ruby_naive
21
+ def test_project_ruby_cli
22
22
  rm_rf 'templates/foo'
23
- r = Trestle.cmd_run "#{@cmd} new templates/foo -v"
23
+ r = CliUtils.exec "#{@cmd} new templates/foo -v"
24
24
  # pp r
25
25
  assert_equal(0, r[0], r)
26
26
 
@@ -44,11 +44,12 @@ class TestFalsework < MiniTest::Unit::TestCase
44
44
  "templates/foo/etc/foo.yaml",
45
45
  "templates/foo/lib",
46
46
  "templates/foo/lib/foo",
47
+ "templates/foo/lib/foo/cliconfig.rb",
48
+ "templates/foo/lib/foo/cliutils.rb",
47
49
  "templates/foo/lib/foo/meta.rb",
48
- "templates/foo/lib/foo/trestle.rb",
49
50
  "templates/foo/test",
50
51
  "templates/foo/test/helper.rb",
51
- "templates/foo/test/helper_trestle.rb",
52
+ "templates/foo/test/helper_cliutils.rb",
52
53
  "templates/foo/test/rake_git.rb",
53
54
  "templates/foo/test/test_foo.rb"]
54
55
 
@@ -59,67 +60,71 @@ class TestFalsework < MiniTest::Unit::TestCase
59
60
 
60
61
  Dir.chdir('templates/foo') {
61
62
  # add files
62
- r = Trestle.cmd_run "#{@cmd} exe qqq"
63
+ r = CliUtils.exec "#{@cmd} exe qqq"
63
64
  assert_equal(0, r[0])
64
65
  assert_equal(true, File.executable?('bin/qqq'))
65
66
  assert_equal(true, File.exist?('doc/qqq.rdoc'))
67
+ # smoke test of generated exe
68
+ r = CliUtils.exec "bin/qqq --version"
69
+ assert_equal 0, r[0]
70
+ assert_equal "0.0.1\n", r[2]
66
71
 
67
- r = Trestle.cmd_run "#{@cmd} test qqq"
72
+ r = CliUtils.exec "#{@cmd} test qqq"
68
73
  assert_equal(0, r[0])
69
74
  assert_equal(true, File.exist?('test/test_qqq.rb'))
70
75
 
71
76
  # upgrade
72
- r = Trestle.cmd_run "#{@cmd} upgrade -b"
77
+ r = CliUtils.exec "#{@cmd} upgrade -b"
73
78
  assert_equal(0, r[0])
74
- rm ['test/helper_trestle.rb', 'test/rake_git.rb']
75
- r = Trestle.cmd_run "#{@cmd} upgrade -b"
79
+ rm ['test/helper_cliutils.rb', 'test/rake_git.rb']
80
+ r = CliUtils.exec "#{@cmd} upgrade -b"
76
81
  assert_equal(0, r[0])
77
- sed 'test/helper_trestle.rb',
82
+ sed 'test/helper_cliutils.rb',
78
83
  /^(# Don't.+falsework\/)\d+\.\d+\.\d+(\/.+)$/, '\1999.999.999\2'
79
- r = Trestle.cmd_run "#{@cmd} upgrade -b"
84
+ r = CliUtils.exec "#{@cmd} upgrade -b"
80
85
  assert_equal(1, r[0])
81
86
  assert_match(/file .+ is from .+ falsework: 999.999.999/, r[1])
82
87
  mv('test', 'ttt')
83
- r = Trestle.cmd_run "#{@cmd} upgrade -b"
88
+ r = CliUtils.exec "#{@cmd} upgrade -b"
84
89
  assert_equal(0, r[0])
85
90
  }
86
91
  end
87
92
 
88
93
  def test_project_invalid_name
89
- r = Trestle.cmd_run "#{@cmd} new 123"
94
+ r = CliUtils.exec "#{@cmd} new 123"
90
95
  assert_equal(1, r[0])
91
96
  assert_match(/invalid project name/, r[1])
92
97
  end
93
98
 
94
99
  def test_project_c_glib
95
100
  rm_rf 'templates/c_glib'
96
- r = Trestle.cmd_run "#{@cmd} new templates/c-glib -t c-glib --no-git"
101
+ r = CliUtils.exec "#{@cmd} new templates/c-glib -t c-glib --no-git"
97
102
  assert_equal(0, r[0])
98
103
 
99
104
  Dir.chdir('templates/c_glib') {
100
- r = Trestle.cmd_run "#{@cmd} -t c-glib exe q-q-q"
105
+ r = CliUtils.exec "#{@cmd} -t c-glib exe q-q-q"
101
106
  assert_equal(0, r[0])
102
107
  assert_equal(true, File.exist?('src/q_q_q.h'))
103
108
  assert_equal(true, File.exist?('src/q_q_q.c'))
104
109
  assert_equal(true, File.exist?('doc/q_q_q.1.asciidoc'))
105
110
 
106
- r = Trestle.cmd_run "#{@cmd} -t c-glib test q-q-q"
111
+ r = CliUtils.exec "#{@cmd} -t c-glib test q-q-q"
107
112
  assert_equal(0, r[0])
108
113
  assert_equal(true, File.exist?('test/test_q_q_q.c'))
109
114
 
110
115
  Dir.chdir('src') {
111
- r = Trestle.cmd_run "gmake"
116
+ r = CliUtils.exec "gmake"
112
117
  assert_equal 0, r[0]
113
118
  assert_equal true, File.executable?('c_glib')
114
119
  assert_equal(true, File.exist?('q_q_q.o'))
115
120
  }
116
121
  Dir.chdir('test') {
117
- r = Trestle.cmd_run "gmake"
122
+ r = CliUtils.exec "gmake"
118
123
  assert_equal 0, r[0]
119
124
  assert_equal true, File.executable?('test_utils')
120
125
  assert_equal true, File.executable?('test_q_q_q')
121
126
 
122
- r = Trestle.cmd_run "gmake test"
127
+ r = CliUtils.exec "gmake test"
123
128
  assert_equal 0, r[0]
124
129
  }
125
130
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: falsework
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-27 00:00:00.000000000 Z
12
+ date: 2012-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: git
16
- requirement: &75682810 !ruby/object:Gem::Requirement
16
+ requirement: &74400880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,18 +21,18 @@ dependencies:
21
21
  version: 1.2.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *75682810
24
+ version_requirements: *74400880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: open4
27
- requirement: &75682580 !ruby/object:Gem::Requirement
27
+ requirement: &74400650 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 1.2.0
32
+ version: 1.3.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *75682580
35
+ version_requirements: *74400650
36
36
  description: A primitive scaffold generator for writing CLI programs in Ruby.
37
37
  email: alexander.gromnitsky@gmail.com
38
38
  executables:
@@ -56,6 +56,8 @@ files:
56
56
  - doc/TODO.org
57
57
  - doc/template-tutorial.rdoc
58
58
  - etc/falsework.yaml
59
+ - lib/falsework/cliconfig.rb
60
+ - lib/falsework/cliutils.rb
59
61
  - lib/falsework/meta.rb
60
62
  - lib/falsework/mould.rb
61
63
  - lib/falsework/templates/c-glib/#config.yaml
@@ -79,38 +81,41 @@ files:
79
81
  - lib/falsework/templates/c-glib/test/mycat.c
80
82
  - lib/falsework/templates/c-glib/test/semis/text/empty.txt
81
83
  - lib/falsework/templates/c-glib/test/test_utils.c
82
- - lib/falsework/templates/ruby-naive/#config.yaml
83
- - lib/falsework/templates/ruby-naive/.gitignore.#erb
84
- - lib/falsework/templates/ruby-naive/Gemfile
85
- - lib/falsework/templates/ruby-naive/README.rdoc
86
- - lib/falsework/templates/ruby-naive/Rakefile
87
- - lib/falsework/templates/ruby-naive/bin/%%@project%%
88
- - lib/falsework/templates/ruby-naive/doc/#doc.rdoc
89
- - lib/falsework/templates/ruby-naive/doc/LICENSE
90
- - lib/falsework/templates/ruby-naive/doc/NEWS.rdoc
91
- - lib/falsework/templates/ruby-naive/doc/README.rdoc
92
- - lib/falsework/templates/ruby-naive/etc/%%@project%%.yaml
93
- - lib/falsework/templates/ruby-naive/lib/%%@project%%/meta.rb
94
- - lib/falsework/templates/ruby-naive/test/helper.rb
95
- - lib/falsework/templates/ruby-naive/test/test_%%@project%%.rb
96
- - lib/falsework/trestle.rb
84
+ - lib/falsework/templates/ruby-cli/#config.yaml
85
+ - lib/falsework/templates/ruby-cli/.gitignore.#erb
86
+ - lib/falsework/templates/ruby-cli/Gemfile
87
+ - lib/falsework/templates/ruby-cli/README.rdoc
88
+ - lib/falsework/templates/ruby-cli/Rakefile
89
+ - lib/falsework/templates/ruby-cli/bin/%%@project%%
90
+ - lib/falsework/templates/ruby-cli/doc/#doc.rdoc
91
+ - lib/falsework/templates/ruby-cli/doc/LICENSE
92
+ - lib/falsework/templates/ruby-cli/doc/NEWS.rdoc
93
+ - lib/falsework/templates/ruby-cli/doc/README.rdoc
94
+ - lib/falsework/templates/ruby-cli/etc/%%@project%%.yaml
95
+ - lib/falsework/templates/ruby-cli/lib/%%@project%%/meta.rb
96
+ - lib/falsework/templates/ruby-cli/test/helper.rb
97
+ - lib/falsework/templates/ruby-cli/test/test_%%@project%%.rb
97
98
  - test/helper.rb
98
- - test/helper_trestle.rb
99
+ - test/helper_cliutils.rb
99
100
  - test/rake_erb_templates.rb
100
101
  - test/rake_git.rb
101
102
  - test/templates/config-01.yaml
103
+ - test/templates/config-02.yaml
102
104
  - test/test_cl.rb
103
105
  - test/test_exe.rb
104
106
  - test/test_mould.rb
105
- - lib/falsework/templates/ruby-naive/lib/%%@project%%/trestle.rb
106
- - lib/falsework/templates/ruby-naive/test/helper_trestle.rb
107
- - lib/falsework/templates/ruby-naive/test/rake_git.rb
107
+ - lib/falsework/templates/ruby-cli/lib/%%@project%%/cliconfig.rb
108
+ - lib/falsework/templates/ruby-cli/lib/%%@project%%/cliutils.rb
109
+ - lib/falsework/templates/ruby-cli/test/helper_cliutils.rb
110
+ - lib/falsework/templates/ruby-cli/test/rake_git.rb
108
111
  homepage: http://github.com/gromnitsky/falsework
109
112
  licenses: []
110
113
  post_install_message:
111
114
  rdoc_options:
112
115
  - -m
113
116
  - doc/README.rdoc
117
+ - -x
118
+ - lib/.+/templates/
114
119
  require_paths:
115
120
  - lib
116
121
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*-ruby-*-
3
-
4
- require_relative '../lib/<%= @project %>/trestle.rb'
5
-
6
- include <%= @camelcase %>
7
-
8
- $conf = Hash.new
9
- $t = Trestle.new($conf)
10
-
11
- $conf[:banner] = "Usage: #{File.basename($0)} [options] hren'"
12
- $conf[:foobar] = ''
13
-
14
-
15
- # --[ main ]------------------------------------------------------------
16
-
17
- $t.config_parse(['foobar']) {|src|
18
- o = $t.cl_parse(src) # create an OptionParser object
19
- o.on('--foobar STR', 'An example of the option --foobar') {|i|
20
- $conf[:foobar] = i
21
- }
22
- $t.cl_parse(src, o) # run cl parser
23
- }
24
-
25
- # print our env
26
- if $conf[:verbose] >= 2
27
- puts 'Libs dir: ' + Trestle.gem_libdir
28
- pp $conf
29
- end
30
-
31
- puts 'Hello, World!'
@@ -1,230 +0,0 @@
1
- # :erb:
2
- require 'yaml'
3
- require 'shellwords.rb'
4
- require 'optparse'
5
- require 'pp'
6
- require 'open4'
7
-
8
- require_relative 'meta'
9
-
10
- module <%= @camelcase %>
11
- # A common routines from <%= @project %> with love.
12
- class Trestle
13
-
14
- # Execute _cmd_ and return a list [exit_status, stderr,
15
- # stdout]. Very handy.
16
- def self.cmd_run(cmd)
17
- so = sr = ''
18
- status = Open4::popen4(cmd) { |pid, stdin, stdout, stderr|
19
- so = stdout.read
20
- sr = stderr.read
21
- }
22
- [status.exitstatus, sr, so]
23
- end
24
-
25
- # Return a directory with program libraries.
26
- def self.gem_libdir
27
- t = ["#{File.dirname(File.realpath($0))}/../lib/#{<%= @camelcase %>::Meta::NAME}",
28
- "#{Gem.dir}/gems/#{<%= @camelcase %>::Meta::NAME}-#{<%= @camelcase %>::Meta::VERSION}/lib/#{<%= @camelcase %>::Meta::NAME}",
29
- "lib/#{<%= @camelcase %>::Meta::NAME}"]
30
- t.each {|i| return i if File.readable?(i) }
31
- fail "all paths are invalid: #{t}"
32
- end
33
-
34
- # Analogue to shell command +which+.
35
- def self.in_path?(file)
36
- return true if file =~ %r%\A/% and File.exist? file
37
-
38
- ENV['PATH'].split(File::PATH_SEPARATOR).any? do |path|
39
- File.exist? File.join(path, file)
40
- end
41
- end
42
-
43
- # Print an error message _t_ and exit if _ec_ > 0.
44
- def self.errx(ec, t)
45
- $stderr.puts File.basename($0) + ' error: ' + t.to_s
46
- exit ec if ec > 0
47
- end
48
-
49
- # Print a warning.
50
- def self.warnx(t)
51
- $stderr.puts File.basename($0) + ' warning: ' + t.to_s
52
- end
53
-
54
- # #veputs uses this to decide to put a newline or not to put.
55
- NNL_MARK = '__NNL__'
56
-
57
- # Use this in your CL options to check if modifying some variable is
58
- # not an idempotent act.
59
- attr_reader :cl_opt_protect
60
-
61
- # [conf] Typically must be a reference to some global variable.
62
- def initialize(conf)
63
- @conf = conf
64
- @conf[:verbose] = 0
65
- @conf[:banner] = "Usage: #{File.basename($0)} [options]"
66
- @conf[:config] = Meta::NAME + '.yaml'
67
- @conf[:config_dirs] = [ENV['HOME']+'/.'+Meta::NAME,
68
- File.absolute_path("#{File.dirname(File.realpath($0))}/../etc"),
69
- '/usr/etc', '/usr/local/etc', '/etc',
70
- "#{Gem.dir}/gems/#{Meta::NAME}-#{Meta::VERSION}/etc"
71
- ]
72
- @conf[:config_env] = [Meta::NAME.upcase + '_CONF']
73
-
74
- @cl_parsing_times = 0 # not used
75
- @cl_opt_protect = false
76
- end
77
-
78
- # [level] A verbose level.
79
- # [t] A string to print.
80
- #
81
- # Don't print _t_ with a newline if it contains NNL_MARK at the end.
82
- def veputs(level, t)
83
- t = t.dup
84
- nnl = nil
85
- if t.match(/#{NNL_MARK}$/)
86
- t.sub!(/#{$&}/, '')
87
- nnl = 1
88
- end
89
-
90
- if @conf[:verbose] >= level
91
- nnl ? print(t) : print("#{t}\n")
92
- $stdout.flush
93
- end
94
- end
95
-
96
- # Run all configuration parsing in a batch.
97
- #
98
- # [rvars] A list of variable names which must be in the
99
- # configuration file.
100
- #
101
- # If no block is given, only standard CL options will be analysed.
102
- def config_parse(rvars, &block)
103
- cb = ->(b, src) {
104
- if b
105
- block.call src
106
- else
107
- # very basic default options
108
- cl_parse(src, nil, true)
109
- end
110
- }
111
-
112
- # 1. parse env
113
- @conf[:config_env].each {|i|
114
- # puts '0 run:'
115
- cb.call(block_given?, ENV[i].shellsplit) if ENV.key?(i)
116
- }
117
-
118
- # 2. parse CL in case of '--config' option
119
- # puts "\n1 run"
120
- @cl_opt_protect = true
121
- cb.call(block_given?, ARGV.dup)
122
- @cl_opt_protect = false
123
-
124
- # 3. load the configuration file & do the final CL parsing
125
- begin
126
- # puts "\n2 run"
127
- r = config_flat_load(rvars)
128
- rescue
129
- Trestle.errx(1, "cannot load config: #{Trestle.get_backtrace}")
130
- end
131
- veputs(1, "OK") if r
132
- cb.call(block_given?, ARGV)
133
- end
134
-
135
- # Load a config file immediately if it contains '/' in its name,
136
- # otherwise search through several dirs for it.
137
- #
138
- # [rvars] a list of requied variables in the config
139
- #
140
- # Return a loaded filename or nil on error.
141
- def config_flat_load(rvars)
142
- p = ->(f) {
143
- veputs(1, "Loading #{f}... " + NNL_MARK)
144
- if File.file?(f)
145
- begin
146
- myconf = YAML.load_file(f)
147
- rescue
148
- abort("cannot parse #{f}: #{$!}")
149
- end
150
- rvars.each { |i|
151
- fail "missing or nil '#{i}' in #{f}" if ! myconf.key?(i.to_sym) || ! myconf[i.to_sym]
152
- }
153
- @conf.merge!(myconf)
154
- return @conf[:config]
155
- end
156
-
157
- veputs(1, "FAILED")
158
- return nil
159
- }
160
-
161
- if @conf[:config].index('/')
162
- return p.call(@conf[:config])
163
- else
164
- @conf[:config_dirs].each {|dir|
165
- return dir+'/'+@conf[:config] if p.call(dir + '/' + @conf[:config])
166
- }
167
- end
168
-
169
- return nil
170
- end
171
-
172
-
173
- # Parses CL-like options.
174
- #
175
- # [src] An array of options (usually +ARGV+).
176
- #
177
- # If _o_ is non nil function parses _src_ immediately, otherwise it
178
- # only creates +OptionParser+ object and return it (if _simple_ is
179
- # false).
180
- def cl_parse(src, o = nil, simple = false)
181
- if ! o then
182
- # puts "NEW o (#{cl_opt_protect})" + src.to_s
183
- o = OptionParser.new
184
- o.banner = @conf[:banner]
185
- o.on('-v', 'Be more verbose.') { |i|
186
- # puts "cl_parsing_times "+cl_parsing_times.to_s
187
- @conf[:verbose] += 1 unless cl_opt_protect
188
- }
189
- o.on('-V', 'Show version & exit.') { |i|
190
- puts Meta::VERSION
191
- exit 0
192
- }
193
- o.on('--config NAME', "Set a config name (default is #{@conf[:config]}).") {|i|
194
- @conf[:config] = i
195
- }
196
- o.on('--config-dirs', 'Show possible config locations.') {
197
- mark = false
198
- @conf[:config_dirs].each { |idx|
199
- f = idx + '/' + @conf[:config]
200
- if File.readable?(f) && !mark
201
- puts "* " + f
202
- mark = true
203
- else
204
- puts " " + f
205
- end
206
- }
207
- exit 0
208
- }
209
-
210
- return o if ! simple
211
- end
212
-
213
- begin
214
- o.parse!(src)
215
- @cl_parsing_times += 1
216
- rescue
217
- Trestle.errx(1, $!.to_s)
218
- end
219
- end
220
-
221
- # A handy proc that return a nice formatted current global
222
- # backtrace.
223
- def self.get_backtrace
224
- "#{$!}\n\nBacktrace:\n\n#{$!.backtrace.join("\n")}"
225
- end
226
-
227
- end # trestle
228
- end
229
-
230
- # Don't remove this: falsework/1.3.0/ruby-naive/2012-01-27T02:39:48+02:00