Class: AppKernel::FunctionDefinition::Option
- Inherits:
-
Object
- Object
- AppKernel::FunctionDefinition::Option
- Defined in:
- lib/appkernel/function.rb
Constant Summary collapse
- ID =
lambda {|o| o}
Instance Attribute Summary collapse
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#index ⇒ Object
readonly
Returns the value of attribute index.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#initialize(name, params) ⇒ Option
constructor
A new instance of Option.
- #lookup(app, value) ⇒ Object
- #optional? ⇒ Boolean
- #required? ⇒ Boolean
- #resolve(app, value) ⇒ Object
- #validate! ⇒ Object
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
#default ⇒ Object (readonly)
Returns the value of attribute default.
166 167 168 |
# File 'lib/appkernel/function.rb', line 166 def default @default end |
#index ⇒ Object (readonly)
Returns the value of attribute index.
166 167 168 |
# File 'lib/appkernel/function.rb', line 166 def index @index end |
#name ⇒ Object (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
191 192 193 |
# File 'lib/appkernel/function.rb', line 191 def optional? !@required end |
#required? ⇒ 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 |