Sha256: 56f30bfbaac2ec060e25ea2a8e08c0572729bca3969eefb315a02a398fe3492c
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
module BraintreeRails module CollectionAssociation module ClassMethods def self.extended(receiver) receiver.class_eval do attr_accessor :collection, :loaded lazy_load(Array.public_instance_methods - Object.public_instance_methods) end end def lazy_load(methods) methods.each do |method| define_method(method) { |*args, &block| load!; super(*args, &block) } end end end module InstanceMethods def initialize(collection) super(self.collection = (collection || [])) end def find(id = nil, &block) id.nil? ? super(&block) : super() { |model| model.id == id } end def build(params = {}) model_class.new(default_options.merge(params)) end def create(params = {}) build(params).tap { |model| push(model) if model.save } end def create!(params = {}) build(params).tap { |model| push(model) if model.save! } end def model_class self.class.name.singularize.constantize end def load! return if loaded self.loaded = true __setobj__(collection.map{|model| model_class.new(model)}) end end def self.included(receiver) receiver.extend ClassMethods receiver.send :include, InstanceMethods end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
braintree-rails-1.1.0 | lib/braintree_rails/collection_association.rb |