gorp 0.16.6 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -22,6 +22,7 @@ Echoe.new('gorp', Gorp::VERSION::STRING) do |p|
22
22
  builder
23
23
  erubis
24
24
  i18n
25
+ mail
25
26
  rack
26
27
  rack-mount
27
28
  rack-test
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{gorp}
5
- s.version = "0.16.6"
5
+ s.version = "0.17.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Ruby"]
9
- s.date = %q{2009-12-27}
9
+ s.date = %q{2009-12-31}
10
10
  s.description = %q{ Enables the creation of scenarios that involve creating a rails project,
11
11
  starting and stoppping of servers, generating projects, editing files,
12
12
  issuing http requests, running of commands, etc. Output is captured as
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  s.add_runtime_dependency(%q<builder>, [">= 0"])
34
34
  s.add_runtime_dependency(%q<erubis>, [">= 0"])
35
35
  s.add_runtime_dependency(%q<i18n>, [">= 0"])
36
+ s.add_runtime_dependency(%q<mail>, [">= 0"])
36
37
  s.add_runtime_dependency(%q<rack>, [">= 0"])
37
38
  s.add_runtime_dependency(%q<rack-mount>, [">= 0"])
38
39
  s.add_runtime_dependency(%q<rack-test>, [">= 0"])
@@ -44,6 +45,7 @@ Gem::Specification.new do |s|
44
45
  s.add_dependency(%q<builder>, [">= 0"])
45
46
  s.add_dependency(%q<erubis>, [">= 0"])
46
47
  s.add_dependency(%q<i18n>, [">= 0"])
48
+ s.add_dependency(%q<mail>, [">= 0"])
47
49
  s.add_dependency(%q<rack>, [">= 0"])
48
50
  s.add_dependency(%q<rack-mount>, [">= 0"])
49
51
  s.add_dependency(%q<rack-test>, [">= 0"])
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
56
58
  s.add_dependency(%q<builder>, [">= 0"])
57
59
  s.add_dependency(%q<erubis>, [">= 0"])
58
60
  s.add_dependency(%q<i18n>, [">= 0"])
61
+ s.add_dependency(%q<mail>, [">= 0"])
59
62
  s.add_dependency(%q<rack>, [">= 0"])
60
63
  s.add_dependency(%q<rack-mount>, [">= 0"])
61
64
  s.add_dependency(%q<rack-test>, [">= 0"])
@@ -10,6 +10,7 @@ require 'time'
10
10
 
11
11
  require 'gorp/env'
12
12
  require 'gorp/edit'
13
+ require 'gorp/output'
13
14
  require 'gorp/net'
14
15
  require 'gorp/rails'
15
16
 
@@ -293,160 +294,3 @@ def secinclude ranges, section
293
294
  (range.first <=> ss) <= 0 and (range.last <=> ss) >= 0
294
295
  end
295
296
  end
296
-
297
- at_exit do
298
- $x.declare! :DOCTYPE, :html
299
- $x.html :xmlns => 'http://www.w3.org/1999/xhtml' do
300
- $x.header do
301
- $x.title $title
302
- $x.meta 'http-equiv'=>'text/html; charset=UTF-8'
303
- $x.style :type => "text/css" do
304
- $x.text! <<-'EOF'.unindent(2)
305
- body {background-color: #F5F5DC}
306
- #banner {margin-top: 0}
307
- pre {font-weight: bold; margin: 0; padding: 0}
308
- pre.stdin {color: #800080; margin-top: 1em; padding: 0}
309
- pre.irb {color: #800080; padding: 0}
310
- pre.stdout {color: #000; padding: 0}
311
- pre.logger {color: #088; padding: 0}
312
- pre.hilight {color: #000; background-color: #FF0; padding: 0}
313
- pre.stderr {color: #F00; padding: 0}
314
- div.body {border-style: solid; border-color: #800080; padding: 0.5em}
315
- .issue, .traceback {background:#FDD; border: 4px solid #F00;
316
- font-weight: bold; margin-top: 1em; padding: 0.5em}
317
- div.body, .issue, .traceback {
318
- -webkit-border-radius: 0.7em; -moz-border-radius: 0.7em;}
319
- ul.toc {list-style: none}
320
- ul a {text-decoration: none}
321
- ul a:hover {text-decoration: underline; color: #000;
322
- background-color: #F5F5DC}
323
- a.toc h2 {background-color: #981A21; color:#FFF; padding: 6px}
324
- ul a:visited {color: #000}
325
- h2 {clear: both}
326
- p.desc {font-style: italic}
327
- p.overview {border-width: 2px; border-color: #000;
328
- border-style: solid; border-radius: 4em;
329
- background-color: #CCF; margin: 1.5em 1.5em; padding: 1em 2em;
330
- -webkit-border-radius: 4em; -moz-border-radius: 4em;}
331
- EOF
332
- end
333
- end
334
-
335
- $x.body do
336
- $x.h1 $title, :id=>'banner'
337
- $x.h2 'Table of Contents'
338
- $x.ul :class => 'toc'
339
-
340
- # determine which range(s) of steps are to be executed
341
- ranges = ARGV.grep(/^ \d+(.\d+)? ( (-|\.\.) \d+(.\d+)? )? /x).map do |arg|
342
- bounds = arg.split(/-|\.\./)
343
- Range.new(secsplit(bounds.first), secsplit(bounds.last))
344
- end
345
-
346
- # optionally save a snapshot
347
- if ARGV.include? 'restore'
348
- log :snap, 'restore'
349
- Dir.chdir $BASE
350
- FileUtils.rm_rf $WORK
351
- FileUtils.cp_r "snapshot", $WORK, :preserve => true
352
- Dir.chdir $WORK
353
- if $autorestart and File.directory? $autorestart
354
- Dir.chdir $autorestart
355
- restart_server
356
- end
357
- end
358
-
359
- # run steps
360
- e = nil
361
- begin
362
- $sections.each do |section, title, steps|
363
- omit = secinclude($omit, section)
364
- omit ||= (!ranges.empty? and !secinclude(ranges, section))
365
-
366
- if omit
367
- $x.a(:class => 'omit', :id => "section-#{section}") do
368
- $x.comment! title
369
- end
370
- else
371
- head section, title
372
- steps.call
373
- end
374
- end
375
- rescue Exception => e
376
- $x.pre :class => 'traceback' do
377
- STDERR.puts e.inspect
378
- $x.text! "#{e.inspect}\n"
379
- e.backtrace.each {|line| $x.text! " #{line}\n"}
380
- end
381
- ensure
382
- if e.class != SystemExit
383
- $cleanup.call if $cleanup
384
-
385
- # terminate server
386
- Process.kill "INT", $server if $server
387
- Process.wait($server) if $server
388
-
389
- # optionally save a snapshot
390
- if ARGV.include? 'save'
391
- log :snap, 'save'
392
- Dir.chdir $BASE
393
- FileUtils.rm_rf "snapshot"
394
- FileUtils.cp_r $WORK, "snapshot", :preserve => true
395
- end
396
- end
397
- end
398
-
399
- $x.a(:class => 'toc', :id => 'env') {$x.h2 'Environment'}
400
- $x.pre Time.now.httpdate, :class=>'stdout'
401
-
402
- cmd "#{$ruby} -v"
403
- cmd 'gem -v'
404
- cmd 'gem list'
405
- cmd 'echo $RUBYLIB | sed "s/:/\n/g"'
406
-
407
- cmd which_rails($rails) + ' -v'
408
-
409
- if $rails != 'rails'
410
- Dir.chdir($rails) do
411
- log :cmd, 'git log -1'
412
- $x.pre 'git log -1', :class=>'stdin'
413
- `git log -1`.strip.split(/\n/).each do |line|
414
- line.sub! /commit (\w{40})/,
415
- 'commit <a href="http://github.com/rails/rails/commit/\1">\1</a>'
416
- if $1
417
- $x.pre(:class=>'stdout') {$x << line.chomp}
418
- else
419
- $x.pre line.chomp, :class=>'stdout'
420
- end
421
- end
422
- end
423
- end
424
-
425
- $x.a(:class => 'toc', :id => 'todos') {$x.h2 'Todos'}
426
- $x.ul :class => 'todos'
427
- end
428
- end
429
-
430
- # output results as HTML, after inserting style and toc information
431
- $x.target![/<style.*?>()/,1] = "\n#{$style.target!.strip.gsub(/^/,' '*6)}\n"
432
- $x.target!.sub! /<ul class="toc"\/>/,
433
- "<ul class=\"toc\">\n#{$toc.target!.gsub(/^/,' '*6)} </ul>"
434
- $x.target!.sub! /<ul class="todos"\/>/,
435
- "<ul class=\"todos\">\n#{$todos.target!.gsub(/^/,' '*6)} </ul>"
436
- $x.target!.gsub! '<strong/>', '<strong></strong>'
437
- $x.target!.gsub! /(<textarea[^>]+)\/>/, '\1></textarea>'
438
- log :WRITE, "#{$output}.html"
439
- open("#{$WORK}/#{$output}.html",'w') { |file| file.write $x.target! }
440
-
441
- # run tests
442
- if $checker
443
- log :CHECK, "#{$output}.html"
444
- Dir.chdir $BASE
445
- STDOUT.puts
446
- if $checker =~ /^[-\w]+$/
447
- require File.join($BASE,$checker)
448
- else
449
- require $checker
450
- end
451
- end
452
- end
@@ -48,6 +48,8 @@ module Gorp
48
48
  from = Regexp.new('.*' + Regexp.escape(from) + '.*')
49
49
  end
50
50
 
51
+ raise IndexError.new('regexp not matched') unless match(from)
52
+
51
53
  sub!(from) do |base|
52
54
  base.extend Gorp::StringEditingFunctions
53
55
  yield base if block_given?
@@ -58,9 +60,13 @@ module Gorp
58
60
  end
59
61
 
60
62
  def dcl(name, *options)
61
- self.sub!(/(\s*)(class|def|test)\s+"?#{name}"?.*?\n\1end\n/mo) do |lines|
63
+ re = Regexp.new '\n(\s*)(class|def|test)\s+"?' + name +
64
+ '"?.*?\n\1end\n', Regexp::MULTILINE
65
+ raise IndexError.new('regexp not matched') unless match(re)
66
+
67
+ self.sub!(re) do |lines|
62
68
  lines.extend Gorp::StringEditingFunctions
63
- yield lines
69
+ yield lines if block_given?
64
70
  lines.mark(options.last[:mark]) if options.last.respond_to? :[]
65
71
  lines
66
72
  end
@@ -68,14 +74,25 @@ module Gorp
68
74
 
69
75
  def clear_highlights
70
76
  self.gsub! /^\s*(#|<!--)\s*(START|END)_HIGHLIGHT(\s*-->)?\n/, ''
71
- self.gsub! /^\s*(#|<!--)\s*(START|END)_HIGHLIGHT(\s*-->)?\n/, ''
72
77
  end
73
78
 
74
79
  def clear_all_marks
75
- self.gsub! /^ *#\s?(START|END)(_HIGHLIGHT|:\w+)\n/, ''
80
+ self.gsub! /^\s*(#|<!--)\s*(START|END)(_HIGHLIGHT|:\w+)(\s*-->)?\n/, ''
76
81
  end
77
82
 
78
- def msub pattern, replacement
83
+ def msub pattern, replacement, option=nil
84
+ if option == :highlight
85
+ replacement.extend Gorp::StringEditingFunctions
86
+ replacement.highlight if option == :highlight
87
+ end
88
+
89
+ if replacement =~ /\\[1-9]/
90
+ replacement.gsub! /\\([1-9])/, '#{$\1}'
91
+ replacement = replacement.inspect.gsub('\#','#')
92
+ match(pattern)
93
+ replacement = eval(replacement)
94
+ end
95
+
79
96
  self[pattern, 1] = replacement
80
97
  end
81
98
 
@@ -90,7 +90,12 @@ def post path, form, options={}
90
90
  end
91
91
 
92
92
  Net::HTTP.start(host, port) do |http|
93
- get = Net::HTTP::Get.new(path)
93
+ accept = 'text/html'
94
+ accept = 'application/atom+xml' if path =~ /\.atom$/
95
+ accept = 'application/json' if path =~ /\.json$/
96
+ accept = 'application/xml' if path =~ /\.xml$/
97
+
98
+ get = Net::HTTP::Get.new(path, 'Accept' => accept)
94
99
  get['Cookie'] = $COOKIE if $COOKIE
95
100
  response = http.request(get)
96
101
  snap response, form unless options[:snapget] == false
@@ -117,6 +122,15 @@ def post path, form, options={}
117
122
  end
118
123
  end
119
124
 
125
+ # find matching submit button
126
+ xform ||= xforms.find do |element|
127
+ form.all? do |name, value|
128
+ element.search('.//input[@type="submit"]').any? do |input|
129
+ input.attribute('value').to_s==form['submit']
130
+ end
131
+ end
132
+ end
133
+
120
134
  # match based on action itself
121
135
  xform ||= xforms.find do |element|
122
136
  form.all? do |name, value|
@@ -42,8 +42,9 @@ def rails name, app=nil
42
42
  # determine how to invoke rails
43
43
  rails = which_rails $rails
44
44
 
45
- $x.pre "#{rails} #{name}", :class=>'stdin'
46
- popen3 "#{rails} #{name}"
45
+ opt = (ARGV.include?('bundle') ? ' --dev' : '')
46
+ $x.pre "#{rails} #{name}#{opt}", :class=>'stdin'
47
+ popen3 "#{rails} #{name}#{opt}"
47
48
 
48
49
  # canonicalize the reference to Ruby
49
50
  Dir["#{name}/script/**/*"].each do |script|
@@ -60,8 +61,18 @@ def rails name, app=nil
60
61
  cmd 'rake rails:freeze:edge' if ARGV.include? 'edge'
61
62
 
62
63
  if $rails != 'rails' and File.directory?($rails)
63
- cmd "mkdir vendor" unless File.exist?('vendor')
64
- cmd "ln -s #{$rails} vendor/rails"
64
+ if File.exist? 'Gemfile'
65
+ if ARGV.include? 'bundle'
66
+ cmd 'gem bundle'
67
+ else
68
+ system 'mkdir -p vendor/gems'
69
+ system "ln -s #{$rails} vendor/rails"
70
+ system "cp #{__FILE__.sub(/\.rb$/,'.env')} vendor/gems/environment.rb"
71
+ end
72
+ else
73
+ system 'mkdir -p vendor'
74
+ system "ln -s #{$rails} vendor/rails"
75
+ end
65
76
  end
66
77
  end
67
78
 
@@ -89,6 +89,7 @@ class Book::TestCase < ActiveSupport::TestCase
89
89
  @@version = $1
90
90
  @@version += ' (git)' if body =~ /ln -s.*vendor.rails/
91
91
  @@version += ' (edge)' if body =~ /rails:freeze:edge/
92
+ @@version += ' (bundle)' if body =~ /gem bundle/
92
93
  STDERR.puts @@version
93
94
  end
94
95
 
@@ -215,5 +216,7 @@ class HTMLRunner < Test::Unit::UI::Console::TestRunner
215
216
  open(File.join($WORK, 'status'), 'w') do |status|
216
217
  status.puts @result.to_s
217
218
  end
219
+
220
+ at_exit { raise SystemExit.new(1) } unless @result.passed?
218
221
  end
219
222
  end
@@ -1,8 +1,8 @@
1
1
  module Gorp
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 16
5
- TINY = 6
4
+ MINOR = 17
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gorp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.6
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-27 00:00:00 -05:00
12
+ date: 2009-12-31 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,16 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: mail
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
45
55
  - !ruby/object:Gem::Dependency
46
56
  name: rack
47
57
  type: :runtime