gitosis_easy_conf 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,187 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gitosis_easy_conf}
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Gerrit Riessen"]
12
+ s.date = %q{2011-09-01}
13
+ s.description = %q{Easy gitosis configuration}
14
+ s.email = %q{gerrit.riessen@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "examples/Rakefile",
28
+ "examples/gitosis.complex.conf",
29
+ "examples/gitosis.concise.conf",
30
+ "examples/gitosis.readme.conf",
31
+ "gitosis_easy_conf.gemspec",
32
+ "lib/gitosis_easy_conf.rb",
33
+ "lib/gitosis_easy_conf/config.rb",
34
+ "lib/gitosis_easy_conf/forkers.rb",
35
+ "lib/gitosis_easy_conf/groups.rb",
36
+ "lib/gitosis_easy_conf/repositories.rb",
37
+ "test/helper.rb",
38
+ "test/test_gitosis_config.rb",
39
+ "test/test_gitosis_forker.rb",
40
+ "test/test_gitosis_groups.rb",
41
+ "test/test_gitosis_repositories.rb"
42
+ ]
43
+ s.homepage = %q{https://github.com/gorenje/gitosis_easy_conf}
44
+ s.licenses = ["MIT"]
45
+ s.require_paths = ["lib"]
46
+ s.rubygems_version = %q{1.6.2}
47
+ s.summary = %q{Make writing a gitosis configuration easier}
48
+
49
+ if s.respond_to? :specification_version then
50
+ s.specification_version = 3
51
+
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_runtime_dependency(%q<gitosis_easy_conf>, [">= 0"])
54
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_development_dependency(%q<rake>, [">= 0"])
56
+ s.add_development_dependency(%q<inifile>, [">= 0"])
57
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
58
+ s.add_development_dependency(%q<rcov>, [">= 0"])
59
+ s.add_development_dependency(%q<rr>, [">= 0"])
60
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
61
+ s.add_development_dependency(%q<rake>, [">= 0"])
62
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
63
+ s.add_development_dependency(%q<inifile>, [">= 0"])
64
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
65
+ s.add_development_dependency(%q<rcov>, [">= 0"])
66
+ s.add_development_dependency(%q<rr>, [">= 0"])
67
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
68
+ s.add_development_dependency(%q<rake>, [">= 0"])
69
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
70
+ s.add_development_dependency(%q<inifile>, [">= 0"])
71
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
72
+ s.add_development_dependency(%q<rcov>, [">= 0"])
73
+ s.add_development_dependency(%q<rr>, [">= 0"])
74
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
75
+ s.add_development_dependency(%q<rake>, [">= 0"])
76
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
77
+ s.add_development_dependency(%q<inifile>, [">= 0"])
78
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
79
+ s.add_development_dependency(%q<rcov>, [">= 0"])
80
+ s.add_development_dependency(%q<rr>, [">= 0"])
81
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
82
+ s.add_development_dependency(%q<rake>, [">= 0"])
83
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
84
+ s.add_development_dependency(%q<inifile>, [">= 0"])
85
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
86
+ s.add_development_dependency(%q<rcov>, [">= 0"])
87
+ s.add_development_dependency(%q<rr>, [">= 0"])
88
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
89
+ s.add_development_dependency(%q<rake>, [">= 0"])
90
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
91
+ s.add_development_dependency(%q<inifile>, [">= 0"])
92
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
93
+ s.add_development_dependency(%q<rcov>, [">= 0"])
94
+ s.add_development_dependency(%q<rr>, [">= 0"])
95
+ s.add_runtime_dependency(%q<inifile>, [">= 0"])
96
+ else
97
+ s.add_dependency(%q<gitosis_easy_conf>, [">= 0"])
98
+ s.add_dependency(%q<shoulda>, [">= 0"])
99
+ s.add_dependency(%q<rake>, [">= 0"])
100
+ s.add_dependency(%q<inifile>, [">= 0"])
101
+ s.add_dependency(%q<rdoc>, [">= 0"])
102
+ s.add_dependency(%q<rcov>, [">= 0"])
103
+ s.add_dependency(%q<rr>, [">= 0"])
104
+ s.add_dependency(%q<shoulda>, [">= 0"])
105
+ s.add_dependency(%q<rake>, [">= 0"])
106
+ s.add_dependency(%q<jeweler>, [">= 0"])
107
+ s.add_dependency(%q<inifile>, [">= 0"])
108
+ s.add_dependency(%q<rdoc>, [">= 0"])
109
+ s.add_dependency(%q<rcov>, [">= 0"])
110
+ s.add_dependency(%q<rr>, [">= 0"])
111
+ s.add_dependency(%q<shoulda>, [">= 0"])
112
+ s.add_dependency(%q<rake>, [">= 0"])
113
+ s.add_dependency(%q<jeweler>, [">= 0"])
114
+ s.add_dependency(%q<inifile>, [">= 0"])
115
+ s.add_dependency(%q<rdoc>, [">= 0"])
116
+ s.add_dependency(%q<rcov>, [">= 0"])
117
+ s.add_dependency(%q<rr>, [">= 0"])
118
+ s.add_dependency(%q<shoulda>, [">= 0"])
119
+ s.add_dependency(%q<rake>, [">= 0"])
120
+ s.add_dependency(%q<jeweler>, [">= 0"])
121
+ s.add_dependency(%q<inifile>, [">= 0"])
122
+ s.add_dependency(%q<rdoc>, [">= 0"])
123
+ s.add_dependency(%q<rcov>, [">= 0"])
124
+ s.add_dependency(%q<rr>, [">= 0"])
125
+ s.add_dependency(%q<shoulda>, [">= 0"])
126
+ s.add_dependency(%q<rake>, [">= 0"])
127
+ s.add_dependency(%q<jeweler>, [">= 0"])
128
+ s.add_dependency(%q<inifile>, [">= 0"])
129
+ s.add_dependency(%q<rdoc>, [">= 0"])
130
+ s.add_dependency(%q<rcov>, [">= 0"])
131
+ s.add_dependency(%q<rr>, [">= 0"])
132
+ s.add_dependency(%q<shoulda>, [">= 0"])
133
+ s.add_dependency(%q<rake>, [">= 0"])
134
+ s.add_dependency(%q<jeweler>, [">= 0"])
135
+ s.add_dependency(%q<inifile>, [">= 0"])
136
+ s.add_dependency(%q<rdoc>, [">= 0"])
137
+ s.add_dependency(%q<rcov>, [">= 0"])
138
+ s.add_dependency(%q<rr>, [">= 0"])
139
+ s.add_dependency(%q<inifile>, [">= 0"])
140
+ end
141
+ else
142
+ s.add_dependency(%q<gitosis_easy_conf>, [">= 0"])
143
+ s.add_dependency(%q<shoulda>, [">= 0"])
144
+ s.add_dependency(%q<rake>, [">= 0"])
145
+ s.add_dependency(%q<inifile>, [">= 0"])
146
+ s.add_dependency(%q<rdoc>, [">= 0"])
147
+ s.add_dependency(%q<rcov>, [">= 0"])
148
+ s.add_dependency(%q<rr>, [">= 0"])
149
+ s.add_dependency(%q<shoulda>, [">= 0"])
150
+ s.add_dependency(%q<rake>, [">= 0"])
151
+ s.add_dependency(%q<jeweler>, [">= 0"])
152
+ s.add_dependency(%q<inifile>, [">= 0"])
153
+ s.add_dependency(%q<rdoc>, [">= 0"])
154
+ s.add_dependency(%q<rcov>, [">= 0"])
155
+ s.add_dependency(%q<rr>, [">= 0"])
156
+ s.add_dependency(%q<shoulda>, [">= 0"])
157
+ s.add_dependency(%q<rake>, [">= 0"])
158
+ s.add_dependency(%q<jeweler>, [">= 0"])
159
+ s.add_dependency(%q<inifile>, [">= 0"])
160
+ s.add_dependency(%q<rdoc>, [">= 0"])
161
+ s.add_dependency(%q<rcov>, [">= 0"])
162
+ s.add_dependency(%q<rr>, [">= 0"])
163
+ s.add_dependency(%q<shoulda>, [">= 0"])
164
+ s.add_dependency(%q<rake>, [">= 0"])
165
+ s.add_dependency(%q<jeweler>, [">= 0"])
166
+ s.add_dependency(%q<inifile>, [">= 0"])
167
+ s.add_dependency(%q<rdoc>, [">= 0"])
168
+ s.add_dependency(%q<rcov>, [">= 0"])
169
+ s.add_dependency(%q<rr>, [">= 0"])
170
+ s.add_dependency(%q<shoulda>, [">= 0"])
171
+ s.add_dependency(%q<rake>, [">= 0"])
172
+ s.add_dependency(%q<jeweler>, [">= 0"])
173
+ s.add_dependency(%q<inifile>, [">= 0"])
174
+ s.add_dependency(%q<rdoc>, [">= 0"])
175
+ s.add_dependency(%q<rcov>, [">= 0"])
176
+ s.add_dependency(%q<rr>, [">= 0"])
177
+ s.add_dependency(%q<shoulda>, [">= 0"])
178
+ s.add_dependency(%q<rake>, [">= 0"])
179
+ s.add_dependency(%q<jeweler>, [">= 0"])
180
+ s.add_dependency(%q<inifile>, [">= 0"])
181
+ s.add_dependency(%q<rdoc>, [">= 0"])
182
+ s.add_dependency(%q<rcov>, [">= 0"])
183
+ s.add_dependency(%q<rr>, [">= 0"])
184
+ s.add_dependency(%q<inifile>, [">= 0"])
185
+ end
186
+ end
187
+
@@ -0,0 +1,26 @@
1
+ module Gitosis
2
+ class Config
3
+ def initialize(&block)
4
+ @configs = {}
5
+ instance_eval(&block)
6
+ end
7
+
8
+ def method_missing(method, *args, &block)
9
+ if args.length > 0 || block_given?
10
+ @configs[method] = case method
11
+ when :fork_naming_convention then
12
+ if block_given? && ![2,-1].include?(block.arity)
13
+ raise BlockArityIncorrect, "Block needs exactly two arguments"
14
+ end
15
+ block
16
+ when :filename then
17
+ args.first
18
+ else
19
+ [args, block]
20
+ end
21
+ else
22
+ @configs[method]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ # Define a mapping from a Gitosis user and their public key. Here the use of string and
2
+ # symbol are unimportant, i.e.
3
+ # Gitosis.forkers do
4
+ # fubar :key_one
5
+ # fubar "key_one"
6
+ # end
7
+ # are equivalent.
8
+ #
9
+ module Gitosis
10
+ class Forker
11
+ def initialize(&block)
12
+ @forkers = {}
13
+ instance_eval(&block)
14
+ end
15
+
16
+ def method_missing(method, *args, &block)
17
+ if args.length > 0
18
+
19
+ if @forkers.values.include?(args.first.to_s)
20
+ raise(SamePublicKeyForForkers, "Key '#{args.first}' used by '#{method}' "+
21
+ "and #{@forkers.invert[args.first.to_s]}'")
22
+ end
23
+
24
+ if @forkers.keys.include?(method)
25
+ raise(ForkerAlreadyDefined, "Forker '#{method}' already defined with key: " +
26
+ "#{@forkers[method]}")
27
+ end
28
+
29
+ @forkers[method] = args.first.to_s
30
+ else
31
+ raise(Gitosis::UnknownForker,
32
+ "Forker '#{method}' Not Found") unless @forkers.keys.include?(method)
33
+ @forkers[method]
34
+ end
35
+ end
36
+
37
+ def [](name)
38
+ send(name.to_sym)
39
+ end
40
+
41
+ def all
42
+ @forkers.keys
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,69 @@
1
+ # Group definition use strings and symbols to define groups with mutliple members and
2
+ # shared membership:
3
+ # Gitosis.groups do
4
+ # fubar 'public.key'
5
+ # snafu :fubar
6
+ # luke 'fubar'
7
+ # combined :luke, :snafu, :fubar
8
+ # end
9
+ #
10
+ # This means that the following have the values:
11
+ # Gitosis.groups[:fubar] ==> 'public.key'
12
+ # Gitosis.groups[:snafu] ==> 'public.key'
13
+ # Gitosis.groups[:luke] ==> 'fubar'
14
+ # Gitosis.groups[:combined] ==> 'public.key fubar'
15
+ #
16
+ # String values are public keys and symbols are references to group names.
17
+ # Duplicate key names are removed and returned is a concatenation of all keys.
18
+ #
19
+ module Gitosis
20
+ class Group
21
+
22
+ def initialize(&block)
23
+ @groups = {}
24
+ instance_eval(&block)
25
+ end
26
+
27
+ def method_missing(method, *args, &block)
28
+ if args.length > 0
29
+ @groups[method.to_sym] = args
30
+ else
31
+ raise UnknownGroup, "Unkown group '#{method}'" unless @groups[method]
32
+ @groups[method].uniq.join(" ")
33
+ end
34
+ end
35
+
36
+ def denormalize
37
+ @groups.keys.each do |key|
38
+ @groups[key] = @groups[key].collect do |member|
39
+ @_refs = []
40
+ denormalize_member(member)
41
+ end.flatten
42
+ end
43
+ self
44
+ end
45
+
46
+ def [](name)
47
+ send(name)
48
+ end
49
+
50
+ private
51
+
52
+ def denormalize_member(member)
53
+ case member
54
+ when String then member
55
+ when Symbol
56
+ if @_refs.include?(member)
57
+ raise SelfReferencingGroup, "Group '#{member}' cycle reference"
58
+ end
59
+ @_refs << member
60
+
61
+ raise UnknownGroup, "Unkown group '#{member}'" unless @groups[member]
62
+
63
+ @groups[member].collect { |a| denormalize_member(a) }
64
+ else
65
+ raise UnknownGroupType, "Group '#{member}' type not supported: #{member.class}"
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,88 @@
1
+ # Definition of a gitosis repository.
2
+ #
3
+ require 'inifile'
4
+
5
+ module Gitosis
6
+ EmptyConfig = {
7
+ :writable => [], :readable => [], :forks => []
8
+ }
9
+
10
+ class Repository
11
+ def initialize(&block)
12
+ @base_config = EmptyConfig
13
+
14
+ conf_file_name = Gitosis.config.filename
15
+ @no_file_found = if conf_file_name.nil? or !File.exists?(conf_file_name)
16
+ @conffile = {}
17
+ true
18
+ else
19
+ @conffile = IniFile.new(conf_file_name)
20
+ false
21
+ end
22
+ @conffile["gitosis"] = {}
23
+ @origconffile = @conffile.clone
24
+
25
+ @fork_name = Gitosis.config.fork_naming_convention || lambda do |repo,forker|
26
+ "#{forker}_#{repo}"
27
+ end
28
+
29
+ instance_eval(&block)
30
+ end
31
+
32
+ def write
33
+ @conffile.write unless @conffile.eql?(@origconffile) || @no_file_found
34
+ end
35
+
36
+ def with_base_configuration(config,&block)
37
+ @base_config = config || EmptyConfig
38
+ instance_eval(&block)
39
+ @base_config = EmptyConfig
40
+ end
41
+
42
+ def method_missing(method, *args, &block)
43
+ args = [{}] if args.first.nil?
44
+ repo_name = (args.first[:name] || method).to_sym
45
+
46
+ committers = _get_keys([@base_config,args.first].map{|h| h[:writable]})
47
+ @conffile["group #{repo_name}.writable"] = {
48
+ 'members' => committers,
49
+ 'writable' => repo_name.to_s
50
+ } unless committers == ""
51
+
52
+ readers = _get_keys([@base_config,args.first].map{|h| h[:readable]})
53
+ @conffile["group #{repo_name}.readonly"] = {
54
+ 'members' => readers,
55
+ 'readonly' => repo_name.to_s
56
+ } unless readers == ""
57
+
58
+ [@base_config, args.first].map { |h| h[:forks] }.flatten.compact.
59
+ collect { |a| a == :all ? Gitosis.forkers.all : a }.flatten.compact.each do |forker|
60
+
61
+ fork_repo_name = @fork_name.call(repo_name,forker)
62
+
63
+ @conffile["group fork.#{repo_name}.#{forker}.writable"] = {
64
+ 'members' => ::Forker[forker],
65
+ 'writable' => fork_repo_name,
66
+ }
67
+
68
+ @conffile["group fork.#{repo_name}.#{forker}.readonly"] = {
69
+ 'members' => readers,
70
+ 'readonly' => fork_repo_name,
71
+ } unless readers == ""
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def _get_keys(ary)
78
+ ary.flatten.compact.collect do |member|
79
+ case member
80
+ when String then member
81
+ when Symbol then Gitosis.groups[member]
82
+ else
83
+ raise UnknownGroup, "Group '#{member}'"
84
+ end
85
+ end.flatten.join(' ')
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,60 @@
1
+ require 'gitosis_easy_conf/repositories'
2
+ require 'gitosis_easy_conf/groups'
3
+ require 'gitosis_easy_conf/forkers'
4
+ require 'gitosis_easy_conf/config'
5
+
6
+ module Gitosis
7
+ extend self
8
+
9
+ # Exceptions
10
+ %w[
11
+ SelfReferencingGroup UnknownForker UnknownGroup
12
+ UnknownGroupType SamePublicKeyForForkers ForkerAlreadyDefined
13
+ BlockArityIncorrect
14
+ ].each do |exception_name|
15
+ const_set( exception_name, Class.new(StandardError))
16
+ end
17
+
18
+ # Configuration verbs -- config, forkers, groups (or roles) and repositories.
19
+ def config(&block)
20
+ if block_given?
21
+ if defined?(@@config)
22
+ @@config.instance_eval(&block)
23
+ else
24
+ @@config = Config.new(&block)
25
+ end
26
+ else
27
+ @@config ||= Config.new(){}
28
+ end
29
+ end
30
+
31
+ def forkers(&block)
32
+ block_given? ? @@forkers = Forker.new(&block) : (@@forkers ||= nil)
33
+ end
34
+
35
+ def groups(&block)
36
+ block_given? ? @@groups = Group.new(&block).denormalize : (@@groups ||= nil)
37
+ end
38
+ alias :roles :groups
39
+
40
+ def repositories(&block)
41
+ block_given? ? @@repository = Repository.new(&block) : @@repository
42
+ end
43
+
44
+ def setup(filename = nil, &block)
45
+ config do
46
+ filename filename
47
+ end
48
+
49
+ class_eval(&block)
50
+ repositories.write
51
+ end
52
+ end
53
+
54
+ class Forker
55
+ class << self
56
+ def [](name)
57
+ Gitosis.forkers.send(name.to_sym)
58
+ end
59
+ end
60
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+ require 'inifile'
13
+ require 'rr'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'gitosis_easy_conf'
18
+
19
+ class Test::Unit::TestCase
20
+ include RR::Adapters::TestUnit
21
+
22
+ # used in the repository tests, compares the complete gitosis configuration.
23
+ # assumes the existence of @results hash.
24
+ def assert_config(expected,msg)
25
+ assert_equal( (["gitosis"] + expected.keys).sort, @results.keys.sort,
26
+ msg + " (top level keys)")
27
+ assert_equal( {}, @results["gitosis"], msg + " (empty gitosis)")
28
+
29
+ expected.keys.each do |group_keys|
30
+ gmsg = msg + " [#{group_keys}]"
31
+ assert_equal(expected[group_keys].keys.sort,
32
+ @results[group_keys].keys.sort, gmsg+" (prop keys)")
33
+
34
+ exp, com = expected[group_keys], @results[group_keys]
35
+ exp.keys.each do |property_key|
36
+ assert_equal exp[property_key], com[property_key], gmsg + " [#{property_key}]"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,99 @@
1
+ require 'helper'
2
+
3
+ class TestGitosisConfig < Test::Unit::TestCase
4
+ context "config" do
5
+
6
+ should "return a config hash if block given" do
7
+ Gitosis.config do
8
+ fubar(:one,:two) do
9
+ puts "blah"
10
+ end
11
+ end
12
+ assert_equal [:one,:two], Gitosis.config.fubar.first
13
+ assert Gitosis.config.fubar.last.is_a?(Proc)
14
+ end
15
+
16
+ should "return a filename" do
17
+ Gitosis.config do
18
+ filename
19
+ end
20
+ assert_equal nil, Gitosis.config.filename
21
+
22
+ Gitosis.config do
23
+ filename do
24
+ puts "blah"
25
+ end
26
+ end
27
+ assert_equal nil, Gitosis.config.filename
28
+
29
+ Gitosis.config do
30
+ filename("fubar","snafu") do
31
+ puts "blah"
32
+ end
33
+ end
34
+ assert_equal "fubar", Gitosis.config.filename
35
+ end
36
+
37
+ should "return a fork_name_convention" do
38
+ Gitosis.config do
39
+ fork_name_convention
40
+ end
41
+ assert_equal nil, Gitosis.config.fork_naming_convention
42
+
43
+ Gitosis.config do
44
+ fork_name_convention("one")
45
+ end
46
+ assert_equal nil, Gitosis.config.fork_naming_convention
47
+
48
+ Gitosis.config do
49
+ fork_naming_convention("fubar","snafu") do |para,para2|
50
+ "#{para}+#{para2}"
51
+ end
52
+ end
53
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
54
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
55
+
56
+ Gitosis.config do
57
+ fork_naming_convention do |para,para2|
58
+ "#{para}+#{para2}"
59
+ end
60
+ end
61
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
62
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
63
+
64
+ Gitosis.config do
65
+ fork_naming_convention do |*args|
66
+ '%s+%s' % args.map { |a| a.to_s }
67
+ end
68
+ end
69
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
70
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
71
+ end
72
+
73
+ should "fork_name_convention should complain if arity is not correct" do
74
+ assert_raises Gitosis::BlockArityIncorrect do
75
+ Gitosis.config do
76
+ fork_naming_convention("fubar","snafu") do
77
+ nil
78
+ end
79
+ end
80
+ end
81
+
82
+ assert_raises Gitosis::BlockArityIncorrect do
83
+ Gitosis.config do
84
+ fork_naming_convention("fubar","snafu") do |a|
85
+ nil
86
+ end
87
+ end
88
+ end
89
+
90
+ assert_raises Gitosis::BlockArityIncorrect do
91
+ Gitosis.config do
92
+ fork_naming_convention("fubar","snafu") do |a,b,c|
93
+ nil
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end