<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>activemodel/lib/active_model/core.rb</filename>
    </added>
    <added>
      <filename>activemodel/lib/active_model/state_machine.rb</filename>
    </added>
    <added>
      <filename>activemodel/lib/active_model/state_machine/event.rb</filename>
    </added>
    <added>
      <filename>activemodel/lib/active_model/state_machine/machine.rb</filename>
    </added>
    <added>
      <filename>activemodel/lib/active_model/state_machine/state.rb</filename>
    </added>
    <added>
      <filename>activemodel/lib/active_model/state_machine/state_transition.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/observing_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/state_machine/event_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/state_machine/machine_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/state_machine/state_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/state_machine/state_transition_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/state_machine_test.rb</filename>
    </added>
    <added>
      <filename>activemodel/test/test_helper.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,17 +1,5 @@
-$LOAD_PATH &lt;&lt; File.join(File.dirname(__FILE__), '..', '..', 'activesupport', 'lib')
-
-# premature optimization?
-require 'active_support/inflector'
-require 'active_support/core_ext/string/inflections'
-String.send :include, ActiveSupport::CoreExtensions::String::Inflections
-
-require 'active_model/base'
 require 'active_model/observing'
-require 'active_model/callbacks'
-require 'active_model/validations'
-
-ActiveModel::Base.class_eval do
-  include ActiveModel::Observing
-  include ActiveModel::Callbacks
-  include ActiveModel::Validations
-end
\ No newline at end of file
+# disabled until they're tested
+# require 'active_model/callbacks'
+# require 'active_model/validations'
+require 'active_model/base'
\ No newline at end of file</diff>
      <filename>activemodel/lib/active_model.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,8 @@
 module ActiveModel
   class Base
+    include Observing
+    # disabled, until they're tested
+    # include Callbacks
+    # include Validations
   end
 end
\ No newline at end of file</diff>
      <filename>activemodel/lib/active_model/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,5 @@
+require 'active_model/core'
+
 module ActiveModel
   module Callbacks
     </diff>
      <filename>activemodel/lib/active_model/callbacks.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,6 @@
 require 'observer'
+require 'singleton'
+require 'active_model/core'
 
 module ActiveModel
   module Observing
@@ -73,7 +75,7 @@ module ActiveModel
     # Start observing the declared classes and their subclasses.
     def initialize
       self.observed_classes = self.class.models if self.class.models
-      observed_classes.each { |klass| add_observer! klass }
+      observed_classes.each { |klass| klass.add_observer(self) }
     end
 
     # Send observed_method(object) if the method exists.
@@ -85,16 +87,12 @@ module ActiveModel
     # Passes the new subclass.
     def observed_class_inherited(subclass) #:nodoc:
       self.class.observe(observed_classes + [subclass])
-      add_observer!(subclass)
+      subclass.add_observer(self)
     end
 
-    protected
-      def observed_classes
-        @observed_classes ||= [self.class.observed_class]
-      end
-
-      def add_observer!(klass)
-        klass.add_observer(self)
-      end
+  protected
+    def observed_classes
+      @observed_classes ||= [self.class.observed_class]
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>activemodel/lib/active_model/observing.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,5 @@
+require 'active_model/core'
+
 module ActiveModel
   module Validations
     def self.included(base) # :nodoc:</diff>
      <filename>activemodel/lib/active_model/validations.rb</filename>
    </modified>
    <modified>
      <diff>@@ -307,4 +307,9 @@ module ActiveSupport
   end
 end
 
+# in case active_support/inflector is required without the rest of active_support
 require 'active_support/inflections'
+require 'active_support/core_ext/string/inflections'
+unless String.included_modules.include?(ActiveSupport::CoreExtensions::String::Inflections)
+  String.send :include, ActiveSupport::CoreExtensions::String::Inflections
+end
\ No newline at end of file</diff>
      <filename>activesupport/lib/active_support/inflector.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>activemodel/spec/observing_spec.rb</filename>
    </removed>
    <removed>
      <filename>activemodel/spec/spec_helper.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>4cf93935b2478201863c01569e894c9dcf7e9074</id>
    </parent>
    <parent>
      <id>c9e366e997c6f3a383cfaa6351fa847e92de7fe4</id>
    </parent>
  </parents>
  <author>
    <name>rick</name>
    <email>technoweenie@gmail.com</email>
  </author>
  <url>http://github.com/azimux/rails/commit/01db5ded54b0e3a2ea80d28e4841d40fcec23cdf</url>
  <id>01db5ded54b0e3a2ea80d28e4841d40fcec23cdf</id>
  <committed-date>2008-06-29T12:13:58-07:00</committed-date>
  <authored-date>2008-06-29T12:13:58-07:00</authored-date>
  <message>Merge branch 'state_machine'

Some big changes:
  * Added some redundant requires so active_support/inflecto can be loaded
    without the rest of ActiveSupport.
  * Disabled callbacks and validations until they are added and tested.
  * Converted specs back to tests, using ActiveSupport::TestCase and the new
    #test helper.
  * As an experiment, I imported Scott Barron's awesome AASM gem into
    ActiveModel.  I added multiple state machine support and vastly improved
    the API (no more aasm_* prefixes).  All the old tests pass.  If this bothers
    people, I have no problems removing this and contributing the changes back to
    AASM.  I just feel like AMo is a better spot for all these 'modelish' features.</message>
  <tree>9d30b4c51da7e8f0fb0fc77126450f63fd08e8fa</tree>
  <committer>
    <name>rick</name>
    <email>technoweenie@gmail.com</email>
  </committer>
</commit>
