class EnumFromFile::Storage
Public Class Methods
new()
click to toggle source
# File lib/enum_from_file/storage.rb, line 7 def initialize enum_files.each(&method(:define_enum)) end
Public Instance Methods
values_from(file:)
click to toggle source
# File lib/enum_from_file/storage.rb, line 11 def values_from(file:) send(file) rescue NoMethodError raise StandardError, "Cannot read 'config/enums/#{file}.yml'" end
Private Instance Methods
define_enum(file)
click to toggle source
# File lib/enum_from_file/storage.rb, line 30 def define_enum(file) define_singleton_method File.basename(file.path, ".yml") do instance_variable_get(instance_name(file)) || instance_variable_set(instance_name(file), instance_value(file)) end end
enum_files()
click to toggle source
# File lib/enum_from_file/storage.rb, line 19 def enum_files Dir["#{project_root}/config/enums/*.yml"].map { |path| File.open(path) } end
instance_name(file)
click to toggle source
# File lib/enum_from_file/storage.rb, line 37 def instance_name(file) "@#{File.basename(file.path, '.yml').to_sym}" end
instance_value(file)
click to toggle source
# File lib/enum_from_file/storage.rb, line 41 def instance_value(file) values = YAML.safe_load(file) return values.to_h unless values.is_a?(String) Hash[values.split.map { |val| [val.to_sym, val] }] end
project_root()
click to toggle source
# File lib/enum_from_file/storage.rb, line 23 def project_root return Rails.root if defined?(Rails) return Bundler.root if defined?(Bundler) Dir.pwd end