Class: Pbw::ItemConversion

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Timestamps
Defined in:
app/models/pbw/item_conversion.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.convert!(token, item, quantity = 1) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'app/models/pbw/item_conversion.rb', line 69

def self.convert!(token, item, quantity=1)
  return false unless token && item && quantity && token.can_convert?(item)
  conversion = where(item: item).first
  return false unless conversion
  containers = conversion.token_from_items_containers(token)
  containers.keys.each do |from_item|
    return false unless containers[from_item] && containers[from_item].quantity >= (conversion.from_items[from_item] * quantity)
  end
  containers.keys.each do |from_item|
    containers[from_item].remove_item(conversion.from_items[from_item] * quantity)
    containers[from_item].save
  end
  unless token.add_item!(item,quantity)
    containers.keys.each do |from_item|
    containers[from_item].add_item(conversion.from_items[from_item] * quantity)
    containers[from_item].save
  end
  end
end

.creatable_by?(user, subject) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'app/models/pbw/item_conversion.rb', line 12

def self.creatable_by?(user, subject)
    user.admin?
end

.deletable_by?(user, subject) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/models/pbw/item_conversion.rb', line 20

def self.deletable_by?(user, subject)
    user.admin?
end

.editable_by?(user, subject) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'app/models/pbw/item_conversion.rb', line 16

def self.editable_by?(user, subject)
    user.admin?
end

.max_convert(token, item) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'app/models/pbw/item_conversion.rb', line 53

def self.max_convert(token, item)
  return 0 unless token && item && token.can_convert?(item)
  conversion = where(item: item).first
  return 0 unless conversion
  containers = conversion.token_from_items_containers(token)
  quantity = 0
  containers.keys.each do |from_item|
    unless containers[from_item]
      quantity = 0 
    else
      quantity = containers[from_item].quantity / conversion.from_items[from_item]
    end
  end
  quantity
end

.viewable_by?(user, subject) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'app/models/pbw/item_conversion.rb', line 8

def self.viewable_by?(user, subject)
    true
end

Instance Method Details

#from_itemsObject



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/models/pbw/item_conversion.rb', line 31

def from_items
  return @items if defined?(@items) && !changed?
  return {} unless self.from && !self.from.empty?
  @items = {}
  self.from.keys.each do |id| 
    begin
      @items[Item.find(id)] = self.from[id]
    rescue Exception => e
      logger.error e
    end
  end
  @items
end

#set_from_item(item, quantity) ⇒ Object



24
25
26
27
28
29
# File 'app/models/pbw/item_conversion.rb', line 24

def set_from_item(item, quantity)
  return false unless item && quantity
  self.from ||= {}
  self.from[item._id] = quantity
  self
end

#token_from_items_containers(token) ⇒ Object



45
46
47
48
49
50
51
# File 'app/models/pbw/item_conversion.rb', line 45

def token_from_items_containers(token)
  containers = {}
  from_items.keys.each do |from_item|
    containers[from_item] = ItemContainer.find_for_token(token,from_item)
  end
  containers
end