Module: GitHub
- Extended by:
- GitHub
- Included in:
- GitHub
- Defined in:
- lib/github.rb,
lib/github/helper.rb,
lib/github/command.rb
Overview
Starting simple.
$ github <command> <args>
GitHub.command <command> do |*args|
whatever
end
We’ll probably want to use the ‘choice` gem for concise, tasty DSL arg parsing action.
Defined Under Namespace
Constant Summary collapse
- BasePath =
File.(File.dirname(__FILE__) + '/..')
Instance Method Summary collapse
- #activate(args) ⇒ Object
- #command(command, &block) ⇒ Object
- #commands ⇒ Object
- #debug(*messages) ⇒ Object
- #debug? ⇒ Boolean
- #desc(str) ⇒ Object
- #descriptions ⇒ Object
- #flag_descriptions ⇒ Object
- #flags(hash) ⇒ Object
- #helper(command, &block) ⇒ Object
- #invoke(command, *args) ⇒ Object
- #load(file) ⇒ Object
- #options ⇒ Object
- #parse_options(args) ⇒ Object
Instance Method Details
#activate(args) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/github.rb', line 51 def activate(args) @options = (args) @debug = @options[:debug] load 'helpers.rb' load 'commands.rb' invoke(args.shift, *args) end |
#command(command, &block) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/github.rb', line 28 def command(command, &block) debug "Registered `#{command}`" descriptions[command] = @next_description if @next_description @next_description = nil flag_descriptions[command].update @next_flags if @next_flags @next_flags = nil commands[command.to_s] = Command.new(block) end |
#commands ⇒ Object
65 66 67 |
# File 'lib/github.rb', line 65 def commands @commands ||= {} end |
#debug(*messages) ⇒ Object
107 108 109 |
# File 'lib/github.rb', line 107 def debug(*) puts *.map { |m| "== #{m}" } if debug? end |
#debug? ⇒ Boolean
111 112 113 |
# File 'lib/github.rb', line 111 def debug? !!@debug end |
#desc(str) ⇒ Object
37 38 39 |
# File 'lib/github.rb', line 37 def desc(str) @next_description = str end |
#descriptions ⇒ Object
69 70 71 |
# File 'lib/github.rb', line 69 def descriptions @descriptions ||= {} end |
#flag_descriptions ⇒ Object
73 74 75 |
# File 'lib/github.rb', line 73 def flag_descriptions @flagdescs ||= Hash.new { |h, k| h[k] = {} } end |
#flags(hash) ⇒ Object
41 42 43 44 |
# File 'lib/github.rb', line 41 def flags(hash) @next_flags ||= {} @next_flags.update hash end |
#helper(command, &block) ⇒ Object
46 47 48 49 |
# File 'lib/github.rb', line 46 def helper(command, &block) debug "Helper'd `#{command}`" Helper.send :define_method, command, &block end |
#invoke(command, *args) ⇒ Object
59 60 61 62 63 |
# File 'lib/github.rb', line 59 def invoke(command, *args) block = commands[command.to_s] || commands['default'] debug "Invoking `#{command}`" block.call(*args) end |
#load(file) ⇒ Object
101 102 103 104 105 |
# File 'lib/github.rb', line 101 def load(file) file[0] == ?/ ? path = file : path = BasePath + "/commands/#{file}" data = File.read(path) GitHub.module_eval data, path end |
#options ⇒ Object
77 78 79 |
# File 'lib/github.rb', line 77 def @options end |
#parse_options(args) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/github.rb', line 81 def (args) idx = 0 args.clone.inject({}) do |memo, arg| case arg when /^--(.+?)=(.*)/ args.delete_at(idx) memo.merge($1.to_sym => $2) when /^--(.+)/ args.delete_at(idx) memo.merge($1.to_sym => true) when "--" args.delete_at(idx) return memo else idx += 1 memo end end end |