Sha256: 2ae2999a353b8c68df8191dca25e05645f32a1bd1eca7d8c5aa5909d0facd9b7

Contents?: true

Size: 1.15 KB

Versions: 7

Compression:

Stored size: 1.15 KB

Contents

require 'active_support/concern'

module Plug
  module Concerns
    module ModelHelpers
      extend ActiveSupport::Concern

      included do
        include AASM

        # Validations
        validates :name, presence: { message: "#{self.humanized_class_name} name is required" },
                         uniqueness: { message: "#{self.humanized_class_name} name must be unique", case_sensitive: false }
        validates :state, presence: { message: "#{self.humanized_class_name} state is required" }

        # Callbacks
        before_save { self.slug = name.parameterize }

        # Scopes
        scope :slug_and_name, ->(arg) { where('slug = ? OR name = ?', arg, arg) }

        # States
        aasm column: :state do
          state :enabled, initial: true
          state :disabled

          event :enable do
            transitions from: :disabled, to: :enabled
          end

          event :disable do
            transitions from: :enabled, to: :disabled
          end
        end

      end

      module ClassMethods
        def humanized_class_name
          self.name.demodulize.underscore.humanize.capitalize
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
plug-0.1.23 app/models/plug/concerns/model_helpers.rb
plug-0.1.22 app/models/plug/concerns/model_helpers.rb
plug-0.1.21 app/models/plug/concerns/model_helpers.rb
plug-0.1.19 app/models/plug/concerns/model_helpers.rb
plug-0.1.18 app/models/plug/concerns/model_helpers.rb
plug-0.1.16 app/models/plug/concerns/model_helpers.rb
plug-0.1.15 app/models/plug/concerns/model_helpers.rb