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