Sha256: 3804e2bf800371b6763f0a107bcffb54cbe04930da9be78cf5a7214225198963

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

require "racym/version"

def racym(*args)
  value = args.map(&:to_s).join('.').split('.').inject(Rails.application.config) { |r, m| r = r.send(m); r }

  if value.is_a?(Proc)
    value.call
  else
    value
  end
end

def racym_set(*args)
  Rails.application.config.racym_cache ||= {}
  
  after = args.pop
  before = racym(*args)
  token = args.map(&:to_s).join('.').split('.').join('.')

  if Rails.application.config.racym_cache[token]
    before = Rails.application.config.racym_cache[token].first
  end

  config_methods = token.split('.')

  config_methods.inject([config_methods.last, Rails.application.config]) do |last_and_rails_config, current_method|
    last, rails_config = last_and_rails_config

    rails_config = if last == current_method
      rails_config.send("#{current_method}=", after)
    else
      rails_config = rails_config.send(current_method)
    end

    [last, rails_config]
  end

  Rails.application.config.racym_cache[token] = [before, after]
end

def racym_undo!
  return unless Rails.application.config.racym_cache.is_a? Hash

  Rails.application.config.racym_cache.each do |key, changes|
    config_methods = key.split('.')
    racym_set(key, changes.first)
  end
  
  Rails.application.config.racym_cache = nil
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
racym-0.0.5 lib/racym.rb
racym-0.0.4 lib/racym.rb
racym-0.0.3 lib/racym.rb