From 5dc3f91832fd8580287e5cbeba478bb8b9580dc1 Mon Sep 17 00:00:00 2001 From: Rick Olson Date: Fri, 9 Nov 2007 14:59:15 +0000 Subject: initial experimental commit of active_model git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8118 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activemodel/spec/observing_spec.rb | 120 +++++++++++++++++++++++++++++++++++++ activemodel/spec/spec_helper.rb | 17 ++++++ 2 files changed, 137 insertions(+) create mode 100644 activemodel/spec/observing_spec.rb create mode 100644 activemodel/spec/spec_helper.rb (limited to 'activemodel/spec') diff --git a/activemodel/spec/observing_spec.rb b/activemodel/spec/observing_spec.rb new file mode 100644 index 0000000000..1919bb5991 --- /dev/null +++ b/activemodel/spec/observing_spec.rb @@ -0,0 +1,120 @@ +require File.join(File.dirname(__FILE__), 'spec_helper') + +class ObservedModel < ActiveModel::Base + class Observer + end +end + +class FooObserver < ActiveModel::Observer + class << self + public :new + end + + attr_accessor :stub + + def on_spec(record) + stub.event_with(record) if stub + end +end + +class Foo < ActiveModel::Base +end + +module ActiveModel + describe Observing do + before do + ObservedModel.observers.clear + end + + it "initializes model with no cached observers" do + ObservedModel.observers.should be_empty + end + + it "stores cached observers in an array" do + ObservedModel.observers << :foo + ObservedModel.observers.should include(:foo) + end + + it "flattens array of assigned cached observers" do + ObservedModel.observers = [[:foo], :bar] + ObservedModel.observers.should include(:foo) + ObservedModel.observers.should include(:bar) + end + + it "instantiates observer names passed as strings" do + ObservedModel.observers << 'foo_observer' + FooObserver.should_receive(:instance) + ObservedModel.instantiate_observers + end + + it "instantiates observer names passed as symbols" do + ObservedModel.observers << :foo_observer + FooObserver.should_receive(:instance) + ObservedModel.instantiate_observers + end + + it "instantiates observer classes" do + ObservedModel.observers << ObservedModel::Observer + ObservedModel::Observer.should_receive(:instance) + ObservedModel.instantiate_observers + end + + it "should pass observers to subclasses" do + FooObserver.instance + bar = Class.new(Foo) + bar.count_observers.should == 1 + end + end + + describe Observer do + before do + ObservedModel.observers = :foo_observer + FooObserver.models = nil + end + + it "guesses implicit observable model name" do + FooObserver.observed_class_name.should == 'Foo' + end + + it "tracks implicit observable models" do + instance = FooObserver.new + instance.send(:observed_classes).should include(Foo) + instance.send(:observed_classes).should_not include(ObservedModel) + end + + it "tracks explicit observed model class" do + FooObserver.new.send(:observed_classes).should_not include(ObservedModel) + FooObserver.observe ObservedModel + instance = FooObserver.new + instance.send(:observed_classes).should include(ObservedModel) + end + + it "tracks explicit observed model as string" do + FooObserver.new.send(:observed_classes).should_not include(ObservedModel) + FooObserver.observe 'observed_model' + instance = FooObserver.new + instance.send(:observed_classes).should include(ObservedModel) + end + + it "tracks explicit observed model as symbol" do + FooObserver.new.send(:observed_classes).should_not include(ObservedModel) + FooObserver.observe :observed_model + instance = FooObserver.new + instance.send(:observed_classes).should include(ObservedModel) + end + + it "calls existing observer event" do + foo = Foo.new + FooObserver.instance.stub = stub!(:stub) + FooObserver.instance.stub.should_receive(:event_with).with(foo) + Foo.send(:changed) + Foo.send(:notify_observers, :on_spec, foo) + end + + it "skips nonexistent observer event" do + foo = Foo.new + Foo.send(:changed) + Foo.send(:notify_observers, :whatever, foo) + end + end +end \ No newline at end of file diff --git a/activemodel/spec/spec_helper.rb b/activemodel/spec/spec_helper.rb new file mode 100644 index 0000000000..004fdfca07 --- /dev/null +++ b/activemodel/spec/spec_helper.rb @@ -0,0 +1,17 @@ +ENV['LOG_NAME'] = 'spec' +$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'vendor', 'rspec', 'lib') +$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib') +require 'active_model' +begin + require 'spec' +rescue LoadError + require 'rubygems' + require 'spec' +end + +begin + require 'ruby-debug' + Debugger.start +rescue LoadError + # you do not know the ways of ruby-debug yet, what a shame +end \ No newline at end of file -- cgit v1.2.3