Sha256: 55ad99ad664a9a58c12a30cd93d25955c1def7abf37203a02d1ea1849a23021f

Contents?: true

Size: 1.68 KB

Versions: 2

Compression:

Stored size: 1.68 KB

Contents

require "singlettings/base"

module Singlettings
  def self.hook_rails!
    if defined?(::Rails)
      config_path = "#{::Rails.root.to_s}/config/"
      Singlettings.load_yaml_files! config_path
    end
  end

  class Rails < ::Rails::Engine
    # The priorities of ActiveSupport hooks are shown as below:
    # =>  before_configuration
    # =>  before_initialize
    # =>  before_eager_load
    # =>  action_controller
    # =>  action_view
    # =>  active_record
    # =>  after_initialize
    # Since Singlettings is for configuration,
    # it should be loaded before configuration.
    config.before_configuration do
      Singlettings.hook_rails!
    end
  end if defined?(::Rails)

  private
  def self.load_yaml_files!(load_path)
    # Load singletting.yml
    files = []

    singletting = "#{load_path}singletting.yml"
    files << singletting if File.exists?(singletting)

    # Add MyColorWay Flavoured yetting.yml
    yetting = "#{load_path}yetting.yml"
    files << yetting if File.exists? yetting

    # Add namespaced files
    files += Dir.glob("#{load_path}singlettings/**/*.yml")

    files.each do |file|
      Singlettings.eval_yaml file
    end
  end

  # This method needs ActiveSupport
  def self.eval_yaml(file)
    base_name = File.basename(file).gsub(".yml", "").camelize
    if base_name == "Singletting" or base_name == "Yetting"
      klass_name = base_name
    else
      klass_name = "Singletting#{base_name}"
    end
    Object.const_set(klass_name, Singlettings.eval_yaml_class(file))
  end

  # Return specified anonymous class
  def self.eval_yaml_class(file)
    klass = Class.new(Singlettings::Base) do
      source file
      ns ::Rails.env
    end
    return klass
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
singlettings-0.0.5 lib/singlettings/rails.rb
singlettings-0.0.4 lib/singlettings/rails.rb