Sha256: 56b853e214d73ebbd7a0a237820013d51cfadad7ca95a834f48b257a3cb376cf

Contents?: true

Size: 818 Bytes

Versions: 3

Compression:

Stored size: 818 Bytes

Contents

require "enumerize"

require "enja/railtie"
require "enja/version"

module Enja
  def self.included(klass)
    klass.extend ClassMethods
  end

  module ClassMethods
    def define_role_field(attribute_name = :role, options = {})
      enumerize_options = enja_default_options.merge!(options)

      extend ::Enumerize
      enumerize(attribute_name.to_sym, enumerize_options)
      enumerize_options[:in].each do |role|
        scope(role, -> { where(attribute_name => role) })
        define_method(:"#{role}!") { update!(attribute_name => role ) }
      end

      validates(attribute_name, presence: true)
    end

    private

    def enja_default_options
      {
        in:         %i(guest staff admin),
        default:    :guest,
        predicates: true,
        scope:      true,
      }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
enja-0.1.2 lib/enja.rb
enja-0.1.1 lib/enja.rb
enja-0.1.0 lib/enja.rb