Sha256: 9bd1a935996082639df6795f8e9b3e791bb4fd6f446c6009eab71310533d806f

Contents?: true

Size: 942 Bytes

Versions: 3

Compression:

Stored size: 942 Bytes

Contents

# frozen_string_literal: true

module Expire
  # List rule classes, names and option-names
  class RuleList
    include Singleton

    def self.class_names
      instance.class_names
    end

    def self.names
      instance.names
    end

    def self.name_symbols
      instance.name_symbols
    end

    def self.option_names
      instance.option_names
    end

    def class_names
      @class_names ||= rule_classes.map(&:to_s).freeze
    end

    def names
      rule_classes.map(&:name)
    end

    def name_symbols
      names.map(&:to_sym)
    end

    def option_names
      rule_classes.map(&:option_name)
    end

    private

    def rule_classes
      @rule_classes ||= rule_class_names.map(&:constantize).sort.freeze
    end

    def rule_class_names
      class_symbols = Expire.constants.select { |klass| Expire.const_get(klass).to_s =~ /Rule\z/ }

      class_symbols.map { |c_sym| "Expire::#{c_sym}" }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
expire-0.2.2 lib/expire/rule_list.rb
expire-0.2.1 lib/expire/rule_list.rb
expire-0.2.0 lib/expire/rule_list.rb