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