Class: AppKernel::FunctionDefinition::Option

Inherits:
Object
  • Object
show all
Defined in:
lib/appkernel/function.rb

Constant Summary collapse

ID =
lambda {|o| o}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, params) ⇒ Option

Returns a new instance of Option.



167
168
169
170
171
172
173
174
175
# File 'lib/appkernel/function.rb', line 167

def initialize(name, params)
  @name = name.to_sym
  @index = params[:index]
  @required = params[:required] == true
  @finder = params[:find]
  @types = params[:type] ? [params[:type]].flatten : nil
  @default = params[:default]
  validate!
end

Instance Attribute Details

#defaultObject (readonly)

Returns the value of attribute default.



166
167
168
# File 'lib/appkernel/function.rb', line 166

def default
  @default
end

#indexObject (readonly)

Returns the value of attribute index.



166
167
168
# File 'lib/appkernel/function.rb', line 166

def index
  @index
end

#nameObject (readonly)

Returns the value of attribute name.



166
167
168
# File 'lib/appkernel/function.rb', line 166

def name
  @name
end

Instance Method Details

#lookup(app, value) ⇒ Object



213
214
215
216
217
# File 'lib/appkernel/function.rb', line 213

def lookup(app, value)
  result = @finder.call(value)
  app.errors[@name] = "couldn't find '#{@name}': #{value}" if result.nil? 
  result
end

#optional?Boolean

Returns:

  • (Boolean)


191
192
193
# File 'lib/appkernel/function.rb', line 191

def optional?
  !@required
end

#required?Boolean

Returns:

  • (Boolean)


187
188
189
# File 'lib/appkernel/function.rb', line 187

def required?
  @required
end

#resolve(app, value) ⇒ Object



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/appkernel/function.rb', line 195

def resolve(app, value)
  if value.nil?
    nil
  elsif @types 
    if @types.detect {|t| value.is_a?(t)}
      value
    elsif @finder
      lookup(app, value)
    else
      raise OptionError, "Don't know how to convert #{value.class}:#{value} -> #{@type}"
    end
  elsif @finder
    lookup(app, value)
  else
    value
  end
end

#validate!Object



177
178
179
180
181
182
183
184
185
# File 'lib/appkernel/function.rb', line 177

def validate!
  if @default
    if @types
      raise OptionError, "#{@default} is not a kind of #{@types.join('|')}" unless @types.detect {|t| @default.kind_of?(t)}
    elsif @required
      Kernel.warn "option '#{@name}' unecessarily marked as required. It has a default value"
    end
  end
end