Skip to content

Instantly share code, notes, and snippets.

@asenchi
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asenchi/8829890 to your computer and use it in GitHub Desktop.
Save asenchi/8829890 to your computer and use it in GitHub Desktop.
module Test
class Log
attr_accessor :gc, :name
def initialize(name, gc=nil)
@name = name
@gc = gc || {}
end
def log(data)
puts data.merge(:name => @name).inspect
end
end
def self.init(gc=nil)
@logger = Log.new("init", gc=gc)
@logger.freeze
end
def self.logger
@logger ||= Log.new("logger")
end
def self.log(data)
log_data = @logger.gc.merge(data)
@logger.log(log_data)
end
end
Test.init(gc={:gc => "test"})
Test.log(:tl => "test log")
begin
Test.logger.gc = {:gc => "THAWED"}
rescue RuntimeError, TypeError => e
Test.log(:e => e.class, :e_message => e.message)
end
Test.log(:tl => "test log")
@asenchi
Copy link
Author

asenchi commented Feb 5, 2014

~ : ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin13.0.0]
~ : ruby tmp/test-logger.rb
{:gc=>"test", :tl=>"test log", :name=>"init"}
{:gc=>"test", :e=>RuntimeError, :e_message=>"can't modify frozen Test::Log", :name=>"init"}
{:gc=>"test", :tl=>"test log", :name=>"init"}
~ : rbenv local 2.1.0
~ : ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
~ : ruby tmp/test-logger.rb
{:gc=>"test", :tl=>"test log", :name=>"init"}
{:gc=>"test", :e=>RuntimeError, :e_message=>"can't modify frozen Test::Log", :name=>"init"}
{:gc=>"test", :tl=>"test log", :name=>"init"}
~ : rbenv local 1.8.7
~ : ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin13.0.0]
~ : ruby tmp/test-logger.rb
{:tl=>"test log", :gc=>"test", :name=>"init"}
{:e=>TypeError, :gc=>"test", :e_message=>"can't modify frozen object", :name=>"init"}
{:tl=>"test log", :gc=>"test", :name=>"init"}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment