jenkins_pipeline_builder 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +65 -0
  3. data/LICENSE +1 -1
  4. data/README.md +64 -2
  5. data/Rakefile +13 -11
  6. data/bin/generate +2 -4
  7. data/jenkins_pipeline_builder.gemspec +14 -11
  8. data/lib/jenkins_pipeline_builder.rb +2 -1
  9. data/lib/jenkins_pipeline_builder/builders.rb +89 -33
  10. data/lib/jenkins_pipeline_builder/cli/base.rb +21 -29
  11. data/lib/jenkins_pipeline_builder/cli/helper.rb +12 -15
  12. data/lib/jenkins_pipeline_builder/cli/pipeline.rb +6 -1
  13. data/lib/jenkins_pipeline_builder/cli/view.rb +2 -2
  14. data/lib/jenkins_pipeline_builder/compiler.rb +58 -56
  15. data/lib/jenkins_pipeline_builder/generator.rb +362 -172
  16. data/lib/jenkins_pipeline_builder/job_builder.rb +48 -45
  17. data/lib/jenkins_pipeline_builder/module_registry.rb +4 -6
  18. data/lib/jenkins_pipeline_builder/publishers.rb +53 -38
  19. data/lib/jenkins_pipeline_builder/pull_request.rb +156 -0
  20. data/lib/jenkins_pipeline_builder/triggers.rb +24 -25
  21. data/lib/jenkins_pipeline_builder/utils.rb +13 -7
  22. data/lib/jenkins_pipeline_builder/version.rb +2 -2
  23. data/lib/jenkins_pipeline_builder/view.rb +120 -98
  24. data/lib/jenkins_pipeline_builder/wrappers.rb +44 -44
  25. data/lib/jenkins_pipeline_builder/xml_helper.rb +4 -4
  26. data/spec/func_tests/spec_helper.rb +2 -2
  27. data/spec/func_tests/view_spec.rb +6 -6
  28. data/spec/unit_tests/compiler_spec.rb +7 -7
  29. data/spec/unit_tests/fixtures/files/Job-Gem-Build.xml +2 -2
  30. data/spec/unit_tests/fixtures/files/Job-Gem-Build.yaml +1 -0
  31. data/spec/unit_tests/fixtures/files/concurrent_build.xml +17 -0
  32. data/spec/unit_tests/fixtures/files/concurrent_build.yaml +4 -0
  33. data/spec/unit_tests/fixtures/files/downstream_blocking.xml +19 -0
  34. data/spec/unit_tests/fixtures/files/downstream_blocking.yaml +15 -0
  35. data/spec/unit_tests/fixtures/files/groovy_postbuild.xml +29 -0
  36. data/spec/unit_tests/fixtures/files/groovy_postbuild.yaml +9 -0
  37. data/spec/unit_tests/generator_spec.rb +30 -25
  38. data/spec/unit_tests/module_registry_spec.rb +9 -9
  39. data/spec/unit_tests/resolve_dependencies_spec.rb +108 -89
  40. data/spec/unit_tests/spec_helper.rb +1 -1
  41. metadata +62 -4
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -25,12 +25,12 @@ module JenkinsPipelineBuilder
25
25
  def self.update_node_text(n_xml, path, value)
26
26
  n_node = n_xml.xpath(path).first
27
27
  if n_node.nil?
28
- left, right = path.match(/^(.*)\/([^\/]*)$/).captures
28
+ left, right = path.match(%r{^(.*)/([^/]*)$}).captures
29
29
  parent_node = n_xml.xpath(left).first
30
30
  Nokogiri::XML::Builder.with(parent_node) do |xml|
31
- xml.send(right) {
31
+ xml.send(right) do
32
32
  xml.text value
33
- }
33
+ end
34
34
  end
35
35
  else
36
36
  n_node.content = value
@@ -4,14 +4,14 @@ require 'rspec'
4
4
  require 'simplecov'
5
5
  require 'simplecov-rcov'
6
6
 
7
- SimpleCov.start if ENV["COVERAGE"]
7
+ SimpleCov.start if ENV['COVERAGE']
8
8
 
9
9
  require File.expand_path('../../../lib/jenkins_pipeline_builder', __FILE__)
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.treat_symbols_as_metadata_keys_with_true_values = true
13
13
  config.run_all_when_everything_filtered = true
14
- config.filter_run_excluding :broken => true
14
+ config.filter_run_excluding broken: true
15
15
 
16
16
  config.before(:each) do
17
17
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::View do
4
- context "With properly initialized client" do
4
+ context 'With properly initialized client' do
5
5
  before(:all) do
6
6
  @creds_file = '~/.jenkins_api_client/login.yml'
7
7
  @valid_post_responses = [200, 201, 302]
@@ -10,9 +10,9 @@ describe JenkinsPipelineBuilder::View do
10
10
  YAML.load_file(File.expand_path(@creds_file, __FILE__))
11
11
  )
12
12
  @client.logger.level = Logger::DEBUG
13
- @generator = JenkinsPipelineBuilder::Generator.new(nil, @client)
13
+ @generator = JenkinsPipelineBuilder::Generator.new(@client)
14
14
  @generator.no_files = true
15
- rescue Exception => e
15
+ rescue StandardError => e
16
16
  puts 'WARNING: Credentials are not set properly.'
17
17
  puts e.message
18
18
  end
@@ -43,7 +43,7 @@ describe JenkinsPipelineBuilder::View do
43
43
 
44
44
  it 'accepts the name of the view and creates the view' do
45
45
  params = {
46
- :name => 'test_list_view'
46
+ name: 'test_list_view'
47
47
  }
48
48
 
49
49
  test_and_validate(params)
@@ -76,10 +76,10 @@ describe JenkinsPipelineBuilder::View do
76
76
  groupingRules: [{
77
77
  groupRegex: 'Step-1.*',
78
78
  namingRule: '1. Commit'
79
- },{
79
+ }, {
80
80
  groupRegex: 'Step-2.*',
81
81
  namingRule: '2. Acceptance'
82
- },{
82
+ }, {
83
83
  groupRegex: 'Step-3.*',
84
84
  namingRule: '3. Release'
85
85
  }]
@@ -3,13 +3,13 @@ require File.expand_path('../spec_helper', __FILE__)
3
3
  describe 'Compiler' do
4
4
  it 'transforms hash into hash' do
5
5
  hash = {
6
- a: 'A sentence',
7
- b: 'B sentence',
8
- hash: {
9
- c: 5,
10
- d: true
11
- },
12
- z: false
6
+ a: 'A sentence',
7
+ b: 'B sentence',
8
+ hash: {
9
+ c: 5,
10
+ d: true
11
+ },
12
+ z: false
13
13
  }
14
14
 
15
15
  success, result = JenkinsPipelineBuilder::Compiler.compile(hash)
@@ -105,7 +105,7 @@
105
105
  </details>
106
106
  <deployPattern>pkg/*.gem</deployPattern>
107
107
  <resolvePattern/>
108
- <matrixParams/>
108
+ <matrixParams>foo=bar</matrixParams>
109
109
  <deployBuildInfo>true</deployBuildInfo>
110
110
  <includeEnvVars>false</includeEnvVars>
111
111
  <envVarsPatterns>
@@ -139,4 +139,4 @@
139
139
  </ruby-object>
140
140
  </ruby-proxy-object>
141
141
  </buildWrappers>
142
- </project>
142
+ </project>
@@ -17,6 +17,7 @@
17
17
  release-repo: gems-local
18
18
  publish: 'pkg/*.gem'
19
19
  publish-build-info: true
20
+ properties: foo=bar
20
21
  - inject_env_var:
21
22
  content: |
22
23
  VAR1 = value_1
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description>Testing concurrent build setting</description>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>true</concurrentBuild>
14
+ <builders/>
15
+ <publishers/>
16
+ <buildWrappers/>
17
+ </project>
@@ -0,0 +1,4 @@
1
+ - job:
2
+ name: concurrent_build
3
+ description: 'Testing concurrent build setting'
4
+ concurrent_build: true
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description/>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>false</concurrentBuild>
14
+ <builders><hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger"><configs><hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig><configs><hudson.plugins.parameterizedtrigger.PredefinedBuildParameters><properties>param1
15
+ param2
16
+ </properties></hudson.plugins.parameterizedtrigger.PredefinedBuildParameters></configs><projects>downstream</projects><condition>FAILURE</condition><triggerWithNoParameters>false</triggerWithNoParameters><block><buildStepFailureThreshold><name>FAILURE</name><ordinal>2</ordinal><color>RED</color><completeBuild>true</completeBuild></buildStepFailureThreshold><failureThreshold><name>SUCCESS</name><ordinal>0</ordinal><color>BLUE</color><completeBuild>true</completeBuild></failureThreshold><unstableThreshold><name>UNSTABLE</name><ordinal>1</ordinal><color>YELLOW</color><completeBuild>true</completeBuild></unstableThreshold></block><buildAllNodesWithLabel>false</buildAllNodesWithLabel></hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig></configs></hudson.plugins.parameterizedtrigger.TriggerBuilder></builders>
17
+ <publishers/>
18
+ <buildWrappers/>
19
+ </project>
@@ -0,0 +1,15 @@
1
+ ---
2
+ - job:
3
+ name: downstream_blocking
4
+ builders:
5
+ - blocking_downstream:
6
+ project: downstream
7
+ data:
8
+ - params: |
9
+ param1
10
+ param2
11
+ condition: FAILURE
12
+ trigger_with_no_parameters: false
13
+ fail: FAILURE
14
+ mark_fail: SUCCESS
15
+ mark_unstable: UNSTABLE
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description/>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>false</concurrentBuild>
14
+ <builders/>
15
+ <publishers>
16
+ <org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder plugin="groovy-postbuild">
17
+ <groovyScript>manager.listener.logger.println "Testing Groovy Postbuild: ${manager.build.result}"</groovyScript>
18
+ <behavior>0</behavior>
19
+ <runFormMatrixParent>false</runFormMatrixParent>
20
+ <org.jvnet.hudson.plugins.groovypostbuild.GroovyScriptPath>
21
+ <path>/test</path>
22
+ </org.jvnet.hudson.plugins.groovypostbuild.GroovyScriptPath>
23
+ <org.jvnet.hudson.plugins.groovypostbuild.GroovyScriptPath>
24
+ <path>/test2</path>
25
+ </org.jvnet.hudson.plugins.groovypostbuild.GroovyScriptPath>
26
+ </org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder>
27
+ </publishers>
28
+ <buildWrappers/>
29
+ </project>
@@ -0,0 +1,9 @@
1
+ - job:
2
+ name: groovy_postbuild
3
+ publishers:
4
+ - groovy_postbuild:
5
+ groovy_script: 'manager.listener.logger.println "Testing Groovy Postbuild: ${manager.build.result}"'
6
+ behavior: 0
7
+ additional_classpaths:
8
+ - path: '/test'
9
+ - path: '/test2'
@@ -4,13 +4,13 @@ describe 'Test YAML jobs conversion to XML' do
4
4
  context 'Loading YAML files' do
5
5
  before do
6
6
  @client = JenkinsApi::Client.new(
7
- :server_ip => '127.0.0.1',
8
- :server_port => 8080,
9
- :username => 'username',
10
- :password => 'password',
11
- :log_location => '/dev/null'
7
+ server_ip: '127.0.0.1',
8
+ server_port: 8080,
9
+ username: 'username',
10
+ password: 'password',
11
+ log_location: '/dev/null'
12
12
  )
13
- @generator = JenkinsPipelineBuilder::Generator.new(nil, @client)
13
+ @generator = JenkinsPipelineBuilder::Generator.new(@client)
14
14
  @generator.debug = true
15
15
  @generator.no_files = true
16
16
  end
@@ -27,24 +27,27 @@ describe 'Test YAML jobs conversion to XML' do
27
27
  doc1.should be_equivalent_to(doc2)
28
28
  end
29
29
 
30
- files = [
31
- 'Job-Multi-Project',
32
- 'Job-Build-Maven',
33
- 'Job-Build-Flow',
34
- 'Job-Gem-Build',
35
- 'post_build_script',
36
- 'properties_file',
37
- 'downstream',
38
- 'upstream',
39
- 'rvm05',
40
- 'prepare_environment',
41
- 'remote_job',
42
- 'throttle',
43
- 'specific_priority',
44
- 'periodic_build',
45
- 'discard_old',
46
- 'choice_parameter'
47
- ]
30
+ files = %w(
31
+ Job-Multi-Project
32
+ Job-Build-Maven
33
+ Job-Build-Flow
34
+ Job-Gem-Build
35
+ post_build_script
36
+ properties_file
37
+ downstream
38
+ upstream
39
+ rvm05
40
+ prepare_environment
41
+ remote_job
42
+ throttle
43
+ specific_priority
44
+ periodic_build
45
+ discard_old
46
+ concurrent_build
47
+ choice_parameter
48
+ downstream_blocking
49
+ groovy_postbuild
50
+ )
48
51
 
49
52
  files.each do |file|
50
53
  it "should create expected XML from YAML '#{file}'" do
@@ -59,7 +62,7 @@ describe 'Test YAML jobs conversion to XML' do
59
62
  end
60
63
  end
61
64
 
62
- it "should create expected XML from YAML collection" do
65
+ it 'should create expected XML from YAML collection' do
63
66
  path = File.expand_path('../fixtures/files/', __FILE__)
64
67
 
65
68
  @generator.load_collection_from_path(path)
@@ -80,5 +83,7 @@ describe 'Test YAML jobs conversion to XML' do
80
83
  compare_jobs job, file_name
81
84
  end
82
85
  end
86
+
87
+ it 'downloads from remote repos'
83
88
  end
84
89
  end
@@ -4,16 +4,16 @@ describe 'ModuleRegistry' do
4
4
 
5
5
  it 'should return item by a specified path' do
6
6
 
7
- registry = JenkinsPipelineBuilder::ModuleRegistry.new ({
8
- zz: {
9
- aa: 'aa',
10
- bb: 'bb',
11
- cc: {
12
- dd: 'dd'
13
- }
7
+ registry = JenkinsPipelineBuilder::ModuleRegistry.new(
8
+ zz: {
9
+ aa: 'aa',
10
+ bb: 'bb',
11
+ cc: {
12
+ dd: 'dd'
14
13
  }
15
- })
14
+ }
15
+ )
16
16
 
17
17
  registry.get('zz/aa').should be == 'aa'
18
18
  end
19
- end
19
+ end
@@ -3,49 +3,49 @@ require File.expand_path('../spec_helper', __FILE__)
3
3
  describe 'Templates resolver' do
4
4
  before(:each) do
5
5
  @client = JenkinsApi::Client.new(
6
- :server_ip => '127.0.0.1',
7
- :server_port => 8080,
8
- :username => 'username',
9
- :password => 'password',
10
- :log_location => '/dev/null'
6
+ server_ip: '127.0.0.1',
7
+ server_port: 8080,
8
+ username: 'username',
9
+ password: 'password',
10
+ log_location: '/dev/null'
11
11
  )
12
- @generator = JenkinsPipelineBuilder::Generator.new(nil, @client)
12
+ @generator = JenkinsPipelineBuilder::Generator.new(@client)
13
13
  @generator.debug = true
14
14
  @generator.no_files = true
15
15
  end
16
16
 
17
17
  describe 'resolving settings bags' do
18
18
  it 'gives a bag when all the variables can be resolved' do
19
- str = %{
19
+ str = %(
20
20
  - project:
21
21
  name: project-name
22
22
  db: my_own_db_{{else}}
23
- }
23
+ )
24
24
  project = YAML.load(str)
25
25
  @generator.load_job_collection project
26
26
 
27
- #@generator.resolve_item('project-name')
28
- settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), { db: 'blah', else: "bum" })
29
- settings.should == { name: "project-name", db: "my_own_db_bum", else: "bum", }
27
+ # @generator.resolve_item('project-name')
28
+ settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum')
29
+ settings.should == { name: 'project-name', db: 'my_own_db_bum', else: 'bum' }
30
30
  end
31
31
 
32
32
  it 'returns nil when all the variables cant be resolved' do
33
- str = %{
33
+ str = %(
34
34
  - project:
35
35
  name: project-name
36
36
  db: my_own_db_{{else}}_{{blah}}
37
- }
37
+ )
38
38
  project = YAML.load(str)
39
39
  @generator.load_job_collection project
40
40
 
41
- #@generator.resolve_item('project-name')
42
- settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), { db: 'blah', else: "bum" })
41
+ # @generator.resolve_item('project-name')
42
+ settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum')
43
43
  settings.should be_nil
44
44
  end
45
45
  end
46
46
 
47
47
  it 'starts with the defaults section for settings bag' do
48
- str = %{
48
+ str = %(
49
49
  - defaults:
50
50
  name: global
51
51
  description: 'Do not edit this job through the web!'
@@ -59,32 +59,39 @@ describe 'Templates resolver' do
59
59
  db: my_own_db
60
60
  jobs:
61
61
  - 'foo-bar'
62
- }
62
+ )
63
63
  project = YAML.load(str)
64
64
  @generator.load_job_collection project
65
65
 
66
66
  success, project = @generator.resolve_project(@generator.get_item('project-name'))
67
67
 
68
68
  expect(success).to be_true
69
- expect(project).to eq({:name=>"project-name",
70
- :type=>:project,
71
- :value=>
72
- {:name=>"project-name",
73
- :db=>"my_own_db",
74
- :jobs=>
75
- [{:"foo-bar"=>{},
76
- :result=>
77
- {:name=>"foo-bar",
78
- :description=>"Do not edit this job through the web!",
79
- :builders=>[{:shell=>"perftest"}]}}]},
80
- :settings=>
81
- {:name=>"project-name",
82
- :description=>"Do not edit this job through the web!",
83
- :db=>"my_own_db"}})
69
+ expect(project).to eq(
70
+ name: 'project-name',
71
+ type: :project,
72
+ value: {
73
+ name: 'project-name',
74
+ db: 'my_own_db',
75
+ jobs: [{
76
+ :"foo-bar" => {},
77
+ result: {
78
+ name: 'foo-bar',
79
+ description: 'Do not edit this job through the web!',
80
+ builders: [{
81
+ shell: 'perftest' }]
82
+ }
83
+ }]
84
+ },
85
+ settings: {
86
+ name: 'project-name',
87
+ description: 'Do not edit this job through the web!',
88
+ db: 'my_own_db'
89
+ }
90
+ )
84
91
  end
85
92
 
86
93
  it 'should build project collection from jobs templates' do
87
- str = %{
94
+ str = %(
88
95
  - job-template:
89
96
  name: '{{name}}-unit-tests'
90
97
  builders:
@@ -109,34 +116,41 @@ describe 'Templates resolver' do
109
116
  mail-to: developer@nowhere.net
110
117
  - '{{name}}-perf-tests':
111
118
  mail-to: projmanager@nowhere.net
112
- }
119
+ )
113
120
 
114
121
  project = YAML.load(str)
115
122
  @generator.load_job_collection project
116
123
 
117
124
  success, project = @generator.resolve_project(@generator.get_item('project-name'))
118
125
  expect(success).to be_true
119
- expect(project).to eq( {:name=>"project-name",
120
- :type=>:project,
121
- :value=>
122
- {:name=>"project-name",
123
- :db=>"my_own_db",
124
- :jobs=>
125
- [{:"{{name}}-unit-tests"=>{:"mail-to"=>"developer@nowhere.net"},
126
- :result=>
127
- {:name=>"project-name-unit-tests",
128
- :builders=>[{:shell=>"unittest"}],
129
- :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]}},
130
- {:"{{name}}-perf-tests"=>{:"mail-to"=>"projmanager@nowhere.net"},
131
- :result=>
132
- {:name=>"project-name-perf-tests",
133
- :builders=>[{:shell=>"perftest"}],
134
- :publishers=>[{:email=>{:recipients=>"projmanager@nowhere.net"}}]}}]},
135
- :settings=>{:name=>"project-name", :db=>"my_own_db"}})
126
+ expect(project).to eq(
127
+ name: 'project-name',
128
+ type: :project,
129
+ value: {
130
+ name: 'project-name',
131
+ db: 'my_own_db',
132
+ jobs: [{
133
+ :"{{name}}-unit-tests" => { :"mail-to" => 'developer@nowhere.net' },
134
+ result: {
135
+ name: 'project-name-unit-tests',
136
+ builders: [{ shell: 'unittest' }],
137
+ publishers: [{ email: { recipients: 'developer@nowhere.net' } }]
138
+ }
139
+ }, {
140
+ :"{{name}}-perf-tests" => { :"mail-to" => 'projmanager@nowhere.net' },
141
+ result: {
142
+ name: 'project-name-perf-tests',
143
+ builders: [{ shell: 'perftest' }],
144
+ publishers: [{ email: { recipients: 'projmanager@nowhere.net' } }]
145
+ }
146
+ }]
147
+ },
148
+ settings: { name: 'project-name', db: 'my_own_db' }
149
+ )
136
150
  end
137
151
 
138
152
  it 'should build project collection from jobs and jobs templates' do
139
- str = %{
153
+ str = %(
140
154
  - job-template:
141
155
  name: '{{name}}-unit-tests'
142
156
  builders:
@@ -157,64 +171,69 @@ describe 'Templates resolver' do
157
171
  - 'foo-bar'
158
172
  - '{{name}}-unit-tests':
159
173
  mail-to: projmanager@nowhere.net
160
- }
174
+ )
161
175
 
162
176
  project = YAML.load(str)
163
177
  @generator.load_job_collection project
164
178
 
165
179
  success, project = @generator.resolve_project(@generator.get_item('project-name'))
166
- expect(success).to be_true
180
+ expect(success).to be_true
167
181
  expect(project).to eq(
168
- {:name=>"project-name",
169
- :type=>:project,
170
- :value=>
171
- {:name=>"project-name",
172
- :db=>"my_own_db",
173
- :jobs=>
174
- [{:"foo-bar"=>{},
175
- :result=>
176
- {:name=>"foo-bar",
177
- :builders=>[{:shell=>"perftest"}]}},
178
- {:"{{name}}-unit-tests"=>{:"mail-to"=>"projmanager@nowhere.net"},
179
- :result=>
180
- {:name=>"project-name-unit-tests",
181
- :builders=>[{:shell=>"unittest"}],
182
- :publishers=>[{:email=>{:recipients=>"projmanager@nowhere.net"}}]}}]},
183
- :settings=>{:name=>"project-name", :db=>"my_own_db"}})
182
+ name: 'project-name',
183
+ type: :project,
184
+ value: {
185
+ name: 'project-name',
186
+ db: 'my_own_db',
187
+ jobs: [{
188
+ :"foo-bar" => {},
189
+ result: {
190
+ name: 'foo-bar',
191
+ builders: [{ shell: 'perftest' }]
192
+ }
193
+ }, {
194
+ :"{{name}}-unit-tests" => { :"mail-to" => 'projmanager@nowhere.net' },
195
+ result: {
196
+ name: 'project-name-unit-tests',
197
+ builders: [{ shell: 'unittest' }],
198
+ publishers: [{ email: { recipients: 'projmanager@nowhere.net' } }]
199
+ }
200
+ }]
201
+ },
202
+ settings: { name: 'project-name', db: 'my_own_db' }
203
+ )
184
204
  end
185
205
 
186
-
187
206
  describe 'compilation of templates' do
188
207
  it 'compiles String' do
189
- success, string = JenkinsPipelineBuilder::Compiler.compile('blah', { item1: 'data1'})
208
+ success, string = JenkinsPipelineBuilder::Compiler.compile('blah', item1: 'data1')
190
209
  expect(success).to be_true
191
210
  expect(string).to eq 'blah'
192
211
  end
193
212
 
194
213
  it 'compiles simple Hash' do
195
- success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: 'item1-data'}, { item1: 'data1'})
214
+ success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: 'item1-data' }, item1: 'data1')
196
215
  expect(success).to be_true
197
- expect(hash).to eq({ name: 'item-data1', value: 'item1-data'})
216
+ expect(hash).to eq(name: 'item-data1', value: 'item1-data')
198
217
  end
199
218
 
200
219
  it 'compiles nested Hash' do
201
- success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: { house: 'house-{{item1}}'}}, { item1: 'data1'})
220
+ success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: { house: 'house-{{item1}}' } }, item1: 'data1')
202
221
  expect(success).to be_true
203
- expect(hash).to eq( { name: 'item-data1', value: { house: 'house-data1'}} )
222
+ expect(hash).to eq(name: 'item-data1', value: { house: 'house-data1' })
204
223
  end
205
224
 
206
225
  it 'compiles complex Hash' do
207
- template = {:name=>"{{name}}-unit-tests",
208
- :builders=>[{:shell=>"unittest"}],
209
- :publishers=>[{:email=>{:recipients=>"{{mail-to}}"}}]}
210
- settings = {:name=>"project-name", :db=>"my_own_db", :'mail-to' => 'developer@nowhere.net'}
226
+ template = { name: '{{name}}-unit-tests',
227
+ builders: [{ shell: 'unittest' }],
228
+ publishers: [{ email: { recipients: '{{mail-to}}' } }] }
229
+ settings = { name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net' }
211
230
 
212
231
  success, hash = JenkinsPipelineBuilder::Compiler.compile(template, settings)
213
232
  expect(success).to be_true
214
233
  expect(hash).to eq(
215
- {:name=>"project-name-unit-tests",
216
- :builders=>[{:shell=>"unittest"}],
217
- :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]})
234
+ name: 'project-name-unit-tests',
235
+ builders: [{ shell: 'unittest' }],
236
+ publishers: [{ email: { recipients: 'developer@nowhere.net' } }])
218
237
  end
219
238
  end
220
239
 
@@ -225,19 +244,19 @@ describe 'Templates resolver' do
225
244
 
226
245
  @generator.load_job_collection project
227
246
 
228
- success, job = @generator.resolve_job_by_name('{{name}}-unit-tests', { name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net' })
247
+ success, job = @generator.resolve_job_by_name('{{name}}-unit-tests', name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net')
229
248
  expect(success).to be_true
230
249
  expect(job).to eq(
231
- {:name=>"project-name-unit-tests",
232
- :builders=>[{:shell=>"unittest"}],
233
- :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]})
250
+ name: 'project-name-unit-tests',
251
+ builders: [{ shell: 'unittest' }],
252
+ publishers: [{ email: { recipients: 'developer@nowhere.net' } }])
234
253
  end
235
254
 
236
255
  it 'should load from folder' do
237
256
  path = File.expand_path('../fixtures/templates/', __FILE__)
238
257
  @generator.load_collection_from_path(path)
239
258
 
240
- @generator.job_collection.count.should == 4
241
- @generator.projects.count == 1
259
+ @generator.job_collection.count.should eq 4
260
+ @generator.projects.count.should eq 1
242
261
  end
243
262
  end