I’m pleased to report that my work with Regdel on Rails is coming along steadily. While I can’t say I was an absolute fan of ActiveRecord in the past, I am really digging it now.
Here’s a sneak peak at the account model:
1 class Account < ActiveRecord::Base
2 include AccountMethods
3
4 ACCOUNT_TYPES = ["Asset", "Liability", "Equity", "Revenue", "Expense"]
5
6 serialize :attrs
7
8 validates :name,
9 :presence => true,
10 :uniqueness => true
11
12 validates :type,
13 :presence => true
14
15 has_many :entries, :through => :entry_amounts
16 has_many :entry_amounts
17
18 acts_as_nested_set
19 state_machine :initial => :active do
20 end
21
22 def destroy
23 raise ActiveRecord::IndestructibleRecord
24 end
25
26 def as_base
27 self.becomes(Account)
28 end
29
30 def balance
31 entry_amounts.sum(:amount_in_cents)
32 end
33 end
I’d rather not depend on Rails too much though, instead I plan to abstract out some of the functionality I’m aiming for into gems or raw code. For instance, instead of leveraging the Rails callback API, I plan to instead use the state_machine gem as much as possible.
Take an invoice, for example. It can have the following states:
- new
- issued
- mailed
- paid
- partially paid
- overdue
The transitioning of the invoice from one state to another to trigger events, just like Rails callback events. Why? I think its a cleaner and more precise API, and hopefully the gem maintainer would manage the interface to Rails as Ruby on Rails version 3 evolves - so I don’t have to!
Not that gems are completely stable, though, or without bugs / unexpected behavior…
UPDATE: I have merged the rails3 branch into the master branch, after tagging the sinatra spot!
Recent Comments