triggerable 0.1.7 → 0.1.8

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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -4
  3. data/lib/triggerable.rb +9 -8
  4. data/lib/triggerable/actions/action.rb +18 -0
  5. data/lib/triggerable/actions/lambda_action.rb +28 -0
  6. data/lib/triggerable/conditions/condition.rb +33 -31
  7. data/lib/triggerable/conditions/field/exists.rb +14 -8
  8. data/lib/triggerable/conditions/field/field_condition.rb +27 -21
  9. data/lib/triggerable/conditions/field/in.rb +18 -12
  10. data/lib/triggerable/conditions/field/or_equal_to.rb +13 -11
  11. data/lib/triggerable/conditions/lambda_condition.rb +14 -8
  12. data/lib/triggerable/conditions/method_condition.rb +13 -7
  13. data/lib/triggerable/conditions/predicate/and.rb +10 -4
  14. data/lib/triggerable/conditions/predicate/or.rb +13 -4
  15. data/lib/triggerable/conditions/predicate/predicate_condition.rb +34 -32
  16. data/lib/triggerable/conditions/schedule/after.rb +17 -15
  17. data/lib/triggerable/conditions/schedule/before.rb +17 -15
  18. data/lib/triggerable/conditions/schedule/schedule_condition.rb +20 -18
  19. data/lib/triggerable/engine.rb +33 -20
  20. data/lib/triggerable/rules/automation.rb +31 -11
  21. data/lib/triggerable/rules/rule.rb +21 -9
  22. data/lib/triggerable/rules/trigger.rb +19 -9
  23. data/lib/triggerable/version.rb +1 -1
  24. data/spec/conditions_spec.rb +13 -13
  25. data/spec/integration/actions_spec.rb +9 -5
  26. data/spec/integration/automations_spec.rb +20 -20
  27. data/spec/integration/conditions_spec.rb +2 -2
  28. data/spec/integration/short_syntax_spec.rb +1 -1
  29. data/spec/scopes_spec.rb +10 -10
  30. data/triggerable.gemspec +1 -1
  31. metadata +4 -3
  32. data/lib/triggerable/actions.rb +0 -41
@@ -2,18 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Actions' do
4
4
  before(:each) do
5
- Engine.clear
5
+ Triggerable::Engine.clear
6
6
  TestTask.destroy_all
7
7
  end
8
8
 
9
- class CreateFollowUp < Triggerable::Action
10
- def run_for! trigger_name, task
9
+ class CreateFollowUp < Triggerable::Actions::Action
10
+ def run_for! task, rule_name
11
11
  TestTask.create kind: 'follow up'
12
12
  end
13
13
  end
14
14
 
15
15
  it 'custom action' do
16
- TestTask.trigger on: :after_update, if: {status: 'solved'}, do: :create_follow_up
16
+ TestTask.trigger on: :after_update,
17
+ if: { status: 'solved' },
18
+ do: :create_follow_up
17
19
 
18
20
  task = TestTask.create
19
21
  expect(TestTask.count).to eq(1)
@@ -24,7 +26,9 @@ describe 'Actions' do
24
26
  end
25
27
 
26
28
  it 'custom action chain' do
27
- TestTask.trigger on: :after_update, if: {status: 'solved'}, do: [:create_follow_up, :create_follow_up]
29
+ TestTask.trigger on: :after_update,
30
+ if: { status: 'solved' },
31
+ do: [:create_follow_up, :create_follow_up]
28
32
 
29
33
  task = TestTask.create
30
34
  expect(TestTask.count).to eq(1)
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Automations' do
4
4
  before(:each) do
5
- Engine.clear
5
+ Triggerable::Engine.clear
6
6
  TestTask.destroy_all
7
7
  end
8
8
 
@@ -19,11 +19,11 @@ describe 'Automations' do
19
19
  expect(TestTask.count).to eq(1)
20
20
 
21
21
  constantize_time_now Time.utc 2012, 9, 1, 20, 00
22
- Engine.run_automations(1.hour)
22
+ Triggerable::Engine.run_automations(1.hour)
23
23
  expect(TestTask.count).to eq(1)
24
24
 
25
25
  constantize_time_now Time.utc 2012, 9, 2, 12, 00
26
- Engine.run_automations(1.hour)
26
+ Triggerable::Engine.run_automations(1.hour)
27
27
 
28
28
  expect(TestTask.count).to eq(2)
29
29
  expect(TestTask.all.last.kind).to eq('follow up')
@@ -42,11 +42,11 @@ describe 'Automations' do
42
42
  expect(TestTask.count).to eq(1)
43
43
 
44
44
  constantize_time_now Time.utc 2012, 9, 1, 15, 00
45
- Engine.run_automations(1.hour)
45
+ Triggerable::Engine.run_automations(1.hour)
46
46
  expect(TestTask.count).to eq(1)
47
47
 
48
48
  constantize_time_now Time.utc 2012, 9, 1, 18, 00
49
- Engine.run_automations(1.hour)
49
+ Triggerable::Engine.run_automations(1.hour)
50
50
  expect(TestTask.count).to eq(2)
51
51
  expect(TestTask.all.last.kind).to eq('follow up')
52
52
  end
@@ -64,11 +64,11 @@ describe 'Automations' do
64
64
  expect(TestTask.count).to eq(1)
65
65
 
66
66
  constantize_time_now Time.utc 2012, 9, 1, 12, 29
67
- Engine.run_automations(30.minutes)
67
+ Triggerable::Engine.run_automations(30.minutes)
68
68
  expect(TestTask.count).to eq(1)
69
69
 
70
70
  constantize_time_now Time.utc 2012, 9, 1, 12, 30
71
- Engine.run_automations(30.minutes)
71
+ Triggerable::Engine.run_automations(30.minutes)
72
72
 
73
73
  expect(TestTask.count).to eq(2)
74
74
  expect(TestTask.all.last.kind).to eq('follow up')
@@ -86,11 +86,11 @@ describe 'Automations' do
86
86
  expect(TestTask.count).to eq(1)
87
87
 
88
88
  constantize_time_now Time.utc 2012, 9, 1, 14, 31
89
- Engine.run_automations(30.minutes)
89
+ Triggerable::Engine.run_automations(30.minutes)
90
90
  expect(TestTask.count).to eq(1)
91
91
 
92
92
  constantize_time_now Time.utc 2012, 9, 1, 15, 03
93
- Engine.run_automations(30.minutes)
93
+ Triggerable::Engine.run_automations(30.minutes)
94
94
  expect(TestTask.count).to eq(2)
95
95
  expect(TestTask.all.last.kind).to eq('follow up')
96
96
  end
@@ -108,11 +108,11 @@ describe 'Automations' do
108
108
  expect(TestTask.count).to eq(1)
109
109
 
110
110
  constantize_time_now Time.utc 2012, 9, 1, 12, 00
111
- Engine.run_automations(4.hours)
111
+ Triggerable::Engine.run_automations(4.hours)
112
112
  expect(TestTask.count).to eq(1)
113
113
 
114
114
  constantize_time_now Time.utc 2012, 9, 1, 16, 00
115
- Engine.run_automations(4.hours)
115
+ Triggerable::Engine.run_automations(4.hours)
116
116
 
117
117
  expect(TestTask.count).to eq(2)
118
118
  expect(TestTask.all.last.kind).to eq('follow up')
@@ -130,11 +130,11 @@ describe 'Automations' do
130
130
  expect(TestTask.count).to eq(1)
131
131
 
132
132
  constantize_time_now Time.utc 2012, 9, 1, 04, 05
133
- Engine.run_automations(2.hour)
133
+ Triggerable::Engine.run_automations(2.hour)
134
134
  expect(TestTask.count).to eq(1)
135
135
 
136
136
  constantize_time_now Time.utc 2012, 9, 1, 10, 01
137
- Engine.run_automations(2.hour)
137
+ Triggerable::Engine.run_automations(2.hour)
138
138
  expect(TestTask.count).to eq(2)
139
139
  expect(TestTask.all.last.kind).to eq('follow up')
140
140
  end
@@ -152,21 +152,21 @@ describe 'Automations' do
152
152
  expect(TestTask.count).to eq(1)
153
153
 
154
154
  constantize_time_now Time.utc 2012, 9, 1, 11, 46
155
- Engine.run_automations(15.minutes)
155
+ Triggerable::Engine.run_automations(15.minutes)
156
156
  expect(TestTask.count).to eq(1)
157
157
 
158
158
  constantize_time_now Time.utc 2012, 9, 1, 13, 46
159
- Engine.run_automations(15.minutes)
159
+ Triggerable::Engine.run_automations(15.minutes)
160
160
  expect(TestTask.count).to eq(1)
161
161
 
162
162
  constantize_time_now Time.utc 2012, 9, 1, 14, 02
163
- Engine.run_automations(15.minutes)
163
+ Triggerable::Engine.run_automations(15.minutes)
164
164
 
165
165
  expect(TestTask.count).to eq(2)
166
166
  expect(TestTask.all.last.kind).to eq('follow up')
167
167
 
168
168
  constantize_time_now Time.utc 2012, 9, 1, 14, 17
169
- Engine.run_automations(15.minutes)
169
+ Triggerable::Engine.run_automations(15.minutes)
170
170
  expect(TestTask.count).to eq(2)
171
171
  end
172
172
 
@@ -182,16 +182,16 @@ describe 'Automations' do
182
182
  expect(TestTask.count).to eq(1)
183
183
 
184
184
  constantize_time_now Time.utc 2012, 9, 1, 10, 05
185
- Engine.run_automations(15.minutes)
185
+ Triggerable::Engine.run_automations(15.minutes)
186
186
  expect(TestTask.count).to eq(1)
187
187
 
188
188
  constantize_time_now Time.utc 2012, 9, 1, 13, 30
189
- Engine.run_automations(15.minutes)
189
+ Triggerable::Engine.run_automations(15.minutes)
190
190
  expect(TestTask.count).to eq(2)
191
191
  expect(TestTask.all.last.kind).to eq('follow up')
192
192
 
193
193
  constantize_time_now Time.utc 2012, 9, 1, 15, 32
194
- Engine.run_automations(15.minutes)
194
+ Triggerable::Engine.run_automations(15.minutes)
195
195
  expect(TestTask.count).to eq(2)
196
196
  end
197
197
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Conditions do
3
+ describe Triggerable::Conditions do
4
4
  before(:each) do
5
- Engine.clear
5
+ Triggerable::Engine.clear
6
6
  TestTask.destroy_all
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Short syntax' do
4
4
  before(:each) do
5
- Engine.clear
5
+ Triggerable::Engine.clear
6
6
  TestTask.destroy_all
7
7
  end
8
8
 
data/spec/scopes_spec.rb CHANGED
@@ -19,37 +19,37 @@ describe 'Scopes' do
19
19
  end
20
20
 
21
21
  it 'is' do
22
- ids = model_ids_for(Conditions::Is, 1)
22
+ ids = model_ids_for(Triggerable::Conditions::Is, 1)
23
23
  expect(ids).to eq([@m1.id, @m3.id])
24
24
  end
25
25
 
26
26
  it 'greater than' do
27
- ids = model_ids_for(Conditions::GreaterThan, 1)
27
+ ids = model_ids_for(Triggerable::Conditions::GreaterThan, 1)
28
28
  expect(ids).to eq([@m2.id])
29
29
  end
30
30
 
31
31
  it 'less than' do
32
- ids = model_ids_for(Conditions::LessThan, 2)
32
+ ids = model_ids_for(Triggerable::Conditions::LessThan, 2)
33
33
  expect(ids).to eq([@m1.id, @m3.id])
34
34
  end
35
35
 
36
36
  it 'is not' do
37
- ids = model_ids_for(Conditions::IsNot, 2)
37
+ ids = model_ids_for(Triggerable::Conditions::IsNot, 2)
38
38
  expect(ids).to eq([@m1.id, @m3.id])
39
39
  end
40
40
 
41
41
  it 'greater than or equal' do
42
- ids = model_ids_for(Conditions::LessThanOrEqualTo, 2)
42
+ ids = model_ids_for(Triggerable::Conditions::LessThanOrEqualTo, 2)
43
43
  expect(ids).to eq([@m1.id, @m2.id, @m3.id])
44
44
  end
45
45
 
46
46
  it 'less than or equal' do
47
- ids = model_ids_for(Conditions::GreaterThanOrEqualTo, 1)
47
+ ids = model_ids_for(Triggerable::Conditions::GreaterThanOrEqualTo, 1)
48
48
  expect(ids).to eq([@m1.id, @m2.id, @m3.id])
49
49
  end
50
50
 
51
51
  it 'in' do
52
- ids = model_ids_for(Conditions::In, [1, 2])
52
+ ids = model_ids_for(Triggerable::Conditions::In, [1, 2])
53
53
  expect(ids).to eq([@m1.id, @m2.id, @m3.id])
54
54
  end
55
55
  end
@@ -57,7 +57,7 @@ describe 'Scopes' do
57
57
  context 'predicates' do
58
58
  def model_ids_for condition_class, conditions
59
59
  and_condition = condition_class.new([])
60
- and_condition.conditions = [Conditions::Is.new(:integer_field, 1), Conditions::Is.new(:string_field, 'c')]
60
+ and_condition.conditions = [Triggerable::Conditions::Is.new(:integer_field, 1), Triggerable::Conditions::Is.new(:string_field, 'c')]
61
61
 
62
62
  table = Arel::Table.new(:parent_models)
63
63
  query = table.where(and_condition.scope(table)).project(Arel.sql('id')).to_sql
@@ -66,12 +66,12 @@ describe 'Scopes' do
66
66
  end
67
67
 
68
68
  it 'and' do
69
- ids = model_ids_for Conditions::And, [Conditions::Is.new(:integer_field, 1), Conditions::Is.new(:string_field, 'c')]
69
+ ids = model_ids_for Triggerable::Conditions::And, [Triggerable::Conditions::Is.new(:integer_field, 1), Triggerable::Conditions::Is.new(:string_field, 'c')]
70
70
  expect(ids).to eq([@m3.id])
71
71
  end
72
72
 
73
73
  it 'or' do
74
- ids = model_ids_for Conditions::Or, [Conditions::Is.new(:integer_field, 1), Conditions::Is.new(:string_field, 'c')]
74
+ ids = model_ids_for Triggerable::Conditions::Or, [Triggerable::Conditions::Is.new(:integer_field, 1), Triggerable::Conditions::Is.new(:string_field, 'c')]
75
75
  expect(ids).to eq([@m1.id, @m3.id])
76
76
  end
77
77
  end
data/triggerable.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.test_files = Dir['spec/**/*.rb']
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: triggerable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - DmitryTsepelev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-11 00:00:00.000000000 Z
11
+ date: 2015-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,7 +124,8 @@ files:
124
124
  - Rakefile
125
125
  - lib/.DS_Store
126
126
  - lib/triggerable.rb
127
- - lib/triggerable/actions.rb
127
+ - lib/triggerable/actions/action.rb
128
+ - lib/triggerable/actions/lambda_action.rb
128
129
  - lib/triggerable/conditions/condition.rb
129
130
  - lib/triggerable/conditions/field/exists.rb
130
131
  - lib/triggerable/conditions/field/field_condition.rb
@@ -1,41 +0,0 @@
1
- module Triggerable
2
- class Action
3
- def self.build source
4
- if source.is_a?(Proc)
5
- [LambdaAction.new(source)]
6
- else
7
- Array(source).map do |source|
8
- descendant = descendants.find { |d| d == source.to_s.camelize.constantize }
9
- descendant.new if descendant.present?
10
- end.compact
11
- end
12
- end
13
-
14
- def run_for!(trigger_name, object); end
15
- end
16
-
17
- class LambdaAction < Action
18
- def initialize block
19
- @block = block
20
- end
21
-
22
- def run_for! object, trigger_name
23
- proc = @block
24
- object.instance_eval do
25
- change_whodunnit = trigger_name.present? && defined?(PaperTrail)
26
- old_whodunnit = nil
27
-
28
- if change_whodunnit
29
- old_whodunnit = PaperTrail.whodunnit
30
- PaperTrail.whodunnit = trigger_name
31
- end
32
-
33
- begin
34
- instance_exec(&proc)
35
- ensure
36
- PaperTrail.whodunnit = old_whodunnit if change_whodunnit
37
- end
38
- end
39
- end
40
- end
41
- end