Sha256: 8c3795e2f859186df64bff978eb4332cb86b04ea3fd603008f4e31340f882961

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

module Polyblock
  module HasPolyblock
    extend ActiveSupport::Concern

    included do
    end

    module ClassMethods
      def has_polyblock(name, options={})
        defaults = Polyblock::Block::DEFAULTS
        settings = defaults.deep_merge(options)
        has_one name, -> { where(:name => name) }, settings[:association]
        accepts_nested_attributes_for name, settings[:nested_attributes]

        cattr_accessor "#{name}_settings".to_sym
        send("#{name}_settings=".to_sym, settings)

        after_initialize do
          send("build_#{name}".to_sym) if send(name.to_sym).nil?
          # send(name.to_sym).settings = settings
        end
        include Polyblock::HasPolyblock::LocalInstanceMethods
      end

      def polyblocks
        Polyblock::Block.select('polyblock_blocks.name')
          .where(:contentable_type => self.name)
          .group('polyblock_blocks.name')
          .map(&:name)
      end
      def has_polyblock?(name)
        self.polyblocks.include?(name)
      end
    end

    module LocalInstanceMethods
      def has_polyblock_content_for?(name)
        !self.send(name).nil? and !self.send(name).content.blank?
      end

      def polyblocks
        Polyblock::Block.select('polyblock_blocks.name')
          .where(:contentable => self)
          .group('polyblock_blocks.name')
          .map(&:name)
      end
      def has_polyblock?(name)
        polyblocks.include?(name)
      end
    end
  end
end

if defined? ActiveRecord
  ActiveRecord::Base.send :include, Polyblock::HasPolyblock
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
polyblock-1.2.6 lib/polyblock/has_polyblock.rb
polyblock-1.2.5 lib/polyblock/has_polyblock.rb
polyblock-1.2.4 lib/polyblock/has_polyblock.rb