Sha256: 4e863ede59404e72a34fa4eabd78b0b3f6260836ca6a911df54ff1e260698b4d

Contents?: true

Size: 1.85 KB

Versions: 5

Compression:

Stored size: 1.85 KB

Contents

module HatTrick
  module ModelMethods
    extend ActiveSupport::Concern
    mattr_accessor :validation_groups
    mattr_accessor :dynamic_validation_groups

    attr_accessor :_dummy # so the dummy field will have something to set

    included do
      alias_method_chain :perform_validations, :hat_trick if instance_methods.include?(:perform_validations)
      alias_method_chain :as_json, :model_name if instance_methods.include?(:as_json)
    end

    def self.dynamic_validation_groups
      @dynamic_validation_groups ||= []
    end

    def self.set_current_validation_group_for(klass, validation_group_name, dynamic)
      self.validation_groups ||= {}
      validation_groups[klass.to_s.underscore] = validation_group_name
      dynamic_validation_groups << validation_group_name if dynamic
    end

    def self.current_validation_group_for(klass)
      return nil unless validation_groups
      validation_groups[klass.to_s.underscore]
    end

    def perform_validations_with_hat_trick(*args, &block)
      enable_current_validation_group
      perform_validations_without_hat_trick(*args, &block)
    end

    def as_json_with_model_name(*args, &block)
      json = as_json_without_model_name(*args, &block)
      json.merge! :__name__ => self.class.to_s.underscore if json.respond_to?(:merge!)
    end

    private

    # don't call this method 'current_validation_group', it conflicts with
    # the validation_group gem
    def current_step_validation_group
      HatTrick::ModelMethods.current_validation_group_for(self.class)
    end

    def enable_current_validation_group
      validation_group = current_step_validation_group
      if validation_group
        Rails.logger.info "Enabling validation group #{validation_group}"
        enable_validation_group validation_group
      else
        Rails.logger.info "NOT enabling a validation group"
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hat-trick-0.2.1 lib/hat_trick/model_methods.rb
hat-trick-0.2.0 lib/hat_trick/model_methods.rb
hat-trick-0.1.5 lib/hat_trick/model_methods.rb
hat-trick-0.1.4 lib/hat_trick/model_methods.rb
hat-trick-0.1.3 lib/hat_trick/model_methods.rb