boson 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/lib/boson/pipes.rb DELETED
@@ -1,75 +0,0 @@
1
- module Boson
2
- # === Default Pipes: Search and Sort
3
- # The default pipe options, :query, :sort and :reverse_sort, are quite useful for searching and sorting arrays:
4
- # Some examples using default commands:
5
- # # Searches commands in the full_name field for 'lib' and sorts results by that field.
6
- # $ boson commands -q=f:lib -s=f # or commands --query=full_name:lib --sort=full_name
7
- #
8
- # # Multiple fields can be searched if separated by a ','. This searches the full_name and desc fields.
9
- # $ boson commands -q=f,d:web # or commands --query=full_name,desc:web
10
- #
11
- # # All fields can be queried using a '*'.
12
- # # Searches all library fields and then reverse sorts on name field
13
- # $ boson libraries -q=*:core -s=n -R # or libraries --query=*:core --sort=name --reverse_sort
14
- #
15
- # # Multiple searches can be joined together by ','
16
- # # Searches for libraries that have the name matching core or a library_type matching gem
17
- # $ boson libraries -q=n:core,l:gem # or libraries --query=name:core,library_type:gem
18
- #
19
- # In these examples, we queried commands and examples with an explicit --query. However, -q or --query isn't necessary
20
- # for these commands because they already default to it when not present. This behavior comes from the default_option
21
- # attribute a command can have.
22
- module Pipes
23
- extend self
24
-
25
- # Case-insensitive search an array of objects or hashes for the :query option.
26
- # This option is a hash of fields mapped to their search terms. Searches are OR-ed.
27
- # When searching hashes, numerical string keys in query_hash are converted to actual numbers to
28
- # interface with Hirb.
29
- def query_pipe(object, query_hash)
30
- if object[0].is_a?(Hash)
31
- query_hash.map {|field,query|
32
- field = field.to_i if field.to_s[/^\d+$/]
33
- object.select {|e| e[field].to_s =~ /#{query}/i }
34
- }.flatten.uniq
35
- else
36
- query_hash.map {|field,query| object.select {|e| e.send(field).to_s =~ /#{query}/i } }.flatten.uniq
37
- end
38
- rescue NoMethodError
39
- $stderr.puts "Query failed with nonexistant method '#{$!.message[/`(.*)'/,1]}'"
40
- end
41
-
42
- # Sorts an array of objects or hashes using a sort field. Sort is reversed with reverse_sort set to true.
43
- def sort_pipe(object, sort)
44
- sort_lambda = lambda {}
45
- if object[0].is_a?(Hash)
46
- if sort.to_s[/^\d+$/]
47
- sort = sort.to_i
48
- elsif object[0].keys.all? {|e| e.is_a?(Symbol) }
49
- sort = sort.to_sym
50
- end
51
- sort_lambda = untouched_sort?(object.map {|e| e[sort] }) ? lambda {|e| e[sort] } : lambda {|e| e[sort].to_s }
52
- else
53
- sort_lambda = untouched_sort?(object.map {|e| e.send(sort) }) ? lambda {|e| e.send(sort) || ''} :
54
- lambda {|e| e.send(sort).to_s }
55
- end
56
- object.sort_by &sort_lambda
57
- rescue NoMethodError, ArgumentError
58
- $stderr.puts "Sort failed with nonexistant method '#{sort}'"
59
- end
60
-
61
- def untouched_sort?(values) #:nodoc:
62
- values.all? {|e| e.respond_to?(:<=>) } && values.map {|e| e.class }.uniq.size == 1
63
- end
64
-
65
- # Reverse an object
66
- def reverse_sort_pipe(object, extra=nil)
67
- object.reverse
68
- end
69
-
70
- # Pipes output of multiple commands recursively, given initial object
71
- def pipes_pipe(obj, arr)
72
- arr.inject(obj) {|acc,e| Boson.full_invoke(e, [acc]) }
73
- end
74
- end
75
- end
data/lib/boson/repo.rb DELETED
@@ -1,107 +0,0 @@
1
- %w{yaml fileutils}.each {|e| require e }
2
- module Boson
3
- # A class for repositories. A repository has a root directory with required subdirectories config/ and
4
- # commands/ and optional subdirectory lib/. Each repository has a primary config file at config/boson.yml.
5
- class Repo
6
- def self.commands_dir(dir) #:nodoc:
7
- File.join(dir, 'commands')
8
- end
9
-
10
- attr_accessor :dir, :config
11
- # Creates a repository given a root directory.
12
- def initialize(dir)
13
- @dir = dir
14
- end
15
-
16
- # Points to the config/ subdirectory and is automatically created when called. Used for config files.
17
- def config_dir
18
- @config_dir ||= FileUtils.mkdir_p(config_dir_path) && config_dir_path
19
- end
20
-
21
- def config_dir_path
22
- "#{dir}/config"
23
- end
24
-
25
- # Path name of main config file. If passed true, parent directory of file is created.
26
- def config_file(create_dir=false)
27
- File.join((create_dir ? config_dir : config_dir_path), 'boson.yml')
28
- end
29
-
30
- # Points to the commands/ subdirectory and is automatically created when called. Used for command libraries.
31
- def commands_dir
32
- @commands_dir ||= (cdir = self.class.commands_dir(@dir)) && FileUtils.mkdir_p(cdir) && cdir
33
- end
34
-
35
- # A hash read from the YAML config file at config/boson.yml.
36
- # {See here}[http://github.com/cldwalker/irbfiles/blob/master/boson/config/boson.yml] for an example config file.
37
- # Top level config keys, library attributes and config attributes need to be symbols.
38
- # ==== Config keys for all repositories:
39
- # [:libraries] Hash of libraries mapping their name to attribute hashes. See Library.new for configurable attributes.
40
- # Example:
41
- # :libraries=>{'completion'=>{:namespace=>true}}
42
- # [:command_aliases] Hash of commands names and their aliases. Since this is global it will be read by _all_ libraries.
43
- # This is useful for quickly creating aliases without having to worry about placing them under
44
- # the correct library config. For non-global aliasing, aliases should be placed under the :command_aliases
45
- # key of a library entry in :libraries.
46
- # Example:
47
- # :command_aliases=>{'libraries'=>'lib', 'commands'=>'com'}
48
- # [:defaults] Array of libraries to load at start up for commandline and irb. This is useful for extending boson i.e. adding your
49
- # own option types since these are loaded before any other libraries. Default is no libraries.
50
- # [:console_defaults] Array of libraries to load at start up when used in irb. Default is to load all library files and libraries
51
- # defined in the config.
52
- # [:bin_defaults] Array of libraries to load at start up when used from the commandline. Default is no libraries.
53
- # [:add_load_path] Boolean specifying whether to add a load path pointing to the lib subdirectory/. This is useful in sharing
54
- # classes between libraries without resorting to packaging them as gems. Defaults to false if the lib
55
- # subdirectory doesn't exist in the boson directory.
56
- #
57
- # ==== Config keys specific to the main repo config ~/.boson/config/boson.yml
58
- # [:pipe_options] Hash of options available to all option commands for piping (see Pipe). A pipe option has the
59
- # {normal option attributes}[link:classes/Boson/OptionParser.html#M000081] and these:
60
- # * :pipe: Specifies the command to call when piping. Defaults to the pipe's option name.
61
- # * :filter: Boolean which indicates that the pipe command will modify its input with what it returns.
62
- # Default is false.
63
- # [:render_options] Hash of render options available to all option commands to be passed to a Hirb view (see View). Since
64
- # this merges with default render options, it's possible to override default render options.
65
- # [:error_method_conflicts] Boolean specifying library loading behavior when its methods conflicts with existing methods in
66
- # the global namespace. When set to false, Boson automatically puts the library in its own namespace.
67
- # When set to true, the library fails to load explicitly. Default is false.
68
- # [:console] Console to load when using --console from commandline. Default is irb.
69
- # [:auto_namespace] Boolean which automatically namespaces all user-defined libraries. Be aware this can break libraries which
70
- # depend on commands from other libraries. Default is false.
71
- # [:ignore_directories] Array of directories to ignore when detecting local repositories for Boson.local_repo.
72
- # [:no_auto_render] When set, turns off commandline auto-rendering of a command's output. Default is false.
73
- # [:option_underscore_search] When set, OptionParser option values (with :values or :keys) are auto aliased with underscore searching.
74
- # Default is true. See Util.underscore_search.
75
- def config(reload=false)
76
- if reload || @config.nil?
77
- begin
78
- @config = {:libraries=>{}, :command_aliases=>{}, :console_defaults=>[], :option_underscore_search=>true}
79
- @config.merge!(YAML::load_file(config_file(true))) if File.exists?(config_file)
80
- rescue ArgumentError
81
- message = $!.message !~ /syntax error on line (\d+)/ ? "Error"+$!.message :
82
- "Error: Syntax error in line #{$1} of config file '#{config_file}'"
83
- Kernel.abort message
84
- end
85
- end
86
- @config
87
- end
88
-
89
- # Updates main config file by passing config into a block to be modified and then saved
90
- def update_config
91
- yield(config)
92
- write_config_file
93
- end
94
-
95
- def write_config_file #:nodoc:
96
- File.open(config_file, 'w') {|f| f.write config.to_yaml }
97
- end
98
-
99
- def detected_libraries #:nodoc:
100
- Dir[File.join(commands_dir, '**/*.rb')].map {|e| e.gsub(/^#{commands_dir}\/|\.rb$/, '') }
101
- end
102
-
103
- def all_libraries #:nodoc:
104
- (detected_libraries + config[:libraries].keys).uniq
105
- end
106
- end
107
- end
@@ -1,208 +0,0 @@
1
- module Boson
2
- # This class handles the boson executable (boson command execution from the commandline). Any changes
3
- # to your commands are immediately available from the commandline except for changes to the main config file.
4
- # For those changes to take effect you need to explicitly load and index the libraries with --index.
5
- # See RepoIndex to understand how Boson can immediately detect the latest commands.
6
- #
7
- # Usage for the boson shell command looks like this:
8
- # boson [GLOBAL OPTIONS] [COMMAND] [ARGS] [COMMAND OPTIONS]
9
- #
10
- # The boson executable comes with these global options:
11
- # [:help] Gives a basic help of global options. When a command is given the help shifts to a command's help.
12
- # [:verbose] Using this along with :help option shows more help. Also gives verbosity to other actions i.e. loading.
13
- # [:execute] Like ruby -e, this executes a string of ruby code. However, this has the advantage that all
14
- # commands are available as normal methods, automatically loading as needed. This is a good
15
- # way to call commands that take non-string arguments.
16
- # [:console] This drops Boson into irb after having loaded default commands and any explict libraries with
17
- # :load option. This is a good way to start irb with only certain libraries loaded.
18
- # [:load] Explicitly loads a list of libraries separated by commas. Most useful when used with :console option.
19
- # Can also be used to explicitly load libraries that aren't being detected automatically.
20
- # [:index] Updates index for given libraries allowing you to use them. This is useful if Boson's autodetection of
21
- # changed libraries isn't picking up your changes. Since this option has a :bool_default attribute, arguments
22
- # passed to this option need to be passed with '=' i.e. '--index=my_lib'.
23
- # [:render] Toggles the auto-rendering done for commands that don't have views. Doesn't affect commands that already have views.
24
- # Default is false. Also see Auto Rendering section below.
25
- # [:pager_toggle] Toggles Hirb's pager in case you'd like to pipe to another command.
26
- # [:backtrace] Prints full backtrace on error. Default is false.
27
- #
28
- # ==== Auto Rendering
29
- # Commands that don't have views (defined via render_options) have their return value auto-rendered as a view as follows:
30
- # * nil,false and true aren't rendered
31
- # * arrays are rendered with Hirb's tables
32
- # * non-arrays are printed with inspect()
33
- # * Any of these cases can be toggled to render/not render with the global option :render
34
- # To turn off auto-rendering by default, add a :no_auto_render: true entry to the main config.
35
- class BinRunner < Runner
36
- GLOBAL_OPTIONS = {
37
- :verbose=>{:type=>:boolean, :desc=>"Verbose description of loading libraries, errors or help"},
38
- :version=>{:type=>:boolean, :desc=>"Prints the current version"},
39
- :index=>{:type=>:array, :desc=>"Libraries to index. Libraries must be passed with '='.",
40
- :bool_default=>nil, :values=>all_libraries, :regexp=>true, :enum=>false},
41
- :execute=>{:type=>:string, :desc=>"Executes given arguments as a one line script"},
42
- :console=>{:type=>:boolean, :desc=>"Drops into irb with default and explicit libraries loaded"},
43
- :help=>{:type=>:boolean, :desc=>"Displays this help message or a command's help if given a command"},
44
- :load=>{:type=>:array, :values=>all_libraries, :regexp=>true, :enum=>false,
45
- :desc=>"A comma delimited array of libraries to load"},
46
- :unload=>{:type=>:string, :desc=>"Acts as a regular expression to unload default libraries"},
47
- :render=>{:type=>:boolean, :desc=>"Renders a Hirb view from result of command without options"},
48
- :pager_toggle=>{:type=>:boolean, :desc=>"Toggles Hirb's pager"},
49
- :option_commands=>{:type=>:boolean, :desc=>"Toggles on all commands to be defined as option commands" },
50
- :ruby_debug=>{:type=>:boolean, :desc=>"Sets $DEBUG", :alias=>'D'},
51
- :debug=>{:type=>:boolean, :desc=>"Prints debug info for boson"},
52
- :load_path=>{:type=>:string, :desc=>"Add to front of $LOAD_PATH", :alias=>'I'},
53
- :backtrace=>{:type=>:boolean, :desc=>'Prints full backtrace'}
54
- } #:nodoc:
55
-
56
- PIPE = '+'
57
-
58
- class <<self
59
- attr_accessor :command
60
-
61
- # Starts, processes and ends a commandline request.
62
- def start(args=ARGV)
63
- @command, @options, @args = parse_args(args)
64
- return puts("boson #{Boson::VERSION}") if @options[:version]
65
- return print_usage if args.empty? || (@command.nil? && !@options[:console] && !@options[:execute])
66
- $:.unshift(*options[:load_path].split(":")) if options[:load_path]
67
- Runner.debug = true if @options[:debug]
68
- return ConsoleRunner.bin_start(@options[:console], @options[:load]) if @options[:console]
69
- $DEBUG = true if options[:ruby_debug]
70
- init
71
-
72
- if @options[:help]
73
- autoload_command @command
74
- Boson.invoke(:usage, @command, :verbose=>@options[:verbose])
75
- elsif @options[:execute]
76
- define_autoloader
77
- Boson.main_object.instance_eval @options[:execute]
78
- else
79
- execute_command
80
- end
81
- rescue NoMethodError
82
- abort_with no_method_error_message
83
- rescue
84
- abort_with default_error_message
85
- end
86
-
87
- def no_method_error_message #:nodoc:
88
- @command = @command.to_s
89
- if $!.backtrace.grep(/`(invoke|full_invoke)'$/).empty? ||
90
- !$!.message[/undefined method `(\w+\.)?#{@command.split(NAMESPACE)[-1]}'/]
91
- default_error_message
92
- else
93
- @command.to_s[/\w+/] &&
94
- (!(Index.read && Index.find_command(@command[/\w+/])) || @command.include?(NAMESPACE)) ?
95
- "Error: Command '#{@command}' not found" : default_error_message
96
- end
97
- end
98
-
99
- # Loads libraries and handles non-critical options
100
- def init
101
- Runner.in_shell = true
102
- Command.all_option_commands = true if @options[:option_commands]
103
- super
104
-
105
- if @options.key?(:index)
106
- Index.update(:verbose=>true, :libraries=>@options[:index])
107
- @index_updated = true
108
- elsif !@options[:help] && @command && Boson.can_invoke?(@command)
109
- Index.update(:verbose=>@options[:verbose])
110
- @index_updated = true
111
- end
112
- Manager.load @options[:load], load_options if @options[:load]
113
- View.toggle_pager if @options[:pager_toggle]
114
- end
115
-
116
- # Hash of global options passed in from commandline
117
- def options
118
- @options ||= {}
119
- end
120
-
121
- # Commands to executed, in order given by user
122
- def commands
123
- @commands ||= @all_args.map {|e| e[0]}
124
- end
125
-
126
- #:stopdoc:
127
- def abort_with(message)
128
- message += "\nOriginal error: #{$!}\n #{$!.backtrace.join("\n ")}" if options[:verbose] || options[:backtrace]
129
- abort message
130
- end
131
-
132
- def default_error_message
133
- "Error: #{$!.message}"
134
- end
135
-
136
- def autoload_command(cmd)
137
- if !Boson.can_invoke?(cmd, false)
138
- unless @index_updated
139
- Index.update(:verbose=>@options[:verbose])
140
- @index_updated = true
141
- end
142
- super(cmd, load_options)
143
- end
144
- end
145
-
146
- def default_libraries
147
- libs = super + Boson.repos.map {|e| e.config[:bin_defaults] || [] }.flatten + Dir.glob('Bosonfile')
148
- @options[:unload] ? libs.select {|e| e !~ /#{@options[:unload]}/} : libs
149
- end
150
-
151
- def execute_command
152
- output = @all_args.inject(nil) {|acc, (cmd,*args)|
153
- begin
154
- @command = cmd # for external errors
155
- autoload_command cmd
156
- args = translate_args(args, acc)
157
- Boson.full_invoke(cmd, args)
158
- rescue ArgumentError
159
- if $!.class == OptionCommand::CommandArgumentError || ($!.message[/wrong number of arguments/] &&
160
- (cmd_obj = Command.find(cmd)) && cmd_obj.arg_size != args.size)
161
- abort_with "'#{cmd}' was called incorrectly.\n" + Command.usage(cmd)
162
- else
163
- raise
164
- end
165
- end
166
- }
167
- render_output output
168
- end
169
-
170
- def translate_args(args, piped)
171
- args.unshift piped if piped
172
- args
173
- end
174
-
175
- def parse_args(args)
176
- @all_args = Util.split_array_by(args, PIPE)
177
- args = @all_args[0]
178
- @option_parser = OptionParser.new(GLOBAL_OPTIONS)
179
- options = @option_parser.parse(args.dup, :opts_before_args=>true)
180
- new_args = @option_parser.non_opts
181
- @all_args[0] = new_args
182
- [new_args[0], options, new_args[1..-1]]
183
- end
184
-
185
- def render_output(output)
186
- if (!Scientist.rendered && !View.silent_object?(output)) ^ @options[:render] ^
187
- Boson.repo.config[:no_auto_render]
188
- opts = output.is_a?(String) ? {:method=>'puts'} :
189
- {:inspect=>!output.is_a?(Array) || (Scientist.global_options || {})[:render] }
190
- View.render output, opts
191
- end
192
- end
193
-
194
- def print_usage
195
- puts "boson [GLOBAL OPTIONS] [COMMAND] [ARGS] [COMMAND OPTIONS]\n\n"
196
- puts "GLOBAL OPTIONS"
197
- View.enable
198
- @option_parser.print_usage_table
199
- if @options[:verbose]
200
- Manager.load [Boson::Commands::Core]
201
- puts "\n\nDEFAULT COMMANDS"
202
- Boson.invoke :commands, :fields=>["name", "usage", "description"], :description=>false
203
- end
204
- end
205
- #:startdoc:
206
- end
207
- end
208
- end
@@ -1,58 +0,0 @@
1
- module Boson
2
- # Runner used when starting irb. To use in irb, drop this in your ~/.irbrc:
3
- # require 'boson'
4
- # Boson.start
5
- class ConsoleRunner < Runner
6
- class <<self
7
- # Starts Boson by loading configured libraries. If no default libraries are specified in the config,
8
- # it will load up all detected libraries. Options:
9
- # [:libraries] Array of libraries to load.
10
- # [:verbose] Boolean to be verbose about libraries loading. Default is true.
11
- # [:no_defaults] Boolean or :all which turns off loading default libraries. If set to true,
12
- # effects loading user's console default libraries. If set to :all, effects
13
- # all libraries including boson's. Default is false.
14
- # [:autoload_libraries] Boolean which makes any command execution easier. It redefines
15
- # method_missing on Boson.main_object so that commands with unloaded
16
- # libraries are automatically loaded. Default is false.
17
- def start(options={})
18
- @options = {:verbose=>true}.merge options
19
- init unless @initialized
20
- Manager.load(@options[:libraries], load_options) if @options[:libraries]
21
- end
22
-
23
- # Loads libraries and then starts irb (or the configured console) from the commandline.
24
- def bin_start(repl, libraries)
25
- start :no_defaults=>true, :libraries=>libraries
26
- repl = Boson.repo.config[:console] if Boson.repo.config[:console]
27
- repl = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb' unless repl.is_a?(String)
28
- unless repl.index('/') == 0 || (repl = Util.which(repl))
29
- abort "Console not found. Please specify full path in config[:console]."
30
- else
31
- load_repl(repl)
32
- end
33
- end
34
-
35
- def load_repl(repl) #:nodoc:
36
- ARGV.replace ['-f']
37
- $progname = $0
38
- alias $0 $progname
39
- Kernel.load $0 = repl
40
- end
41
-
42
- def init #:nodoc:
43
- super
44
- define_autoloader if @options[:autoload_libraries]
45
- @initialized = true
46
- end
47
-
48
- def default_libraries #:nodoc:
49
- return [] if @options[:no_defaults] == :all
50
- return super if @options[:no_defaults]
51
- defaults = super + Boson.repos.map {|e| e.config[:console_defaults] }.flatten
52
- defaults += detected_libraries if defaults.empty?
53
- defaults.uniq
54
- end
55
- end
56
- end
57
- end
58
-