[Nitro] [ANN] Nitro + Og 0.22.0

John Lloyd-Jones john.lloydjones at gmail.com
Mon Aug 8 01:17:34 EDT 2005


See the class Address. Comment out tthe two personal_customer_oid,
personal_customer_oid= methods and the code fails.  This is code was
updated to use Og 0.22. Tell me if I am using it incorrectly.


On 8/7/05, George Moschovitis <george.moschovitis at gmail.com> wrote:
> Please. give me some source code that triggers this behaviour.
> 
===== customer.rb =====
require 'og'

module Created
    prop_accessor :created, Date
    pre "@created ||= Date.today", :on => :og_insert
end

module Status
    property :status, String
    pre "@status ||= 'entered'", :on => :og_insert
end

module Customer
      include Created
      include Status
    property :customer_number, String, :unique => true
    property :creditLimit, String
end


module CRM

#   class Party; end
   
   class Phone
      property :type, String
      property :countryCode, String
      property :areaCode, String
      property :number, String
      property :extension, String
      property :comments, String
   end
   
   class ContactInfo
      property :email, String
      property :url, String
      property :phone, Phone
      property :fax, Phone
     
   end
   
   class DateRange
      property :from_dt, Date
      property :to_dt, Date
   end

   class ExternalId; end
   class ExtraInfo
      property :name, String
      property :type, String
      property :value, String
      property :externalId, ExternalId

      belongs_to :externalId, ExternalId
   end
   
   class ExternalId
      property :type, String
      property :value, String
      property :status, String
      property :validity, DateRange
      property :extraInfo, FixedNum
      
#      belongs_to Party, :field => :extid
      has_many :extraInfos, ExtraInfo
   end

   class Party; end
   class Address
      property :street1, String
      property :street2, String
      property :city, String
      property :state, String
      property :postcode, String
      property :name, String
#      property :party, Party
      belongs_to Party, :field => :party
      
      # Need to put this in by hand otherwise I get something like this:
      #(eval):23:in `add_address': undefined method `personal_customer_oid='
      # for #<Address:0xb7c5c46c> (NoMethodError)
      #    from og-test.rb:53:in `addAddress'
      #    from og-test.rb:124

      def personal_customer_oid
        self.party_oid
      end
      def personal_customer_oid=(oid)
        self.party_oid = oid
      end
   end
   
   class Party
#      property :address, Fixnum
      property :contactInfo, ContactInfo
      property :externalIds, ExternalId
      
      has_many Address, :foreign_field => :party
#      has_many ExternalId, :foreign_field => extid
 
      def initialize
         puts "Party: initialize..."
      end
      
    
      def addAddress( a )
         puts "addAddress: @address = #{@address}"
         add_address( a )
         @address += 1
      end
   end

   class Person < Party
      property :firstName, String
      property :middleName, String
      property :lastName, String
      property :knownBy, String
      property :mobile, Phone
   end

  class Organization < Party
      property :name, String
  end
  
  class CorporateCustomer  < Organization; end
  class Department < Organization
     belongs_to :corporateCustomer, CorporateCustomer
  end
  
  class PersonalCustomer < Person
     include Customer

     def initialize (number, first, middle, last)
        super()
        @customer_number = number
        @firstName = first
        @middleName = middle
        @lastName = last
     end

  end
  
  class CorporateCustomer < Organization
     include Customer
     
     property :departments, Department
     property :contact, Person
     property :parent, Organization
     
     has_many :departments, Department
  end
     
  class EnterpriseCustomer < Organization
     include Customer

     property :companies, CorporateCustomer
     
     has_many :companies, CorporateCustomer 
  end
end

==== tc_customer.rb =====
$:.unshift File.join(File.dirname(__FILE__), 'lib')

$DBG = true

require 'test/unit'
require 'og'
require 'customer.rb'


class TC_Customer < Test::Unit::TestCase # :nodoc: all
  include Og

     puts "Og Version #{Og::Version}"
     
     @og = Og.setup(
        :destroy => true,
        :store => :sqlite,
        :name => 'tc_customer'
     )  
  
  def setup

     puts "create a (fictious) primary address"
     @a_primary = CRM::Address.new
     @a_primary.street1 = '1370 Dunlap Ave'
     @a_primary.street2 = 'Apt # 786'
     @a_primary.city = 'Phoenix'
     @a_primary.state = 'AZ'
     @a_primary.name = 'primary'
        
     puts "create a (fictious) mailing address"
     @a_mailing = CRM::Address.new
     @a_mailing.street1 = '1290 Ray Ave'
     @a_mailing.street2 = 'P.O Box 15'
     @a_mailing.city = 'Chandler'
     @a_mailing.state = 'AZ'
     @a_mailing.name = 'mailing'
  
  end
  
  def teardown
  end
  
  def test_store_and_retrieve
    puts "create personal customer"
    p1 = CRM::PersonalCustomer.new('1001', 'John', '', 'Lloyd-Jones')
    puts "save the personal customer"
    p1.save

    p2 = CRM::PersonalCustomer.one :condition => 'customer_number=1001'
    assert_equal p1.firstName, p2.firstName, "Expect first name to be same"
    assert_equal p1.lastName, p2.lastName, "Expect last name to be same"
  end

  def test_address
    puts "create personal customer"
    p1 = CRM::PersonalCustomer.new('1002', 'Kalpana', '', 'Lloyd-Jones')
    puts "save the personal customer"
    p1.save

    p2 = CRM::PersonalCustomer.one :condition => 'customer_number=1002'
    p2.addresses << @a_primary
    p2.save

    p3 = CRM::PersonalCustomer.one :condition => 'customer_number=1002'
    p3.addresses.each { |a|
       puts "#{a.street1} #{a.city}, #{a.state}"
    }
    # assert_equal( p2.address, 1, "p2.address should be 1 (first address)" )
    assert_equal( @a_primary.party_oid, p1.oid, "@a_primary should
belong to p1")
  end

  def test_multiple_addresses
    p2 = CRM::PersonalCustomer.one :condition => 'customer_number=1002'

    puts "add mailing address"
    p2.addresses << @a_mailing
    p2.save

    p3 = CRM::PersonalCustomer.one :condition => 'customer_number=1002'
    puts "p3 party id is #{p3.oid}"
    p3.addresses.each do |a|
       puts "id #{a.oid}: #{a.street1} #{a.city}, #{a.state}"
       a1 = case a.name
               when 'primary' then @a_primary
               when 'mailing' then @a_mailing
            end
       assert_equal(a1.street1, a.street1, "street1 should match")
       assert_equal(a1.city, a.city, "city should match")
       assert_equal(a1.state, a.state, "state should match")
    end
  end

end




More information about the Nitro-general mailing list