Class: Resourceful::OptionsInterpretation::OptionsInterpreter

Inherits:
Object
  • Object
show all
Defined in:
lib/resourceful/options_interpretation.rb

Instance Method Summary collapse

Constructor Details

#initialize(options_hash) ⇒ OptionsInterpreter

Returns a new instance of OptionsInterpreter.



33
34
35
# File 'lib/resourceful/options_interpretation.rb', line 33

def initialize(options_hash)
  @options_hash = options_hash
end

Instance Method Details

#extract(name, interpreter_opts = {}, &blk) ⇒ Object

Extract a particular option.

Parameters:

  • name (String)

    Name of option to extract

  • interpreter_opts (Hash) (defaults to: {})

    ‘:default’

    The default value, or an object that responds to #call with the default value.

    ‘:required’

    Boolean indicating if this option is required. Default: false if a default is provided; otherwise true.

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/resourceful/options_interpretation.rb', line 48

def extract(name, interpreter_opts = {}, &blk)
  option_required = !interpreter_opts.has_key?(:default)
  option_required = interpreter_opts[:required] if interpreter_opts.has_key?(:required)
  
  raise ArgumentError, "Required option #{name} not provided" if option_required && !@options_hash.has_key?(name) 
  # We have the option we need

  orig_val = @options_hash.delete(name)
  
  if block_given?
    yield orig_val

  elsif orig_val
    orig_val
    
  elsif interpreter_opts[:default] && interpreter_opts[:default].respond_to?(:call)
    interpreter_opts[:default].call()

  elsif interpreter_opts[:default]
    interpreter_opts[:default]
  end
end