Sha256: cb191811a985cc20385020f826f60a78c460c14b85bdb6740c4363c4b9389c2e
Contents?: true
Size: 1.32 KB
Versions: 2
Compression:
Stored size: 1.32 KB
Contents
module EnumIsh class DictionaryLookup def initialize(klass, enum, options = {}) @klass = klass @enum = enum @options = options end def call i18n = lookup_for(@klass).transform_keys { |k| k.to_s.to_sym } dict = {} if @enum.use?(:accessor) @enum.mapping.each { |k, v| dict[k] = i18n[k] } else @enum.mapping.each { |k, v| dict[v] = i18n[k] } end filter(dict) end private def lookup_for(klass) if klass.name.blank? || !klass.is_a?(Class) return lookup_for(klass.superclass) end key = [@enum.name, @options[:format]].compact.join('/') options = (@options[:i18n_options] || {}).merge(default: nil) if klass.name.to_s.in?(['ActiveRecord::Base', 'Object']) I18n.t(:"enum_ish.defaults.#{key}", **options) || @enum.mapping else I18n.t(:"enum_ish.#{klass.name.underscore}.#{key}", **options) || lookup_for(klass.superclass) end end def filter(dict) if @options[:except] except = Array(@options[:except]) dict.reject! { |k, v| except.include?(k) } end if @options[:only] only = Array(@options[:only]) dict.select! { |k, v| only.include?(k) } end dict end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
enum_ish-1.6.1 | lib/enum_ish/dictionary_lookup.rb |
enum_ish-1.6.0 | lib/enum_ish/dictionary_lookup.rb |