uptech/togls

View on GitHub
lib/togls/rule_type_repository.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Togls
  class RuleTypeRepository
    def initialize(drivers)
      @drivers = drivers
    end

    def store(type_id, klass)
      @drivers.each do |driver|
        driver.store(type_id.to_s, klass.to_s, klass.title, klass.description,
                     klass.target_type.to_s)
      end
    end

    def include?(type_id)
      type = get_klass(type_id)
      type ? true : false
    end

    def include_klass?(klass)
      type = get_type_id(klass)
      type ? true : false
    end

    def get_klass(type_id)
      klass_string = fetch_klass_string(type_id.to_s)
      return Object.const_get(klass_string) if klass_string
      klass_string
    end

    def get_type_id(klass)
      fetch_type_id(klass.to_s)
    end

    private

    def reverse_drivers(&block)
      val = nil
      @drivers.reverse.each do |driver|
        val = block.call(driver) if block_given?
        break if val
      end
      val
    end

    def fetch_klass_string(type_id)
      reverse_drivers do |driver|
        driver.get_klass(type_id)
      end
    end

    def fetch_type_id(klass_str)
      reverse_drivers do |driver|
        driver.get_type_id(klass_str)
      end
    end
  end
end