steam 0.0.4 → 0.0.5

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 (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
+