pbw 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/app/models/pbw/area.rb +85 -2
- data/app/models/pbw/capability.rb +28 -0
- data/app/models/pbw/changeset.rb +22 -0
- data/app/models/pbw/constraint.rb +23 -0
- data/app/models/pbw/item.rb +36 -0
- data/app/models/pbw/item_container.rb +82 -2
- data/app/models/pbw/item_conversion.rb +66 -2
- data/app/models/pbw/process.rb +41 -2
- data/app/models/pbw/rule.rb +1 -2
- data/app/models/pbw/token.rb +134 -2
- data/app/models/pbw/trigger.rb +9 -0
- data/app/models/pbw/user.rb +1 -1
- data/config/initializers/devise.rb +0 -2
- data/config/routes.rb +10 -7
- data/lib/generators/pbw/area/USAGE +5 -3
- data/lib/generators/pbw/area/area_generator.rb +5 -0
- data/lib/generators/pbw/area/templates/model.coffee +2 -2
- data/lib/generators/pbw/install/USAGE +7 -0
- data/lib/generators/pbw/item/USAGE +5 -3
- data/lib/generators/pbw/item/item_generator.rb +9 -2
- data/lib/generators/pbw/item/templates/index.erb +6 -0
- data/lib/generators/pbw/item/templates/model.coffee +14 -0
- data/lib/generators/pbw/item/templates/router.coffee +31 -0
- data/lib/generators/pbw/item/templates/templates/edit.jst +21 -0
- data/lib/generators/pbw/item/templates/templates/index.jst +17 -0
- data/lib/generators/pbw/item/templates/templates/model.jst +8 -0
- data/lib/generators/pbw/item/templates/templates/new.jst +21 -0
- data/lib/generators/pbw/item/templates/templates/show.jst +14 -0
- data/lib/generators/pbw/item/templates/views/edit_view.coffee +24 -0
- data/lib/generators/pbw/item/templates/views/index_view.coffee +20 -0
- data/lib/generators/pbw/item/templates/views/model_view.coffee +19 -0
- data/lib/generators/pbw/item/templates/views/new_view.coffee +37 -0
- data/lib/generators/pbw/item/templates/views/show_view.coffee +8 -0
- data/lib/generators/pbw/rules/command/command_generator.rb +3 -0
- data/lib/generators/pbw/scaffold_generator.rb +2 -1
- data/lib/generators/pbw/token/USAGE +5 -3
- data/lib/generators/pbw/token/templates/index.erb +6 -0
- data/lib/generators/pbw/token/templates/model.coffee +14 -0
- data/lib/generators/pbw/token/templates/router.coffee +31 -0
- data/lib/generators/pbw/token/templates/templates/edit.jst +21 -0
- data/lib/generators/pbw/token/templates/templates/index.jst +17 -0
- data/lib/generators/pbw/token/templates/templates/model.jst +8 -0
- data/lib/generators/pbw/token/templates/templates/new.jst +21 -0
- data/lib/generators/pbw/token/templates/templates/show.jst +14 -0
- data/lib/generators/pbw/token/templates/views/edit_view.coffee +24 -0
- data/lib/generators/pbw/token/templates/views/index_view.coffee +20 -0
- data/lib/generators/pbw/token/templates/views/model_view.coffee +19 -0
- data/lib/generators/pbw/token/templates/views/new_view.coffee +37 -0
- data/lib/generators/pbw/token/templates/views/show_view.coffee +8 -0
- data/lib/generators/pbw/token/token_generator.rb +8 -1
- data/lib/pbw/version.rb +1 -1
- metadata +31 -5
- data/app/models/pbw/user_token.rb +0 -16
- data/lib/generators/pbw/command/command_generator.rb +0 -3
- /data/lib/generators/pbw/{command → rules/command}/USAGE +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTU1NGI1MTU5Nzk3MjU0OGRkNWM0NGYyZWMwYzU0ZGM1NWFkYWYxNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjMzOTU2YTNmMDhkOGMzYjk1NjBmMzEyMGZmMzNmZmQ3ODkxYThlMQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2ZhZmExNTBkMTVlMTc4NDVlNjYzYjA3MDY4MzU2YmU0YTU3OGI0Y2ExMTcw
|
10
|
+
OGZkN2M4YjljOWZjMjFiNDM1OWI0MjZiNWY4ZTM0NTZmMGZlMDMyNTg3NGY5
|
11
|
+
NmNkNGNmZjM2ZDAyN2RhYThkNDMyYzNhYjYzZDM5M2E2YjAxZjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmE3NjI0YjUwOGUxNTMxYjI5MzM2NzQ0MTZjODhmZjA3MzRkYjkyMjZkOWVh
|
14
|
+
Y2VhYjUzZjU3Y2ZlZTYyN2QyMTk4MjMyMmUwYzU4MTQyZDk5ZDQyY2M3OGY3
|
15
|
+
MDI3MzJjMjhhNDQxMGY5ZjI5NTkwZTc3MTViMjU4ODRlNTQ4YWI=
|
data/app/models/pbw/area.rb
CHANGED
@@ -6,12 +6,95 @@ module Pbw
|
|
6
6
|
validates_presence_of :name
|
7
7
|
validates_uniqueness_of :name
|
8
8
|
|
9
|
-
|
9
|
+
has_many :tokens
|
10
10
|
has_many :item_containers
|
11
11
|
has_and_belongs_to_many :constraints
|
12
|
-
has_and_belongs_to_many :processes
|
13
12
|
has_and_belongs_to_many :triggers
|
14
13
|
|
15
14
|
attr_accessible :name
|
15
|
+
|
16
|
+
def before_token_enters(token)
|
17
|
+
# stub method
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_token_enters(token)
|
22
|
+
# stub method
|
23
|
+
end
|
24
|
+
|
25
|
+
def before_token_leaves(token)
|
26
|
+
# stub method
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def after_token_leaves(token)
|
31
|
+
# stub method
|
32
|
+
end
|
33
|
+
|
34
|
+
def before_add_item(item, quantity)
|
35
|
+
# stub method
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
def after_add_item(item, quantity)
|
40
|
+
# stub method
|
41
|
+
end
|
42
|
+
|
43
|
+
def before_remove_item(item, quantity)
|
44
|
+
# stub method
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
def after_remove_item(item, quantity)
|
49
|
+
# stub method
|
50
|
+
end
|
51
|
+
|
52
|
+
def count_item(item)
|
53
|
+
container = ItemContainer.find_for_area(self)
|
54
|
+
container ? container.quantity : 0
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_item!(item, quantity)
|
58
|
+
return false unless quantity && quantity.responds_to?(:abs)
|
59
|
+
return remove_item!(item, quantity.abs) if quantity < 0
|
60
|
+
return false unless item && before_add_item(item,quantity)
|
61
|
+
ItemContainer.find_or_create_for_area(self, item, quantity)
|
62
|
+
end
|
63
|
+
|
64
|
+
def remove_item!(item, quantity)
|
65
|
+
return false unless quantity && quantity.responds_to?(:abs)
|
66
|
+
return add_item!(item, quantity.abs) if quantity < 0
|
67
|
+
return false unless item && before_remove_item(item,quantity)
|
68
|
+
ItemContainer.find_or_create_for_area(self, item, (0 - quantity))
|
69
|
+
end
|
70
|
+
|
71
|
+
def has_constraint?(constraint)
|
72
|
+
constraint = Constraint.find(constraint) if constraint.is_a?(String)
|
73
|
+
self.constraints.include?(constraint)
|
74
|
+
end
|
75
|
+
|
76
|
+
def add_constraint!(constraint)
|
77
|
+
return false unless constraint && constraint.before_add(self)
|
78
|
+
self.constraints << constraint
|
79
|
+
save
|
80
|
+
constraint.after_add(self)
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
def remove_constraint!(constraint)
|
85
|
+
return false unless constraint && constraint.before_remove(self)
|
86
|
+
self.constraints.delete_if{|c| c.name == constraint.name}
|
87
|
+
save
|
88
|
+
constraint.after_remove(self)
|
89
|
+
self
|
90
|
+
end
|
91
|
+
|
92
|
+
def check_constraints_and_capabilities(&changeset)
|
93
|
+
self.constraints.any?{|c| !c.before_process(self, changeset)}
|
94
|
+
end
|
95
|
+
|
96
|
+
def check_triggers!
|
97
|
+
self.triggers.each{|t| t.check! }
|
98
|
+
end
|
16
99
|
end
|
17
100
|
end
|
@@ -1,5 +1,33 @@
|
|
1
1
|
module Pbw
|
2
2
|
class Capability < Rule
|
3
3
|
has_and_belongs_to_many :tokens
|
4
|
+
|
5
|
+
def before_process(token, &changeset)
|
6
|
+
# stub method
|
7
|
+
true
|
8
|
+
end
|
9
|
+
|
10
|
+
def before_add(token)
|
11
|
+
# stub method
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def after_add(token)
|
16
|
+
# stub method
|
17
|
+
end
|
18
|
+
|
19
|
+
def before_remove(token)
|
20
|
+
# stub method
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def after_remove(token)
|
25
|
+
# stub method
|
26
|
+
end
|
27
|
+
|
28
|
+
def can_convert?(item)
|
29
|
+
# stub method
|
30
|
+
false
|
31
|
+
end
|
4
32
|
end
|
5
33
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pbw
|
2
|
+
class Changeset
|
3
|
+
def initialize(changes=nil)
|
4
|
+
@changes = changes || {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def add_change(model,field,value)
|
8
|
+
fields = @changes[model] || {}
|
9
|
+
fields[field] = value
|
10
|
+
@changes[model] = value
|
11
|
+
self
|
12
|
+
end
|
13
|
+
|
14
|
+
def models_changed
|
15
|
+
@changes.keys
|
16
|
+
end
|
17
|
+
|
18
|
+
def changes_for_model(model)
|
19
|
+
@changes[model]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,5 +2,28 @@ module Pbw
|
|
2
2
|
class Constraint < Rule
|
3
3
|
has_and_belongs_to_many :tokens
|
4
4
|
has_and_belongs_to_many :areas
|
5
|
+
|
6
|
+
def before_process(token_or_area, &changeset)
|
7
|
+
# stub method
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def before_add(token_or_area)
|
12
|
+
# stub method
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_add(token_or_area)
|
17
|
+
# stub method
|
18
|
+
end
|
19
|
+
|
20
|
+
def before_remove(token_or_area)
|
21
|
+
# stub method
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def after_remove(token_or_area)
|
26
|
+
# stub method
|
27
|
+
end
|
5
28
|
end
|
6
29
|
end
|
data/app/models/pbw/item.rb
CHANGED
@@ -11,5 +11,41 @@ module Pbw
|
|
11
11
|
has_many :item_conversions
|
12
12
|
|
13
13
|
attr_accessible :name
|
14
|
+
|
15
|
+
def before_add(container, quantity)
|
16
|
+
# stub method
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def after_add(container, quantity)
|
21
|
+
# stub method
|
22
|
+
end
|
23
|
+
|
24
|
+
def before_remove(container, quantity)
|
25
|
+
# stub method
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
def after_remove(container, quantity)
|
30
|
+
# stub method
|
31
|
+
end
|
32
|
+
|
33
|
+
def before_transfer(from, to, quantity)
|
34
|
+
# stub method
|
35
|
+
true
|
36
|
+
end
|
37
|
+
|
38
|
+
def after_transfer(from, to, quantity)
|
39
|
+
# stub method
|
40
|
+
end
|
41
|
+
|
42
|
+
def before_conversion(to, quantity)
|
43
|
+
# stub method
|
44
|
+
true
|
45
|
+
end
|
46
|
+
|
47
|
+
def after_conversion(to, quantity)
|
48
|
+
# stub method
|
49
|
+
end
|
14
50
|
end
|
15
51
|
end
|
@@ -3,10 +3,90 @@ module Pbw
|
|
3
3
|
include ::Mongoid::Document
|
4
4
|
include ::Mongoid::Timestamps
|
5
5
|
belongs_to :item
|
6
|
-
field :quantity, :type => Float
|
6
|
+
field :quantity, :type => Float, :default => 0
|
7
|
+
validates_numericality_of :quantity, :greater_than_or_equal_to => 0
|
7
8
|
|
8
|
-
belongs_to :
|
9
|
+
belongs_to :token
|
9
10
|
belongs_to :area
|
10
11
|
belongs_to :user
|
12
|
+
|
13
|
+
attr_accessible :item, :token, :area, :user, :quantity
|
14
|
+
|
15
|
+
def self.find_or_create_for_token(token, item, quantity_to_add)
|
16
|
+
container = where(token: token, item: item).first
|
17
|
+
container = new(token: token, item: item) unless container
|
18
|
+
container.add_item(quantity_to_add) && container.save ? container : false
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.find_for_token(token, item)
|
22
|
+
where(token: token, item: item).first
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.find_or_create_for_area(area, item, quantity_to_add)
|
26
|
+
container = where(area: area, item: item).first
|
27
|
+
container = new(area: area, item: item) unless container
|
28
|
+
container.add_item(quantity_to_add) && container.save ? container : false
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.find_for_area(area, item)
|
32
|
+
where(area: area, item: item).first
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.find_or_create_for_user(user, item, quantity_to_add)
|
36
|
+
container = where(user: user, item: item).first
|
37
|
+
container = new(user: user, item: item) unless container
|
38
|
+
container.add_item(quantity_to_add) && container.save ? container : false
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.find_for_user(user, item)
|
42
|
+
where(user: user, item: item).first
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_item(quantity)
|
46
|
+
return remove_item!(quantity.abs) if quantity < 0
|
47
|
+
return false unless self.item.before_add(self,quantity)
|
48
|
+
self.quantity = self.quantity + quantity
|
49
|
+
self.item.after_add(self,quantity)
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
def remove_item(quantity)
|
54
|
+
return add_item!(quantity.abs) if quantity < 0
|
55
|
+
return false unless self.item.before_remove(self,quantity)
|
56
|
+
self.quantity = self.quantity - quantity
|
57
|
+
self.item.after_remove(self,quantity)
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def transfer_item!(to, quantity)
|
62
|
+
return false unless to && quantity
|
63
|
+
return false unless self.item.before_transfer(belongs_to, to, quantity)
|
64
|
+
remove_item(quantity)
|
65
|
+
return false unless save
|
66
|
+
if to.class.ancestors.include?(Area)
|
67
|
+
container = find_or_create_for_area(to, self.item, quantity)
|
68
|
+
elsif to.class.ancestors.include?(Token)
|
69
|
+
container = find_or_create_for_token(to, self.item, quantity)
|
70
|
+
elsif to.class.ancestors.include?(User)
|
71
|
+
container = find_or_create_for_user(to, self.item, quantity)
|
72
|
+
else
|
73
|
+
return false
|
74
|
+
end
|
75
|
+
unless container
|
76
|
+
add_item(quantity) && save
|
77
|
+
false
|
78
|
+
else
|
79
|
+
self.item.after_transfer(belongs_to, to, quantity)
|
80
|
+
container
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def belongs_to
|
85
|
+
self.token || self.area || self.user
|
86
|
+
end
|
87
|
+
|
88
|
+
def empty?
|
89
|
+
self.quantity == 0
|
90
|
+
end
|
11
91
|
end
|
12
92
|
end
|
@@ -3,7 +3,71 @@ module Pbw
|
|
3
3
|
include ::Mongoid::Document
|
4
4
|
include ::Mongoid::Timestamps
|
5
5
|
belongs_to :item
|
6
|
-
field :
|
7
|
-
|
6
|
+
field :from, :type => Hash
|
7
|
+
|
8
|
+
def set_from_item(item, quantity)
|
9
|
+
return false unless item && quantity
|
10
|
+
self.from ||= {}
|
11
|
+
self.from[item._id] = quantity
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def from_items
|
16
|
+
return @items if defined?(@items) && !changed?
|
17
|
+
return {} unless self.from && !self.from.empty?
|
18
|
+
@items = {}
|
19
|
+
self.from.keys.each do |id|
|
20
|
+
begin
|
21
|
+
@items[Item.find(id)] = self.from[id]
|
22
|
+
rescue Exception => e
|
23
|
+
logger.error e
|
24
|
+
end
|
25
|
+
end
|
26
|
+
@items
|
27
|
+
end
|
28
|
+
|
29
|
+
def token_from_items_containers(token)
|
30
|
+
containers = {}
|
31
|
+
from_items.keys.each do |from_item|
|
32
|
+
containers[from_item] = ItemContainer.find_for_token(token,from_item)
|
33
|
+
end
|
34
|
+
containers
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.max_convert(token, item)
|
38
|
+
return 0 unless token && item && token.can_convert?(item)
|
39
|
+
conversion = where(item: item).first
|
40
|
+
return 0 unless conversion
|
41
|
+
containers = conversion.token_from_items_containers(token)
|
42
|
+
quantity = 0
|
43
|
+
containers.keys.each do |from_item|
|
44
|
+
unless containers[from_item]
|
45
|
+
quantity = 0
|
46
|
+
else
|
47
|
+
quantity = containers[from_item].quantity / conversion.from_items[from_item]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
quantity
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.convert!(token, item, quantity=1)
|
54
|
+
return false unless token && item && quantity && token.can_convert?(item)
|
55
|
+
conversion = where(item: item).first
|
56
|
+
return false unless conversion
|
57
|
+
containers = conversion.token_from_items_containers(token)
|
58
|
+
containers.keys.each do |from_item|
|
59
|
+
return false unless containers[from_item] && containers[from_item].quantity >= (conversion.from_items[from_item] * quantity)
|
60
|
+
end
|
61
|
+
containers.keys.each do |from_item|
|
62
|
+
containers[from_item].remove_item(conversion.from_items[from_item] * quantity)
|
63
|
+
containers[from_item].save
|
64
|
+
end
|
65
|
+
unless token.add_item!(item,quantity)
|
66
|
+
containers.keys.each do |from_item|
|
67
|
+
containers[from_item].add_item(conversion.from_items[from_item] * quantity)
|
68
|
+
containers[from_item].save
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
8
72
|
end
|
9
73
|
end
|
data/app/models/pbw/process.rb
CHANGED
@@ -1,10 +1,49 @@
|
|
1
1
|
module Pbw
|
2
2
|
class Process < Rule
|
3
|
-
has_and_belongs_to_many :tokens
|
4
|
-
has_and_belongs_to_many :areas
|
5
3
|
has_many :triggers
|
6
4
|
|
7
5
|
field :run_tick, :type => Boolean
|
8
6
|
field :run_update, :type => Boolean
|
7
|
+
|
8
|
+
def before_run(token_or_area)
|
9
|
+
# stub method
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def after_triggers(token_or_area)
|
14
|
+
# stub method
|
15
|
+
end
|
16
|
+
|
17
|
+
def changeset(token_or_area)
|
18
|
+
# stub method
|
19
|
+
raise "Not implemented"
|
20
|
+
end
|
21
|
+
|
22
|
+
def execute_changeset!(&changeset)
|
23
|
+
changeset.models_changed.each do |model|
|
24
|
+
changes = changeset.changes_for_model(model)
|
25
|
+
changes.keys.each do |field|
|
26
|
+
model.send("#{field}=".to_sym,changes[field])
|
27
|
+
end
|
28
|
+
return false unless model.save
|
29
|
+
end
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
def run!(token_or_area)
|
34
|
+
return false unless before_run(token_or_area)
|
35
|
+
changes = changeset(token_or_area)
|
36
|
+
return false unless changes
|
37
|
+
raise "Invalid object returned from changeset method in #{self.class.name}" unless changes.is_a?(Changeset)
|
38
|
+
return false unless token_or_area.check_constraints_and_capabilities(changes)
|
39
|
+
execute_changeset!(changes)
|
40
|
+
token_or_area.check_triggers!
|
41
|
+
after_triggers(token_or_area)
|
42
|
+
end
|
43
|
+
|
44
|
+
def schedule!(token_or_area)
|
45
|
+
# TODO
|
46
|
+
raise "Not implemented"
|
47
|
+
end
|
9
48
|
end
|
10
49
|
end
|
data/app/models/pbw/rule.rb
CHANGED
data/app/models/pbw/token.rb
CHANGED
@@ -5,12 +5,144 @@ module Pbw
|
|
5
5
|
field :name, type: String
|
6
6
|
validates_presence_of :name
|
7
7
|
|
8
|
+
belongs_to :area
|
8
9
|
has_and_belongs_to_many :capabilities
|
9
10
|
has_and_belongs_to_many :constraints
|
10
|
-
has_and_belongs_to_many :processes
|
11
11
|
has_and_belongs_to_many :triggers
|
12
|
-
|
12
|
+
has_and_belongs_to_many :users
|
13
|
+
has_many :item_containers
|
13
14
|
|
14
15
|
attr_accessible :name
|
16
|
+
|
17
|
+
def before_ownership(user)
|
18
|
+
# stub method
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
def after_ownership(user)
|
23
|
+
# stub method
|
24
|
+
end
|
25
|
+
|
26
|
+
def before_move(area)
|
27
|
+
# stub method
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def after_move(area)
|
32
|
+
# stub method
|
33
|
+
end
|
34
|
+
|
35
|
+
def before_add_item(item, quantity)
|
36
|
+
# stub method
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
def after_add_item(item, quantity)
|
41
|
+
# stub method
|
42
|
+
end
|
43
|
+
|
44
|
+
def before_remove_item(item, quantity)
|
45
|
+
# stub method
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
def after_remove_item(item, quantity)
|
50
|
+
# stub method
|
51
|
+
end
|
52
|
+
|
53
|
+
def can_convert?(item)
|
54
|
+
self.capabilities.any?{|c| c.can_convert?(item)}
|
55
|
+
end
|
56
|
+
|
57
|
+
def count_item(item)
|
58
|
+
container = ItemContainer.find_for_token(self)
|
59
|
+
container ? container.quantity : 0
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_item!(item, quantity)
|
63
|
+
return false unless quantity && quantity.responds_to?(:abs)
|
64
|
+
return remove_item!(item, quantity.abs) if quantity < 0
|
65
|
+
return false unless item && before_add_item(item,quantity)
|
66
|
+
ItemContainer.find_or_create_for_token(self, item, quantity)
|
67
|
+
end
|
68
|
+
|
69
|
+
def remove_item!(item, quantity)
|
70
|
+
return false unless quantity && quantity.responds_to?(:abs)
|
71
|
+
return add_item!(item, quantity.abs) if quantity < 0
|
72
|
+
return false unless item && before_remove_item(item,quantity)
|
73
|
+
ItemContainer.find_or_create_for_token(self, item, (0 - quantity))
|
74
|
+
end
|
75
|
+
|
76
|
+
def set_ownership!(user)
|
77
|
+
return false unless user && before_ownership(user)
|
78
|
+
self.user = user
|
79
|
+
if save
|
80
|
+
after_ownership(user)
|
81
|
+
end
|
82
|
+
self.user
|
83
|
+
end
|
84
|
+
|
85
|
+
def move_to_area!(area)
|
86
|
+
return false unless area && before_move(area) && (self.area.nil? || self.area.before_token_leaves(self)) && area.before_token_enters(self)
|
87
|
+
old_area = self.area
|
88
|
+
self.area = area
|
89
|
+
if save
|
90
|
+
after_move(area)
|
91
|
+
old_area.after_token_leaves(self) if old_area
|
92
|
+
area.after_token_enters(self)
|
93
|
+
end
|
94
|
+
self.area
|
95
|
+
end
|
96
|
+
|
97
|
+
def has_constraint?(constraint)
|
98
|
+
constraint = Constraint.find(constraint) if constraint.is_a?(String)
|
99
|
+
self.constraints.include?(constraint)
|
100
|
+
end
|
101
|
+
|
102
|
+
def add_constraint!(constraint)
|
103
|
+
return false unless constraint && constraint.before_add(self)
|
104
|
+
self.constraints << constraint
|
105
|
+
save
|
106
|
+
constraint.after_add(self)
|
107
|
+
self
|
108
|
+
end
|
109
|
+
|
110
|
+
def remove_constraint!(constraint)
|
111
|
+
return false unless constraint && constraint.before_remove(self)
|
112
|
+
self.constraints.delete_if{|c| c.name == constraint.name}
|
113
|
+
save
|
114
|
+
constraint.after_remove(self)
|
115
|
+
self
|
116
|
+
end
|
117
|
+
|
118
|
+
def has_capability?(capability)
|
119
|
+
capability = Capability.find(capability) if capability.is_a?(String)
|
120
|
+
self.capabilities.include?(capability)
|
121
|
+
end
|
122
|
+
|
123
|
+
def add_capability!(capability)
|
124
|
+
return false unless capability && capability.before_add(self)
|
125
|
+
self.capabilities << capability
|
126
|
+
save
|
127
|
+
capability.after_add(self)
|
128
|
+
self
|
129
|
+
end
|
130
|
+
|
131
|
+
def remove_capability!(capability)
|
132
|
+
return false unless capability && capability.before_remove(self)
|
133
|
+
self.capabilities.delete_if{|c| c.name == capability.name}
|
134
|
+
save
|
135
|
+
capability.after_remove(self)
|
136
|
+
self
|
137
|
+
end
|
138
|
+
|
139
|
+
def check_constraints_and_capabilities(&changeset)
|
140
|
+
self.capabilities.any?{|c| !c.before_process(self, changeset)}
|
141
|
+
self.constraints.any?{|c| !c.before_process(self, changeset)}
|
142
|
+
end
|
143
|
+
|
144
|
+
def check_triggers!
|
145
|
+
self.triggers.each{|t| t.check! }
|
146
|
+
end
|
15
147
|
end
|
16
148
|
end
|
data/app/models/pbw/trigger.rb
CHANGED
@@ -3,5 +3,14 @@ module Pbw
|
|
3
3
|
has_and_belongs_to_many :tokens
|
4
4
|
has_and_belongs_to_many :areas
|
5
5
|
belongs_to :process
|
6
|
+
|
7
|
+
def trigger?(token_or_area)
|
8
|
+
# stub method
|
9
|
+
end
|
10
|
+
|
11
|
+
def check!(token_or_area)
|
12
|
+
return false unless self.process && trigger?(token_or_area)
|
13
|
+
self.process.schedule!(token_or_area)
|
14
|
+
end
|
6
15
|
end
|
7
16
|
end
|
data/app/models/pbw/user.rb
CHANGED
data/config/routes.rb
CHANGED
@@ -3,15 +3,18 @@ Pbw::Engine.routes.draw do
|
|
3
3
|
class_name: 'Pbw::User',
|
4
4
|
module: :devise
|
5
5
|
}
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
%W{areas capabilities constraints processes items tokens triggers}.each do |controller|
|
7
|
+
get "#{controller}/:_type" => "#{controller}\#index"
|
8
|
+
get "#{controller}/:_type/:id" => "#{controller}\#show"
|
9
|
+
post "#{controller}/:_type" => "#{controller}\#create"
|
10
|
+
get "#{controller}/:_type/new" => "#{controller}\#new"
|
11
|
+
get "#{controller}/:_type/:id/edit" => "#{controller}\#edit"
|
12
|
+
delete "#{controller}/:_type/:id" => "#{controller}\#delete"
|
13
|
+
put "#{controller}/:_type/:id" => "#{controller}\#update"
|
14
|
+
end
|
15
|
+
|
11
16
|
resources :item_containers
|
12
17
|
resources :item_conversions
|
13
18
|
resources :item_transfers
|
14
|
-
resources :tokens
|
15
|
-
resources :triggers
|
16
19
|
resources :user_tokens
|
17
20
|
end
|