module Acoustid::API::Request::ParamAttributes

Public Instance Methods

param(name, options={}) click to toggle source
# File lib/acoustid/api/request/param_attributes.rb, line 48
def param(name, options={})
  param_reader(name, options)
  param_writer(name, options)
end
param_reader(param, options={}) click to toggle source
# File lib/acoustid/api/request/param_attributes.rb, line 7
def param_reader(param, options={})
  raise TypeError, 'param must respond to :to_sym' unless param.respond_to?(:to_sym)
  param = param.to_sym
  
  raise TypeError, 'options must respond to :to_hash or :to_h' unless options.respond_to?(:to_hash) || options.respond_to?(:to_h)
  options = options.to_hash rescue options.to_h
  
  name = options[:name].to_s.strip
  name = name.empty? ? param.to_s : name
  
  define_method(param) { (@params ||= {})[name] }
end
param_writer(param, options={}) click to toggle source
# File lib/acoustid/api/request/param_attributes.rb, line 20
def param_writer(param, options={})
  raise TypeError, 'param must respond to :to_sym' unless param.respond_to?(:to_sym)
  param = param.to_sym
  
  raise TypeError, 'options must respond to :to_hash or :to_h' unless options.respond_to?(:to_hash) || options.respond_to?(:to_h)
  options = options.to_hash rescue options.to_h
  
  name = options[:name].to_s.strip
  name = name.empty? ? param.to_s : name
  
  required_params << param if options[:required]
  
  raise TypeError, 'validate options must respond to :call or :to_sym' unless options[:validate].nil? || options[:validate].respond_to?(:call) || options[:validate].respond_to?(:to_sym)
  validate = options[:validate]
  validate = method(validate) if validate.respond_to?(:to_sym)
  
  raise TypeError, 'serialize options must respond to :call or :to_sym' unless options[:serialize].nil? || options[:serialize].respond_to?(:call) || options[:serialize].respond_to?(:to_sym)
  serialize = options[:serialize]
  serialize = method(serialize) if serialize.respond_to?(:to_sym)
  
  define_method("#{param}=") do |value|
    validate.call(value) unless validate.nil?
    value = serialize.call(value) unless serialize.nil?
    
    (@params ||= {})[name] = value
  end
end
required_params() click to toggle source
# File lib/acoustid/api/request/param_attributes.rb, line 53
def required_params
  @required_params ||= []
end