Module: Shef::Extensions::ObjectCoreExtensions
- Defined in:
- lib/chef/shef/ext.rb
Overview
Extensions to be included in every ‘main’ object in shef. These objects are extended with this module.
Instance Method Summary collapse
- #all_help_descriptions ⇒ Object
- #desc(help_text) ⇒ Object
- #ensure_session_select_defined ⇒ Object
- #explain(explain_text) ⇒ Object
- #explain_command(method_name) ⇒ Object
- #find_or_create_session_for(context_obj) ⇒ Object
- #help_banner ⇒ Object
- #help_descriptions ⇒ Object
-
#off ⇒ Object
returns
:off
so you can just do ‘tracing off’. -
#on ⇒ Object
helpfully returns
:on
so we can have sugary syntax like ‘tracing on’. - #singleton_method_added(mname) ⇒ Object
- #subcommands(subcommand_help = {}) ⇒ Object
Instance Method Details
#all_help_descriptions ⇒ Object
115 116 117 |
# File 'lib/chef/shef/ext.rb', line 115 def all_help_descriptions help_descriptions end |
#desc(help_text) ⇒ Object
119 120 121 |
# File 'lib/chef/shef/ext.rb', line 119 def desc(help_text) @desc = help_text end |
#ensure_session_select_defined ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/chef/shef/ext.rb', line 37 def ensure_session_select_defined # irb breaks if you prematurely define IRB::JobMangager # so these methods need to be defined at the latest possible time. unless jobs.respond_to?(:select_session_by_context) def jobs.select_session_by_context(&block) @jobs.select { |job| block.call(job[1].context.main)} end end unless jobs.respond_to?(:session_select) def jobs.select_shef_session(target_context) session = if target_context.kind_of?(Class) select_session_by_context { |main| main.kind_of?(target_context) } else select_session_by_context { |main| main.equal?(target_context) } end Array(session.first)[1] end end end |
#explain(explain_text) ⇒ Object
123 124 125 |
# File 'lib/chef/shef/ext.rb', line 123 def explain(explain_text) @explain = explain_text end |
#explain_command(method_name) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/chef/shef/ext.rb', line 85 def explain_command(method_name) help = self.all_help_descriptions.find { |h| h.cmd.to_s == method_name.to_s } if help puts "" puts "Command: #{method_name}" puts "".ljust(80, "=") puts help.explanation || help.desc puts "".ljust(80, "=") puts "" else puts "" puts "command #{method_name} not found or no help available" puts "" end end |
#find_or_create_session_for(context_obj) ⇒ Object
58 59 60 61 62 63 64 65 |
# File 'lib/chef/shef/ext.rb', line 58 def find_or_create_session_for(context_obj) ensure_session_select_defined if subsession = jobs.select_shef_session(context_obj) jobs.switch(subsession) else irb(context_obj) end end |
#help_banner ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/chef/shef/ext.rb', line 67 def = [] << "" << "Shef Help" << "".ljust(80, "=") << "| " + "Command".ljust(25) + "| " + "Description" << "".ljust(80, "=") self.all_help_descriptions.each do |help_text| << "| " + help_text.cmd.ljust(25) + "| " + help_text.desc end << "".ljust(80, "=") << "\n" << "Use help(:command) to get detailed help with individual commands" << "\n" .join("\n") end |
#help_descriptions ⇒ Object
111 112 113 |
# File 'lib/chef/shef/ext.rb', line 111 def help_descriptions @help_descriptions ||= [] end |
#off ⇒ Object
returns :off
so you can just do ‘tracing off’
107 108 109 |
# File 'lib/chef/shef/ext.rb', line 107 def off :off end |
#on ⇒ Object
helpfully returns :on
so we can have sugary syntax like ‘tracing on’
102 103 104 |
# File 'lib/chef/shef/ext.rb', line 102 def on :on end |
#singleton_method_added(mname) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/chef/shef/ext.rb', line 131 def singleton_method_added(mname) if @desc help_descriptions << Help.new(mname.to_s, @desc.to_s, @explain) @desc, @explain = nil, nil end if @subcommand_help @subcommand_help.each do |subcommand, text| help_descriptions << Help.new("#{mname}.#{subcommand}", text.to_s, nil) end end @subcommand_help = {} end |
#subcommands(subcommand_help = {}) ⇒ Object
127 128 129 |
# File 'lib/chef/shef/ext.rb', line 127 def subcommands(subcommand_help={}) @subcommand_help = subcommand_help end |