Class: Rbkb::Cli::Len
- Inherits:
-
Executable
- Object
- Executable
- Rbkb::Cli::Len
- Defined in:
- lib/rbkb/cli/len.rb
Overview
len prepends a binary length number in front of its input and outputs raw on STDOUT
Instance Attribute Summary
Attributes inherited from Executable
#argv, #exit_status, #oparse, #opts, #stderr, #stdin, #stdout
Instance Method Summary collapse
- #go(*args) ⇒ Object
-
#initialize(*args) ⇒ Len
constructor
A new instance of Len.
- #make_parser ⇒ Object
- #parse(*args) ⇒ Object
Methods inherited from Executable
#bail, #bail_args, #exit, run
Constructor Details
#initialize(*args) ⇒ Len
Returns a new instance of Len.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/rbkb/cli/len.rb', line 10 def initialize(*args) # endianness pair. index 0 is always the default @endpair = [:big, :little] super(*args) do |this| { :nudge => 0, :size => 4, :endian => @endpair[0], }.each {|k,v| this.opts[k] ||= v} yield this if block_given? end end |
Instance Method Details
#go(*args) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rbkb/cli/len.rb', line 64 def go(*args) super(*args) unless len=@opts[:static] len = @opts[:indat].size len += @opts[:size] if @opts[:tot] len += @opts[:nudge] end @stdout << len.to_bytes(@opts[:endian], @opts[:size]) << @opts[:indat] self.exit(0) end |
#make_parser ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/rbkb/cli/len.rb', line 25 def make_parser() super() add_std_file_opt(:indat) arg = @oparse arg. += " <data | blank for stdin>" arg.on("-n", "--nudge INT", Numeric, "Add integer to length") do |n| @opts[:nudge] += n end arg.on("-s", "--size=SIZE", Numeric, "Size of length field in bytes") do |s| bail("Size must be greater than 0") unless (@opts[:size] = s) > 0 end arg.on("-x", "--[no-]swap", "Swap endianness. Default=#{@opts[:endian]}") do |x| @opts[:endian] = @endpair[(x)? 1 : 0] end arg.on("-t", "--[no-]total", "Include size word in size") do |t| @opts[:tot]=t end arg.on("-l", "--length=LEN", Numeric, "Ignore all other flags and use static LEN") do |l| @opts[:static]=l end end |
#parse(*args) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/rbkb/cli/len.rb', line 56 def parse(*args) super(*args) @opts[:indat] ||= @argv.shift parse_catchall() @opts[:indat] ||= @stdin.read end |