Skip to content

Instantly share code, notes, and snippets.

@Jacke
Last active December 19, 2015 09:09
Show Gist options
  • Select an option

  • Save Jacke/5930674 to your computer and use it in GitHub Desktop.

Select an option

Save Jacke/5930674 to your computer and use it in GitHub Desktop.
DSL Yield(self)
class Admin
def admin(&block)
@admin ||= Admin.new(&block)
end
class << self
attr_accessor :name, :environment # class attributes
def new
unless @instance # Singleton-pattern only one instance
yield(self) # Yielding self, so self is Admin
end
@instance ||= self
end
end
end
admin = Admin.new do |admin|
admin.name = "Stan"
end
admin.name
# => "Stan"
[56] pry(main)> z.new { |a| a.name = "f" }
=> Adm
[57] pry(main)> z
=> Adm
[58] pry(main)> z.name
@Jacke

Jacke commented Jul 4, 2013

Copy link
Copy Markdown
Author

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