Sha256: d7f968f1fad01a836f22fe68877adc31c31fd338433a1491271e6a6da5d4db3d
Contents?: true
Size: 1.8 KB
Versions: 3
Compression:
Stored size: 1.8 KB
Contents
module Coalla module PageSlider def slider(collection_name, options = {}) class_name = options.delete(:class_name) || 'SliderImage' slider_type = slider_type(collection_name) has_many collection_name, -> { where(slider_type: slider_type).order(:position) }, foreign_key: :container_slider_id, dependent: :destroy, class_name: class_name accepts_nested_attributes_for collection_name, allow_destroy: true define_method "sorted_#{collection_name}" do send(collection_name).sort_by(&:position) end end def slider_type(collection_name) # Workaround for STI - save parent class name for using in subclass @@slider_metadata ||= [] self.ancestors.each do |klazz| slider_type = "#{klazz.name && klazz.name.sub('::', '__')}_#{collection_name}" return slider_type if @@slider_metadata.include? slider_type break if klazz == ActiveRecord::Base end slider_type = "#{self.name && self.name.sub('::', '__')}_#{collection_name}" @@slider_metadata << slider_type slider_type end def self.extended(klass) klass.class_eval <<-EOV include ::Coalla::PageSlider::InstanceMethods EOV end module InstanceMethods def assign_nested_attributes_for_collection_association(association_name, attributes_collection) association_class = self.class.reflect_on_association(association_name).klass if association_class.attribute_names.include?('position') attributes_collection.each_with_index do |(key, value), index| if value.is_a?(Hash) value[:position] = index end end end super end end end end unless Rails.configuration.try(:disable_page_slider) ActiveRecord::Base.extend Coalla::PageSlider end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
coalla-cms-0.5.2.4 | lib/coalla/orm/page_slider.rb |
coalla-cms-0.5.1.9 | lib/coalla/orm/page_slider.rb |
coalla-cms-0.5.1.8 | lib/coalla/orm/page_slider.rb |