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.
Files changed (56) hide show
  1. checksums.yaml +8 -8
  2. data/app/models/pbw/area.rb +85 -2
  3. data/app/models/pbw/capability.rb +28 -0
  4. data/app/models/pbw/changeset.rb +22 -0
  5. data/app/models/pbw/constraint.rb +23 -0
  6. data/app/models/pbw/item.rb +36 -0
  7. data/app/models/pbw/item_container.rb +82 -2
  8. data/app/models/pbw/item_conversion.rb +66 -2
  9. data/app/models/pbw/process.rb +41 -2
  10. data/app/models/pbw/rule.rb +1 -2
  11. data/app/models/pbw/token.rb +134 -2
  12. data/app/models/pbw/trigger.rb +9 -0
  13. data/app/models/pbw/user.rb +1 -1
  14. data/config/initializers/devise.rb +0 -2
  15. data/config/routes.rb +10 -7
  16. data/lib/generators/pbw/area/USAGE +5 -3
  17. data/lib/generators/pbw/area/area_generator.rb +5 -0
  18. data/lib/generators/pbw/area/templates/model.coffee +2 -2
  19. data/lib/generators/pbw/install/USAGE +7 -0
  20. data/lib/generators/pbw/item/USAGE +5 -3
  21. data/lib/generators/pbw/item/item_generator.rb +9 -2
  22. data/lib/generators/pbw/item/templates/index.erb +6 -0
  23. data/lib/generators/pbw/item/templates/model.coffee +14 -0
  24. data/lib/generators/pbw/item/templates/router.coffee +31 -0
  25. data/lib/generators/pbw/item/templates/templates/edit.jst +21 -0
  26. data/lib/generators/pbw/item/templates/templates/index.jst +17 -0
  27. data/lib/generators/pbw/item/templates/templates/model.jst +8 -0
  28. data/lib/generators/pbw/item/templates/templates/new.jst +21 -0
  29. data/lib/generators/pbw/item/templates/templates/show.jst +14 -0
  30. data/lib/generators/pbw/item/templates/views/edit_view.coffee +24 -0
  31. data/lib/generators/pbw/item/templates/views/index_view.coffee +20 -0
  32. data/lib/generators/pbw/item/templates/views/model_view.coffee +19 -0
  33. data/lib/generators/pbw/item/templates/views/new_view.coffee +37 -0
  34. data/lib/generators/pbw/item/templates/views/show_view.coffee +8 -0
  35. data/lib/generators/pbw/rules/command/command_generator.rb +3 -0
  36. data/lib/generators/pbw/scaffold_generator.rb +2 -1
  37. data/lib/generators/pbw/token/USAGE +5 -3
  38. data/lib/generators/pbw/token/templates/index.erb +6 -0
  39. data/lib/generators/pbw/token/templates/model.coffee +14 -0
  40. data/lib/generators/pbw/token/templates/router.coffee +31 -0
  41. data/lib/generators/pbw/token/templates/templates/edit.jst +21 -0
  42. data/lib/generators/pbw/token/templates/templates/index.jst +17 -0
  43. data/lib/generators/pbw/token/templates/templates/model.jst +8 -0
  44. data/lib/generators/pbw/token/templates/templates/new.jst +21 -0
  45. data/lib/generators/pbw/token/templates/templates/show.jst +14 -0
  46. data/lib/generators/pbw/token/templates/views/edit_view.coffee +24 -0
  47. data/lib/generators/pbw/token/templates/views/index_view.coffee +20 -0
  48. data/lib/generators/pbw/token/templates/views/model_view.coffee +19 -0
  49. data/lib/generators/pbw/token/templates/views/new_view.coffee +37 -0
  50. data/lib/generators/pbw/token/templates/views/show_view.coffee +8 -0
  51. data/lib/generators/pbw/token/token_generator.rb +8 -1
  52. data/lib/pbw/version.rb +1 -1
  53. metadata +31 -5
  54. data/app/models/pbw/user_token.rb +0 -16
  55. data/lib/generators/pbw/command/command_generator.rb +0 -3
  56. /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
- NzBkNmRjYTAxMDI4Y2M1Nzg2YTQyZjFjOTk3OTNjYjY1ZWE4NzNjOA==
4
+ OTU1NGI1MTU5Nzk3MjU0OGRkNWM0NGYyZWMwYzU0ZGM1NWFkYWYxNQ==
5
5
  data.tar.gz: !binary |-
6
- MWFiMDlhMzlmMTkwNjM3Y2VjYmI5MGQ1Yzc4MmVkOTU1MzllMjIyYQ==
6
+ NjMzOTU2YTNmMDhkOGMzYjk1NjBmMzEyMGZmMzNmZmQ3ODkxYThlMQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YmJiN2U3MjA2ZWJkY2NhN2ZmMjNhODIwNmQ0YzU3MTYyNDk4MjJiMmVlOWRl
10
- ZTc3NzJhNmI3NjdhMjcxODkwOGYzMzU3ZmM3NDA5NjEzZDNlODc5MTZlZWQx
11
- Y2ViODk4NmM5ZGU4NzVkNmZmNTMyOWI4OTY5NTZmNjVjNWYzNWM=
9
+ N2ZhZmExNTBkMTVlMTc4NDVlNjYzYjA3MDY4MzU2YmU0YTU3OGI0Y2ExMTcw
10
+ OGZkN2M4YjljOWZjMjFiNDM1OWI0MjZiNWY4ZTM0NTZmMGZlMDMyNTg3NGY5
11
+ NmNkNGNmZjM2ZDAyN2RhYThkNDMyYzNhYjYzZDM5M2E2YjAxZjg=
12
12
  data.tar.gz: !binary |-
13
- NmM5Y2I3YzNlYjkxYzRmYTFiMGUxMDg5NjY4NjkzN2U4MGQzMDQyZWNkZGVk
14
- N2IxOWM2ZDRiYmUzNGE0MGE4OTIzY2M4ZGZjODYyNmM4YjJmZjlhNmZhMjUw
15
- MGEzN2NkNzVjOWYyNTkzMzhjMGRlNmE0OTViZmIwZWI3NDE3OWQ=
13
+ MmE3NjI0YjUwOGUxNTMxYjI5MzM2NzQ0MTZjODhmZjA3MzRkYjkyMjZkOWVh
14
+ Y2VhYjUzZjU3Y2ZlZTYyN2QyMTk4MjMyMmUwYzU4MTQyZDk5ZDQyY2M3OGY3
15
+ MDI3MzJjMjhhNDQxMGY5ZjI5NTkwZTc3MTViMjU4ODRlNTQ4YWI=
@@ -6,12 +6,95 @@ module Pbw
6
6
  validates_presence_of :name
7
7
  validates_uniqueness_of :name
8
8
 
9
- has_and_belongs_to_many :user_tokens
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
@@ -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 :user_token
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 :to_class, :type => String
7
- field :conversion_rate, :type => Float
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
@@ -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
@@ -3,8 +3,7 @@ module Pbw
3
3
  include ::Mongoid::Document
4
4
  include ::Mongoid::Timestamps
5
5
  field :name, type: String
6
- validates_presence_of :name
7
- validates_uniqueness_of :name
6
+ validates :name, presence: true, uniqueness: true
8
7
 
9
8
  attr_accessible :name
10
9
  end
@@ -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
- has_many :user_tokens
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
@@ -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
@@ -47,7 +47,7 @@ module Pbw
47
47
  field :authentication_token, :type => String
48
48
 
49
49
  has_many :resource_containers
50
- has_many :user_tokens
50
+ has_many :tokens
51
51
 
52
52
  def super_admin?
53
53
  self.role.name == "Super Admin"
@@ -63,8 +63,6 @@ Devise.setup do |config|
63
63
 
64
64
  config.reset_password_within = 6.hours
65
65
 
66
- config.encryptor = :sha512
67
-
68
66
  config.token_authentication_key = :auth_token
69
67
 
70
68
  config.scoped_views = false
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
- resources :areas
7
- resources :capabilities
8
- resources :constraints
9
- resources :processes
10
- resources :items
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