Class: Keybox::Application::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/keybox/application/base.rb

Direct Known Subclasses

PasswordGenerator, PasswordSafe

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv = []) ⇒ Base

Returns a new instance of Base.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/keybox/application/base.rb', line 30

def initialize(argv = [])
    # make sure we have an empty array, we could be
    # initially passed nil explicitly
    argv ||= []

    # setup default io streams
    set_io

    @options        = self.default_options
    @parsed_options = OpenStruct.new
    @parser         = self.option_parser
    @error_message  = nil

    begin
        @parser.parse!(argv)
    rescue OptionParser::ParseError => pe
        msg = ["#{@parser.program_name}: #{pe}",
                "Try `#{@parser.program_name} --help` for more information"]
        @error_message = msg.join("\n")
    end
end

Instance Attribute Details

#error_messageObject

Returns the value of attribute error_message.



22
23
24
# File 'lib/keybox/application/base.rb', line 22

def error_message
  @error_message
end

#highlineObject (readonly)

Returns the value of attribute highline.



28
29
30
# File 'lib/keybox/application/base.rb', line 28

def highline
  @highline
end

#optionsObject

all applications have options and an error message



20
21
22
# File 'lib/keybox/application/base.rb', line 20

def options
  @options
end

#parsed_optionsObject

Returns the value of attribute parsed_options.



21
22
23
# File 'lib/keybox/application/base.rb', line 21

def parsed_options
  @parsed_options
end

#stderrObject (readonly)

Returns the value of attribute stderr.



26
27
28
# File 'lib/keybox/application/base.rb', line 26

def stderr
  @stderr
end

#stdinObject (readonly)

Returns the value of attribute stdin.



27
28
29
# File 'lib/keybox/application/base.rb', line 27

def stdin
  @stdin
end

#stdoutObject (readonly)

these allow for testing instrumentation



25
26
27
# File 'lib/keybox/application/base.rb', line 25

def stdout
  @stdout
end

Instance Method Details

#configuration_file_optionsObject



90
91
92
# File 'lib/keybox/application/base.rb', line 90

def configuration_file_options
    Hash.new
end

#default_optionsObject



82
83
84
85
86
87
88
# File 'lib/keybox/application/base.rb', line 82

def default_options
    options = OpenStruct.new
    options.debug           = 0
    options.show_version    = false
    options.show_help       = false
    return options
end

#error_version_helpObject



110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/keybox/application/base.rb', line 110

def error_version_help
    if @error_message then
        @stderr.puts @error_message
        exit 1
    elsif @parsed_options.show_version then
        @highline.say "#{@parser.program_name}: version #{Keybox::VERSION.join(".")}"
        exit 0
    elsif @parsed_options.show_help then
        @highline.say @parser.to_s
        exit 0
    end
end

#merge_optionsObject

load the default options, layer on the file options and then merge in the command line options



96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/keybox/application/base.rb', line 96

def merge_options
    options = default_options.marshal_dump
    self.configuration_file_options.each_pair do |key,value|
        options[key] = value
    end

    @parsed_options.marshal_dump.each_pair do |key,value|
        options[key] = value
    end

    @options = OpenStruct.new(options)
end

#option_parserObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/keybox/application/base.rb', line 67

def option_parser
    OptionParser.new do |op|
        op.separator ""
        op.separator "Options:"

        op.on("-h", "--help") do
            @parsed_options.show_help = true
        end

        op.on("-v", "--version", "Show version information") do
            @parsed_options.show_version = true
        end 
    end
end

#runObject



123
124
125
126
# File 'lib/keybox/application/base.rb', line 123

def run 
    error_version_help
    @highline.say "Keybox Base Application.  Doing nothing but output this line."
end

#set_io(stdin = $stdin, stdout = $stdout, stderr = $stderr) ⇒ Object

Allow the IO to be reset. This is generally just for testing instrumentation, but it may be useful for something else too.



57
58
59
60
61
62
63
64
65
# File 'lib/keybox/application/base.rb', line 57

def set_io(stdin = $stdin,stdout = $stdout,stderr = $stderr)
    # for testing instrumentation
    @stdin    = stdin
    @stdout   = stdout
    @stderr   = stderr
    
    # Instance of HighLine for the colorization of output
    @highline = ::HighLine.new(@stdin,@stdout)
end