Sha256: cc1e6ccafe483fdf114e1dab9eef7fce3fbd3f2b22ab85ee50034b106a64fcd3

Contents?: true

Size: 1.38 KB

Versions: 10

Compression:

Stored size: 1.38 KB

Contents

module MetaManager
  module Taggable
    extend ::ActiveSupport::Concern
    
    included do          
      has_many :meta_tags, :as => :taggable, :dependent => :destroy, :autosave => true
        
      accepts_nested_attributes_for :meta_tags, :reject_if => :all_blank, :allow_destroy => true
    end
    
    module InstanceMethods
    
      # Find meta tag by name or build new record
      def find_or_build_meta_tag(attr_name)
        key = normalize_meta_tag_name(attr_name)
        self.meta_tags.where(:name => key).first || self.meta_tags.build(:name => key)
      end
      
      # Save meta tags records into one hash
      def meta_tag(attr_name)
        key = normalize_meta_tag_name(attr_name)
        @meta_tag ||= {}
        @meta_tag[key] ||= find_or_build_meta_tag(key)
      end
      
      protected
      
        def normalize_meta_tag_name(value)
          key = value.to_s.downcase.strip
          key
        end
        
        def method_missing(method, *args, &block)
          key = method.to_s
          
          if key =~ /^tag_/
            attr_name = key.gsub(/^tag_/, '')
            
            if key =~ /=$/
              record = meta_tag(attr_name.chop)
              record.content = args.first
            else 
              meta_tag(attr_name).try(:content)
            end
          else
            super
          end
        end
      
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
sunrise-cms-0.3.3 vendor/bundle/ruby/1.9.1/gems/meta_manager-0.0.5/lib/meta_manager/taggable.rb
sunrise-cms-0.3.2 vendor/bundle/ruby/1.9.1/gems/meta_manager-0.0.5/lib/meta_manager/taggable.rb
sunrise-cms-0.3.1 vendor/bundle/ruby/1.9.1/gems/meta_manager-0.0.5/lib/meta_manager/taggable.rb
sunrise-cms-0.3.0 vendor/bundle/ruby/1.9.1/gems/meta_manager-0.0.5/lib/meta_manager/taggable.rb
sunrise-cms-0.3.0.rc vendor/bundle/ruby/1.9.1/gems/meta_manager-0.0.5/lib/meta_manager/taggable.rb
meta_manager-0.0.5 lib/meta_manager/taggable.rb
meta_manager-0.0.4 lib/meta_manager/taggable.rb
meta_manager-0.0.3 lib/meta_manager/taggable.rb
meta_manager-0.0.2 lib/meta_manager/taggable.rb
meta_manager-0.0.1 lib/meta_manager/taggable.rb