diff options
author | Adam Bard <github@adambard.com> | 2013-09-08 21:41:00 -0700 |
---|---|---|
committer | Adam Bard <github@adambard.com> | 2013-09-08 21:41:00 -0700 |
commit | cae8dd6c660700893921cb63cdfcac59b8f84c07 (patch) | |
tree | bce05652a996ad6b84423bc9be262071b47eb55b /ruby.html.markdown | |
parent | 9d0465cc50fd9577b9e4489f161474e1aeb93295 (diff) | |
parent | 9cc1982c484e99adfb922733cb9c0fb5768b6a77 (diff) |
Merge pull request #331 from warmwaffles/ruby-modules
Added module extension and inclusion examples
Diffstat (limited to 'ruby.html.markdown')
-rw-r--r-- | ruby.html.markdown | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/ruby.html.markdown b/ruby.html.markdown index 80682682..b9ba83cb 100644 --- a/ruby.html.markdown +++ b/ruby.html.markdown @@ -403,4 +403,55 @@ end Human.bar # 0 Doctor.bar # nil +module ModuleExample + def foo + 'foo' + end +end + +# Including modules binds the methods to the object instance +# Extending modules binds the methods to the class instance + +class Person + include ModuleExample +end + +class Book + extend ModuleExample +end + +Person.foo # => NoMethodError: undefined method `foo' for Person:Class +Person.new.foo # => 'foo' +Book.foo # => 'foo' +Book.new.foo # => NoMethodError: undefined method `foo' + +# Callbacks when including and extending a module are executed + +module ConcernExample + def self.included(base) + base.extend(ClassMethods) + base.send(:include, InstanceMethods) + end + + module ClassMethods + def bar + 'bar' + end + end + + module InstanceMethods + def qux + 'qux' + end + end +end + +class Something + include ConcernExample +end + +Something.bar # => 'bar' +Something.qux # => NoMethodError: undefined method `qux' +Something.new.bar # => NoMethodError: undefined method `bar' +Something.new.qux # => 'qux' ``` |