Class: Fanfeedrb::Runner::Base
- Inherits:
-
Object
- Object
- Fanfeedrb::Runner::Base
- Defined in:
- lib/fanfeedrb/runner.rb
Instance Attribute Summary collapse
-
#argv ⇒ Object
readonly
Returns the value of attribute argv.
Class Method Summary collapse
- .arity ⇒ Object
- .banner_arguments(value = nil) ⇒ Object
- .command_name ⇒ Object
- .description(value = nil) ⇒ Object
- .method_name ⇒ Object
- .on(*args, &block) ⇒ Object
- .options ⇒ Object
- .process(&block) ⇒ Object
- .summary(value = nil) ⇒ Object
Instance Method Summary collapse
- #abort(message) ⇒ Object
- #arity ⇒ Object
- #color? ⇒ Boolean
- #colorize(code, string) ⇒ Object
- #fanfeedrb ⇒ Object
-
#initialize(argv) ⇒ Base
constructor
A new instance of Base.
- #paginated_output ⇒ Object
- #process(*argv) ⇒ Object
- #puts_full(story) ⇒ Object
- #puts_summary(story) ⇒ Object
- #run ⇒ Object
- #too_many ⇒ Object
Constructor Details
#initialize(argv) ⇒ Base
Returns a new instance of Base.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/fanfeedrb/runner.rb', line 9 def initialize(argv) @argv = argv @tty = $stdout.tty? @opts = OptionParser.new @opts.version = "0.0" @opts. = "Usage: fanfeedrb #{self.class.command_name} #{self.class.}" @opts.base.long["help"] = OptionParser::Switch::NoArgument.new do help = @opts.help.chomp.chomp + "\n" help += "\n#{self.class.description}" if self.class.description puts help @exit = 0 end @opts.separator("") end |
Instance Attribute Details
#argv ⇒ Object (readonly)
Returns the value of attribute argv.
7 8 9 |
# File 'lib/fanfeedrb/runner.rb', line 7 def argv @argv end |
Class Method Details
.arity ⇒ Object
69 70 71 |
# File 'lib/fanfeedrb/runner.rb', line 69 def self.arity instance_method(:process).arity end |
.banner_arguments(value = nil) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/fanfeedrb/runner.rb', line 33 def self.(value = nil) if value @banner_arguments = value else @banner_arguments || (arity.zero? ? "" : "...") end end |
.command_name ⇒ Object
57 58 59 |
# File 'lib/fanfeedrb/runner.rb', line 57 def self.command_name name.split('::').last.gsub(/(.)([A-Z])/) {"#$1-#$2"}.downcase end |
.description(value = nil) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/fanfeedrb/runner.rb', line 49 def self.description(value = nil) if value @description = value else @description || "#@summary." end end |
.method_name ⇒ Object
61 62 63 |
# File 'lib/fanfeedrb/runner.rb', line 61 def self.method_name command_name.gsub('-','_') end |
.on(*args, &block) ⇒ Object
28 29 30 31 |
# File 'lib/fanfeedrb/runner.rb', line 28 def self.on(*args, &block) << args define_method("option_#{args.object_id}", &block) end |
.options ⇒ Object
24 25 26 |
# File 'lib/fanfeedrb/runner.rb', line 24 def self. @options ||= [] end |
.process(&block) ⇒ Object
65 66 67 |
# File 'lib/fanfeedrb/runner.rb', line 65 def self.process(&block) define_method(:process, &block) end |
.summary(value = nil) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/fanfeedrb/runner.rb', line 41 def self.summary(value = nil) if value @summary = value else @summary end end |
Instance Method Details
#abort(message) ⇒ Object
81 82 83 |
# File 'lib/fanfeedrb/runner.rb', line 81 def abort() raise Error, end |
#arity ⇒ Object
73 74 75 |
# File 'lib/fanfeedrb/runner.rb', line 73 def arity self.class.arity end |
#color? ⇒ Boolean
112 113 114 115 116 117 118 119 |
# File 'lib/fanfeedrb/runner.rb', line 112 def color? case fanfeedrb.config["color"] when "always" then true when "never" then false else @tty && RUBY_PLATFORM !~ /mswin|mingw/ end end |
#colorize(code, string) ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/fanfeedrb/runner.rb', line 121 def colorize(code, string) if color? "\e[#{code}m#{string}\e[00m" else string.to_s end end |
#fanfeedrb ⇒ Object
77 78 79 |
# File 'lib/fanfeedrb/runner.rb', line 77 def fanfeedrb @fanfeedrb ||= Fanfeedrb.new(Dir.getwd) end |
#paginated_output ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/fanfeedrb/runner.rb', line 169 def paginated_output stdout = $stdout if @tty && pager = fanfeedrb.config["pager"] # Modeled after git ENV["LESS"] ||= "FRSX" IO.popen(pager,"w") do |io| $stdout = io yield end else yield end rescue Errno::EPIPE ensure $stdout = stdout end |
#process(*argv) ⇒ Object
108 109 110 |
# File 'lib/fanfeedrb/runner.rb', line 108 def process(*argv) fanfeedrb.send(self.class.method_name,*argv) end |
#puts_full(story) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/fanfeedrb/runner.rb', line 139 def puts_full(story) puts colorize("01;3#{TYPE_COLORS[story.story_type]}", story.name) puts "Type: #{story.story_type}".rstrip if story.story_type == "release" puts "Deadline: #{story.deadline}".rstrip else puts "Estimate: #{story.estimate}".rstrip end puts "State: #{story.current_state}".rstrip puts "Labels: #{story.labels.join(', ')}".rstrip puts "Requester: #{story.requested_by}".rstrip puts "Owner: #{story.owned_by}".rstrip puts "URL: #{story.url}".rstrip puts unless story.description =~ /^\s*$/ story.description_lines.each do |line| puts " #{line}".rstrip end story.notes.each do |note| puts puts " #{colorize('01', note.)} (#{note.date})" puts(*note.lines(72).map {|l| " #{l}".rstrip}) end story.tasks.each do |task| # puts # puts " #{colorize('01', note.author)} (#{note.date})" # puts(*note.lines(72).map {|l| " #{l}".rstrip}) end end |
#puts_summary(story) ⇒ Object
129 130 131 132 133 134 135 136 137 |
# File 'lib/fanfeedrb/runner.rb', line 129 def puts_summary(story) summary = "%6d " % story.id type = story.estimate || TYPE_SYMBOLS[story.story_type] state = STATE_SYMBOLS[story.current_state] summary << colorize("3#{STATE_COLORS[story.current_state]}", state) << ' ' summary << colorize("01;3#{TYPE_COLORS[story.story_type]}", type) << ' ' summary << story.name puts summary end |
#run ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/fanfeedrb/runner.rb', line 89 def run self.class..each do |arguments| @opts.on(*arguments, &method("option_#{arguments.object_id}")) end begin @opts.parse!(@argv) rescue OptionParser::InvalidOption abort $!. end return @exit if @exit minimum = arity < 0 ? -1 - arity : arity if arity >= 0 && arity < @argv.size too_many elsif minimum > @argv.size abort "not enough arguments" end process(*@argv) end |
#too_many ⇒ Object
85 86 87 |
# File 'lib/fanfeedrb/runner.rb', line 85 def too_many abort "too many arguments" end |