Sha256: 3bf1dcdff77ee2b4ab00418ed2df09c6eac300f2cf4279c75cbe073ec1082e05

Contents?: true

Size: 794 Bytes

Versions: 11

Compression:

Stored size: 794 Bytes

Contents

module Merit
  class BaseTargetFinder
    def self.find(*args)
      new(*args).find
    end

    def initialize(rule, action)
      @rule = rule
      @action = action
    end

    def find
      get_target_from_database || reanimate_target_from_action
    rescue => e
      Rails.logger.warn "[merit] no target found: #{e}. #{caller.first}"
    end

    def get_target_from_database
      model_class.find_by_id(@action.target_id)
    end

    def model_class
      klass_name = (@rule.model_name || @action.target_model).singularize
      klass_name.camelize.constantize
    end

    def reanimate_target_from_action
      if @action.respond_to? :target_data
        YAML.load(@action.target_data)
      else
        Merit.upgrade_target_data_warning
        nil
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
merit-3.0.3 lib/merit/base_target_finder.rb
merit-3.0.2 lib/merit/base_target_finder.rb
merit-3.0.1 lib/merit/base_target_finder.rb
merit-3.0.0 lib/merit/base_target_finder.rb
merit-2.4.0 lib/merit/base_target_finder.rb
merit-2.3.4 lib/merit/base_target_finder.rb
merit-2.3.3 lib/merit/base_target_finder.rb
merit-2.3.2 lib/merit/base_target_finder.rb
merit-2.3.1 lib/merit/base_target_finder.rb
merit-2.3.0 lib/merit/base_target_finder.rb
merit-2.2.0 lib/merit/base_target_finder.rb