class Jerakia::Datasource::Instance

Attributes

features[R]
options[RW]
options[R]
request[R]
response[R]

Public Class Methods

feature(name) click to toggle source
# File lib/jerakia/datasource.rb, line 34
def self.feature(name)
  @features << name.to_sym unless @features.include?(name.to_sym)
end
new(lookup, opts) click to toggle source
# File lib/jerakia/datasource.rb, line 17
def initialize(lookup, opts)
  @response = Jerakia::Response.new(lookup)
  @options = self.class.set_options(opts)
  @request = lookup.request 
  @features = []
end
option(name, arguments = {}) { |opt| ... } click to toggle source
# File lib/jerakia/datasource.rb, line 42
def self.option(name, arguments = {}, &block)
  self.options={} if self.options.nil?
  @options[name] = Proc.new do |opt|
    if arguments[:default]
      opt = arguments[:default] if opt.nil?
    end
    if arguments[:required]
      raise Jerakia::DatasourceArgumentError, "Must specify #{name} parameter" if opt.nil?
    end

    if arguments[:type]
      unless opt.is_a?(arguments[:type]) || opt.nil?
        raise Jerakia::DatasourceArgumentError, "#{name} must be a #{arguments[:type].to_s}, got #{opt.class.to_s}"
      end
    end

    if block_given?
      unless opt.nil?
        raise Jerakia::DatasourceArgumentError, "Validation failed for #{name}" unless yield opt
      end
    end
    opt
  end
end
set_options(args) click to toggle source
# File lib/jerakia/datasource.rb, line 67
def self.set_options(args)
  opts = {}
  options.keys.each do |k|
    opts[k] = options[k].call(args[k])
  end
  validate_options(args)
  opts
end
validate_options(args) click to toggle source
# File lib/jerakia/datasource.rb, line 76
def self.validate_options(args)
  args.keys.each do |k|
    raise Jerakia::DatasourceArgumentError, "Unknown option #{k}" unless options.keys.include?(k)
  end
end

Public Instance Methods

answer(data=nil) { |response| ... } click to toggle source
# File lib/jerakia/datasource.rb, line 24
def answer(data=nil)
  if block_given?
    while @response.want?
      yield @response
    end
  else
    @response.submit(data) if response.want? and not data.nil?
  end
end
features?(name) click to toggle source
# File lib/jerakia/datasource.rb, line 38
def features?(name)
  @features.include?(name)
end