subtrigger 0.2.7 → 0.3.0

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,3 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), *%w{.. lib subtrigger})
3
+ $prevent_subtrigger_run = true
data/test/test_path.rb ADDED
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestPath < Test::Unit::TestCase
4
+ def setup
5
+ @path = Subtrigger::Path.new
6
+ end
7
+
8
+ def stub_system
9
+ @path.class.send(:define_method, :system) do |command|
10
+ yield command
11
+ end
12
+ end
13
+
14
+ def test_should_find_program_in_default_path
15
+ stub_system { |c| c =~ /usr\/bin/ }
16
+ assert_equal('/usr/bin', @path.to('foo'))
17
+ end
18
+
19
+ def test_should_find_first_match
20
+ stub_system { true }
21
+ assert_equal('/opt/subversion/bin', @path.to('foo'))
22
+ end
23
+
24
+ def test_should_raise_exception_when_not_found
25
+ stub_system { false }
26
+ assert_raise(Subtrigger::Path::NotFound) { @path.to('foo') }
27
+ end
28
+
29
+ def test_should_add_path_to_stack
30
+ stub_system { true }
31
+ @path << '/bar'
32
+ assert_equal('/bar', @path.to('baz'))
33
+ end
34
+
35
+ def test_should_memoize_lookup
36
+ i = 0
37
+ stub_system { |c| i += 1; c = /usr\/bin/ }
38
+ @path.to('foo')
39
+ @path.to('foo')
40
+ assert_equal(1, i)
41
+ end
42
+
43
+ def test_should_memoize_lookup_per_argument
44
+ i = 0
45
+ stub_system { |c| i += 1; c = /usr\/bin/ }
46
+ @path.to('foo')
47
+ @path.to('bar')
48
+ assert_equal(2, i)
49
+ end
50
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestRevision < Test::Unit::TestCase
4
+ def setup
5
+ @valid_arguments = [
6
+ '6000',
7
+ "john\n2010-07-05 17:00:00 +0200 (Mon, 01 Jan 2010)\n215\nDescription of log\n",
8
+ '/foo/trunk'
9
+ ]
10
+ @revision = Subtrigger::Revision.new(*@valid_arguments)
11
+ end
12
+
13
+ def test_should_require_string_arguments
14
+ assert_raise(ArgumentError) { Subtrigger::Revision.new }
15
+ assert_raise(ArgumentError) { Subtrigger::Revision.new('foo') }
16
+ assert_raise(ArgumentError) { Subtrigger::Revision.new('foo', 'bar') }
17
+ assert_nothing_raised(ArgumentError) { Subtrigger::Revision.new(*@valid_arguments) }
18
+ end
19
+
20
+ def test_should_return_author
21
+ assert_equal('john', @revision.author)
22
+ end
23
+
24
+ def test_should_return_revision_number
25
+ assert_equal(6000, @revision.number)
26
+ end
27
+
28
+ def test_should_return_date
29
+ assert_equal(Time.parse('2010-07-05 17:00:00 +0200 (Mon, 01 Jan 2010)'), @revision.date)
30
+ end
31
+
32
+ def test_should_return_message
33
+ assert_equal('Description of log', @revision.message)
34
+ end
35
+
36
+ def test_should_raise_when_unparsable
37
+ assert_raise(ArgumentError) { Subtrigger::Revision.new('6000', "invalid info", '') }
38
+ end
39
+
40
+ def test_should_return_modified_projects
41
+ assert_equal(['/foo'], @revision.projects)
42
+ end
43
+ end
data/test/test_rule.rb ADDED
@@ -0,0 +1,66 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class CustomMatcher
4
+ def initialize
5
+ @matched = false
6
+ end
7
+
8
+ def ===(other)
9
+ @matched = (other.number == 6000)
10
+ end
11
+
12
+ def matched?
13
+ @matched
14
+ end
15
+ end
16
+
17
+ class TestRule < Test::Unit::TestCase
18
+ def setup
19
+ Subtrigger::Rule.reset
20
+ @rule1 = Subtrigger::Rule.new(/foo/) { }
21
+ @rule2 = Subtrigger::Rule.new(/bar/) { }
22
+
23
+ # Set up dummy Revision
24
+ Struct.new('Revision', :message, :number)
25
+ @revision = Struct::Revision.new('foo', 6000)
26
+ end
27
+
28
+ def test_should_keep_track_of_created_classes
29
+ assert_equal(2, Subtrigger::Rule.rules.size)
30
+ end
31
+
32
+ def test_should_return_all_matching_classes
33
+ assert_equal(1, Subtrigger::Rule.matching(@revision).size)
34
+ end
35
+
36
+ def test_should_return_empty_array_when_none_match
37
+ assert_instance_of(Array, Subtrigger::Rule.matching(Struct::Revision.new('bar', 6000)))
38
+ end
39
+
40
+ def test_should_raise_without_block
41
+ assert_raise(ArgumentError) { Subtrigger::Rule.new(/foo/) }
42
+ end
43
+
44
+ def test_should_match_object
45
+ assert @rule1.matches?(@revision)
46
+ end
47
+
48
+ def test_should_call_block_with_revision_on_run
49
+ Subtrigger::Rule.new(/foo/) { |r, m|
50
+ assert_equal(@revision, r)
51
+ }.run(@revision)
52
+ end
53
+
54
+ def test_should_pass_on_all_captures_to_block
55
+ Subtrigger::Rule.new(/fo(o)?/) { |r, m|
56
+ assert_equal({:message => ['o']}, m)
57
+ }.run(@revision)
58
+ end
59
+
60
+ def test_should_use_custom_matcher_for_revision
61
+ matcher = CustomMatcher.new
62
+ Subtrigger::Rule.new(:all => matcher) { }
63
+ Subtrigger::Rule.matching(@revision)
64
+ assert matcher.matched?
65
+ end
66
+ end
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestTemplate < Test::Unit::TestCase
4
+ def setup
5
+ @templates = <<-EOS
6
+ @@ one
7
+ foo
8
+ @@ two
9
+ bar %s
10
+ EOS
11
+ Subtrigger::Template.parse(@templates)
12
+ end
13
+
14
+ def test_should_parse_format
15
+ assert_not_nil(Subtrigger::Template.find('one'))
16
+ assert_not_nil(Subtrigger::Template.find('two'))
17
+ assert_nil(Subtrigger::Template.find('three'))
18
+ end
19
+
20
+ def test_should_raise_when_unparseable
21
+ assert_raise(Subtrigger::Template::Unparseable) { Subtrigger::Template.parse('foo') }
22
+ end
23
+
24
+ def test_should_keep_track_of_created_templates
25
+ assert_instance_of(Subtrigger::Template, Subtrigger::Template.find('one'))
26
+ end
27
+
28
+ def test_should_find_template_by_name
29
+ assert_equal('foo', Subtrigger::Template.find('one').string)
30
+ end
31
+
32
+ def test_should_convert_to_string
33
+ t = Subtrigger::Template.find('one')
34
+ assert_equal(t.string, t.to_s)
35
+ end
36
+
37
+ def test_should_format_template
38
+ t = Subtrigger::Template.find('two')
39
+ assert_equal('bar %s', t.to_s)
40
+ assert_equal('bar baz', t.format('baz'))
41
+ end
42
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subtrigger
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 2
8
- - 7
9
- version: 0.2.7
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Arjan van der Gaag
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-23 00:00:00 +02:00
18
- default_executable: subtrigger
18
+ date: 2010-07-16 00:00:00 +02:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: thoughtbot-shoulda
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 0
29
32
  version: "0"
@@ -33,41 +36,56 @@ dependencies:
33
36
  name: mocha
34
37
  prerelease: false
35
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
36
40
  requirements:
37
41
  - - ">="
38
42
  - !ruby/object:Gem::Version
43
+ hash: 3
39
44
  segments:
40
45
  - 0
41
46
  version: "0"
42
47
  type: :development
43
48
  version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: pony
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
44
63
  description: This gem allows you to create simple Ruby triggers for Subversion commit messages, responding to keywords in your log messages to send e-mails, deploy sites or do whatever you need.
45
64
  email: arjan@arjanvandergaag.nl
46
- executables:
47
- - subtrigger
65
+ executables: []
66
+
48
67
  extensions: []
49
68
 
50
69
  extra_rdoc_files:
51
- - LICENSE
52
- - README.rdoc
70
+ - README.md
53
71
  files:
54
72
  - .document
55
73
  - .gitignore
56
- - LICENSE
57
- - README.rdoc
74
+ - README.md
58
75
  - Rakefile
59
76
  - VERSION
60
- - bin/subtrigger
61
77
  - lib/subtrigger.rb
62
- - lib/subtrigger/email.rb
63
- - lib/subtrigger/repository.rb
64
- - lib/subtrigger/trigger.rb
78
+ - lib/subtrigger/dsl.rb
79
+ - lib/subtrigger/path.rb
80
+ - lib/subtrigger/revision.rb
81
+ - lib/subtrigger/rule.rb
82
+ - lib/subtrigger/template.rb
65
83
  - subtrigger.gemspec
66
- - test/helper.rb
67
- - test/test_email.rb
68
- - test/test_repository.rb
69
- - test/test_subtrigger.rb
70
- - test/test_trigger.rb
84
+ - test/test_helper.rb
85
+ - test/test_path.rb
86
+ - test/test_revision.rb
87
+ - test/test_rule.rb
88
+ - test/test_template.rb
71
89
  has_rdoc: true
72
90
  homepage: http://github.com/avdgaag/subtrigger
73
91
  licenses: []
@@ -78,29 +96,33 @@ rdoc_options:
78
96
  require_paths:
79
97
  - lib
80
98
  required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
81
100
  requirements:
82
101
  - - ">="
83
102
  - !ruby/object:Gem::Version
103
+ hash: 3
84
104
  segments:
85
105
  - 0
86
106
  version: "0"
87
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
88
109
  requirements:
89
110
  - - ">="
90
111
  - !ruby/object:Gem::Version
112
+ hash: 3
91
113
  segments:
92
114
  - 0
93
115
  version: "0"
94
116
  requirements: []
95
117
 
96
118
  rubyforge_project:
97
- rubygems_version: 1.3.6
119
+ rubygems_version: 1.3.7
98
120
  signing_key:
99
121
  specification_version: 3
100
122
  summary: Create post-commit triggers for Subversion commit messages
101
123
  test_files:
102
- - test/helper.rb
103
- - test/test_email.rb
104
- - test/test_repository.rb
105
- - test/test_subtrigger.rb
106
- - test/test_trigger.rb
124
+ - test/test_helper.rb
125
+ - test/test_path.rb
126
+ - test/test_revision.rb
127
+ - test/test_rule.rb
128
+ - test/test_template.rb
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2010 Arjan van der Gaag
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc DELETED
@@ -1,56 +0,0 @@
1
- = subtrigger
2
-
3
- Subtrigger is a tiny tool for firing callback methods based on triggers in subversion log messages. This allows you to send out e-mail notifications after a commit, or take some other action based on keywords in Subversion's log messages.
4
-
5
- Here's a quick example:
6
-
7
- # use as post-commit hook in /path/to/repo/hooks
8
- require 'subtrigger'
9
- Subtrigger.on(/log: (\w+)/) { |matches, repo|
10
- puts "#{repo.author} committed #{matches[0]} in revision #{repo.revision}"
11
- }.run(*ARGV)
12
-
13
- == Documentation
14
-
15
- See the inline API documentation for descriptions and usage examples.
16
-
17
- == Credits
18
-
19
- Author:: Arjan van der Gaag
20
- E-mail:: arjan@arjanvandergaag.nl
21
- URL:: http://arjanvandergaag.nl
22
- Source:: http://github.com/avdgaag/subtrigger
23
-
24
- == Note on Patches/Pull Requests
25
-
26
- * Fork the project.
27
- * Make your feature addition or bug fix.
28
- * Add tests for it. This is important so I don't break it in a
29
- future version unintentionally.
30
- * Commit, do not mess with rakefile, version, or history.
31
- (if you want to have your own version, that is fine but bump version in a
32
- commit by itself I can ignore when I pull)
33
- * Send me a pull request. Bonus points for topic branches.
34
-
35
- == Copyright
36
-
37
- Copyright (c) 2010 Arjan van der Gaag
38
-
39
- Permission is hereby granted, free of charge, to any person obtaining
40
- a copy of this software and associated documentation files (the
41
- "Software"), to deal in the Software without restriction, including
42
- without limitation the rights to use, copy, modify, merge, publish,
43
- distribute, sublicense, and/or sell copies of the Software, and to
44
- permit persons to whom the Software is furnished to do so, subject to
45
- the following conditions:
46
-
47
- The above copyright notice and this permission notice shall be
48
- included in all copies or substantial portions of the Software.
49
-
50
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
51
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
52
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
53
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
54
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
55
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
56
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/bin/subtrigger DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/local/bin/ruby
2
- $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
3
- require 'subtrigger'
4
-
5
- if ARGV.size == 1 && ARGV.first =~ /-v|--version/
6
- puts Subtrigger.version
7
- else
8
- Subtrigger.run(*ARGV)
9
- end