boson 0.4.0 → 1.0.0

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 (64) hide show
  1. data/.gemspec +6 -7
  2. data/.rspec +2 -0
  3. data/.travis.yml +7 -0
  4. data/CHANGELOG.rdoc +1 -1
  5. data/README.md +144 -0
  6. data/README.rdoc +2 -2
  7. data/Upgrading.md +23 -0
  8. data/bin/boson +2 -2
  9. data/lib/boson.rb +44 -52
  10. data/lib/boson/bare_runner.rb +83 -0
  11. data/lib/boson/bin_runner.rb +114 -0
  12. data/lib/boson/command.rb +92 -132
  13. data/lib/boson/inspector.rb +49 -48
  14. data/lib/boson/library.rb +71 -120
  15. data/lib/boson/loader.rb +73 -84
  16. data/lib/boson/manager.rb +131 -135
  17. data/lib/boson/method_inspector.rb +112 -0
  18. data/lib/boson/option_command.rb +71 -154
  19. data/lib/boson/option_parser.rb +178 -173
  20. data/lib/boson/options.rb +46 -32
  21. data/lib/boson/runner.rb +58 -66
  22. data/lib/boson/runner_library.rb +31 -0
  23. data/lib/boson/scientist.rb +48 -81
  24. data/lib/boson/util.rb +46 -61
  25. data/lib/boson/version.rb +1 -1
  26. data/test/bin_runner_test.rb +53 -191
  27. data/test/command_test.rb +5 -9
  28. data/test/deps.rip +2 -2
  29. data/test/loader_test.rb +18 -216
  30. data/test/manager_test.rb +69 -79
  31. data/test/method_inspector_test.rb +12 -36
  32. data/test/option_parser_test.rb +45 -32
  33. data/test/runner_library_test.rb +10 -0
  34. data/test/runner_test.rb +158 -28
  35. data/test/scientist_test.rb +9 -147
  36. data/test/test_helper.rb +87 -52
  37. metadata +30 -72
  38. data/deps.rip +0 -2
  39. data/lib/boson/commands.rb +0 -7
  40. data/lib/boson/commands/core.rb +0 -77
  41. data/lib/boson/commands/web_core.rb +0 -153
  42. data/lib/boson/index.rb +0 -48
  43. data/lib/boson/inspectors/argument_inspector.rb +0 -97
  44. data/lib/boson/inspectors/comment_inspector.rb +0 -100
  45. data/lib/boson/inspectors/method_inspector.rb +0 -98
  46. data/lib/boson/libraries/file_library.rb +0 -144
  47. data/lib/boson/libraries/gem_library.rb +0 -30
  48. data/lib/boson/libraries/local_file_library.rb +0 -30
  49. data/lib/boson/libraries/module_library.rb +0 -37
  50. data/lib/boson/libraries/require_library.rb +0 -23
  51. data/lib/boson/namespace.rb +0 -31
  52. data/lib/boson/pipe.rb +0 -147
  53. data/lib/boson/pipes.rb +0 -75
  54. data/lib/boson/repo.rb +0 -107
  55. data/lib/boson/runners/bin_runner.rb +0 -208
  56. data/lib/boson/runners/console_runner.rb +0 -58
  57. data/lib/boson/view.rb +0 -95
  58. data/test/argument_inspector_test.rb +0 -62
  59. data/test/commands_test.rb +0 -22
  60. data/test/comment_inspector_test.rb +0 -126
  61. data/test/file_library_test.rb +0 -42
  62. data/test/pipes_test.rb +0 -65
  63. data/test/repo_index_test.rb +0 -122
  64. data/test/repo_test.rb +0 -23
@@ -0,0 +1,114 @@
1
+ module Boson
2
+ # This class handles the boson executable.
3
+ #
4
+ # Usage for the boson shell command looks like this:
5
+ # boson [GLOBAL OPTIONS] [COMMAND] [ARGS] [COMMAND OPTIONS]
6
+ #
7
+ # The boson executable comes with several global options: :version, :execute,
8
+ # :ruby_debug, :debug, and :load_path.
9
+ class BinRunner < BareRunner
10
+ GLOBAL_OPTIONS.update(
11
+ version: {type: :boolean, desc: "Prints the current version"},
12
+ execute: {type: :string,
13
+ desc: "Executes given arguments as a one line script"},
14
+ ruby_debug: {type: :boolean, desc: "Sets $DEBUG", alias: 'D'},
15
+ debug: {type: :boolean, desc: "Prints debug info for boson"},
16
+ load_path: {type: :string, desc: "Add to front of $LOAD_PATH", alias: 'I'}
17
+ )
18
+
19
+ module API
20
+ attr_accessor :command
21
+
22
+ # Executes functionality from either an option or a command
23
+ def execute_option_or_command(options, command, args)
24
+ options[:execute] ? eval_execute_option(options[:execute]) :
25
+ execute_command(command, args)
26
+ end
27
+
28
+ # Evaluates :execute option.
29
+ def eval_execute_option(str)
30
+ Boson.main_object.instance_eval str
31
+ end
32
+
33
+ # Returns true if an option does something and exits early
34
+ def early_option?(args)
35
+ if @options[:version]
36
+ puts("boson #{Boson::VERSION}")
37
+ true
38
+ elsif args.empty? || (@command.nil? && !@options[:execute])
39
+ print_usage
40
+ true
41
+ else
42
+ false
43
+ end
44
+ end
45
+
46
+ # Determines verbosity of this class
47
+ def verbose
48
+ false
49
+ end
50
+
51
+ # Handles no method errors
52
+ def no_method_error_message(err)
53
+ @command = @command.to_s
54
+ if err.backtrace.grep(/`(invoke|full_invoke)'$/).empty? ||
55
+ !err.message[/undefined method `(\w+\.)?#{command_name(@command)}'/]
56
+ default_error_message($!)
57
+ else
58
+ command_not_found?(@command) ?
59
+ "Error: Command '#{@command}' not found" : default_error_message(err)
60
+ end
61
+ end
62
+
63
+ # Determine command name given full command name. Overridden by namespaces
64
+ def command_name(cmd)
65
+ cmd
66
+ end
67
+
68
+ # Determines if a NoMethodError is a command not found error
69
+ def command_not_found?(cmd)
70
+ cmd[/\w+/]
71
+ end
72
+
73
+ # Constructs error message
74
+ def default_error_message(err)
75
+ "Error: #{err.message}"
76
+ end
77
+
78
+ def print_usage_header
79
+ puts "boson [GLOBAL OPTIONS] [COMMAND] [ARGS] [COMMAND OPTIONS]\n\n"
80
+ end
81
+
82
+ # prints full usage
83
+ def print_usage
84
+ print_usage_header
85
+ @option_parser.print_usage_table
86
+ end
87
+ end
88
+ extend API
89
+
90
+ # Starts, processes and ends a commandline request.
91
+ def self.start(args=ARGV)
92
+ super
93
+ @command, @options, @args = parse_args(args)
94
+
95
+ $:.unshift(*options[:load_path].split(":")) if options[:load_path]
96
+ Boson.debug = true if options[:debug]
97
+ $DEBUG = true if options[:ruby_debug]
98
+ return if early_option?(args)
99
+ Boson.in_shell = true
100
+
101
+ init
102
+ execute_option_or_command(@options, @command, @args)
103
+ rescue NoMethodError
104
+ abort_with no_method_error_message($!)
105
+ rescue
106
+ abort_with default_error_message($!)
107
+ end
108
+
109
+ # Hash of global options passed in from commandline
110
+ def self.options
111
+ @options ||= {}
112
+ end
113
+ end
114
+ end
data/lib/boson/command.rb CHANGED
@@ -1,74 +1,78 @@
1
1
  module Boson
2
- # A command starts with the functionality of a ruby method and adds benefits with options, render_options, etc.
2
+ # A command starts with the functionality of a ruby method and adds benefits
3
+ # with options, etc.
3
4
  class Command
4
- class <<self; attr_accessor :all_option_commands ; end
5
+ module APIClassMethods
6
+ # Creates a command given its name and a library.
7
+ def create(name, library)
8
+ new(new_attributes(name, library))
9
+ end
5
10
 
6
- # Creates a command given its name and a library.
7
- def self.create(name, library)
8
- obj = new(new_attributes(name, library))
9
- if @all_option_commands && !%w{get method_missing}.include?(name)
10
- obj.make_option_command(library)
11
+ # Attributes passed to commands from its library
12
+ def library_attributes(library)
13
+ {lib: library.name}
11
14
  end
12
- obj
13
- end
14
15
 
15
- # Used to generate a command's initial attributes when creating a command object
16
- def self.new_attributes(name, library)
17
- (library.commands_hash[name] || {}).merge({:name=>name, :lib=>library.name, :namespace=>library.namespace})
18
- end
16
+ # Finds a command, aliased or not. If found returns the command object,
17
+ # otherwise returns nil.
18
+ def find(command, commands=Boson.commands)
19
+ command && commands.find {|e| [e.name, e.alias].include?(command) }
20
+ end
19
21
 
20
- # Finds a command, namespaced or not and aliased or not. If found returns the
21
- # command object, otherwise returns nil.
22
- def self.find(command, commands=Boson.commands)
23
- if command.to_s.include?(NAMESPACE)
24
- command, subcommand = command.to_s.split(NAMESPACE, 2)
25
- commands.find {|current_command|
26
- [current_command.name, current_command.alias].include?(subcommand) &&
27
- current_command.library && (current_command.library.namespace == command)
28
- }
29
- else
30
- commands.find {|e| [e.name, e.alias].include?(command) && !e.namespace}
22
+ # Generates a command's initial attributes when creating a command object
23
+ def new_attributes(name, library)
24
+ (library.commands_hash[name] || {}).merge(name: name).
25
+ update(library_attributes(library))
31
26
  end
32
27
  end
28
+ extend APIClassMethods
33
29
 
34
30
  # One line usage for a command if it exists
35
31
  def self.usage(command)
36
- (cmd = find(command)) ? "#{command} #{cmd.usage}" : "Command '#{command}' not found"
32
+ (cmd = find(command)) ? "#{command} #{cmd.usage}" : ''
37
33
  end
38
34
 
35
+ # Attributes that are defined as accessors
39
36
  ATTRIBUTES = [:name, :lib, :alias, :desc, :options, :args, :config]
40
- attr_accessor *(ATTRIBUTES + [:render_options, :namespace, :default_option])
41
- # A hash of attributes which map to instance variables and values. :name
42
- # and :lib are required keys.
37
+ attr_accessor *(ATTRIBUTES + [:default_option])
38
+ # Attributes that can be passed in at initialization
39
+ INIT_ATTRIBUTES = [:alias, :desc, :options, :default_option, :option_command]
40
+ attr_reader :file_parsed_args
41
+
42
+ # Takes a hash of attributes which map to instance variables and values.
43
+ # :name and :lib are required keys.
43
44
  #
44
- # Attributes that can be configured:
45
- # [*:desc*] Description that shows up in command listings
46
- # [*:alias*] Alternative name for command
47
- # [*:options*] Hash of options passed to OptionParser
48
- # [*:render_options*] Hash of rendering options to pass to OptionParser. If the key :output_class is passed,
49
- # that class's Hirb config will serve as defaults for this rendering hash.
50
- # [*:option_command*] Boolean to wrap a command with an OptionCommand object i.e. allow commands to have options.
51
- # [*:args*] Should only be set if not automatically set. This attribute is only
52
- # important for commands that have options/render_options. Its value can be an array
53
- # (as ArgumentInspector.scrape_with_eval produces), a number representing
54
- # the number of arguments or '*' if the command has a variable number of arguments.
55
- # [*:default_option*] Only for an option command that has one or zero arguments. This treats the given
56
- # option as an optional first argument. Example:
57
- # # For a command with default option 'query' and options --query and -v
58
- # 'some -v' -> '--query=some -v'
59
- # '-v' -> '-v'
60
- # [*:config*] A hash for third party libraries to get and set custom command attributes.
45
+ # @param [Hash] attributes
46
+ # @option attributes [String] :desc Description that shows up once in
47
+ # command listings
48
+ # @option attributes [String] :alias Alternative name for command
49
+ # @option attributes [Hash] :options Options passed to OptionParser
50
+ # @option attributes [Array,Integer,String] :args Should only be set if
51
+ # not automatically set. This attribute is only important for commands
52
+ # that have options. Its value can be an array, a number representing
53
+ # the number of arguments or '*' if the command has a variable number of
54
+ # arguments.
55
+ # @option attributes [String] :default_option Only for an option command
56
+ # that has one or zero arguments. This treats the given option as an optional
57
+ # first argument. Example:
58
+ # # For a command with default option 'query' and options --query and -v
59
+ # 'some -v' -> '--query=some -v'
60
+ # '-v' -> '-v'
61
+ # @option attributes [Hash] :config used by third party libraries to get and
62
+ # set custom command attributes.
63
+ # @option attributes [Boolean] :option_command Wraps a command with an
64
+ # OptionCommand object i.e. allow commands to have options.
61
65
  def initialize(attributes)
62
66
  hash = attributes.dup
63
67
  @name = hash.delete(:name) or raise ArgumentError
64
68
  @lib = hash.delete(:lib) or raise ArgumentError
65
- [:alias, :desc, :options, :namespace, :default_option, :option_command].each do |e|
66
- instance_variable_set("@#{e}", hash.delete(e)) if hash.key?(e)
69
+ # since MethodInspector scrapes arguments from file by default
70
+ @file_parsed_args = true
71
+ INIT_ATTRIBUTES.each do |e|
72
+ instance_variable_set("@#{e}", hash.delete(e)) if hash.key?(e)
67
73
  end
68
74
 
69
- if hash[:render_options] && (@render_options = hash.delete(:render_options))[:output_class]
70
- @render_options = Util.recursive_hash_merge View.class_config(@render_options[:output_class]), @render_options
71
- end
75
+ after_initialize(hash)
72
76
 
73
77
  if (args = hash.delete(:args))
74
78
  if args.is_a?(Array)
@@ -82,20 +86,34 @@ module Boson
82
86
  @config = Util.recursive_hash_merge hash, hash.delete(:config) || {}
83
87
  end
84
88
 
89
+ module API
90
+ # Called after initialize
91
+ def after_initialize(hash)
92
+ end
93
+
94
+ # Alias for a name but plugins may use it to give a more descriptive name
95
+ def full_name
96
+ name
97
+ end
98
+
99
+ # One-line usage of args
100
+ def basic_usage
101
+ return '' if args.nil?
102
+ usage_args.map {|e|
103
+ (e.size < 2) ? e[0].upcase : "[#{e[0].upcase}]"
104
+ }.join(' ')
105
+ end
106
+ alias_method :usage, :basic_usage
107
+ end
108
+ include API
109
+
85
110
  # Library object a command belongs to.
86
111
  def library
87
112
  @library ||= Boson.library(@lib)
88
113
  end
89
114
 
90
- # Array of array args with optional defaults. Scraped with ArgumentInspector.
91
115
  def args(lib=library)
92
- @args = !@args.nil? ? @args : begin
93
- if lib
94
- file_string, meth = file_string_and_method_for_args(lib)
95
- (file_string && meth && (@file_parsed_args = true) &&
96
- ArgumentInspector.scrape_with_text(file_string, meth))
97
- end || false
98
- end
116
+ @args
99
117
  end
100
118
 
101
119
  # Option parser for command as defined by @options.
@@ -103,94 +121,36 @@ module Boson
103
121
  @option_parser ||= OptionParser.new(@options || {})
104
122
  end
105
123
 
106
- # Option parser for command as defined by @render_options.
107
- def render_option_parser
108
- option_command? ? Boson::Scientist.option_command(self).option_parser : nil
109
- end
110
-
111
- # Help string for options if a command has it.
112
- def option_help
113
- @options ? option_parser.to_s : ''
114
- end
115
-
116
- # Usage string for command, created from options and args.
117
- def usage
118
- return '' if options.nil? && args.nil?
119
- usage_args = args && @options && !has_splat_args? ?
120
- (@default_option ? [[@default_option.to_s, @file_parsed_args ? ''.inspect : '']] + args[0..-2] :
121
- args[0..-2]) : args
122
- str = args ? usage_args.map {|e|
123
- (e.size < 2) ? "[#{e[0]}]" : "[#{e[0]}=#{@file_parsed_args ? e[1] : e[1].inspect}]"
124
- }.join(' ') : '[*unknown]'
125
- str + option_help
126
- end
127
-
128
- # Full name is only different than name if a command has a namespace.
129
- # The full name should be what you would type to execute the command.
130
- def full_name
131
- @namespace ? "#{@namespace}.#{@name}" : @name
124
+ # Indicates if an OptionCommand
125
+ def option_command?
126
+ options || @option_command
132
127
  end
133
128
 
134
- #:stopdoc:
135
129
  # until @config is consistent in index + actual loading
136
130
  def config
137
131
  @config ||= {}
138
132
  end
139
133
 
140
- def file_string_and_method_for_args(lib)
141
- if !lib.is_a?(ModuleLibrary) && (klass_method = (lib.class_commands || {})[@name])
142
- if RUBY_VERSION >= '1.9'
143
- klass, meth = klass_method.split(NAMESPACE, 2)
144
- if (meth_locations = MethodInspector.find_method_locations_for_19(klass, meth))
145
- file_string = File.read meth_locations[0]
146
- end
147
- end
148
- elsif File.exists?(lib.library_file || '')
149
- file_string, meth = FileLibrary.read_library_file(lib.library_file), @name
150
- end
151
- [file_string, meth]
152
- end
153
-
134
+ # Indicates if any arg has a splat
154
135
  def has_splat_args?
155
136
  !!(args && @args[-1] && @args[-1][0][/^\*/])
156
137
  end
157
138
 
158
- def make_option_command(lib=library)
159
- @option_command = true
160
- @args = [['*args']] unless args(lib) || arg_size
161
- end
162
-
163
- def option_command?
164
- options || render_options || @option_command
165
- end
166
-
139
+ # Number of arguments
167
140
  def arg_size
168
- @arg_size = args ? args.size : nil unless instance_variable_defined?("@arg_size")
169
- @arg_size
170
- end
171
-
172
- def file_parsed_args?
173
- @file_parsed_args
174
- end
175
-
176
- # Deprecated method
177
- def description
178
- puts "@command.description has been changed to @command.desc. Delete your old " +
179
- "Boson index at ~/.boson/command/index.marshal for Boson to work from the commandline."
180
- Kernel.exit
181
- end
182
-
183
- def marshal_dump
184
- if @args && @args.any? {|e| e[1].is_a?(Module) }
185
- @args.map! {|e| e.size == 2 ? [e[0], e[1].inspect] : e }
186
- @file_parsed_args = true
141
+ unless instance_variable_defined?("@arg_size")
142
+ @arg_size = args ? args.size : nil
187
143
  end
188
- [@name, @alias, @lib, @desc, @options, @render_options, @args, @default_option]
144
+ @arg_size
189
145
  end
190
146
 
191
- def marshal_load(ary)
192
- @name, @alias, @lib, @desc, @options, @render_options, @args, @default_option = ary
147
+ private
148
+ def usage_args
149
+ args && @options && !has_splat_args? ?
150
+ (@default_option ?
151
+ [[@default_option.to_s, @file_parsed_args ? ''.inspect : '']] +
152
+ args[0..-2] : args[0..-2])
153
+ : args
193
154
  end
194
- #:startdoc:
195
155
  end
196
- end
156
+ end
@@ -1,13 +1,11 @@
1
1
  module Boson
2
- # Scrapes and processes method attributes with the inspectors (MethodInspector, CommentInspector
3
- # and ArgumentInspector) and hands off the data to FileLibrary objects.
2
+ # Uses method decorators to scrape, process and hand off method attributes as
3
+ # data to Library objects.
4
4
  #
5
- # === Method Attributes
6
- # Method attributes refer to (commented) Module methods placed before a command's method
7
- # in a FileLibrary module:
8
- # module SomeMod
9
- # # @render_options :fields=>%w{one two}
10
- # # @config :alias=>'so'
5
+ # === Method Decorators
6
+ # Method decorators refer to methods placed before a command's method in a
7
+ # library:
8
+ # class SomeRunner < Boson::Runner
11
9
  # options :verbose=>:boolean
12
10
  # option :count, :numeric
13
11
  # # Something descriptive perhaps
@@ -16,24 +14,26 @@ module Boson
16
14
  # end
17
15
  # end
18
16
  #
19
- # Method attributes serve as configuration for a method's command. All attributes should only be called once per
20
- # method except for option. Available method attributes:
17
+ # Method decorators serve as configuration for a method's command. All
18
+ # decorators should only be called once per method except for option.
19
+ # Available method decorators:
21
20
  # * config: Hash to define any command attributes (see Command.new).
22
- # * desc: String to define a command's description for a command. Defaults to first commented line above a method.
21
+ # * desc: String to define a command's description for a command. Defaults to
22
+ # first commented line above a method.
23
23
  # * options: Hash to define an OptionParser object for a command's options.
24
- # * option: Option name and value to be merged in with options. See OptionParser for what an option value can be.
25
- # * render_options: Hash to define an OptionParser object for a command's local/global render options (see View).
26
- #
27
- # When deciding whether to use commented or normal Module methods, remember that commented Module methods allow
28
- # independence from Boson (useful for testing). See CommentInspector for more about commented method attributes.
29
- module Inspector
30
- extend self
31
- attr_reader :enabled
24
+ # * option: Option name and value to be merged in with options. See
25
+ # OptionParser for what an option value can be.
26
+ class Inspector
27
+ class << self; attr_reader :enabled; end
28
+
29
+ # Enable scraping by overridding method_added to snoop on a library while
30
+ # it's loading its methods.
31
+ def self.enable(options = {})
32
+ method_inspector_meth = options[:all_classes] ?
33
+ :new_method_added : :safe_new_method_added
34
+ klass = options[:module] || ::Module
35
+ @enabled = true unless options[:module]
32
36
 
33
- # Enable scraping by overridding method_added to snoop on a library while it's
34
- # loading its methods.
35
- def enable
36
- @enabled = true
37
37
  body = MethodInspector::ALL_METHODS.map {|e|
38
38
  %[def #{e}(*args)
39
39
  Boson::MethodInspector.#{e}(self, *args)
@@ -41,17 +41,17 @@ module Boson
41
41
  }.join("\n") +
42
42
  %[
43
43
  def new_method_added(method)
44
- Boson::MethodInspector.new_method_added(self, method)
44
+ Boson::MethodInspector.#{method_inspector_meth}(self, method)
45
45
  end
46
46
 
47
47
  alias_method :_old_method_added, :method_added
48
48
  alias_method :method_added, :new_method_added
49
49
  ]
50
- ::Module.module_eval body
50
+ klass.module_eval body
51
51
  end
52
52
 
53
53
  # Disable scraping method data.
54
- def disable
54
+ def self.disable
55
55
  ::Module.module_eval %[
56
56
  Boson::MethodInspector::ALL_METHODS.each {|e| remove_method e }
57
57
  alias_method :method_added, :_old_method_added
@@ -59,17 +59,27 @@ module Boson
59
59
  @enabled = false
60
60
  end
61
61
 
62
- # Adds method attributes scraped for the library's module to the library's commands.
63
- def add_method_data_to_library(library)
62
+ # Adds method attributes to the library's commands
63
+ def self.add_method_data_to_library(library)
64
+ new(library).add_data
65
+ end
66
+
67
+ def initialize(library)
64
68
  @commands_hash = library.commands_hash
65
69
  @library_file = library.library_file
66
- MethodInspector.current_module = library.module
67
- @store = MethodInspector.store
68
- add_method_scraped_data
69
- add_comment_scraped_data
70
+ MethodInspector.instance.current_module = library.module
71
+ @store = MethodInspector.instance.store
70
72
  end
71
73
 
72
- #:stopdoc:
74
+ module API
75
+ # Adds scraped data from all inspectors
76
+ def add_data
77
+ add_method_scraped_data
78
+ end
79
+ end
80
+ include API
81
+
82
+ private
73
83
  def add_method_scraped_data
74
84
  (MethodInspector::METHODS + [:args]).each do |key|
75
85
  (@store[key] || []).each do |cmd, val|
@@ -83,8 +93,9 @@ module Boson
83
93
  if valid_attr_value?(key, value)
84
94
  add_scraped_data_to_config(key, value, cmd)
85
95
  else
86
- if Runner.debug
87
- warn "DEBUG: Command '#{cmd}' has #{key.inspect} attribute with invalid value '#{value.inspect}'"
96
+ if Boson.debug
97
+ warn "DEBUG: Command '#{cmd}' has #{key.inspect} attribute with " +
98
+ "invalid value '#{value.inspect}'"
88
99
  end
89
100
  end
90
101
  end
@@ -94,7 +105,8 @@ module Boson
94
105
  if key == :config
95
106
  @commands_hash[cmd] = Util.recursive_hash_merge value, @commands_hash[cmd]
96
107
  else
97
- @commands_hash[cmd][key] = Util.recursive_hash_merge value, @commands_hash[cmd][key] || {}
108
+ @commands_hash[cmd][key] = Util.recursive_hash_merge value,
109
+ @commands_hash[cmd][key] || {}
98
110
  end
99
111
  else
100
112
  @commands_hash[cmd][key] ||= value
@@ -105,16 +117,5 @@ module Boson
105
117
  return true if (klass = MethodInspector::METHOD_CLASSES[key]).nil?
106
118
  value.is_a?(klass) || value.nil?
107
119
  end
108
-
109
- def add_comment_scraped_data
110
- (@store[:method_locations] || []).select {|k,(f,l)| f == @library_file }.each do |cmd, (file, lineno)|
111
- scraped = CommentInspector.scrape(FileLibrary.read_library_file(file), lineno, MethodInspector.current_module)
112
- @commands_hash[cmd] ||= {}
113
- MethodInspector::METHODS.each do |e|
114
- add_valid_data_to_config(e, scraped[e], cmd)
115
- end
116
- end
117
- end
118
- #:startdoc:
119
120
  end
120
- end
121
+ end