Hello all.

  In this example, as i understand that *included* block is running when
Exclaimable module is included in Person and *after* a Person class methods
are 'initialized'

require 'active_support/concern'
module Exclaimable
extend ActiveSupport::Concern
included do
self.new.hello
end
end
class Person
include Exclaimable
def hello
puts 'person hello'
end
end

Output: Exception: NoMethodError: undefined method `hello' for
#<Person:0x00000103cbdcd0>

But i see that, Person class doesn't have hello method, why ? Please, help
!

So, i can't understand - what diifference between

included do
self.new.hello
end

and class method:

self.included(base)
base.new.hello
end

Both code get same error ( see above )

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c795f3da-8b7f-4fbd-b4d9-49fbe1c01d9b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Search Discussions

  • Matt Jones at Oct 12, 2014 at 8:42 pm

    On Friday, 10 October 2014 09:08:29 UTC-4, rusik wrote:
    Hello all.

    In this example, as i understand that *included* block is running when
    Exclaimable module is included in Person and *after* a Person class
    methods are 'initialized'
    No. See below for additional information, but if `include Exclaimable` is
    the first thing in a class definition, only methods defined on the
    declaring class's superclass (Object, in the case of Person) will be
    available.

    require 'active_support/concern'
    module Exclaimable
    extend ActiveSupport::Concern
    included do
    self.new.hello
    end
    end
    class Person
    include Exclaimable
    def hello
    puts 'person hello'
    end
    end

    Output: Exception: NoMethodError: undefined method `hello' for
    #<Person:0x00000103cbdcd0>

    But i see that, Person class doesn't have hello method, why ? Please,
    help !
    The stuff between `class Person` and `end` is just code. The `hello` method
    isn't available yet because it hasn't been DEFINED yet when `include
    Exclaimable` executes.


    So, i can't understand - what diifference between

    included do
    self.new.hello
    end

    and class method:

    self.included(base)
    base.new.hello
    end

    Both code get same error ( see above )
    `self.included` is Ruby's built-in hook. (
    http://www.ruby-doc.org/core-2.1.3/Module.html#method-i-included ) It gets
    called when the module that declares it is included in another module or
    class.

    `ActiveSupport::Concern` adds the `included do` idiom, to make situations
    where one module depends on another more straightforward. See the last
    section of the docs for more:

    http://api.rubyonrails.org/classes/ActiveSupport/Concern.html

    --Matt Jones

    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/d54def3c-678d-4188-b0e5-63fbec468f8d%40googlegroups.com.
    For more options, visit https://groups.google.com/d/optout.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprubyonrails-talk @
categoriesrubyonrails
postedOct 10, '14 at 1:08p
activeOct 12, '14 at 8:42p
posts2
users2
websiterubyonrails.org
irc#RubyOnRails

2 users in discussion

Matt Jones: 1 post Rusik: 1 post

People

Translate

site design / logo © 2022 Grokbase