module AWS::Core::OptionGrammar::ModuleMethods

@private

Public Instance Methods

customize(config = []) click to toggle source
# File lib/aws/core/option_grammar.rb, line 504
def customize(config = [])
  m = Class.new(self)
  supported_options = m.supported_options.inject({}) do |memo, opt|
    memo[opt.name] = opt
    memo
  end
  config.each do |option_config|
    if config.kind_of?(Hash)
      (name, value_desc) = option_config
    else
      (name, value_desc) = parse_option(option_config)
    end
    option = supported_options[name] || DefaultOption.new(name)
    option = option.extend_with_config(*value_desc)
    supported_options[option.name] = option
  end
  
  supported_ary = supported_options.values
  MetaUtils.extend_method(m, :supported_options) { supported_ary }
  supported_ruby_names = supported_ary.inject({}) do |memo, opt|
    memo[opt.ruby_name] = opt
    memo
  end
  MetaUtils.extend_method(m, :option) { |n| supported_ruby_names[n] }
  supported_ary.each do |opt|
    MetaUtils.extend_method(m, "validate_#{opt.ruby_name}") do |value|
      opt.validate(value)
    end
  end
  
  m
end
included(m) click to toggle source
# File lib/aws/core/option_grammar.rb, line 584
def included(m)
  m.extend(self::ModuleMethods)
end
option(name) click to toggle source
# File lib/aws/core/option_grammar.rb, line 537
def option(name)
  nil
end
request_params(options) click to toggle source

Returns the options in AWS/Query format

# File lib/aws/core/option_grammar.rb, line 560
def request_params(options)
  validate(options)
  options.map do |(name, value)|
    name = name.to_s
    option(name).request_params(value)
  end.flatten
end
supported_options() click to toggle source
# File lib/aws/core/option_grammar.rb, line 541
def supported_options
  []
end
to_h(options) click to toggle source

Returns the options as a hash (which is used to generate JSON in #to_json).

# File lib/aws/core/option_grammar.rb, line 570
def to_h(options)
  validate(options)
  options.inject({}) do |hash, (name, value)|
    option = self.option(name.to_s)
    hash[option.name] = option.hash_format(value)
    hash
  end
end
to_json(options) click to toggle source

Returns the options in JSON format

# File lib/aws/core/option_grammar.rb, line 580
def to_json(options)
  to_h(options).to_json
end
validate(options) click to toggle source
# File lib/aws/core/option_grammar.rb, line 545
def validate(options)
  options.each do |name, value|
    name = name.to_s
    raise ArgumentError.new("unexpected option #{name}") unless
      option(name)
    option(name).validate(value)
  end
  supported_options.each do |option|
    raise ArgumentError.new("missing required option #{option.ruby_name}") unless
      !option.required? ||
      options.has_key?(option.ruby_name) || options.has_key?(option.ruby_name.to_sym)
  end
end

Protected Instance Methods

apply_integer_descriptor(m, name) click to toggle source
# File lib/aws/core/option_grammar.rb, line 624
def apply_integer_descriptor(m, name)
  MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
    raise ArgumentError.new("expected integer value for option #{ruby_name(name)}") unless
      value.respond_to? :to_int
  end
end
apply_list_descriptor(m, name, arg) click to toggle source
# File lib/aws/core/option_grammar.rb, line 640
def apply_list_descriptor(m, name, arg)
  MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
    raise ArgumentError.new("expected value for option #{ruby_name(name)} "+
                            "to respond to #each") unless
      value.respond_to? :each
  end
  MetaUtils.extend_method(m, "params_for_#{ruby_name(name)}") do |value|
    i = 0
    values = []
    value.each do |member|
      i += 1
      values << Http::Request::Param.new(name+"."+i.to_s, member.to_s)
    end
    if i > 0
      values
    else
      Http::Request::Param.new(name, "")
    end
  end
end
apply_rename_descriptor(m, name, new_name) click to toggle source
# File lib/aws/core/option_grammar.rb, line 662
def apply_rename_descriptor(m, name, new_name)
  name = ruby_name(name)
  MetaUtils.extend_method(m, :validate) do |opts|
    raise ArgumentError.new("unexpected option foo") if
      opts.key?(name) or opts.key?(name.to_sym)
  
    opts = opts.dup
    opts[name] = opts[new_name] if opts.key?(new_name)
    opts[name.to_sym] = opts[new_name.to_sym] if opts.key?(new_name.to_sym)
    opts.delete(new_name)
    opts.delete(new_name.to_sym)
    super(opts)
  end
  
  # couldn't find a better way to alias a class method
  method = m.method("params_for_#{name}")
  MetaUtils.extend_method(m, "params_for_#{new_name}") do |value|
    method.call(value)
  end
end
apply_required_descriptor(m, name) click to toggle source
# File lib/aws/core/option_grammar.rb, line 615
def apply_required_descriptor(m, name)
  name = ruby_name(name)
  MetaUtils.extend_method(m, :validate) do |opts|
    raise ArgumentError.new("missing required option #{name}") unless
      opts.key? name or opts.key? name.to_sym
  end
end
apply_string_descriptor(m, name) click to toggle source
# File lib/aws/core/option_grammar.rb, line 632
def apply_string_descriptor(m, name)
  MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
    raise ArgumentError.new("expected string value for option #{ruby_name(name)}") unless
      value.respond_to? :to_str
  end
end
parse_option(option) click to toggle source
# File lib/aws/core/option_grammar.rb, line 589
def parse_option(option)
  value_desc = nil
  if option.kind_of? Hash
    raise ArgumentError.new("passed empty hash where an option was expected") if
      option.empty?
  
    raise ArgumentError.new("too many entries in option description") if
      option.size > 1
  
    (name, value_desc) = option.to_a.first
    name = name.to_s
  
    raise ArgumentError.new("expected an array for "+
                            "value description of option #{name},"+
                            "got #{value_desc.inspect}") unless
      value_desc.nil? or value_desc.kind_of?(Array)
  else
    name = option
  end
  
  value_desc ||= []
  
  [name, value_desc]
end