module SuperSecretMethods extend self def singleton_def_bad #begin-snippet: singleton_def_bad def secret.squirrel :shhh end #=> undefined local variable or method `secret' (NameError) #end-snippet end def singleton_def_ok #begin-snippet: singleton_def_ok secret = "hello" def secret.squirrel :shhh end p secret #=> "hello" p secret.squirrel #=> :shhh #end-snippet secret end def define_method_with_dot(receiver) receiver.instance_eval do #begin-snippet: define_method_with_dot # this works define_method('secret.squirrel') do :shhh end #end-snippet end end def call_secret_method_bad #begin-snippet: call_secret_method_bad secret.squirrel #=> undefined local variable or method `secret' (NameError) #end-snippet end def call_secret_method_ok(receiver) receiver.instance_eval do return begin #begin-snippet: call_secret_method_ok p send('secret.squirrel') #=> :shhh #end-snippet end end end def bad_ivar_set #begin-snippet: bad_ivar_set instance_variable_set("@secret.squirrel", :shhh) #=> NameError: `@secret.squirrel' is not allowed as an instance variable name #end-snippet end def bad_const_set #begin-snippet: bad_const_set String.const_set('SECRET.SQUIRREL', :shhh) #=> NameError: wrong constant name SECRET.SQUIRREL #end-snippet end end