module MadCart::Store::Base::ClassMethods
Public Instance Methods
after_initialize(*args)
click to toggle source
# File lib/mad_cart/store/base.rb, line 169 def after_initialize(*args) @after_init_delegate = parse_delegate(args.first, :after_initialize) end
create_connection_with(*args)
click to toggle source
# File lib/mad_cart/store/base.rb, line 147 def create_connection_with(*args) @connection_delegate = parse_delegate(args.first, :create_connection_with) opts = args[1] || {} @required_connection_args = opts[:requires] || [] end
fetch(model, options={})
click to toggle source
# File lib/mad_cart/store/base.rb, line 153 def fetch(model, options={}) @fetch_delegates ||= {} @format_delegates ||= {} @fetch_delegates[model] = parse_delegate(options, :fetch) define_method_for(model) end
format(model, options={})
click to toggle source
# File lib/mad_cart/store/base.rb, line 161 def format(model, options={}) if @fetch_delegates[model].nil? raise ArgumentError, "Cannot define 'format' for a model that has not defined 'fetch'" end @format_delegates[model] = parse_delegate(options, :format) end
Private Instance Methods
define_method_for(model)
click to toggle source
# File lib/mad_cart/store/base.rb, line 182 def define_method_for(model) define_method model do |*args| fetch_result = execute_delegate(self.class.fetch_delegates[model], *args) formatted_result = if self.class.format_delegates[model] formatter = self.class.format_delegates[model] fetch_result.map{|r| execute_delegate(formatter, r)} else fetch_result end return ensure_model_format(model, formatted_result) end end
parse_delegate(arg, method)
click to toggle source
# File lib/mad_cart/store/base.rb, line 173 def parse_delegate(arg, method) return arg if (arg.is_a?(Symbol) || arg.is_a?(Proc)) return arg[:with] if arg.is_a?(Hash) && arg[:with] raise ArgumentError, "Invalid delegate for #{method}: "\ "#{arg.first.class}. Use Proc or Symbol. " end