steam 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/Gemfile +2 -0
  2. data/lib/core_ext/ruby/string/camelize.rb +1 -1
  3. data/lib/core_ext/ruby/string/underscore.rb +8 -1
  4. data/lib/steam/browser/html_unit.rb +9 -5
  5. data/lib/steam/browser/html_unit/client.rb +14 -2
  6. data/lib/steam/browser/html_unit/connection.rb +10 -10
  7. data/lib/steam/browser/html_unit/web_response.rb +0 -1
  8. data/lib/steam/connection/net_http.rb +4 -4
  9. data/lib/steam/java.rb +7 -6
  10. data/lib/steam/request.rb +88 -35
  11. data/lib/steam/session/rails.rb +1 -1
  12. data/lib/steam/version.rb +1 -1
  13. metadata +23 -50
  14. data/Rakefile +0 -23
  15. data/test/all.rb +0 -3
  16. data/test/browser/html_unit/actions_test.rb +0 -183
  17. data/test/browser/html_unit/javascript_test.rb +0 -60
  18. data/test/browser/html_unit/rails_actions_test.rb +0 -150
  19. data/test/browser/html_unit_test.rb +0 -98
  20. data/test/connection/cascade_test.rb +0 -42
  21. data/test/connection/mock_test.rb +0 -58
  22. data/test/connection/rails_test.rb +0 -16
  23. data/test/connection/static_test.rb +0 -14
  24. data/test/example/webrat_compat_steps_test.rb +0 -307
  25. data/test/fixtures/html_fakes.rb +0 -191
  26. data/test/java_test.rb +0 -29
  27. data/test/playground/connection.rb +0 -19
  28. data/test/playground/dragdrop_behavior.rb +0 -60
  29. data/test/playground/drb.rb +0 -55
  30. data/test/playground/java_signature.rb +0 -22
  31. data/test/playground/nokogiri.rb +0 -15
  32. data/test/playground/put_headers.rb +0 -83
  33. data/test/playground/rack.rb +0 -11
  34. data/test/playground/rjb_bind.rb +0 -42
  35. data/test/playground/stack_level_problem.rb +0 -129
  36. data/test/playground/thread_problem.rb +0 -57
  37. data/test/playground/web_response_data.rb +0 -21
  38. data/test/playground/webrat.rb +0 -48
  39. data/test/playground/xhr_accept_headers.rb +0 -61
  40. data/test/process_test.rb +0 -55
  41. data/test/session_test.rb +0 -40
  42. data/test/test_helper.rb +0 -80
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ gem 'rjb', '>= 1.2.0'
2
+ gem 'locator', '>= 0.0.6'
@@ -1,5 +1,5 @@
1
1
  class String
2
2
  def camelize
3
- split(/[^a-z0-9]/i).map { |w| w.capitalize }.join
3
+ to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
4
4
  end
5
5
  end unless String.method_defined?(:camelize)
@@ -1,5 +1,12 @@
1
1
  class String
2
2
  def underscore
3
- self[0, 1].downcase + self[1..-1].gsub(/[A-Z]/) { |c| "_#{c.downcase}" }
3
+ # self[0, 1].downcase + self[1..-1].gsub(/[A-Z]/) { |c| "_#{c.downcase}" }
4
+ word = to_s
5
+ word.gsub!(/::/, '/')
6
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
7
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
8
+ word.tr!("-", "_")
9
+ word.downcase!
10
+ word
4
11
  end
5
12
  end unless String.method_defined?(:underscore)
@@ -19,7 +19,7 @@ module Steam
19
19
 
20
20
  include Actions
21
21
 
22
- attr_accessor :client, :page, :request, :response
22
+ attr_accessor :client, :page, :response
23
23
 
24
24
  def initialize(*args)
25
25
  @client = Client.new(*args)
@@ -33,15 +33,19 @@ module Steam
33
33
  @client.closeAllWindows
34
34
  end
35
35
 
36
+ def request
37
+ @request ||= Request.new
38
+ end
39
+
36
40
  def get(url)
37
- call Request.env_for(url)
41
+ perform(:get, url)
38
42
  end
39
43
  alias :visit :get
40
44
 
41
- def call(env)
45
+ def perform(method, uri)
42
46
  respond_to do
43
- @request = Rack::Request.new(env)
44
- client.get(@request.url)
47
+ request.update(:method => method, :uri => uri)
48
+ client.get(request)
45
49
  end.to_a
46
50
  end
47
51
 
@@ -9,6 +9,7 @@ module Steam
9
9
 
10
10
  Java.import 'com.gargoylesoftware.htmlunit.Version'
11
11
  Java.import 'com.gargoylesoftware.htmlunit.WebClient'
12
+ Java.import 'com.gargoylesoftware.htmlunit.WebRequestSettings'
12
13
  Java.import 'com.gargoylesoftware.htmlunit.BrowserVersion'
13
14
  Java.import 'com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController'
14
15
  Java.import 'com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException'
@@ -49,8 +50,19 @@ module Steam
49
50
  end
50
51
  end
51
52
 
52
- def get(*args)
53
- @java.getPage(*args) # TODO use WebRequestSettings
53
+ def get(request)
54
+ perform(self.request_settings(request))
55
+ end
56
+
57
+ def perform(request_settings)
58
+ @java._invoke('getPage', 'Lcom.gargoylesoftware.htmlunit.WebRequestSettings;', request_settings)
59
+ end
60
+
61
+ def request_settings(request)
62
+ url = Java::Net::Url.new(request.url)
63
+ settings = WebRequestSettings.new(url)
64
+ request.headers.each { |name, value| settings.setAdditionalHeader(name.to_s, value.to_s) } if request.headers
65
+ settings
54
66
  end
55
67
 
56
68
  def wait_for_javascript(timeout)
@@ -25,11 +25,11 @@ module Steam
25
25
 
26
26
  include Java::Com::Gargoylesoftware::Htmlunit
27
27
 
28
- Java.import('com.gargoylesoftware.htmlunit.MockWebConnection')
28
+ Java.import 'com.gargoylesoftware.htmlunit.MockWebConnection'
29
29
  classifier = Version.getProductVersion == '2.6' ?
30
30
  'org.apache.commons.httpclient.NameValuePair' : # HtmlUnit 2.6
31
31
  'com.gargoylesoftware.htmlunit.util.NameValuePair' # HtmlUnit 2.7
32
- NameValuePair = Java.import(classifier, :NameValuePair)
32
+ NameValuePair = Java.import(classifier, 'NameValuePair')
33
33
 
34
34
  attr_reader :connection, :java
35
35
 
@@ -38,25 +38,25 @@ module Steam
38
38
  @java = MockWebConnection.new
39
39
  end
40
40
 
41
- def getResponse(request)
41
+ def getResponse(request_settings)
42
42
  # FIXME preserve original scheme, host + port
43
- method = request.getHttpMethod.toString.dup
44
- url = request.getUrl.toString.dup
43
+ method = request_settings.getHttpMethod.toString.dup
44
+ url = request_settings.getUrl.toString.dup
45
45
 
46
- body = request.getRequestBody
46
+ body = request_settings.getRequestBody
47
47
  body = body.toString.dup if body
48
48
 
49
- params = request.getRequestParameters
49
+ params = request_settings.getRequestParameters
50
50
  params = Hash[*params.toArray.map { |e| [e.name, e.value] }.flatten]
51
51
 
52
52
  input = body ? body : Rack::Utils.build_nested_query(params)
53
- env = Request.env_for(url, :method => method, :input => input)
53
+ env = Request.new(:method => method, :url => url, :input => input).env
54
54
 
55
55
  status, headers, response = connection.call(env)
56
56
  response.body.close if response.body.respond_to?(:close)
57
57
 
58
- set_response(request.getUrl, response)
59
- java.getResponse(request)
58
+ set_response(request_settings.getUrl, response)
59
+ java.getResponse(request_settings)
60
60
  rescue Exception => e
61
61
  puts "#{e.class.name}: #{e.message}"
62
62
  e.backtrace.each { |line| puts line }
@@ -6,7 +6,6 @@ module Steam
6
6
  module Browser
7
7
  class HtmlUnit
8
8
  class WebResponse
9
- Java.import 'java.net.Url'
10
9
  Java.import 'java.io.ByteArrayInputStream'
11
10
  Java.import 'com.gargoylesoftware.htmlunit.WebRequestSettings'
12
11
 
@@ -1,4 +1,4 @@
1
- # This connection proxies requests using open-uri.
1
+ # This connection proxies requests using open-uri.
2
2
  #
3
3
 
4
4
  require 'net/http'
@@ -17,20 +17,20 @@ module Steam
17
17
  response = follow_redirect(response) if response.status.to_s[0, 1] == '3'
18
18
  response.to_a
19
19
  end
20
-
20
+
21
21
  def get(request)
22
22
  url = URI.parse(request.url)
23
23
  response = Net::HTTP.start(url.host, url.port) { |http| http.get(url.path) }
24
24
  Rack::Response.new(response.body, response.code, response.to_hash)
25
25
  end
26
-
26
+
27
27
  def post(request)
28
28
  url = URI.parse(request.url)
29
29
  params = Rack::Utils.parse_query(Rack::Utils.build_nested_query(request.params))
30
30
  response = Net::HTTP.post_form(url, params)
31
31
  Rack::Response.new(response.body, response.code, response.to_hash)
32
32
  end
33
-
33
+
34
34
  def follow_redirect(response)
35
35
  location = response.headers['location'].join
36
36
  env = Steam::Request.env_for(location)
data/lib/steam/java.rb CHANGED
@@ -33,19 +33,19 @@ module Steam
33
33
  end
34
34
 
35
35
  def import(signature, name = nil)
36
- init unless @initialized
37
- name = path_to_const_name(signature)
36
+ name ||= path_to_const_name(signature)
37
+ name.gsub!('Java::', '')
38
38
  const_set_nested(name, Rjb::import(signature))
39
39
  end
40
40
 
41
41
  def path_to_const_name(path)
42
- path.split('.').map { |token| token.underscore.camelize }.join('::').gsub('Java::', '')
42
+ path.split('.').map { |token| token.underscore.camelize }.join('::')
43
43
  end
44
44
 
45
45
  def init
46
46
  @initialized = true
47
47
 
48
- import('java.net.URL')
48
+ import('java.net.URL', 'Java::Net::Url')
49
49
  import('java.lang.System')
50
50
  import('java.util.Arrays')
51
51
  import('java.util.ArrayList')
@@ -56,6 +56,7 @@ module Steam
56
56
  def load_from(path)
57
57
  paths = Dir["#{Steam.config[:html_unit][:java_path]}/*.jar"]
58
58
  load(paths.join(':')) unless paths.empty?
59
+ init
59
60
  end
60
61
 
61
62
  def load(paths)
@@ -63,11 +64,11 @@ module Steam
63
64
  end
64
65
 
65
66
  def logger(classifier)
66
- Java::Util::Logging::Logger.getLogger(classifier)
67
+ Util::Logging::Logger.getLogger(classifier)
67
68
  end
68
69
 
69
70
  def log_level(name)
70
- Java::Util::Logging::Level.send(name.to_s.upcase)
71
+ Util::Logging::Level.send(name.to_s.upcase)
71
72
  end
72
73
  end
73
74
  end
data/lib/steam/request.rb CHANGED
@@ -1,49 +1,102 @@
1
- # Extends a Rack::Request with convenience methods
1
+ # Extends a Rack::Request with a few convenience methods
2
2
 
3
3
  require 'uri'
4
4
 
5
5
  module Steam
6
6
  class Request < Rack::Request
7
- attr_accessor :method, :headers
8
-
9
- DEFAULT_ENV = {
10
- "rack.version" => [0, 1],
11
- "rack.input" => StringIO.new,
12
- "rack.errors" => StringIO.new,
13
- "rack.multithread" => true,
14
- "rack.multiprocess" => true,
15
- "rack.run_once" => false,
16
- }
7
+ attr_reader :method
17
8
 
18
9
  class << self
19
- def env_for(uri = '', opts = {})
20
- env = DEFAULT_ENV.dup
21
- uri = URI.parse(uri)
22
- input = opts[:input] || ''
23
-
24
- env.merge!(
25
- 'REQUEST_METHOD' => opts[:method] || 'GET',
26
- 'SERVER_NAME' => Steam.config[:server_name],
27
- 'SERVER_PORT' => Steam.config[:server_port],
28
- 'QUERY_STRING' => uri.query.to_s,
29
- 'PATH_INFO' => (!uri.path || uri.path.empty?) ? '/' : uri.path,
30
- 'rack.url_scheme' => Steam.config[:url_scheme],
31
- 'SCRIPT_NAME' => opts[:script_name] || '',
32
- 'rack.errors' => StringIO.new,
33
- 'rack.input' => input.is_a?(String) ? StringIO.new(input) : input,
34
- 'CONTENT_LENGTH' => env['rack.input'].length.to_s,
35
- 'rack.test.scheme' => uri.scheme || 'http',
36
- 'rack.test.host' => uri.host || 'www.example.com',
37
- 'rack.test.port' => uri.port,
10
+ def default_env
11
+ @default_env ||= {
12
+ 'REQUEST_METHOD' => 'GET',
13
+ 'SERVER_NAME' => Steam.config[:server_name],
14
+ 'SERVER_PORT' => Steam.config[:server_port],
15
+ 'rack.url_scheme' => Steam.config[:url_scheme],
16
+ 'rack.version' => [0, 1],
17
+ 'rack.input' => StringIO.new,
18
+ 'rack.errors' => StringIO.new,
19
+ 'rack.multithread' => true,
20
+ 'rack.multiprocess' => true,
21
+ 'rack.run_once' => false,
22
+ 'rack.test.scheme' => Steam.config[:url_scheme],
23
+ 'rack.test.host' => 'www.example.com',
38
24
  'rack.test.cache_classes' => true
39
- )
40
- env
25
+ }
26
+ @default_env.dup
41
27
  end
42
28
  end
43
29
 
44
- def initialize(method, uri, opts = {})
45
- env = self.class.env_for(uri, opts.merge(:method => method))
46
- super(env)
30
+ def initialize(env = {})
31
+ super(self.class.default_env)
32
+ update(env)
33
+ end
34
+
35
+ def update(options = {})
36
+ options.each { |name, value| send("#{name}=", value) }
37
+ end
38
+
39
+ def env
40
+ super.merge(headers)
41
+ end
42
+
43
+ def method=(method)
44
+ @env['REQUEST_METHOD'] = method
45
+ end
46
+
47
+ def uri=(uri)
48
+ uri = URI.parse(uri)
49
+ self.path = uri.path
50
+ self.query = uri.query if uri.query
51
+ self.scheme = uri.scheme if uri.scheme
52
+ self.port = uri.port if uri.port
53
+ end
54
+ alias url= uri=
55
+
56
+ def scheme=(scheme)
57
+ @env.merge!(
58
+ 'rack.url_scheme' => scheme,
59
+ 'rack.test.scheme' => scheme
60
+ )
61
+ end
62
+
63
+ def host=(host)
64
+ @env.merge!(
65
+ 'rack.test.host' => host
66
+ )
67
+ end
68
+
69
+ def port=(port)
70
+ @env.merge!(
71
+ 'rack.test.port' => port
72
+ )
73
+ end
74
+
75
+ def query=(query)
76
+ @env.merge!(
77
+ 'QUERY_STRING' => query.to_s
78
+ )
79
+ end
80
+
81
+ def path=(path)
82
+ @env.merge!(
83
+ 'PATH_INFO' => path && !path.empty? ? path : '/'
84
+ )
85
+ end
86
+
87
+ def headers=(headers)
88
+ self.headers.merge!(headers)
89
+ end
90
+
91
+ def headers
92
+ @headers ||= {}
93
+ end
94
+
95
+ def input=(input)
96
+ @env.merge!(
97
+ 'rack.input' => input.is_a?(String) ? StringIO.new(input) : input,
98
+ 'CONTENT_LENGTH' => input.length.to_s
99
+ )
47
100
  end
48
101
  end
49
102
  end
@@ -25,7 +25,7 @@ module Steam
25
25
 
26
26
  # FIXME remove ActionController::Request dependency
27
27
  def generic_url_rewriter
28
- env = Request.env_for(Steam.config[:request_url])
28
+ env = Request.new(:method => :get, :url => Steam.config[:request_url]).env
29
29
  UrlRewriter.new(ActionController::Request.new(env), {})
30
30
  end
31
31
  end
data/lib/steam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steam
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -5,17 +5,16 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sven Fuchs
13
- - Clemens Kofler
14
13
  autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-04-02 00:00:00 +02:00
17
+ date: 2010-04-18 00:00:00 +02:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -52,14 +51,9 @@ executables: []
52
51
 
53
52
  extensions: []
54
53
 
55
- extra_rdoc_files:
56
- - README.textile
57
- - TODO
54
+ extra_rdoc_files: []
55
+
58
56
  files:
59
- - MIT-LICENSE
60
- - README.textile
61
- - Rakefile
62
- - TODO
63
57
  - lib/core_ext/ruby/array/flatten_once.rb
64
58
  - lib/core_ext/ruby/hash/except.rb
65
59
  - lib/core_ext/ruby/hash/slice.rb
@@ -67,35 +61,39 @@ files:
67
61
  - lib/core_ext/ruby/process/daemon.rb
68
62
  - lib/core_ext/ruby/string/camelize.rb
69
63
  - lib/core_ext/ruby/string/underscore.rb
70
- - lib/steam.rb
71
- - lib/steam/browser.rb
72
- - lib/steam/browser/html_unit.rb
73
64
  - lib/steam/browser/html_unit/actions.rb
74
65
  - lib/steam/browser/html_unit/client.rb
75
66
  - lib/steam/browser/html_unit/connection.rb
76
67
  - lib/steam/browser/html_unit/drb.rb
77
68
  - lib/steam/browser/html_unit/page.rb
78
69
  - lib/steam/browser/html_unit/web_response.rb
79
- - lib/steam/connection.rb
70
+ - lib/steam/browser/html_unit.rb
71
+ - lib/steam/browser.rb
80
72
  - lib/steam/connection/mock.rb
81
73
  - lib/steam/connection/net_http.rb
82
74
  - lib/steam/connection/open_uri.rb
83
75
  - lib/steam/connection/rails.rb
84
76
  - lib/steam/connection/static.rb
77
+ - lib/steam/connection.rb
85
78
  - lib/steam/java.rb
86
79
  - lib/steam/process.rb
87
80
  - lib/steam/request.rb
88
81
  - lib/steam/response.rb
89
- - lib/steam/session.rb
90
82
  - lib/steam/session/rails.rb
83
+ - lib/steam/session.rb
91
84
  - lib/steam/version.rb
85
+ - lib/steam.rb
86
+ - Gemfile
87
+ - MIT-LICENSE
88
+ - README.textile
89
+ - TODO
92
90
  has_rdoc: true
93
91
  homepage: http://github.com/svenfuchs/steam
94
92
  licenses: []
95
93
 
96
94
  post_install_message:
97
- rdoc_options:
98
- - --charset=UTF-8
95
+ rdoc_options: []
96
+
99
97
  require_paths:
100
98
  - lib
101
99
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -110,41 +108,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
108
  - - ">="
111
109
  - !ruby/object:Gem::Version
112
110
  segments:
113
- - 0
114
- version: "0"
111
+ - 1
112
+ - 3
113
+ - 6
114
+ version: 1.3.6
115
115
  requirements: []
116
116
 
117
- rubyforge_project:
117
+ rubyforge_project: "[none]"
118
118
  rubygems_version: 1.3.6
119
119
  signing_key:
120
120
  specification_version: 3
121
121
  summary: "Headless integration testing w/ HtmlUnit: enables testing JavaScript-driven web sites"
122
- test_files:
123
- - test/all.rb
124
- - test/browser/html_unit/actions_test.rb
125
- - test/browser/html_unit/javascript_test.rb
126
- - test/browser/html_unit/rails_actions_test.rb
127
- - test/browser/html_unit_test.rb
128
- - test/connection/cascade_test.rb
129
- - test/connection/mock_test.rb
130
- - test/connection/rails_test.rb
131
- - test/connection/static_test.rb
132
- - test/example/webrat_compat_steps_test.rb
133
- - test/fixtures/html_fakes.rb
134
- - test/java_test.rb
135
- - test/playground/connection.rb
136
- - test/playground/dragdrop_behavior.rb
137
- - test/playground/drb.rb
138
- - test/playground/java_signature.rb
139
- - test/playground/nokogiri.rb
140
- - test/playground/put_headers.rb
141
- - test/playground/rack.rb
142
- - test/playground/rjb_bind.rb
143
- - test/playground/stack_level_problem.rb
144
- - test/playground/thread_problem.rb
145
- - test/playground/web_response_data.rb
146
- - test/playground/webrat.rb
147
- - test/playground/xhr_accept_headers.rb
148
- - test/process_test.rb
149
- - test/session_test.rb
150
- - test/test_helper.rb
122
+ test_files: []
123
+