Sha256: 9f4b77d24bd1ef66d24f9f4f2fbaff20f61e5521a06d0c5e8ce731b3d0172bfc

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 KB

Contents

require 'spec_helper'


class PersonObserver < MassiveRecord::ORM::Observer
  [:after_create].each do |observer|
    define_method observer do |person|
      send("calls_to_#{observer}") << person
    end

    define_method "calls_to_#{observer}" do
      instance_variable_get("@calls_to_#{observer}") or
      instance_variable_set("@calls_to_#{observer}", [])
    end
  end
end

class AuditObserver < MassiveRecord::ORM::Observer
  observe :test_class
  
  def changes_log
    @changes_log ||= []
  end

  def after_save(record)
    changes_log << record.changes
  end
end


describe "Observers" do
  include SetUpHbaseConnectionBeforeAll
  include SetTableNamesToTestTable

  context "when having an implicit target" do
    subject { PersonObserver.instance }
    before { subject } # Tap to initialize observer

    it "calls after_save on observer" do
      person_1 = Person.create! name: "Thorbjorn Hermansen", age: 30 
      person_2 = Person.create! name: "Thorbjorn Hermansen", age: 30 
      
      subject.calls_to_after_create.should eq [person_1, person_2]
    end
  end

  context "having an explicit target" do
    subject { AuditObserver.instance }
    before { subject } # Tap to initialize observer

    it "logs changes to the test class" do
      test = TestClass.create! :foo => 'bar'
      subject.changes_log.clear

      test.foo = 'barbar'
      changes = test.changes
      test.save!

      subject.changes_log.should eq [changes]
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
massive_record-0.2.2 spec/orm/cases/observing_spec.rb
massive_record-0.2.2.rc2 spec/orm/cases/observing_spec.rb
massive_record-0.2.2.rc1 spec/orm/cases/observing_spec.rb