britt-geminstaller 0.5.2 → 0.5.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/.loadpath +5 -0
  2. data/COPYING +1 -0
  3. data/History.txt +69 -0
  4. data/LICENSE +21 -0
  5. data/Manifest.txt +78 -0
  6. data/README.txt +64 -0
  7. data/Rakefile +184 -0
  8. data/TODO.txt +138 -0
  9. data/bin/geminstaller +30 -0
  10. data/cruise_config.rb +14 -0
  11. data/focused_spec.sh +2 -0
  12. data/focused_spec_debug.sh +2 -0
  13. data/geminstaller.yml +42 -0
  14. data/lib/geminstaller.rb +103 -0
  15. data/lib/geminstaller/application.rb +105 -0
  16. data/lib/geminstaller/arg_parser.rb +166 -0
  17. data/lib/geminstaller/autogem.rb +46 -0
  18. data/lib/geminstaller/backward_compatibility.rb +10 -0
  19. data/lib/geminstaller/config.rb +68 -0
  20. data/lib/geminstaller/config_builder.rb +65 -0
  21. data/lib/geminstaller/enhanced_stream_ui.rb +71 -0
  22. data/lib/geminstaller/exact_match_list_command.rb +16 -0
  23. data/lib/geminstaller/file_reader.rb +31 -0
  24. data/lib/geminstaller/gem_arg_processor.rb +44 -0
  25. data/lib/geminstaller/gem_command_manager.rb +74 -0
  26. data/lib/geminstaller/gem_interaction_handler.rb +41 -0
  27. data/lib/geminstaller/gem_list_checker.rb +55 -0
  28. data/lib/geminstaller/gem_runner_proxy.rb +62 -0
  29. data/lib/geminstaller/gem_source_index_proxy.rb +21 -0
  30. data/lib/geminstaller/gem_spec_manager.rb +53 -0
  31. data/lib/geminstaller/geminstaller_access_error.rb +4 -0
  32. data/lib/geminstaller/geminstaller_error.rb +13 -0
  33. data/lib/geminstaller/hoe_extensions.rb +9 -0
  34. data/lib/geminstaller/install_processor.rb +71 -0
  35. data/lib/geminstaller/missing_dependency_finder.rb +46 -0
  36. data/lib/geminstaller/missing_file_error.rb +4 -0
  37. data/lib/geminstaller/noninteractive_chooser.rb +114 -0
  38. data/lib/geminstaller/output_filter.rb +49 -0
  39. data/lib/geminstaller/output_listener.rb +33 -0
  40. data/lib/geminstaller/output_observer.rb +36 -0
  41. data/lib/geminstaller/output_proxy.rb +36 -0
  42. data/lib/geminstaller/registry.rb +127 -0
  43. data/lib/geminstaller/requires.rb +81 -0
  44. data/lib/geminstaller/rogue_gem_finder.rb +195 -0
  45. data/lib/geminstaller/ruby_gem.rb +58 -0
  46. data/lib/geminstaller/rubygems_exit.rb +5 -0
  47. data/lib/geminstaller/rubygems_extensions.rb +9 -0
  48. data/lib/geminstaller/rubygems_version_checker.rb +15 -0
  49. data/lib/geminstaller/rubygems_version_warnings.rb +38 -0
  50. data/lib/geminstaller/source_index_search_adapter.rb +41 -0
  51. data/lib/geminstaller/unauthorized_dependency_prompt_error.rb +4 -0
  52. data/lib/geminstaller/unexpected_prompt_error.rb +4 -0
  53. data/lib/geminstaller/valid_platform_selector.rb +49 -0
  54. data/lib/geminstaller/version_specifier.rb +24 -0
  55. data/lib/geminstaller/yaml_loader.rb +22 -0
  56. data/lib/geminstaller_rails_preinitializer.rb +46 -0
  57. data/start_local_gem_server.sh +1 -0
  58. data/test/test_all.rb +36 -0
  59. data/test/test_all_smoketests.rb +21 -0
  60. data/website/config.yaml +11 -0
  61. data/website/src/analytics.page +6 -0
  62. data/website/src/code/ci.virtual +5 -0
  63. data/website/src/code/coverage/index.virtual +5 -0
  64. data/website/src/code/index.page +88 -0
  65. data/website/src/code/rdoc/index.virtual +6 -0
  66. data/website/src/community/index.page +14 -0
  67. data/website/src/community/links.page +11 -0
  68. data/website/src/community/rubyforge.virtual +4 -0
  69. data/website/src/default.css +175 -0
  70. data/website/src/default.template +42 -0
  71. data/website/src/documentation/documentation.page +476 -0
  72. data/website/src/documentation/index.page +53 -0
  73. data/website/src/documentation/tutorials.page +337 -0
  74. data/website/src/download.page +12 -0
  75. data/website/src/faq.page +36 -0
  76. data/website/src/index.page +92 -0
  77. data/website/src/metainfo +54 -0
  78. data/website/src/webgen.css +112 -0
  79. metadata +80 -3
@@ -0,0 +1,49 @@
1
+ module GemInstaller
2
+ class OutputFilter
3
+ attr_writer :output_proxy, :options
4
+
5
+ def rubygems_output(type, message)
6
+ return if @options[:silent]
7
+ return unless rubygems_output_type_matches?(type)
8
+ output(:rubygems, type, message)
9
+ end
10
+
11
+ def geminstaller_output(type, message)
12
+ return if @options[:silent]
13
+ return unless geminstaller_output_type_matches?(type)
14
+ output(:geminstaller, type, message)
15
+ end
16
+
17
+ def output(source, type, message)
18
+ message = format_rubygems_message(type,message) if source == :rubygems
19
+ if (source == :geminstaller and type == :error)
20
+ @output_proxy.syserr(message)
21
+
22
+ else
23
+ @output_proxy.sysout(message)
24
+ end
25
+ end
26
+
27
+ def format_rubygems_message(type, message)
28
+ prefix = case type
29
+ when :stdout : "[RubyGems:stdout] "
30
+ when :stderr : "[RubyGems:stderr] "
31
+ end
32
+ "#{prefix}#{message}"
33
+ end
34
+
35
+ def rubygems_output_type_matches?(type)
36
+ return false unless @options[:rubygems_output]
37
+ return true if @options[:rubygems_output].include?(:all)
38
+ return true if @options[:rubygems_output].include?(type)
39
+ return false
40
+ end
41
+
42
+ def geminstaller_output_type_matches?(type)
43
+ return false unless @options[:geminstaller_output]
44
+ return true if @options[:geminstaller_output].include?(:all)
45
+ return true if @options[:geminstaller_output].include?(type)
46
+ return false
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,33 @@
1
+ dir = File.dirname(__FILE__)
2
+ require File.expand_path("#{dir}/requires.rb")
3
+
4
+ module GemInstaller
5
+ class OutputListener
6
+ attr_writer :output_filter
7
+
8
+ def initialize
9
+ @messages = []
10
+ @output_filter = nil
11
+ end
12
+
13
+ def notify(msg, stream = :stdout)
14
+ @messages.push(msg)
15
+ return unless @output_filter
16
+ if stream == :stdout or stream == :stderr
17
+ @output_filter.rubygems_output(stream, msg)
18
+ else
19
+ raise GemInstaller::GemInstallerError.new("Invalid stream specified: #{@stream}")
20
+ end
21
+ end
22
+
23
+ def read
24
+ @messages.dup
25
+ end
26
+
27
+ def read!
28
+ messages = @messages.dup
29
+ @messages.clear
30
+ messages
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ module GemInstaller
2
+ class OutputObserver
3
+ attr_writer :stream
4
+ # TODO: GemRunnerProxy should raise exception if listener still has any leftover output when run is invoked.
5
+ def initialize
6
+ @stream = :stdout
7
+ @listeners = []
8
+ end
9
+
10
+ def register(listener)
11
+ listener = [listener] unless listener.is_a?(Array)
12
+ @listeners += listener
13
+ end
14
+
15
+ def unregister(listener)
16
+ @listeners.delete(listener)
17
+ end
18
+
19
+ def print(output)
20
+ @listeners.each do |listener|
21
+ listener.notify(output, @stream)
22
+ end
23
+ end
24
+
25
+ def puts(output)
26
+ print("#{output}\n")
27
+ end
28
+
29
+ def tty?
30
+ false
31
+ end
32
+
33
+ def flush
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ module GemInstaller
2
+ class OutputProxy
3
+ attr_writer :options
4
+ def default_stream=(stream)
5
+ raise GemInstaller::GemInstallerError.new("Invalid default stream: #{stream}") unless stream == :stderr or stream == :stdout
6
+ @default_stream = stream
7
+ end
8
+
9
+ def sysout(out)
10
+ return if silent?
11
+ $stdout.print out
12
+ end
13
+
14
+ def syserr(err)
15
+ return if silent?
16
+ if @options[:redirect_stderr_to_stdout]
17
+ $stdout.print err
18
+ else
19
+ $stderr.print err
20
+ end
21
+ end
22
+
23
+ # TODO: should remove this, make callers explicitly choose.
24
+ def output(output)
25
+ if @default_stream == :stdout
26
+ sysout(output)
27
+ else
28
+ syserr(output)
29
+ end
30
+ end
31
+
32
+ def silent?
33
+ @options && @options[:silent]
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,127 @@
1
+ module GemInstaller
2
+ class Registry
3
+ attr_accessor :file_reader, :yaml_loader, :output_proxy, :config_builder, :gem_source_index, :gem_runner_proxy
4
+ attr_accessor :gem_runner, :gem_command_manager, :gem_list_checker, :app, :arg_parser, :options
5
+ attr_accessor :install_processor, :missing_dependency_finder, :valid_platform_selector
6
+ attr_accessor :output_listener, :outs_output_observer, :errs_output_observer, :output_filter, :autogem, :rogue_gem_finder
7
+ attr_accessor :gem_spec_manager, :source_index_search_adapter
8
+
9
+ if GemInstaller::RubyGemsVersionChecker.matches?('<=0.9.4')
10
+ attr_accessor :gem_interaction_handler, :noninteractive_chooser
11
+ end
12
+
13
+ def initialize
14
+ @options = {}
15
+ @arg_parser = GemInstaller::ArgParser.new
16
+ @arg_parser.options = @options
17
+
18
+ @file_reader = GemInstaller::FileReader.new
19
+ @yaml_loader = GemInstaller::YamlLoader.new
20
+ @gem_arg_processor = GemInstaller::GemArgProcessor.new
21
+ @version_specifier = GemInstaller::VersionSpecifier.new
22
+ @output_proxy = GemInstaller::OutputProxy.new
23
+ @output_proxy.options = @options
24
+ @output_filter = GemInstaller::OutputFilter.new
25
+ @output_filter.options = @options
26
+ @output_filter.output_proxy = @output_proxy
27
+
28
+
29
+ @output_listener = GemInstaller::OutputListener.new
30
+ @output_listener.output_filter = @output_filter
31
+
32
+ @valid_platform_selector = GemInstaller::ValidPlatformSelector.new
33
+ @valid_platform_selector.output_filter = @output_filter
34
+ @valid_platform_selector.options = @options
35
+
36
+ @config_builder = GemInstaller::ConfigBuilder.new
37
+ @config_builder.file_reader = @file_reader
38
+ @config_builder.yaml_loader = @yaml_loader
39
+ @config_builder.output_filter = @output_filter
40
+
41
+ @gem_source_index = Gem::SourceIndex.from_installed_gems
42
+ @gem_source_index_proxy = GemInstaller::GemSourceIndexProxy.new
43
+ @gem_source_index_proxy.gem_source_index = @gem_source_index
44
+
45
+ @source_index_search_adapter = GemInstaller::SourceIndexSearchAdapter.new
46
+ @source_index_search_adapter.gem_source_index_proxy = @gem_source_index_proxy
47
+
48
+ @outs_output_observer = GemInstaller::OutputObserver.new
49
+ @outs_output_observer.stream = :stdout
50
+ @outs_output_observer.register(@output_listener)
51
+ @errs_output_observer = GemInstaller::OutputObserver.new
52
+ @errs_output_observer.stream = :stderr
53
+ @errs_output_observer.register(@output_listener)
54
+
55
+ @enhanced_stream_ui = GemInstaller::EnhancedStreamUI.new
56
+ @enhanced_stream_ui.outs = @outs_output_observer
57
+ @enhanced_stream_ui.errs = @errs_output_observer
58
+
59
+ @gem_runner_class = Gem::GemRunner
60
+ @gem_cmd_manager_class = Gem::CommandManager
61
+ @exact_match_list_command = GemInstaller::ExactMatchListCommand.new
62
+ @gem_runner_proxy = GemInstaller::GemRunnerProxy.new
63
+ @gem_runner_proxy.gem_runner_class = @gem_runner_class
64
+ @gem_runner_proxy.gem_cmd_manager_class = @gem_cmd_manager_class
65
+ @gem_runner_proxy.output_listener = @output_listener
66
+ @gem_runner_proxy.enhanced_stream_ui = @enhanced_stream_ui
67
+ @gem_runner_proxy.options = @options
68
+ @gem_runner_proxy.output_filter = @output_filter
69
+ @gem_runner_proxy.exact_match_list_command = @exact_match_list_command
70
+
71
+ @gem_spec_manager = GemInstaller::GemSpecManager.new
72
+ @gem_spec_manager.valid_platform_selector = @valid_platform_selector
73
+ @gem_spec_manager.source_index_search_adapter = @source_index_search_adapter
74
+ @gem_spec_manager.output_filter = @output_filter
75
+
76
+ @gem_command_manager = GemInstaller::GemCommandManager.new
77
+ @gem_command_manager.gem_spec_manager = @gem_spec_manager
78
+ @gem_command_manager.gem_runner_proxy = @gem_runner_proxy
79
+
80
+ @rogue_gem_finder = GemInstaller::RogueGemFinder.new
81
+ @rogue_gem_finder.gem_command_manager = @gem_command_manager
82
+ @rogue_gem_finder.gem_spec_manager = @gem_spec_manager
83
+ @rogue_gem_finder.output_proxy = @output_proxy
84
+
85
+ @autogem = GemInstaller::Autogem.new
86
+ @autogem.gem_command_manager = @gem_command_manager
87
+ @autogem.gem_source_index_proxy = @gem_source_index_proxy
88
+
89
+ @gem_list_checker = GemInstaller::GemListChecker.new
90
+ @gem_list_checker.gem_command_manager = @gem_command_manager
91
+ @gem_list_checker.gem_arg_processor = @gem_arg_processor
92
+ @gem_list_checker.version_specifier = @version_specifier
93
+
94
+ @missing_dependency_finder = GemInstaller::MissingDependencyFinder.new
95
+ @missing_dependency_finder.gem_command_manager = @gem_command_manager
96
+ @missing_dependency_finder.gem_spec_manager = @gem_spec_manager
97
+ @missing_dependency_finder.gem_arg_processor = @gem_arg_processor
98
+ @missing_dependency_finder.output_filter = @output_filter
99
+
100
+ @install_processor = GemInstaller::InstallProcessor.new
101
+ @install_processor.options = @options
102
+ @install_processor.gem_list_checker = @gem_list_checker
103
+ @install_processor.gem_command_manager = @gem_command_manager
104
+ @install_processor.gem_spec_manager = @gem_spec_manager
105
+ @install_processor.missing_dependency_finder = @missing_dependency_finder
106
+ @install_processor.output_filter = @output_filter
107
+
108
+ if GemInstaller::RubyGemsVersionChecker.matches?('<=0.9.4')
109
+ @gem_interaction_handler = GemInstaller::GemInteractionHandler.new
110
+ @noninteractive_chooser_class = GemInstaller::NoninteractiveChooser
111
+ @gem_interaction_handler.noninteractive_chooser_class = @noninteractive_chooser_class
112
+ @gem_interaction_handler.valid_platform_selector = @valid_platform_selector
113
+ @gem_command_manager.gem_interaction_handler = @gem_interaction_handler
114
+ @enhanced_stream_ui.gem_interaction_handler = @gem_interaction_handler
115
+ end
116
+
117
+ @app = GemInstaller::Application.new
118
+ @app.autogem = @autogem
119
+ @app.rogue_gem_finder = @rogue_gem_finder
120
+ @app.options = @options
121
+ @app.arg_parser = @arg_parser
122
+ @app.config_builder = @config_builder
123
+ @app.install_processor = @install_processor
124
+ @app.output_filter = @output_filter
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,81 @@
1
+ dir = File.dirname(__FILE__)
2
+
3
+ # require for rubygems package
4
+ require 'rubygems'
5
+
6
+ # backward compability and version-checking stuff - must be required before it is used
7
+ require File.expand_path("#{dir}/rubygems_version_checker")
8
+ require File.expand_path("#{dir}/rubygems_version_warnings")
9
+ GemInstaller::RubyGemsVersionWarnings.print_warnings
10
+
11
+ # requires for rubygems internal classes
12
+ require 'rubygems/doc_manager'
13
+ require 'rubygems/config_file'
14
+ if GemInstaller::RubyGemsVersionChecker.matches?('<0.9.3')
15
+ require 'rubygems/cmd_manager'
16
+ else
17
+ require 'rubygems/command_manager'
18
+ end
19
+ require 'rubygems/gem_runner'
20
+ if GemInstaller::RubyGemsVersionChecker.matches?('<1.0.0')
21
+ require 'rubygems/remote_installer'
22
+ end
23
+ require 'rubygems/installer'
24
+ require 'rubygems/validator'
25
+
26
+ # these are order-dependent. Any better way???
27
+ unless GemInstaller::RubyGemsVersionChecker.matches?('<0.9.3')
28
+ require 'rubygems/commands/query_command'
29
+ require 'rubygems/commands/list_command'
30
+ end
31
+
32
+ # backward compability support for prior rubygems versions
33
+ require File.expand_path("#{dir}/backward_compatibility")
34
+
35
+ # third party libs
36
+ require 'erb'
37
+ require 'optparse'
38
+ require 'yaml'
39
+ require 'fileutils'
40
+
41
+ # third party lib extensions
42
+ require File.expand_path("#{dir}/rubygems_extensions")
43
+
44
+ # internal files
45
+ require File.expand_path("#{dir}/../geminstaller")
46
+ require File.expand_path("#{dir}/application")
47
+ require File.expand_path("#{dir}/arg_parser")
48
+ require File.expand_path("#{dir}/autogem")
49
+ require File.expand_path("#{dir}/config")
50
+ require File.expand_path("#{dir}/config_builder")
51
+ require File.expand_path("#{dir}/registry")
52
+ require File.expand_path("#{dir}/enhanced_stream_ui")
53
+ require File.expand_path("#{dir}/exact_match_list_command")
54
+ require File.expand_path("#{dir}/file_reader")
55
+ require File.expand_path("#{dir}/gem_arg_processor")
56
+ require File.expand_path("#{dir}/gem_command_manager")
57
+ require File.expand_path("#{dir}/gem_interaction_handler")
58
+ require File.expand_path("#{dir}/gem_list_checker")
59
+ require File.expand_path("#{dir}/gem_runner_proxy")
60
+ require File.expand_path("#{dir}/gem_source_index_proxy")
61
+ require File.expand_path("#{dir}/gem_spec_manager")
62
+ require File.expand_path("#{dir}/geminstaller_error")
63
+ require File.expand_path("#{dir}/geminstaller_access_error")
64
+ require File.expand_path("#{dir}/install_processor")
65
+ require File.expand_path("#{dir}/missing_dependency_finder")
66
+ require File.expand_path("#{dir}/missing_file_error")
67
+ require File.expand_path("#{dir}/noninteractive_chooser")
68
+ require File.expand_path("#{dir}/output_filter")
69
+ require File.expand_path("#{dir}/output_listener")
70
+ require File.expand_path("#{dir}/output_observer")
71
+ require File.expand_path("#{dir}/output_proxy")
72
+ require File.expand_path("#{dir}/rogue_gem_finder")
73
+ require File.expand_path("#{dir}/rubygems_exit")
74
+ require File.expand_path("#{dir}/ruby_gem")
75
+ require File.expand_path("#{dir}/source_index_search_adapter")
76
+ require File.expand_path("#{dir}/unexpected_prompt_error")
77
+ require File.expand_path("#{dir}/unauthorized_dependency_prompt_error")
78
+ require File.expand_path("#{dir}/valid_platform_selector")
79
+ require File.expand_path("#{dir}/version_specifier")
80
+ require File.expand_path("#{dir}/yaml_loader")
81
+
@@ -0,0 +1,195 @@
1
+ module GemInstaller
2
+ class RogueGemFinder
3
+ attr_writer :output_proxy, :gem_command_manager, :gem_spec_manager, :boilerplate_lines, :preinstalled_gem_names, :preinstalled_comment
4
+
5
+ def print_rogue_gems(config_gems, config_file_paths)
6
+ @boilerplate_lines ||= default_boilerplate_lines(config_gems, config_file_paths)
7
+ @preinstalled_gem_names ||= default_preinstalled_gem_names
8
+ @preinstalled_comment ||= default_preinstalled_comment
9
+ @config_gems_with_dependencies = []
10
+ config_gems.each do |config_gem|
11
+ process_gem(config_gem)
12
+ end
13
+ all_local_gems = @gem_spec_manager.all_local_gems
14
+ rogue_gems = []
15
+ all_local_gems.each do |local_gem|
16
+ config_match_found_for_local = false
17
+ @config_gems_with_dependencies.each do |config_gem|
18
+ name_matches = config_gem.name == local_gem.name
19
+ config_gem_version_requirement = Gem::Version::Requirement.new [config_gem.version]
20
+ local_gem_version = Gem::Version.new(local_gem.version)
21
+ version_matches = config_gem_version_requirement.satisfied_by?(local_gem_version)
22
+ if (name_matches and version_matches)
23
+ config_match_found_for_local = true
24
+ break
25
+ end
26
+ end
27
+ rogue_gems << local_gem unless config_match_found_for_local
28
+ end
29
+ yaml = format_to_yaml(rogue_gems)
30
+
31
+ handle_output(yaml)
32
+ end
33
+
34
+ def default_boilerplate_lines(config_gems, config_file_paths)
35
+ boilerplate = []
36
+ boilerplate << [
37
+ "#",
38
+ "# This is a GemInstaller config file (http://geminstaller.rubyforge.org)",
39
+ "# It was generated using the 'geminstaller --print-rogue-gems' option on #{Time.now}",
40
+ "#",
41
+ "# You can bootstrap your config by piping the output to a file: ",
42
+ "# 'geminstaller --print-rogue-gems > geminstaller.yml'",
43
+ "#",
44
+ "# You can then install these gems on another system by running geminstaller with this file.",
45
+ "#"
46
+ ]
47
+
48
+ if config_file_paths.size == 0
49
+ boilerplate << "# Since there was no config file specified, the 'gems:' section below lists all gems on your system."
50
+ else
51
+ boilerplate << "# The following config file(s) and gems were already specified:"
52
+ boilerplate << "# Files:"
53
+ config_file_paths.each do |config_file_path|
54
+ boilerplate << "# * " + config_file_path
55
+ end
56
+ boilerplate << "# Gems:"
57
+ if config_gems.size > 0
58
+ config_gems.each do |config_gem|
59
+ boilerplate << "# * #{config_gem.name} #{config_gem.version}"
60
+ end
61
+ else
62
+ boilerplate << "# No Gems"
63
+ end
64
+ end
65
+ boilerplate << "#"
66
+ boilerplate << "defaults:"
67
+ boilerplate << " install_options: --include-dependencies"
68
+ return boilerplate
69
+ end
70
+
71
+ def default_preinstalled_gem_names
72
+ # This is the list of preinstalled gems from the Ruby windows 1-click installer, v186-25
73
+ #
74
+ # fxri (0.3.6)
75
+ # Graphical interface to the RI documentation, with search engine.
76
+ #
77
+ # fxruby (1.6.6)
78
+ # FXRuby is the Ruby binding to the FOX GUI toolkit.
79
+ #
80
+ # hpricot (0.4)
81
+ # a swift, liberal HTML parser with a fantastic library
82
+ #
83
+ # log4r (1.0.5)
84
+ # Log4r is a comprehensive and flexible logging library for Ruby.
85
+ #
86
+ # rake (0.7.2)
87
+ # Ruby based make-like utility.
88
+ #
89
+ # sources (0.0.1)
90
+ # This package provides download sources for remote gem installation
91
+ #
92
+ # win32-clipboard (0.4.1)
93
+ # A package for interacting with the Windows clipboard
94
+ #
95
+ # win32-dir (0.3.1)
96
+ # Extra constants and methods for the Dir class on Windows.
97
+ #
98
+ # win32-eventlog (0.4.3)
99
+ # Interface for the MS Windows Event Log.
100
+ #
101
+ # win32-file (0.5.3)
102
+ # Extra or redefined methods for the File class on Windows.
103
+ #
104
+ # win32-file-stat (1.2.3)
105
+ # A File::Stat class tailored to MS Windows
106
+ #
107
+ # win32-process (0.5.1)
108
+ # Adds fork, wait, wait2, waitpid, waitpid2 and a special kill method
109
+ #
110
+ # win32-sapi (0.1.3)
111
+ # An interface to the MS SAPI (Sound API) library.
112
+ #
113
+ # win32-sound (0.4.0)
114
+ # A package for playing with sound on Windows.
115
+ #
116
+ # windows-pr (0.6.2)
117
+ # Windows functions and constants predefined via Win32API
118
+
119
+ if RUBY_PLATFORM =~ /mswin/
120
+ return [
121
+ 'fxri',
122
+ 'fxruby',
123
+ 'hpricot',
124
+ 'log4r',
125
+ 'rake',
126
+ 'sources',
127
+ 'win32-clipboard',
128
+ 'win32-dir',
129
+ 'win32-eventlog',
130
+ 'win32-file',
131
+ 'win32-file-stat',
132
+ 'win32-process',
133
+ 'win32-sapi',
134
+ 'win32-sound',
135
+ 'windows-pr'
136
+ ]
137
+ end
138
+ return ['sources']
139
+ end
140
+
141
+ def default_preinstalled_comment
142
+ "# NOTE: This gem may have been automatially installed with Ruby, and not actually be used by your app(s)."
143
+ end
144
+
145
+ def handle_output(yaml)
146
+ yaml_lines = yaml.split("\n")
147
+ yaml_doc_separator = yaml_lines.delete_at(0)
148
+
149
+ output = []
150
+ output.push(yaml_doc_separator)
151
+
152
+ output << @boilerplate_lines
153
+
154
+ yaml_lines.each do |yaml_line|
155
+ name_parser_regexp = /- name: (.*)/
156
+ yaml_line =~ name_parser_regexp
157
+ gem_name = $1
158
+ preinstalled_comment = ''
159
+ if @preinstalled_gem_names.include?(gem_name)
160
+ preinstalled_comment = " " + @preinstalled_comment
161
+ end
162
+ output.push yaml_line + preinstalled_comment
163
+ end
164
+
165
+ output_string = output.join("\n")
166
+ @output_proxy.sysout output_string
167
+ output_string
168
+ end
169
+
170
+ def process_gem(gem)
171
+ @config_gems_with_dependencies << gem
172
+ process_gem_dependencies(gem)
173
+ end
174
+
175
+ def process_gem_dependencies(gem)
176
+ # TODO: this method is duplicated in autogem Should abstract and take a block
177
+ matching_gems = @gem_spec_manager.local_matching_gems(gem)
178
+ matching_gems.each do |matching_gem|
179
+ dependency_gems = @gem_command_manager.dependency(matching_gem.name, matching_gem.version.to_s)
180
+ dependency_gems.each do |dependency_gem|
181
+ process_gem(dependency_gem)
182
+ end
183
+ end
184
+ end
185
+
186
+ def format_to_yaml(gems)
187
+ names_and_versions = []
188
+ gems.each do |gem|
189
+ names_and_versions << {'name' => gem.name, 'version' => gem.version}
190
+ end
191
+ hash_for_yaml = {'gems' => names_and_versions}
192
+ YAML.dump(hash_for_yaml)
193
+ end
194
+ end
195
+ end