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,150 +1,150 @@
1
- require "rubygems"
2
- require "rubygems/source_index"
3
- require "rubygems/dependency_installer"
4
- require "rubygems/uninstaller"
5
- require "fileutils"
6
- require File.join(File.dirname(__FILE__), "utils")
7
- require File.join(File.dirname(__FILE__), "gem_ext")
8
- require File.join(File.dirname(__FILE__), "ops")
9
-
10
- $INSTALLING = []
11
-
12
- module Merb
13
-
14
- class Gem < Thor
15
- extend ColorfulMessages
16
-
17
- def initialize
18
- dirs = [Dir.pwd, File.dirname(__FILE__) / ".."]
19
- root = dirs.find {|d| File.file?(d / "config" / "dependencies.rb")}
20
-
21
- if root
22
- @depsrb = root / "config" / "dependencies.rb"
23
- else
24
- self.class.error "dependencies.rb was not found"
25
- exit!
26
- end
27
-
28
- FileUtils.mkdir_p(Dir.pwd / "gems")
29
-
30
- @list = Collector.collect(File.read(@depsrb))
31
- @idx = ::Gem::SourceIndex.new.load_gems_in("gems/specifications")
32
- end
33
-
34
- def list
35
- require "pp"
36
- pp @list
37
- end
38
-
39
- desc "redeploy", "Syncs up gems/cache with gems/gems. All gems in the cache " \
40
- "that are not already installed will be installed from the " \
41
- "cache. All installed gems that are not in the cache will " \
42
- "be uninstalled."
43
- def redeploy
44
- gem_dir = Dir.pwd / "gems" / "gems"
45
- cache_dir = Dir.pwd / "gems" / "cache"
46
-
47
- gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
48
- cache = Dir[cache_dir / "*.gem"].map! {|n| File.basename(n, ".gem")}
49
- new_gems = cache - gems
50
- outdated = gems - cache
51
- idx = ::Gem::SourceIndex.new
52
- idx.load_gems_in(Dir.pwd / "gems" / "specifications")
53
-
54
- new_gems.each do |g|
55
- installer = ::Gem::Installer.new(cache_dir / "#{g}.gem",
56
- :bin_dir => Dir.pwd / "bin",
57
- :install_dir => Dir.pwd / "gems",
58
- :ignore_dependencies => true,
59
- :user_install => false,
60
- :wrappers => true,
61
- :source_index => idx)
62
-
63
- installer.install
64
- end
65
-
66
- outdated.each do |g|
67
- /(.*)\-(.*)/ =~ g
68
- name, version = $1, $2
69
- uninstaller = ::Gem::Uninstaller.new(name,
70
- :version => version,
71
- :bin_dir => Dir.pwd / "bin",
72
- :install_dir => Dir.pwd / "gems",
73
- :ignore => true,
74
- :executables => true
75
- )
76
- uninstaller.uninstall
77
- end
78
- end
79
-
80
- desc "confirm", "Confirm the current setup. merb:gem:install will " \
81
- "automatically run this task before committing the " \
82
- "changes it makes."
83
- def confirm(gems = @list)
84
- ::Gem.path.replace([Dir.pwd / "gems"])
85
- ::Gem.source_index.load_gems_in(Dir.pwd / "gems" / "specifications")
86
-
87
- self.class.info "Confirming configuration..."
88
-
89
- ::Gem.loaded_specs.clear
90
-
91
- begin
92
- gems.each do |name, versions|
93
- versions ||= []
94
- ::Gem.activate name, *versions
95
- end
96
- rescue ::Gem::LoadError => e
97
- self.class.error "Configuration could not be confirmed: #{e.message}"
98
- self.class.rollback_trans
99
- end
100
- self.class.info "Confirmed"
101
- end
102
-
103
- desc 'install', 'Sync up your bundled gems with the list in config/dependencies.rb'
104
- def install(*gems)
105
- if gems.empty?
106
- gems = @list
107
- else
108
- gems = gems.map {|desc| name, *versions = desc.split(" ") }
109
- end
110
-
111
- $GEMS = gems
112
-
113
- self.class.begin_trans
114
-
115
- gems.each do |name, versions|
116
- dep = ::Gem::Dependency.new(name, versions || [])
117
- unless @idx.search(dep).empty?
118
- next
119
- end
120
-
121
- rescue_failures do
122
- $INSTALLING = []
123
- _install(dep)
124
- end
125
- end
126
-
127
- gem_dir = Dir.pwd / "gems" / "gems"
128
- installed_gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
129
-
130
- list = full_list.map {|x| x.full_name}.compact
131
-
132
- (installed_gems - list).each do |g|
133
- /^(.*)\-(.*)$/ =~ g
134
- name, version = $1, $2
135
- uninstaller = ::Gem::Uninstaller.new(name,
136
- :version => version,
137
- :bin_dir => (Dir.pwd / "bin").to_s,
138
- :install_dir => (Dir.pwd / "gems").to_s,
139
- :ignore => true,
140
- :executables => true
141
- )
142
- uninstaller.uninstall
143
- end
144
-
145
- confirm(gems)
146
-
147
- self.class.commit_trans
148
- end
149
- end
1
+ require "rubygems"
2
+ require "rubygems/source_index"
3
+ require "rubygems/dependency_installer"
4
+ require "rubygems/uninstaller"
5
+ require "fileutils"
6
+ require File.join(File.dirname(__FILE__), "utils")
7
+ require File.join(File.dirname(__FILE__), "gem_ext")
8
+ require File.join(File.dirname(__FILE__), "ops")
9
+
10
+ $INSTALLING = []
11
+
12
+ module Merb
13
+
14
+ class Gem < Thor
15
+ extend ColorfulMessages
16
+
17
+ def initialize
18
+ dirs = [Dir.pwd, File.dirname(__FILE__) / ".."]
19
+ root = dirs.find {|d| File.file?(d / "config" / "dependencies.rb")}
20
+
21
+ if root
22
+ @depsrb = root / "config" / "dependencies.rb"
23
+ else
24
+ self.class.error "dependencies.rb was not found"
25
+ exit!
26
+ end
27
+
28
+ FileUtils.mkdir_p(Dir.pwd / "gems")
29
+
30
+ @list = Collector.collect(File.read(@depsrb))
31
+ @idx = ::Gem::SourceIndex.new.load_gems_in("gems/specifications")
32
+ end
33
+
34
+ def list
35
+ require "pp"
36
+ pp @list
37
+ end
38
+
39
+ desc "redeploy", "Syncs up gems/cache with gems/gems. All gems in the cache " \
40
+ "that are not already installed will be installed from the " \
41
+ "cache. All installed gems that are not in the cache will " \
42
+ "be uninstalled."
43
+ def redeploy
44
+ gem_dir = Dir.pwd / "gems" / "gems"
45
+ cache_dir = Dir.pwd / "gems" / "cache"
46
+
47
+ gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
48
+ cache = Dir[cache_dir / "*.gem"].map! {|n| File.basename(n, ".gem")}
49
+ new_gems = cache - gems
50
+ outdated = gems - cache
51
+ idx = ::Gem::SourceIndex.new
52
+ idx.load_gems_in(Dir.pwd / "gems" / "specifications")
53
+
54
+ new_gems.each do |g|
55
+ installer = ::Gem::Installer.new(cache_dir / "#{g}.gem",
56
+ :bin_dir => Dir.pwd / "bin",
57
+ :install_dir => Dir.pwd / "gems",
58
+ :ignore_dependencies => true,
59
+ :user_install => false,
60
+ :wrappers => true,
61
+ :source_index => idx)
62
+
63
+ installer.install
64
+ end
65
+
66
+ outdated.each do |g|
67
+ /(.*)\-(.*)/ =~ g
68
+ name, version = $1, $2
69
+ uninstaller = ::Gem::Uninstaller.new(name,
70
+ :version => version,
71
+ :bin_dir => Dir.pwd / "bin",
72
+ :install_dir => Dir.pwd / "gems",
73
+ :ignore => true,
74
+ :executables => true
75
+ )
76
+ uninstaller.uninstall
77
+ end
78
+ end
79
+
80
+ desc "confirm", "Confirm the current setup. merb:gem:install will " \
81
+ "automatically run this task before committing the " \
82
+ "changes it makes."
83
+ def confirm(gems = @list)
84
+ ::Gem.path.replace([Dir.pwd / "gems"])
85
+ ::Gem.source_index.load_gems_in(Dir.pwd / "gems" / "specifications")
86
+
87
+ self.class.info "Confirming configuration..."
88
+
89
+ ::Gem.loaded_specs.clear
90
+
91
+ begin
92
+ gems.each do |name, versions|
93
+ versions ||= []
94
+ ::Gem.activate name, *versions
95
+ end
96
+ rescue ::Gem::LoadError => e
97
+ self.class.error "Configuration could not be confirmed: #{e.message}"
98
+ self.class.rollback_trans
99
+ end
100
+ self.class.info "Confirmed"
101
+ end
102
+
103
+ desc 'install', 'Sync up your bundled gems with the list in config/dependencies.rb'
104
+ def install(*gems)
105
+ if gems.empty?
106
+ gems = @list
107
+ else
108
+ gems = gems.map {|desc| name, *versions = desc.split(" ") }
109
+ end
110
+
111
+ $GEMS = gems
112
+
113
+ self.class.begin_trans
114
+
115
+ gems.each do |name, versions|
116
+ dep = ::Gem::Dependency.new(name, versions || [])
117
+ unless @idx.search(dep).empty?
118
+ next
119
+ end
120
+
121
+ rescue_failures do
122
+ $INSTALLING = []
123
+ _install(dep)
124
+ end
125
+ end
126
+
127
+ gem_dir = Dir.pwd / "gems" / "gems"
128
+ installed_gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
129
+
130
+ list = full_list.map {|x| x.full_name}.compact
131
+
132
+ (installed_gems - list).each do |g|
133
+ /^(.*)\-(.*)$/ =~ g
134
+ name, version = $1, $2
135
+ uninstaller = ::Gem::Uninstaller.new(name,
136
+ :version => version,
137
+ :bin_dir => (Dir.pwd / "bin").to_s,
138
+ :install_dir => (Dir.pwd / "gems").to_s,
139
+ :ignore => true,
140
+ :executables => true
141
+ )
142
+ uninstaller.uninstall
143
+ end
144
+
145
+ confirm(gems)
146
+
147
+ self.class.commit_trans
148
+ end
149
+ end
150
150
  end
@@ -1,93 +1,93 @@
1
- module Thor::Tasks
2
- module Merb
3
- class Collector
4
- attr_reader :dependencies
5
-
6
- def self.collect(str)
7
- collector = new
8
- collector.instance_eval(str)
9
- collector.dependencies
10
- end
11
-
12
- def initialize
13
- @dependencies = []
14
- end
15
-
16
- def dependency(name, *versions)
17
- versions.pop if versions.last.is_a?(Hash)
18
- @dependencies << [name, versions]
19
- end
20
- end
21
-
22
- class Gem < Thor
23
- def full_list
24
- @idx.load_gems_in("gems/specifications")
25
-
26
- @list.map do |name, versions|
27
- dep = ::Gem::Dependency.new(name, versions)
28
- spec = @idx.search(dep).last
29
- unless spec
30
- self.class.error "A required dependency #{dep} was not found"
31
- self.class.rollback_trans
32
- end
33
- deps = spec.recursive_dependencies(dep, @idx)
34
- [spec] + deps
35
- end.flatten.uniq
36
- end
37
-
38
- def rescue_failures(error = StandardError, prc = nil)
39
- begin
40
- yield
41
- rescue error => e
42
- if prc
43
- prc.call(e)
44
- else
45
- puts e.message
46
- puts e.backtrace
47
- end
48
- self.class.rollback_trans
49
- end
50
- end
51
-
52
- def self.begin_trans
53
- note "Beginning transaction"
54
- FileUtils.cp_r(Dir.pwd / "gems", Dir.pwd / ".original_gems")
55
- end
56
-
57
- def self.commit_trans
58
- note "Committing transaction"
59
- FileUtils.rm_rf(Dir.pwd / ".original_gems")
60
- end
61
-
62
- def self.rollback_trans
63
- if File.exist?(Dir.pwd / ".original_gems")
64
- note "Rolling back transaction"
65
- FileUtils.rm_rf(Dir.pwd / "gems")
66
- FileUtils.mv(Dir.pwd / ".original_gems", Dir.pwd / "gems")
67
- end
68
- exit!
69
- end
70
-
71
- private
72
- def _install(dep)
73
- @idx.load_gems_in("gems/specifications")
74
- return if @idx.search(dep).last
75
-
76
- installer = ::Gem::DependencyInstaller.new(
77
- :bin_dir => Dir.pwd / "bin",
78
- :install_dir => Dir.pwd / "gems",
79
- :user_install => false)
80
-
81
- begin
82
- installer.install dep.name, dep.version_requirements
83
- rescue ::Gem::GemNotFoundException => e
84
- puts "Cannot find #{dep}"
85
- rescue ::Gem::RemoteFetcher::FetchError => e
86
- puts e.message
87
- puts "Retrying..."
88
- retry
89
- end
90
- end
91
- end
92
- end
93
- end
1
+ module Thor::Tasks
2
+ module Merb
3
+ class Collector
4
+ attr_reader :dependencies
5
+
6
+ def self.collect(str)
7
+ collector = new
8
+ collector.instance_eval(str)
9
+ collector.dependencies
10
+ end
11
+
12
+ def initialize
13
+ @dependencies = []
14
+ end
15
+
16
+ def dependency(name, *versions)
17
+ versions.pop if versions.last.is_a?(Hash)
18
+ @dependencies << [name, versions]
19
+ end
20
+ end
21
+
22
+ class Gem < Thor
23
+ def full_list
24
+ @idx.load_gems_in("gems/specifications")
25
+
26
+ @list.map do |name, versions|
27
+ dep = ::Gem::Dependency.new(name, versions)
28
+ spec = @idx.search(dep).last
29
+ unless spec
30
+ self.class.error "A required dependency #{dep} was not found"
31
+ self.class.rollback_trans
32
+ end
33
+ deps = spec.recursive_dependencies(dep, @idx)
34
+ [spec] + deps
35
+ end.flatten.uniq
36
+ end
37
+
38
+ def rescue_failures(error = StandardError, prc = nil)
39
+ begin
40
+ yield
41
+ rescue error => e
42
+ if prc
43
+ prc.call(e)
44
+ else
45
+ puts e.message
46
+ puts e.backtrace
47
+ end
48
+ self.class.rollback_trans
49
+ end
50
+ end
51
+
52
+ def self.begin_trans
53
+ note "Beginning transaction"
54
+ FileUtils.cp_r(Dir.pwd / "gems", Dir.pwd / ".original_gems")
55
+ end
56
+
57
+ def self.commit_trans
58
+ note "Committing transaction"
59
+ FileUtils.rm_rf(Dir.pwd / ".original_gems")
60
+ end
61
+
62
+ def self.rollback_trans
63
+ if File.exist?(Dir.pwd / ".original_gems")
64
+ note "Rolling back transaction"
65
+ FileUtils.rm_rf(Dir.pwd / "gems")
66
+ FileUtils.mv(Dir.pwd / ".original_gems", Dir.pwd / "gems")
67
+ end
68
+ exit!
69
+ end
70
+
71
+ private
72
+ def _install(dep)
73
+ @idx.load_gems_in("gems/specifications")
74
+ return if @idx.search(dep).last
75
+
76
+ installer = ::Gem::DependencyInstaller.new(
77
+ :bin_dir => Dir.pwd / "bin",
78
+ :install_dir => Dir.pwd / "gems",
79
+ :user_install => false)
80
+
81
+ begin
82
+ installer.install dep.name, dep.version_requirements
83
+ rescue ::Gem::GemNotFoundException => e
84
+ puts "Cannot find #{dep}"
85
+ rescue ::Gem::RemoteFetcher::FetchError => e
86
+ puts e.message
87
+ puts "Retrying..."
88
+ retry
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,40 +1,40 @@
1
- class String
2
- def /(other)
3
- (Pathname.new(self) + other).to_s
4
- end
5
- end
6
-
7
- module ColorfulMessages
8
-
9
- # red
10
- def error(*messages)
11
- puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
12
- end
13
-
14
- # yellow
15
- def warning(*messages)
16
- puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
17
- end
18
-
19
- # green
20
- def success(*messages)
21
- puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
22
- end
23
-
24
- alias_method :message, :success
25
-
26
- # magenta
27
- def note(*messages)
28
- puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
29
- end
30
-
31
- # blue
32
- def info(*messages)
33
- puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
34
- end
35
-
36
- end
37
-
38
- module ThorUI
39
- extend ColorfulMessages
40
- end
1
+ class String
2
+ def /(other)
3
+ (Pathname.new(self) + other).to_s
4
+ end
5
+ end
6
+
7
+ module ColorfulMessages
8
+
9
+ # red
10
+ def error(*messages)
11
+ puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
12
+ end
13
+
14
+ # yellow
15
+ def warning(*messages)
16
+ puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
17
+ end
18
+
19
+ # green
20
+ def success(*messages)
21
+ puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
22
+ end
23
+
24
+ alias_method :message, :success
25
+
26
+ # magenta
27
+ def note(*messages)
28
+ puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
29
+ end
30
+
31
+ # blue
32
+ def info(*messages)
33
+ puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
34
+ end
35
+
36
+ end
37
+
38
+ module ThorUI
39
+ extend ColorfulMessages
40
+ end
@@ -1,5 +1,5 @@
1
- require "rake/testtask"
2
-
3
- Rake::TestTask.new do |t|
4
- t.test_files = FileList["test/*_test.rb"]
5
- end
1
+ require "rake/testtask"
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.test_files = FileList["test/*_test.rb"]
5
+ end