summaryrefslogtreecommitdiff
path: root/app/models/character_item.rb
diff options
context:
space:
mode:
authorDavid Gay <david@davidgay.org>2021-05-02 22:38:32 -0400
committerDavid Gay <david@davidgay.org>2021-05-02 22:38:32 -0400
commit1b2de86007508ba86c6c9cb99fbdcac178045131 (patch)
treea007fc55acd2b54b5db108e3580928a9a006d71e /app/models/character_item.rb
parent1d5083ddf7f2b285e63bb8019d38199e862fa1d8 (diff)
Character items and inventory, with ability to add and remove items
Diffstat (limited to 'app/models/character_item.rb')
-rw-r--r--app/models/character_item.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/character_item.rb b/app/models/character_item.rb
new file mode 100644
index 0000000..b54f799
--- /dev/null
+++ b/app/models/character_item.rb
@@ -0,0 +1,25 @@
+class CharacterItem < ApplicationRecord
+ belongs_to :character
+ belongs_to :item
+ validates :quantity, presence: true
+
+ after_initialize do
+ if self.new_record?
+ self.quantity ||= 0
+ end
+ end
+
+ after_save :destroy_if_zero_quantity
+
+ scope :ordered_by_item_name, -> { includes(:item).order("items.name") }
+
+ private
+ def destroy_if_zero_quantity
+ if self.quantity == 0
+ destroy
+ elsif self.quantity < 0
+ # TODO: Can improve this (at the least, with reporting, later).
+ raise ItemQuantityError
+ end
+ end
+end