gorp 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/gorp.gemspec +2 -2
  2. data/lib/gorp.rb +38 -28
  3. data/lib/version.rb +1 -1
  4. metadata +2 -2
data/gorp.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{gorp}
5
- s.version = "0.12.0"
5
+ s.version = "0.13.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-09}
9
+ s.date = %q{2009-12-12}
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
data/lib/gorp.rb CHANGED
@@ -10,6 +10,7 @@ require 'builder'
10
10
  require 'stringio'
11
11
  require 'gorp/env'
12
12
  require 'time'
13
+ require 'cgi'
13
14
 
14
15
  require 'rbconfig'
15
16
  $ruby = File.join(Config::CONFIG["bindir"], Config::CONFIG["RUBY_INSTALL_NAME"])
@@ -200,7 +201,6 @@ def irb file
200
201
  end
201
202
 
202
203
  def edit filename, tag=nil
203
- log :edit, filename
204
204
  $x.pre "edit #{filename}", :class=>'stdin'
205
205
 
206
206
  stale = File.mtime(filename) rescue Time.now-2
@@ -209,6 +209,10 @@ def edit filename, tag=nil
209
209
 
210
210
  begin
211
211
  yield data
212
+
213
+ now = Time.now
214
+ usec = now.usec/1000000.0
215
+ sleep 1-usec if now-usec <= stale
212
216
  open(filename,'w') {|file| file.write data}
213
217
  File.utime(stale+2, stale+2, filename) if File.mtime(filename) <= stale
214
218
 
@@ -221,6 +225,8 @@ def edit filename, tag=nil
221
225
  tag = nil
222
226
 
223
227
  ensure
228
+ log :edit, filename
229
+
224
230
  include = tag.nil?
225
231
  hilight = false
226
232
  data.split("\n").each do |line|
@@ -413,7 +419,7 @@ def snap response, form={}
413
419
  $x << child.to_xml unless child.instance_of?(Comment)
414
420
  end
415
421
  end
416
- $x.div :style => "clear: both"
422
+ $x.div '', :style => "clear: both"
417
423
  end
418
424
 
419
425
  def get path
@@ -439,28 +445,36 @@ def post path, form, options={}
439
445
  if ! form.empty?
440
446
  body = xhtmlparse(response.body).at('//body')
441
447
  body = xhtmlparse(response.body).root unless body
442
- xform = body.at('//form[.//input[@name="commit"]]')
443
-
444
- if !xform
445
- # if page isn't one big form, find matching button by action
446
- require 'cgi'
447
- query = form.map{|key,val| /[&?]#{key}=#{CGI.escape(val.to_s)}(&|$)/}
448
- xform = body.search('//form').find do |element|
449
- query.all? {|kv| element.attribute('action').to_s =~ kv}
450
- end
448
+ xforms = body.search('//form')
449
+
450
+ # find matching button by action
451
+ xform = xforms.find do |element|
452
+ next unless element.attribute('action').to_s.include?('?')
453
+ query = CGI.parse(URI.parse(element.attribute('action').to_s).query)
454
+ query.all? {|key,values| values.include?(form[key].to_s)}
451
455
  end
452
456
 
453
- if !xform
454
- # if all else fails, find matching button by input values
455
- xform = body.search('//form').find do |element|
456
- form.all? do |name, value|
457
- element.search("//input[@name=#{name.inspect} and
458
- @value=#{value.inspect}]")
457
+ # find matching button by input names
458
+ xform ||= xforms.find do |element|
459
+ form.all? do |name, value|
460
+ element.search('.//input | .//textarea | ..//select').any? do |input|
461
+ input.attribute('name').to_s==name.to_s
459
462
  end
460
463
  end
461
464
  end
462
465
 
466
+ # match based on action itself
467
+ xform ||= xforms.find do |element|
468
+ form.all? do |name, value|
469
+ element.attribute('action').to_s.include?(path)
470
+ end
471
+ end
472
+
473
+ # look for a commit button
474
+ xform ||= xforms.find {|element| element.at('.//input[@name="commit"]')}
475
+
463
476
  return unless xform
477
+
464
478
  path = xform.attribute('action').to_s unless
465
479
  xform.attribute('action').to_s.empty?
466
480
  $x.pre "post #{path}", :class=>'stdin'
@@ -469,10 +483,11 @@ def post path, form, options={}
469
483
  form.each do |name, value|
470
484
  $x.li "#{name} => #{value}"
471
485
  end
472
- end
473
486
 
474
- body.search('//input[@type="hidden"]').each do |element|
475
- form[element['name']] ||= element['value']
487
+ xform.search('.//input[@type="hidden"]').each do |element|
488
+ # $x.li "#{element['name']} => #{element['value']}"
489
+ form[element['name']] ||= element['value']
490
+ end
476
491
  end
477
492
 
478
493
  post = Net::HTTP::Post.new(path)
@@ -605,6 +620,7 @@ def secinclude ranges, section
605
620
  end
606
621
 
607
622
  at_exit do
623
+ $x.declare! :DOCTYPE, :html
608
624
  $x.html :xmlns => 'http://www.w3.org/1999/xhtml' do
609
625
  $x.header do
610
626
  $x.title $title
@@ -743,15 +759,9 @@ at_exit do
743
759
  $x.target!.sub! /<ul class="todos"\/>/,
744
760
  "<ul class=\"todos\">\n#{$todos.target!.gsub(/^/,' '*6)} </ul>"
745
761
  $x.target!.gsub! '<strong/>', '<strong></strong>'
762
+ $x.target!.gsub! /(<textarea[^>]+)\/>/, '\1></textarea>'
746
763
  log :WRITE, "#{$output}.html"
747
- open("#{$WORK}/#{$output}.html",'w') do |file|
748
- file.write <<-EOF.unindent(6)
749
- <!DOCTYPE html
750
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
751
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
752
- EOF
753
- file.write $x.target!
754
- end
764
+ open("#{$WORK}/#{$output}.html",'w') { |file| file.write $x.target! }
755
765
 
756
766
  # run tests
757
767
  if $checker
data/lib/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Gorp
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 12
4
+ MINOR = 13
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
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.12.0
4
+ version: 0.13.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-09 00:00:00 -05:00
12
+ date: 2009-12-12 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency