chrono_trigger 0.1.7

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.
@@ -0,0 +1,13 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/chrono_trigger'
4
+ require "shoulda"
5
+ require "mocha"
6
+
7
+
8
+ def quietly
9
+ old_stderr = $stderr
10
+ STDERR.reopen("/dev/null", 'w')
11
+ yield
12
+ $stderr = old_stderr
13
+ end
@@ -0,0 +1,52 @@
1
+ class TestShell < Test::Unit::TestCase
2
+
3
+ context "A shell instance, @shell" do
4
+ setup do
5
+ @shell = ChronoTrigger::Shell.new
6
+ end
7
+
8
+ should "return an empty array on call to triggers" do
9
+ assert_equal [], @shell.triggers
10
+ end
11
+
12
+ should "raise an exception unless a block is provided to #trigger" do
13
+ assert_raise(ChronoTrigger::ConfigurationException) { @shell.trigger("test trigger") }
14
+ end
15
+
16
+ context "when provided a valid block" do
17
+ setup do
18
+ @trigger = @shell.trigger("name") { runs { "x" } }
19
+ end
20
+
21
+ should "create a new trigger" do
22
+ assert_equal 1, @shell.triggers.size
23
+ end
24
+
25
+ should "create a trigger that will run x with execute" do
26
+ assert_equal "x", @shell.triggers.first.execute
27
+ end
28
+
29
+ context "and configured to run the next time shell.execute_triggers is called" do
30
+ setup do
31
+ ChronoTrigger::CronEntry.any_instance.stubs(:matches?).returns(true)
32
+ end
33
+
34
+ should "execute the code block" do
35
+ @trigger.expects(:execute)
36
+ @shell.execute_triggers
37
+ end
38
+ end #and configured to run the next time shell.execute_triggers is called
39
+ end #when provided a valid block
40
+
41
+ context "calling load_context with a valid trigger file" do
42
+ setup do
43
+ @shell.load_triggers(["test/triggers.rb"])
44
+ end
45
+
46
+ should "create 3 triggers" do
47
+ assert_equal 3, @shell.triggers.size
48
+ end
49
+ end #calling load_context with a valid trigger file
50
+ end #A shell instance, @shell
51
+
52
+ end
@@ -0,0 +1,172 @@
1
+ class TestTrigger < Test::Unit::TestCase
2
+
3
+ context "A Trigger, @trigger," do
4
+ setup do
5
+ @trigger = ChronoTrigger::Trigger.new("test trigger")
6
+ end
7
+
8
+ context "and a block of code to run" do
9
+ setup do
10
+ @block_to_run = "hello"
11
+ @trigger.runs { @block_to_run }
12
+ end
13
+
14
+ should "assign @exec_block on call to runs" do
15
+ assert_equal @block_to_run, @trigger.instance_variable_get(:@exec_block).call
16
+ end
17
+
18
+ should "execute @block_to_run on call to execute" do
19
+ assert_equal @block_to_run, @trigger.execute
20
+ end
21
+
22
+ context "that raises an exception" do
23
+ setup do
24
+ @trigger.runs { raise Exception.new("test error")}
25
+ end
26
+
27
+ should "be caught and logged by the trigger" do
28
+ assert_nothing_raised do
29
+ quietly { @trigger.execute }
30
+ end
31
+ end
32
+ end #that raises an exception
33
+ end #and a block of code to run
34
+
35
+ context "and a call to #on with some days" do
36
+ setup do
37
+ @days = [:monday, :wednesday]
38
+ @expected_days = [1, 3]
39
+ @trigger.on(@days)
40
+ end
41
+
42
+ should "set the triggers cron entry days" do
43
+ assert_equal @expected_days, @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@days)
44
+ end
45
+ end #and a call to on with some days
46
+
47
+ context "and a call to #at with :hours and :minutes" do
48
+ setup do
49
+ @hours = 10
50
+ @minutes = 5
51
+ @trigger.at :hour=>@hours, :minute=>@minutes
52
+ end
53
+
54
+ should "set the trigger's cron entry's hours" do
55
+ assert_equal [@hours], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@hours)
56
+ end
57
+
58
+ should "set the trigger's cron entry's minutes" do
59
+ assert_equal [@minutes], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@minutes)
60
+ end
61
+
62
+ context "that are nil" do
63
+ setup do
64
+ @hours, @minutes = nil, nil
65
+ end
66
+
67
+ should "raise an exception" do
68
+ assert_raise ChronoTrigger::ConfigurationException do
69
+ @trigger.at :hours=>@hours, :minutes=>@minutes
70
+ end
71
+ end
72
+ end #that are nil
73
+
74
+ context "and a call to #monthly_on" do
75
+ setup do
76
+ @calendar_days = 15
77
+ @trigger.monthly_on @calendar_days
78
+ end
79
+
80
+ should "set the trigger's cron entry's calendar_days" do
81
+ assert_equal [@calendar_days], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@calendar_days)
82
+ end
83
+
84
+ context "with mulitple #monthly_on values" do
85
+ setup do
86
+ @calendar_days_array = [@calendar_days, 16]
87
+ @trigger.monthly_on(@calendar_days_array)
88
+ end
89
+
90
+ should "set the trigger's cron entry's calendar_days" do
91
+ assert_equal @calendar_days_array, @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@calendar_days)
92
+ end
93
+ end
94
+ end
95
+ end #and a call to #at with :hours and :minutes
96
+
97
+ context "on a call to #every" do
98
+ context "for 10 minutes" do
99
+ setup do
100
+ @minutes = 10
101
+ end
102
+
103
+ context "when called" do
104
+ setup do
105
+ @trigger.every :minutes=>@minutes
106
+ end
107
+
108
+ should "set the trigger's cron entry's minutes to [0, 10,20,30,40,50]" do
109
+ assert_equal [0,10,20,30,40,50], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@minutes)
110
+ end
111
+
112
+ context "in addition to setting #at to hour 2" do
113
+ setup do
114
+ @hour = 2
115
+ @trigger.at :hour=>@hour
116
+ end
117
+
118
+ should "set the trigger's cron entry's minutes to [0, 10,20,30,40,50]" do
119
+ assert_equal [0,10,20,30,40,50], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@minutes)
120
+ end
121
+
122
+ should "set the trigger's cron entry's hours to 2" do
123
+ assert_equal [2], @trigger.instance_variable_get(:@cron_entry).instance_variable_get(:@hours)
124
+ end
125
+ end #in addition to setting #{}
126
+ end #when called
127
+ end #for 10 minutes
128
+
129
+ context "for 11 minutes" do
130
+ setup do
131
+ @minutes = 11
132
+ end
133
+
134
+ should "raise an exception" do
135
+ assert_raise ChronoTrigger::ConfigurationException do
136
+ @trigger.every :minutes=>@minutes
137
+ end
138
+ end
139
+ end #for 11 minutes
140
+ end #on a call to #every
141
+
142
+ context "and a block that will raise an ActiveRecord::ConnectionNotEstablished exception, then return a value" do
143
+ setup do
144
+ @value = "hello"
145
+
146
+ @run_once = false
147
+ @trigger.runs do
148
+ if @run_once
149
+ @value
150
+ else
151
+ @run_once = true
152
+ raise ActiveRecord::ConnectionNotEstablished
153
+ end
154
+ end
155
+ end
156
+
157
+ should "raise an exception, which is caught, then retry the call method" do
158
+ require "active_record"
159
+ ActiveRecord::Base.stubs(:connection).returns(mock({:reconnect! => true}))
160
+ assert_equal @value, @trigger.execute
161
+ end
162
+ end #and a block that will raise an ActiveRecord::ConnectionNotEstablished exception, then return a value
163
+
164
+ should "raise an exception on call to #every without minutes or hours" do
165
+ assert_raise ChronoTrigger::ConfigurationException do
166
+ @trigger.every()
167
+ end
168
+ end
169
+
170
+ end #A Trigger, @trigger,
171
+
172
+ end
@@ -0,0 +1,17 @@
1
+ trigger "test_trigger" do
2
+ runs { "hello world" }
3
+ on :monday
4
+ at :hour=>3, :minute=>10
5
+ end
6
+
7
+ trigger "test_trigger_2" do
8
+ runs { "hello world 2" }
9
+ on :tuesday
10
+ every :hours=>2, :minutes=>10
11
+ end
12
+
13
+ trigger "test_trigger_3" do
14
+ runs { "hello world 3" }
15
+ monthly_on 15
16
+ at :hours=>2, :minutes=>10
17
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chrono_trigger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.7
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jon Ciccone
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-22 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Binding to tag
15
+ email: darful@gmail.com
16
+ executables:
17
+ - chrono_trigger
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - README.rdoc
21
+ files:
22
+ - History.txt
23
+ - Manifest.txt
24
+ - PostInstall.txt
25
+ - README.rdoc
26
+ - Rakefile
27
+ - VERSION.yml
28
+ - bin/chrono_trigger
29
+ - chrono_trigger.gemspec
30
+ - lib/chrono_trigger.rb
31
+ - lib/chrono_trigger/cron_entry.rb
32
+ - lib/chrono_trigger/process.rb
33
+ - lib/chrono_trigger/runner.rb
34
+ - lib/chrono_trigger/shell.rb
35
+ - lib/chrono_trigger/tasks.rb
36
+ - lib/chrono_trigger/trigger.rb
37
+ - lib/tasks/chrono_trigger.rake
38
+ - lib/triggers/test_triggers.rb
39
+ - script/console
40
+ - script/destroy
41
+ - script/generate
42
+ - test/test_chrono_trigger.rb
43
+ - test/test_cron_entry.rb
44
+ - test/test_helper.rb
45
+ - test/test_shell.rb
46
+ - test/test_trigger.rb
47
+ - test/triggers.rb
48
+ homepage: ''
49
+ licenses: []
50
+ post_install_message:
51
+ rdoc_options:
52
+ - --charset=UTF-8
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 1.8.24
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: binding to tag
73
+ test_files:
74
+ - test/test_chrono_trigger.rb
75
+ - test/test_cron_entry.rb
76
+ - test/test_helper.rb
77
+ - test/test_shell.rb
78
+ - test/test_trigger.rb
79
+ - test/triggers.rb