Skip to content

Instantly share code, notes, and snippets.

@roolo
Created March 12, 2012 16:50
Show Gist options
  • Select an option

  • Save roolo/2023292 to your computer and use it in GitHub Desktop.

Select an option

Save roolo/2023292 to your computer and use it in GitHub Desktop.
Hash merging
[base]
data_working_dir = "/tmp"
[base]
data_working_dir = "/root"
class MyClass
@instance = nil
@config = nil
@APP_ROOT = nil
def initialize
@APP_ROOT = File.expand_path __FILE__ + '/../../../'
end
def self.get_instance
@instance = MyClass.new unless @instance
@instance
end
def config custom_config_path = nil
unless @config
ini_file_config = {:escape => false}
default_ini = IniFile.new( (@APP_ROOT + "/config/default.ini"), ini_file_config )
if custom_config_path
custom_ini = IniFile.new( (custom_config_path), ini_file_config)
else
custom_ini = IniFile.new( (@APP_ROOT + "/config/local.ini"), ini_file_config )
end
@config = default_ini.to_h.merge custom_ini.to_h
end
@config
end
def self.clean_ini_value ini_value
ini_value.match(/[\/\w]+/).to_a.last
end
end
require File.expand_path(__FILE__ + "/../../spec_helper.rb")
describe "MyClass" do
it "overload configuration by custom_config" do
testing_ini_path = File.expand_path(
File.dirname(__FILE__) + '/../fixtures/local.ini'
)
app_data_wd = MyClass .get_instance \
.config(testing_ini_path) \
['base']['data_working_dir']
MyClass.clean_ini_value(app_data_wd).should eq '/root'
end
end
# Terminal
expected: "/root"
got: "/tmp"
# RubyMine
1 example, 0 failures, 1 passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment