@olsenchris: "I need to be able to create an object and, based on the param that I
pass in on the class create_for_sport method, create an object with the
proper module included.
It can be seen at the bottom by the comments I made that the includes
are being added on to the Stats class and the methods from the first
include are still there after the second include.  Is there a way to add
an include to an object instance rather than a class?
Thanks for the help
########
module SoftballStats
  def to_sport
    puts "softball"
  end
  def batting_average
    0.563
  end
  def before_save
    puts "in the softball before save"
  end
end
module HockeyStats
  def to_sport
    puts "hockey"
  end
  def scoring_percentage
    0.34
  end
  def before_save
    puts "in the hockey before save"
  end
end
class Stats
  def self.create_by_sport(sport)
    s = Stats.new
    s.sport = sport
    return s
  end
  def sport=(sport)
    Stats.instance_eval do  # have tried to use self.instance_eval
      eval("include #{sport.capitalize}Stats")
    end
  end
end
s = Stats.create_by_sport("softball")
puts s.batting_average  # 0.563
h = Stats.create_by_sport("hockey")
puts h.scoring_percentage  # 0.34
puts h.batting_average  # 0.563  -> still has this method
s.before_save  # "in the hockey save"  -> softball before_save is now
overridden
h.before_save  # "in the hockey save"
Posted via <url>"
    @transfire: "<quote>
d
Couple of ways. One is to use the singleton.
   def sport=3D(sport)
     (class << self; self; end).class_eval %{
       include #{sport.capitalize}Stats
     }
   end
But I think you might want to reconsider and use delegation instead.
T."
    @olsenchris: "<quote>
Thanks so much. To be honest I have no idea what the  (class << self; 
self; end), but it will make for good reading :).  I will look into the 
delegation as well.
Thanks again.
Posted via <url>"
    @rubytraining: "Hi Chris,
<quote>
You can call extend on an instance to mix in a modules instance
methods to the instance (and leaving the class itself alone).  In your
code, we also need to convert your string to a reference to the module
as well, via a call to const_get.  And this would be your new sport=
method:
  def sport=(sport)
    extend(self.class.const_get(sport.capitalize + "Stats"))
  end
I believe that will work for you.
Eric
====
LearnRuby.com offers Rails & Ruby HANDS-ON public & ON-SITE workshops.
Please visit <url> for all the details."
{'source': 'USENET', 'other_information': '{"reply_count": 3, "forum_name": "comp.lang.ruby.20141230.mbox"}', 'file': 'data/output/usenet-comp.lang.parquet'}