Sha256: f54cec50f8dc59ed2ebab9040d91bd75c269ef2fa92ec91d08bc38b9eac8b051

Contents?: true

Size: 1.95 KB

Versions: 39

Compression:

Stored size: 1.95 KB

Contents

module Cmor
  module Cms
    module DatabaseTemplate
      def self.included(base)
        base.extend(ClassMethods)

        # callbacks
        base.after_initialize :set_defaults
        base.before_validation :assert_trailing_slash_on_pathname
        base.after_save :clear_resolver_cache

        # validations
        base.validates :basename, presence: true,
                                  uniqueness: { scope: [:pathname, :locale, :format, :handler] }
        base.validates :handler, inclusion: ActionView::Template::Handlers.extensions.map(&:to_s)
        base.validates :locale, inclusion: I18n.available_locales.map(&:to_s),
                                allow_nil: true,
                                allow_blank: true
        base.validates :format, inclusion: Mime::SET.symbols.map(&:to_s),
                                allow_nil: true,
                                allow_blank: true
        base.validates :pathname, presence: true
      end

      module ClassMethods
      end

      def human
        "#{self.class.name}: #{path_and_filename}"
      end

      def filename
        filename = basename.nil? ? '' : basename.dup
        filename << ".#{locale}" if locale.present?
        filename << ".#{format}" if format.present?
        filename << ".#{handler}" if handler.present?
        filename
      end

      def path_and_filename
        "#{pathname}#{filename}"
      end

      private

      def assert_trailing_slash_on_pathname
        self.pathname = '/' and return if pathname.blank?
        pathname << '/' unless pathname.end_with?('/')
      end

      def clear_resolver_cache
        klass = "#{self.class.name}Resolver"
        klass.constantize.instance.clear_cache
      end

      def set_defaults
        if new_record?
          self.locale ||= I18n.default_locale.to_s
          self.handler ||= Cmor::Cms::Configuration.default_handlers[self.class.name.demodulize.underscore.to_sym].to_s
        end
      end
    end
  end
end

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
cmor_cms-0.0.57.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.56.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.55.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.54.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.53.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.52.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.51.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.50.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.49.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.48.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.45.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.44.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.43.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.42.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.41.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.40.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.39.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.38.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.37.pre lib/cmor/cms/database_template.rb
cmor_cms-0.0.36.pre lib/cmor/cms/database_template.rb