mkuklis-webrat 0.5.1 → 0.6.rc1

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 (211) hide show
  1. data/.document +3 -3
  2. data/.gitignore +14 -14
  3. data/History.txt +413 -413
  4. data/MIT-LICENSE.txt +19 -19
  5. data/README.rdoc +84 -84
  6. data/Rakefile +187 -187
  7. data/VERSION +1 -1
  8. data/install.rb +1 -1
  9. data/lib/webrat/adapters/mechanize.rb +78 -78
  10. data/lib/webrat/adapters/merb.rb +11 -11
  11. data/lib/webrat/adapters/rack.rb +25 -25
  12. data/lib/webrat/adapters/rails.rb +81 -81
  13. data/lib/webrat/adapters/sinatra.rb +9 -9
  14. data/lib/webrat/core/configuration.rb +92 -92
  15. data/lib/webrat/core/elements/area.rb +31 -31
  16. data/lib/webrat/core/elements/element.rb +33 -33
  17. data/lib/webrat/core/elements/field.rb +487 -487
  18. data/lib/webrat/core/elements/form.rb +103 -103
  19. data/lib/webrat/core/elements/label.rb +31 -31
  20. data/lib/webrat/core/elements/link.rb +93 -93
  21. data/lib/webrat/core/elements/select_option.rb +48 -48
  22. data/lib/webrat/core/locators/area_locator.rb +38 -38
  23. data/lib/webrat/core/locators/button_locator.rb +54 -54
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -37
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -56
  26. data/lib/webrat/core/locators/field_locator.rb +25 -25
  27. data/lib/webrat/core/locators/field_named_locator.rb +41 -41
  28. data/lib/webrat/core/locators/form_locator.rb +19 -19
  29. data/lib/webrat/core/locators/label_locator.rb +34 -34
  30. data/lib/webrat/core/locators/link_locator.rb +74 -74
  31. data/lib/webrat/core/locators/locator.rb +20 -20
  32. data/lib/webrat/core/locators/select_option_locator.rb +59 -59
  33. data/lib/webrat/core/locators.rb +20 -20
  34. data/lib/webrat/core/logging.rb +23 -23
  35. data/lib/webrat/core/matchers/have_content.rb +68 -68
  36. data/lib/webrat/core/matchers/have_selector.rb +74 -74
  37. data/lib/webrat/core/matchers/have_tag.rb +21 -21
  38. data/lib/webrat/core/matchers/have_xpath.rb +122 -122
  39. data/lib/webrat/core/matchers.rb +4 -4
  40. data/lib/webrat/core/methods.rb +64 -64
  41. data/lib/webrat/core/mime.rb +18 -18
  42. data/lib/webrat/core/save_and_open_page.rb +48 -48
  43. data/lib/webrat/core/scope.rb +365 -365
  44. data/lib/webrat/core/session.rb +306 -306
  45. data/lib/webrat/core/xml.rb +72 -72
  46. data/lib/webrat/core.rb +13 -13
  47. data/lib/webrat/core_extensions/blank.rb +58 -58
  48. data/lib/webrat/core_extensions/deprecate.rb +8 -8
  49. data/lib/webrat/core_extensions/detect_mapped.rb +12 -12
  50. data/lib/webrat/core_extensions/meta_class.rb +6 -6
  51. data/lib/webrat/core_extensions/nil_to_param.rb +5 -5
  52. data/lib/webrat/core_extensions/tcp_socket.rb +27 -27
  53. data/lib/webrat/integrations/merb.rb +10 -10
  54. data/lib/webrat/integrations/rails.rb +25 -25
  55. data/lib/webrat/integrations/rspec-rails.rb +10 -10
  56. data/lib/webrat/integrations/selenium.rb +11 -11
  57. data/lib/webrat/merb.rb +9 -9
  58. data/lib/webrat/rspec-rails.rb +2 -2
  59. data/lib/webrat/selenium/application_server_factory.rb +40 -40
  60. data/lib/webrat/selenium/application_servers/external.rb +26 -26
  61. data/lib/webrat/selenium/application_servers/merb.rb +50 -50
  62. data/lib/webrat/selenium/application_servers/rails.rb +3 -6
  63. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -37
  64. data/lib/webrat/selenium/application_servers.rb +5 -5
  65. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -19
  66. data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -42
  67. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -6
  68. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -32
  69. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -15
  70. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -5
  71. data/lib/webrat/selenium/matchers/have_content.rb +66 -66
  72. data/lib/webrat/selenium/matchers/have_selector.rb +49 -49
  73. data/lib/webrat/selenium/matchers/have_tag.rb +72 -72
  74. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -45
  75. data/lib/webrat/selenium/matchers.rb +4 -4
  76. data/lib/webrat/selenium/selenium_extensions.js +5 -5
  77. data/lib/webrat/selenium/selenium_rc_server.rb +86 -86
  78. data/lib/webrat/selenium/selenium_session.rb +267 -272
  79. data/lib/webrat/selenium/silence_stream.rb +18 -18
  80. data/lib/webrat/selenium.rb +70 -70
  81. data/lib/webrat.rb +18 -18
  82. data/spec/fakes/test_adapter.rb +37 -37
  83. data/spec/integration/mechanize/Rakefile +6 -6
  84. data/spec/integration/mechanize/config.ru +1 -1
  85. data/spec/integration/mechanize/sample_app.rb +20 -20
  86. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -22
  87. data/spec/integration/mechanize/spec/spec_helper.rb +27 -27
  88. data/spec/integration/merb/.gitignore +20 -20
  89. data/spec/integration/merb/Rakefile +35 -35
  90. data/spec/integration/merb/app/controllers/application.rb +2 -2
  91. data/spec/integration/merb/app/controllers/exceptions.rb +13 -13
  92. data/spec/integration/merb/app/controllers/testing.rb +27 -27
  93. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -63
  94. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -47
  95. data/spec/integration/merb/app/views/layout/application.html.erb +11 -11
  96. data/spec/integration/merb/app/views/testing/show_form.html.erb +26 -26
  97. data/spec/integration/merb/app/views/testing/upload.html.erb +8 -8
  98. data/spec/integration/merb/config/environments/development.rb +15 -15
  99. data/spec/integration/merb/config/environments/rake.rb +11 -11
  100. data/spec/integration/merb/config/environments/test.rb +14 -14
  101. data/spec/integration/merb/config/init.rb +25 -25
  102. data/spec/integration/merb/config/rack.rb +11 -11
  103. data/spec/integration/merb/config/router.rb +34 -34
  104. data/spec/integration/merb/spec/spec.opts +1 -1
  105. data/spec/integration/merb/spec/spec_helper.rb +26 -26
  106. data/spec/integration/merb/spec/webrat_spec.rb +39 -39
  107. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -31
  108. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -64
  109. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -124
  110. data/spec/integration/merb/tasks/merb.thor/main.thor +149 -149
  111. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -93
  112. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -40
  113. data/spec/integration/rack/Rakefile +5 -5
  114. data/spec/integration/rack/app.rb +89 -89
  115. data/spec/integration/rack/test/helper.rb +21 -21
  116. data/spec/integration/rack/test/webrat_rack_test.rb +73 -73
  117. data/spec/integration/rails/.gitignore +3 -3
  118. data/spec/integration/rails/Rakefile +30 -30
  119. data/spec/integration/rails/app/controllers/application.rb +15 -15
  120. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -7
  121. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -4
  122. data/spec/integration/rails/app/controllers/links_controller.rb +7 -7
  123. data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -46
  124. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -2
  125. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -2
  126. data/spec/integration/rails/app/helpers/links_helper.rb +2 -2
  127. data/spec/integration/rails/app/views/buttons/show.html.erb +10 -10
  128. data/spec/integration/rails/app/views/fields/show.html.erb +8 -8
  129. data/spec/integration/rails/app/views/links/show.html.erb +5 -5
  130. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +3 -3
  131. data/spec/integration/rails/app/views/webrat/buttons.html.erb +10 -10
  132. data/spec/integration/rails/app/views/webrat/form.html.erb +27 -27
  133. data/spec/integration/rails/app/views/webrat/within.html.erb +2 -2
  134. data/spec/integration/rails/config/boot.rb +109 -109
  135. data/spec/integration/rails/config/environment.rb +12 -12
  136. data/spec/integration/rails/config/environments/development.rb +17 -17
  137. data/spec/integration/rails/config/environments/selenium.rb +22 -22
  138. data/spec/integration/rails/config/environments/test.rb +22 -22
  139. data/spec/integration/rails/config/initializers/inflections.rb +10 -10
  140. data/spec/integration/rails/config/initializers/mime_types.rb +5 -5
  141. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -17
  142. data/spec/integration/rails/config/locales/en.yml +4 -4
  143. data/spec/integration/rails/config/routes.rb +19 -19
  144. data/spec/integration/rails/public/404.html +29 -29
  145. data/spec/integration/rails/public/422.html +29 -29
  146. data/spec/integration/rails/public/500.html +33 -33
  147. data/spec/integration/rails/script/about +3 -3
  148. data/spec/integration/rails/script/console +3 -3
  149. data/spec/integration/rails/script/dbconsole +3 -3
  150. data/spec/integration/rails/script/destroy +3 -3
  151. data/spec/integration/rails/script/generate +3 -3
  152. data/spec/integration/rails/script/performance/benchmarker +3 -3
  153. data/spec/integration/rails/script/performance/profiler +3 -3
  154. data/spec/integration/rails/script/performance/request +3 -3
  155. data/spec/integration/rails/script/plugin +3 -3
  156. data/spec/integration/rails/script/process/inspector +3 -3
  157. data/spec/integration/rails/script/process/reaper +3 -3
  158. data/spec/integration/rails/script/process/spawner +3 -3
  159. data/spec/integration/rails/script/runner +3 -3
  160. data/spec/integration/rails/script/server +3 -3
  161. data/spec/integration/rails/test/integration/button_click_test.rb +80 -80
  162. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -24
  163. data/spec/integration/rails/test/integration/link_click_test.rb +27 -27
  164. data/spec/integration/rails/test/integration/webrat_test.rb +122 -122
  165. data/spec/integration/rails/test/test_helper.rb +26 -26
  166. data/spec/integration/sinatra/Rakefile +5 -5
  167. data/spec/integration/sinatra/classic_app.rb +64 -64
  168. data/spec/integration/sinatra/modular_app.rb +16 -16
  169. data/spec/integration/sinatra/test/classic_app_test.rb +37 -37
  170. data/spec/integration/sinatra/test/modular_app_test.rb +18 -18
  171. data/spec/integration/sinatra/test/test_helper.rb +17 -17
  172. data/spec/private/core/configuration_spec.rb +87 -87
  173. data/spec/private/core/field_spec.rb +85 -85
  174. data/spec/private/core/link_spec.rb +24 -24
  175. data/spec/private/core/session_spec.rb +200 -200
  176. data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -73
  177. data/spec/private/nokogiri_spec.rb +77 -77
  178. data/spec/private/rails/attaches_file_spec.rb +81 -81
  179. data/spec/private/rails/rails_adapter_spec.rb +86 -86
  180. data/spec/private/selenium/application_servers/rails_spec.rb +26 -26
  181. data/spec/public/basic_auth_spec.rb +24 -24
  182. data/spec/public/check_spec.rb +191 -191
  183. data/spec/public/choose_spec.rb +118 -118
  184. data/spec/public/click_area_spec.rb +106 -106
  185. data/spec/public/click_button_spec.rb +494 -494
  186. data/spec/public/click_link_spec.rb +511 -511
  187. data/spec/public/fill_in_spec.rb +224 -224
  188. data/spec/public/locators/field_by_xpath_spec.rb +19 -19
  189. data/spec/public/locators/field_labeled_spec.rb +172 -172
  190. data/spec/public/locators/field_with_id_spec.rb +16 -16
  191. data/spec/public/matchers/contain_spec.rb +114 -114
  192. data/spec/public/matchers/have_selector_spec.rb +146 -146
  193. data/spec/public/matchers/have_tag_spec.rb +39 -39
  194. data/spec/public/matchers/have_xpath_spec.rb +136 -136
  195. data/spec/public/reload_spec.rb +10 -10
  196. data/spec/public/save_and_open_spec.rb +70 -70
  197. data/spec/public/select_date_spec.rb +112 -112
  198. data/spec/public/select_datetime_spec.rb +137 -137
  199. data/spec/public/select_spec.rb +455 -455
  200. data/spec/public/select_time_spec.rb +100 -100
  201. data/spec/public/selenium/application_server_factory_spec.rb +49 -49
  202. data/spec/public/selenium/application_servers/external_spec.rb +12 -12
  203. data/spec/public/selenium/selenium_session_spec.rb +37 -37
  204. data/spec/public/set_hidden_field_spec.rb +5 -5
  205. data/spec/public/submit_form_spec.rb +5 -5
  206. data/spec/public/visit_spec.rb +58 -58
  207. data/spec/public/within_spec.rb +177 -177
  208. data/spec/spec.opts +1 -1
  209. data/spec/spec_helper.rb +54 -54
  210. data/webrat.gemspec +360 -0
  211. metadata +6 -5
@@ -1,39 +1,39 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
-
3
- describe "Webrat" do
4
- it "should visit pages" do
5
- response = visit "/"
6
- response.should contain("Webrat Form")
7
- end
8
-
9
- it "should submit forms" do
10
- visit "/"
11
- fill_in "Text field", :with => "Hello"
12
- check "TOS"
13
- select "January"
14
- click_button "Test"
15
- end
16
-
17
- it "should follow internal redirects" do
18
- response = visit "/internal_redirect"
19
- response.status.should == 200
20
- response.should contain("Webrat Form")
21
- end
22
-
23
- it "should check the value of a field" do
24
- visit "/"
25
- field_labeled("Prefilled").value.should == "text"
26
- end
27
-
28
- it "should not follow external redirects" do
29
- response = visit "/external_redirect"
30
- response.status.should == 302
31
- end
32
-
33
- it "should upload files" do
34
- visit "/upload"
35
- attach_file "File", __FILE__
36
- response = click_button "Upload"
37
- response.should contain(%(["webrat_spec.rb", "Tempfile"]))
38
- end
39
- end
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
+
3
+ describe "Webrat" do
4
+ it "should visit pages" do
5
+ response = visit "/"
6
+ response.should contain("Webrat Form")
7
+ end
8
+
9
+ it "should submit forms" do
10
+ visit "/"
11
+ fill_in "Text field", :with => "Hello"
12
+ check "TOS"
13
+ select "January"
14
+ click_button "Test"
15
+ end
16
+
17
+ it "should follow internal redirects" do
18
+ response = visit "/internal_redirect"
19
+ response.status.should == 200
20
+ response.should contain("Webrat Form")
21
+ end
22
+
23
+ it "should check the value of a field" do
24
+ visit "/"
25
+ field_labeled("Prefilled").value.should == "text"
26
+ end
27
+
28
+ it "should not follow external redirects" do
29
+ response = visit "/external_redirect"
30
+ response.status.should == 302
31
+ end
32
+
33
+ it "should upload files" do
34
+ visit "/upload"
35
+ attach_file "File", __FILE__
36
+ response = click_button "Upload"
37
+ response.should contain(%(["webrat_spec.rb", "Tempfile"]))
38
+ end
39
+ end
@@ -1,31 +1,31 @@
1
- #!/usr/bin/env ruby
2
-
3
- # This was added by Merb's bundler
4
-
5
- require "rubygems"
6
- require File.join(File.dirname(__FILE__), "common")
7
-
8
- gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
9
-
10
- if File.directory?(gems_dir)
11
- $BUNDLE = true
12
- Gem.clear_paths
13
- Gem.path.replace([File.expand_path(gems_dir)])
14
- ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
15
-
16
- gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
17
-
18
- if local_gem = Dir[gem_file].last
19
- version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
20
- end
21
- end
22
-
23
- version ||= "<%= Gem::Requirement.default %>"
24
-
25
- if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
26
- version = $1
27
- ARGV.shift
28
- end
29
-
30
- gem '<%= @spec.name %>', version
31
- load '<%= bin_file_name %>'
1
+ #!/usr/bin/env ruby
2
+
3
+ # This was added by Merb's bundler
4
+
5
+ require "rubygems"
6
+ require File.join(File.dirname(__FILE__), "common")
7
+
8
+ gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
9
+
10
+ if File.directory?(gems_dir)
11
+ $BUNDLE = true
12
+ Gem.clear_paths
13
+ Gem.path.replace([File.expand_path(gems_dir)])
14
+ ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
15
+
16
+ gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
17
+
18
+ if local_gem = Dir[gem_file].last
19
+ version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
20
+ end
21
+ end
22
+
23
+ version ||= "<%= Gem::Requirement.default %>"
24
+
25
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
26
+ version = $1
27
+ ARGV.shift
28
+ end
29
+
30
+ gem '<%= @spec.name %>', version
31
+ load '<%= bin_file_name %>'
@@ -1,64 +1,64 @@
1
- # This was added via Merb's bundler
2
-
3
- require "rubygems"
4
- require "rubygems/source_index"
5
-
6
- module Gem
7
- BUNDLED_SPECS = File.join(Dir.pwd, "gems", "specifications")
8
- MAIN_INDEX = Gem::SourceIndex.from_gems_in(BUNDLED_SPECS)
9
- FALLBACK_INDEX = Gem::SourceIndex.from_installed_gems
10
-
11
- def self.source_index
12
- MultiSourceIndex.new
13
- end
14
-
15
- def self.searcher
16
- MultiPathSearcher.new
17
- end
18
-
19
- class ArbitrarySearcher < GemPathSearcher
20
- def initialize(source_index)
21
- @source_index = source_index
22
- super()
23
- end
24
-
25
- def init_gemspecs
26
- @source_index.map { |_, spec| spec }.sort { |a,b|
27
- (a.name <=> b.name).nonzero? || (b.version <=> a.version)
28
- }
29
- end
30
- end
31
-
32
- class MultiPathSearcher
33
- def initialize
34
- @main_searcher = ArbitrarySearcher.new(MAIN_INDEX)
35
- @fallback_searcher = ArbitrarySearcher.new(FALLBACK_INDEX)
36
- end
37
-
38
- def find(path)
39
- try = @main_searcher.find(path)
40
- return try if try
41
- @fallback_searcher.find(path)
42
- end
43
-
44
- def find_all(path)
45
- try = @main_searcher.find_all(path)
46
- return try unless try.empty?
47
- @fallback_searcher.find_all(path)
48
- end
49
- end
50
-
51
- class MultiSourceIndex
52
- def search(*args)
53
- try = MAIN_INDEX.search(*args)
54
- return try unless try.empty?
55
- FALLBACK_INDEX.search(*args)
56
- end
57
-
58
- def find_name(*args)
59
- try = MAIN_INDEX.find_name(*args)
60
- return try unless try.empty?
61
- FALLBACK_INDEX.find_name(*args)
62
- end
63
- end
64
- end
1
+ # This was added via Merb's bundler
2
+
3
+ require "rubygems"
4
+ require "rubygems/source_index"
5
+
6
+ module Gem
7
+ BUNDLED_SPECS = File.join(Dir.pwd, "gems", "specifications")
8
+ MAIN_INDEX = Gem::SourceIndex.from_gems_in(BUNDLED_SPECS)
9
+ FALLBACK_INDEX = Gem::SourceIndex.from_installed_gems
10
+
11
+ def self.source_index
12
+ MultiSourceIndex.new
13
+ end
14
+
15
+ def self.searcher
16
+ MultiPathSearcher.new
17
+ end
18
+
19
+ class ArbitrarySearcher < GemPathSearcher
20
+ def initialize(source_index)
21
+ @source_index = source_index
22
+ super()
23
+ end
24
+
25
+ def init_gemspecs
26
+ @source_index.map { |_, spec| spec }.sort { |a,b|
27
+ (a.name <=> b.name).nonzero? || (b.version <=> a.version)
28
+ }
29
+ end
30
+ end
31
+
32
+ class MultiPathSearcher
33
+ def initialize
34
+ @main_searcher = ArbitrarySearcher.new(MAIN_INDEX)
35
+ @fallback_searcher = ArbitrarySearcher.new(FALLBACK_INDEX)
36
+ end
37
+
38
+ def find(path)
39
+ try = @main_searcher.find(path)
40
+ return try if try
41
+ @fallback_searcher.find(path)
42
+ end
43
+
44
+ def find_all(path)
45
+ try = @main_searcher.find_all(path)
46
+ return try unless try.empty?
47
+ @fallback_searcher.find_all(path)
48
+ end
49
+ end
50
+
51
+ class MultiSourceIndex
52
+ def search(*args)
53
+ try = MAIN_INDEX.search(*args)
54
+ return try unless try.empty?
55
+ FALLBACK_INDEX.search(*args)
56
+ end
57
+
58
+ def find_name(*args)
59
+ try = MAIN_INDEX.find_name(*args)
60
+ return try unless try.empty?
61
+ FALLBACK_INDEX.find_name(*args)
62
+ end
63
+ end
64
+ end
@@ -1,124 +1,124 @@
1
- require "erb"
2
-
3
- Gem.pre_install_hooks.push(proc do |installer|
4
- $INSTALLING << installer.spec
5
-
6
- unless File.file?(installer.bin_dir / "common.rb")
7
- FileUtils.mkdir_p(installer.bin_dir)
8
- FileUtils.cp(File.dirname(__FILE__) / "common.rb", installer.bin_dir / "common.rb")
9
- end
10
-
11
- include ColorfulMessages
12
- name = installer.spec.name
13
- if $GEMS && versions = ($GEMS.assoc(name) || [])[1]
14
- dep = Gem::Dependency.new(name, versions)
15
- unless dep.version_requirements.satisfied_by?(installer.spec.version)
16
- error "Cannot install #{installer.spec.full_name} " \
17
- "for #{$INSTALLING.map {|x| x.full_name}.join(", ")}; " \
18
- "you required #{dep}"
19
- ::Thor::Tasks::Merb::Gem.rollback_trans
20
- exit!
21
- end
22
- end
23
- success "Installing #{installer.spec.full_name}"
24
- end)
25
-
26
- class ::Gem::Uninstaller
27
- def self._with_silent_ui
28
-
29
- ui = Gem::DefaultUserInteraction.ui
30
- def ui.say(str)
31
- puts "- #{str}"
32
- end
33
-
34
- yield
35
-
36
- class << Gem::DefaultUserInteraction.ui
37
- remove_method :say
38
- end
39
- end
40
-
41
- def self._uninstall(source_index, name, op, version)
42
- unless source_index.find_name(name, "#{op} #{version}").empty?
43
- uninstaller = Gem::Uninstaller.new(
44
- name,
45
- :version => "#{op} #{version}",
46
- :install_dir => Dir.pwd / "gems",
47
- :all => true,
48
- :ignore => true
49
- )
50
- _with_silent_ui { uninstaller.uninstall }
51
- end
52
- end
53
-
54
- def self._uninstall_others(source_index, name, version)
55
- _uninstall(source_index, name, "<", version)
56
- _uninstall(source_index, name, ">", version)
57
- end
58
- end
59
-
60
- Gem.post_install_hooks.push(proc do |installer|
61
- $INSTALLING.pop
62
- source_index = installer.instance_variable_get("@source_index")
63
- ::Gem::Uninstaller._uninstall_others(
64
- source_index, installer.spec.name, installer.spec.version
65
- )
66
- end)
67
-
68
- class ::Gem::DependencyInstaller
69
- alias old_fg find_gems_with_sources
70
-
71
- def find_gems_with_sources(dep)
72
- if @source_index.any? { |_, installed_spec|
73
- installed_spec.satisfies_requirement?(dep)
74
- }
75
- return []
76
- end
77
-
78
- old_fg(dep)
79
- end
80
- end
81
-
82
- class ::Gem::SpecFetcher
83
- alias old_fetch fetch
84
- def fetch(dependency, all = false, matching_platform = true)
85
- idx = Gem::SourceIndex.from_installed_gems
86
-
87
- dep = idx.search(dependency).sort.last
88
-
89
- if dep
90
- file = dep.loaded_from.dup
91
- file.gsub!(/specifications/, "cache")
92
- file.gsub!(/gemspec$/, "gem")
93
- spec = ::Gem::Format.from_file_by_path(file).spec
94
- [[spec, file]]
95
- else
96
- old_fetch(dependency, all, matching_platform)
97
- end
98
- end
99
- end
100
-
101
- class ::Gem::Installer
102
- def app_script_text(bin_file_name)
103
- template = File.read(File.dirname(__FILE__) / "app_script.rb")
104
- erb = ERB.new(template)
105
- erb.result(binding)
106
- end
107
- end
108
-
109
- class ::Gem::Specification
110
- def recursive_dependencies(from, index = Gem.source_index)
111
- specs = self.runtime_dependencies.map do |dep|
112
- spec = index.search(dep).last
113
- unless spec
114
- from_name = from.is_a?(::Gem::Specification) ? from.full_name : from.to_s
115
- wider_net = index.find_name(dep.name).last
116
- ThorUI.error "Needed #{dep} for #{from_name}, but could not find it"
117
- ThorUI.error "Found #{wider_net.full_name}" if wider_net
118
- ::Thor::Tasks::Merb::Gem.rollback_trans
119
- end
120
- spec
121
- end
122
- specs + specs.map {|s| s.recursive_dependencies(self, index)}.flatten.uniq
123
- end
124
- end
1
+ require "erb"
2
+
3
+ Gem.pre_install_hooks.push(proc do |installer|
4
+ $INSTALLING << installer.spec
5
+
6
+ unless File.file?(installer.bin_dir / "common.rb")
7
+ FileUtils.mkdir_p(installer.bin_dir)
8
+ FileUtils.cp(File.dirname(__FILE__) / "common.rb", installer.bin_dir / "common.rb")
9
+ end
10
+
11
+ include ColorfulMessages
12
+ name = installer.spec.name
13
+ if $GEMS && versions = ($GEMS.assoc(name) || [])[1]
14
+ dep = Gem::Dependency.new(name, versions)
15
+ unless dep.version_requirements.satisfied_by?(installer.spec.version)
16
+ error "Cannot install #{installer.spec.full_name} " \
17
+ "for #{$INSTALLING.map {|x| x.full_name}.join(", ")}; " \
18
+ "you required #{dep}"
19
+ ::Thor::Tasks::Merb::Gem.rollback_trans
20
+ exit!
21
+ end
22
+ end
23
+ success "Installing #{installer.spec.full_name}"
24
+ end)
25
+
26
+ class ::Gem::Uninstaller
27
+ def self._with_silent_ui
28
+
29
+ ui = Gem::DefaultUserInteraction.ui
30
+ def ui.say(str)
31
+ puts "- #{str}"
32
+ end
33
+
34
+ yield
35
+
36
+ class << Gem::DefaultUserInteraction.ui
37
+ remove_method :say
38
+ end
39
+ end
40
+
41
+ def self._uninstall(source_index, name, op, version)
42
+ unless source_index.find_name(name, "#{op} #{version}").empty?
43
+ uninstaller = Gem::Uninstaller.new(
44
+ name,
45
+ :version => "#{op} #{version}",
46
+ :install_dir => Dir.pwd / "gems",
47
+ :all => true,
48
+ :ignore => true
49
+ )
50
+ _with_silent_ui { uninstaller.uninstall }
51
+ end
52
+ end
53
+
54
+ def self._uninstall_others(source_index, name, version)
55
+ _uninstall(source_index, name, "<", version)
56
+ _uninstall(source_index, name, ">", version)
57
+ end
58
+ end
59
+
60
+ Gem.post_install_hooks.push(proc do |installer|
61
+ $INSTALLING.pop
62
+ source_index = installer.instance_variable_get("@source_index")
63
+ ::Gem::Uninstaller._uninstall_others(
64
+ source_index, installer.spec.name, installer.spec.version
65
+ )
66
+ end)
67
+
68
+ class ::Gem::DependencyInstaller
69
+ alias old_fg find_gems_with_sources
70
+
71
+ def find_gems_with_sources(dep)
72
+ if @source_index.any? { |_, installed_spec|
73
+ installed_spec.satisfies_requirement?(dep)
74
+ }
75
+ return []
76
+ end
77
+
78
+ old_fg(dep)
79
+ end
80
+ end
81
+
82
+ class ::Gem::SpecFetcher
83
+ alias old_fetch fetch
84
+ def fetch(dependency, all = false, matching_platform = true)
85
+ idx = Gem::SourceIndex.from_installed_gems
86
+
87
+ dep = idx.search(dependency).sort.last
88
+
89
+ if dep
90
+ file = dep.loaded_from.dup
91
+ file.gsub!(/specifications/, "cache")
92
+ file.gsub!(/gemspec$/, "gem")
93
+ spec = ::Gem::Format.from_file_by_path(file).spec
94
+ [[spec, file]]
95
+ else
96
+ old_fetch(dependency, all, matching_platform)
97
+ end
98
+ end
99
+ end
100
+
101
+ class ::Gem::Installer
102
+ def app_script_text(bin_file_name)
103
+ template = File.read(File.dirname(__FILE__) / "app_script.rb")
104
+ erb = ERB.new(template)
105
+ erb.result(binding)
106
+ end
107
+ end
108
+
109
+ class ::Gem::Specification
110
+ def recursive_dependencies(from, index = Gem.source_index)
111
+ specs = self.runtime_dependencies.map do |dep|
112
+ spec = index.search(dep).last
113
+ unless spec
114
+ from_name = from.is_a?(::Gem::Specification) ? from.full_name : from.to_s
115
+ wider_net = index.find_name(dep.name).last
116
+ ThorUI.error "Needed #{dep} for #{from_name}, but could not find it"
117
+ ThorUI.error "Found #{wider_net.full_name}" if wider_net
118
+ ::Thor::Tasks::Merb::Gem.rollback_trans
119
+ end
120
+ spec
121
+ end
122
+ specs + specs.map {|s| s.recursive_dependencies(self, index)}.flatten.uniq
123
+ end
124
+ end