Class: EverydayCliUtils::OptionDef

Inherits:
Object
  • Object
show all
Defined in:
lib/everyday-cli-utils/option.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, settings = {}, &block) ⇒ OptionDef

Returns a new instance of OptionDef.



101
102
103
104
105
106
107
# File 'lib/everyday-cli-utils/option.rb', line 101

def initialize(type, settings = {}, &block)
  @type     = type
  @settings = settings
  @block    = block
  @value    = OptionTypes.default_value(type, settings)
  @values   = {}
end

Instance Attribute Details

#valueObject (readonly)

Returns the value of attribute value.



99
100
101
# File 'lib/everyday-cli-utils/option.rb', line 99

def value
  @value
end

Class Method Details

.register(opts, options, type, opt_name, names, settings = {}, default_settings = {}, &block) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
# File 'lib/everyday-cli-utils/option.rb', line 129

def self.register(opts, options, type, opt_name, names, settings = {}, default_settings = {}, &block)
  settings = settings.clone
  default_settings.each { |v| settings[v[0]] = v[1] unless settings.has_key?(v[0]) }
  opt               = OptionDef.new(type, settings, &block)
  options[opt_name] = opt
  names             = OptionTypes.mod_names(type, names, settings)
  opts.on(*names) { |*args|
    opt.update(args, :arg)
    opt.run
  }
end

Instance Method Details

#composite(*layers) ⇒ Object



123
124
125
126
127
# File 'lib/everyday-cli-utils/option.rb', line 123

def composite(*layers)
  value = @value
  layers.each { |layer| value = OptionTypes.updated_value(@type, value, @values[layer], @settings) if @values.has_key?(layer) }
  value
end

#runObject



119
120
121
# File 'lib/everyday-cli-utils/option.rb', line 119

def run
  @block.call unless @block.nil? || !@block
end

#set(value) ⇒ Object



109
110
111
112
# File 'lib/everyday-cli-utils/option.rb', line 109

def set(value)
  @value  = value
  @values = {}
end

#update(value, layer) ⇒ Object



114
115
116
117
# File 'lib/everyday-cli-utils/option.rb', line 114

def update(value, layer)
  @values[layer] = OptionTypes.default_value(@type, @settings) unless @values.has_key?(layer)
  @values[layer] = OptionTypes.updated_value(@type, @values[layer], value, @settings)
end