impress/app/models/closet_hanger.rb

59 lines
1.5 KiB
Ruby
Raw Normal View History

2011-07-12 16:37:16 -07:00
class ClosetHanger < ActiveRecord::Base
belongs_to :item
belongs_to :list, :class_name => 'ClosetList'
2011-07-12 16:37:16 -07:00
belongs_to :user
2011-07-29 07:52:04 -07:00
attr_accessible :list_id, :owned, :quantity
2011-07-14 09:50:24 -07:00
validates :item_id, :uniqueness => {:scope => [:user_id, :owned]}
2011-07-14 09:50:24 -07:00
validates :quantity, :numericality => {:greater_than => 0}
validates_presence_of :item, :user
validate :list_belongs_to_user
2011-07-12 16:37:16 -07:00
scope :alphabetical_by_item_name, joins(:item).order(Item.arel_table[:name])
2011-07-30 21:19:28 -07:00
scope :newest, order(arel_table[:created_at].desc)
scope :owned_before_wanted, order(arel_table[:owned].desc)
2011-07-29 07:52:04 -07:00
scope :unlisted, where(:list_id => nil)
2011-07-30 21:19:28 -07:00
{:owned => true, :wanted => false}.each do |name, owned|
scope "#{name}_trading", joins(:user).includes(:list).
where(:owned => owned).
where((
User.arel_table["#{name}_closet_hangers_visibility"].gteq(ClosetVisibility[:trading].id)
).or(
ClosetList.arel_table[:visibility].gteq(ClosetVisibility[:trading].id)
))
end
before_validation :set_owned_by_list
def verb(subject=:someone)
2011-07-22 14:55:05 -07:00
self.class.verb(subject, owned?)
end
def self.verb(subject, owned, positive=true)
2011-07-22 14:55:05 -07:00
base = (owned) ? 'own' : 'want'
base << 's' if positive && subject != :you && subject != :i
base
end
protected
def list_belongs_to_user
if list_id?
if list
errors.add(:list_id, "must belong to you") unless list.user_id == user_id
else
errors.add(:list, "must exist")
end
end
end
def set_owned_by_list
self.owned = list.hangers_owned if list
true
end
2011-07-12 16:37:16 -07:00
end