puppet-herald 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +15 -7
  2. data/.rubocop.yml +31 -0
  3. data/.rubocop_todo.yml +6 -0
  4. data/.travis.yml +7 -7
  5. data/Gemfile +5 -9
  6. data/README.md +152 -16
  7. data/Rakefile +67 -6
  8. data/bin/puppet-herald +1 -1
  9. data/config.ru +2 -2
  10. data/db/migrate/20141211165540_create_nodes.rb +5 -3
  11. data/db/migrate/20141211171305_create_reports.rb +12 -10
  12. data/db/migrate/20141211171326_create_log_entries.rb +9 -7
  13. data/db/schema.rb +24 -26
  14. data/lib/puppet-herald.rb +59 -21
  15. data/lib/puppet-herald/app/api.rb +111 -0
  16. data/lib/puppet-herald/app/configuration.rb +70 -0
  17. data/lib/puppet-herald/app/frontend.rb +61 -0
  18. data/lib/puppet-herald/{views → app/views}/app.erb +5 -8
  19. data/lib/puppet-herald/{views → app/views}/err500.erb +1 -4
  20. data/lib/puppet-herald/application.rb +27 -0
  21. data/lib/puppet-herald/cli.rb +66 -45
  22. data/lib/puppet-herald/client.rb +33 -0
  23. data/lib/puppet-herald/database.rb +84 -40
  24. data/lib/puppet-herald/javascript.rb +23 -17
  25. data/lib/puppet-herald/models/log-entry.rb +10 -3
  26. data/lib/puppet-herald/models/node.rb +15 -5
  27. data/lib/puppet-herald/models/report.rb +70 -63
  28. data/lib/puppet-herald/public/app.js +9 -8
  29. data/lib/puppet-herald/public/components/directives/status-button.html +1 -1
  30. data/lib/puppet-herald/public/components/directives/status-button.js +5 -3
  31. data/lib/puppet-herald/public/components/filters/filters.js +9 -4
  32. data/lib/puppet-herald/public/components/page.js +34 -0
  33. data/lib/puppet-herald/public/node/node.html +3 -1
  34. data/lib/puppet-herald/public/node/node.js +7 -4
  35. data/lib/puppet-herald/public/nodes/nodes.js +3 -2
  36. data/lib/puppet-herald/public/report/report.html +4 -1
  37. data/lib/puppet-herald/public/report/report.js +5 -3
  38. data/lib/puppet-herald/stubs/puppet.rb +20 -9
  39. data/lib/puppet-herald/version.rb +17 -7
  40. data/package.json +8 -3
  41. data/puppet-herald.gemspec +3 -6
  42. data/spec/integration/application_spec.rb +175 -0
  43. data/spec/integration/models/node_spec.rb +4 -4
  44. data/spec/integration/models/report_spec.rb +7 -7
  45. data/spec/spec_helper.rb +12 -7
  46. data/spec/support/active_record.rb +6 -10
  47. data/spec/support/reconnectdb.rb +13 -0
  48. data/spec/unit/puppet-herald/cli_spec.rb +45 -13
  49. data/spec/unit/puppet-herald/client_spec.rb +23 -0
  50. data/spec/unit/puppet-herald/database_spec.rb +8 -9
  51. data/spec/unit/puppet-herald/javascript_spec.rb +8 -13
  52. data/spec/unit/puppet-herald_spec.rb +4 -4
  53. data/test/javascript/karma.conf.js +43 -5
  54. data/test/javascript/src/app_test.js +90 -0
  55. data/test/javascript/src/components/artifact/artifact-directive_test.js +36 -0
  56. data/test/javascript/src/components/artifact/artifact_test.js +64 -0
  57. data/test/javascript/src/components/directives/status-button_test.js +159 -0
  58. data/test/javascript/src/components/filters/filters_test.js +35 -0
  59. data/test/javascript/src/node/node_test.js +87 -0
  60. data/test/javascript/src/nodes/nodes_test.js +56 -0
  61. data/test/javascript/src/report/report_test.js +94 -0
  62. metadata +98 -68
  63. data/lib/puppet-herald/app.rb +0 -103
  64. data/lib/puppet-herald/public/components/artifact/artifact-directive_test.js +0 -17
  65. data/spec/integration/app_spec.rb +0 -21
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ describe('herald.filters module', function() {
4
+ beforeEach(module('herald.filters'));
5
+
6
+ describe('capitalize filter', function() {
7
+
8
+ var capitalize;
9
+
10
+ beforeEach(inject(function($injector) {
11
+ var $filter = $injector.get('$filter');
12
+ capitalize = $filter('capitalize');
13
+ }));
14
+
15
+ it('should returns "" when given null', function() {
16
+ expect(capitalize(null)).toEqual('');
17
+ });
18
+
19
+ it('should returns "" when given undefined', function() {
20
+ expect(capitalize(undefined)).toEqual('');
21
+ });
22
+
23
+ it('should returns "Nodes" when given "nodes"', function() {
24
+ expect(capitalize('nodes')).toEqual('Nodes');
25
+ });
26
+
27
+ it('should returns "Nodes" when given "Nodes"', function() {
28
+ expect(capitalize('Nodes')).toEqual('Nodes');
29
+ });
30
+
31
+ it('should returns "Nodes" when given "NODES"', function() {
32
+ expect(capitalize('NODES')).toEqual('NODES');
33
+ });
34
+ });
35
+ });
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ describe('herald.node module', function() {
4
+ beforeEach(module('herald.node'));
5
+ describe('NodeController', function() {
6
+
7
+ var controller, Page, $httpBackend;
8
+ var defaultMockValues = {
9
+ name: 'master.cl.vm',
10
+ no_of_reports: 2,
11
+ status: 'unchanged',
12
+ id: 1,
13
+ last_run: '2014-01-01T12:34:56',
14
+ reports: [
15
+ { configuration_version: '1234578', status: 'unchanged', environment: 'production', time: '2014-01-01T12:34:56', id: 2 },
16
+ { configuration_version: '1234556', status: 'pending', environment: 'production', time: '2014-01-01T12:24:16', id: 1 },
17
+ ]
18
+ };
19
+
20
+ beforeEach(inject(function($injector) {
21
+
22
+ // Set up the mock http service responses
23
+ $httpBackend = $injector.get('$httpBackend');
24
+ // Get hold of a scope (i.e. the root scope)
25
+ var $rootScope = $injector.get('$rootScope');
26
+ // The $controller service is used to create instances of controllers
27
+ var $controller = $injector.get('$controller');
28
+
29
+ var $routeParams = $injector.get('$routeParams');
30
+
31
+ Page = $injector.get('Page');
32
+
33
+ controller = function(id, mockValues) {
34
+ if (id == null) { id = 1; }
35
+ if (typeof(mockValues) === 'undefined') { mockValues = defaultMockValues; }
36
+
37
+ $routeParams.nodeId = id;
38
+ // backend definition common for all tests
39
+ var handler = $httpBackend.when('GET', '/api/v1/nodes/' + id);
40
+ if (mockValues != null) {
41
+ handler.respond(mockValues);
42
+ } else {
43
+ handler.respond(404, null);
44
+ }
45
+ $httpBackend.expectGET('/api/v1/nodes/' + id);
46
+ var ctrl = $controller('NodeController', { $scope : $rootScope });
47
+ $httpBackend.flush();
48
+ return ctrl;
49
+ };
50
+ }));
51
+
52
+ afterEach(function() {
53
+ $httpBackend.verifyNoOutstandingExpectation();
54
+ $httpBackend.verifyNoOutstandingRequest();
55
+ });
56
+
57
+ describe('fetching data from "/api/v1/nodes/1"', function() {
58
+ it('there should be node fetched', function() {
59
+ expect(controller().node).not.toEqual(null);
60
+ });
61
+ it('should have fetch 2 reports', function() {
62
+ var ctrl = controller();
63
+ expect(ctrl.node.reports.length).toBe(2);
64
+ expect(ctrl.node.no_of_reports).toBe(2);
65
+ });
66
+ it('should set Page.title to "Node: master.cl.vm"', function() {
67
+ expect(controller()).not.toBe(undefined);
68
+ expect(Page.actualTitle()).toEqual('Node');
69
+ expect(Page.actualTarget()).toBe('master.cl.vm');
70
+ });
71
+ });
72
+ describe('fetching data from "/api/v1/nodes/12"', function() {
73
+ var ctrl;
74
+ beforeEach(function() {
75
+ ctrl = controller(12, null);
76
+ });
77
+ it('there should not be node fetched', function() {
78
+ expect(ctrl.node).toEqual(null);
79
+ });
80
+ it('should set Page.title to "Node: "', function() {
81
+ expect(ctrl).not.toBe(undefined);
82
+ expect(Page.actualTitle()).toEqual('Node');
83
+ expect(Page.actualTarget()).toBe(undefined);
84
+ });
85
+ });
86
+ });
87
+ });
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ describe('herald.nodes module', function() {
4
+ beforeEach(module('herald.nodes'));
5
+ describe('NodesController', function() {
6
+
7
+ var controller, Page, $httpBackend;
8
+ var defaultMockValues = [
9
+ { name: 'master.cl.vm', no_of_reports: 12, status: 'unchanged', id: 1, last_run: '2014-01-01T12:34:56' },
10
+ { name: 'db.cl.vm', no_of_reports: 5, status: 'failed', id: 2, last_run: '2014-01-01T12:24:36' },
11
+ { name: 'app.cl.vm', no_of_reports: 10, status: 'pending', id: 3, last_run: '2014-01-01T12:14:46' }
12
+ ];
13
+
14
+ beforeEach(inject(function($injector) {
15
+
16
+ // Set up the mock http service responses
17
+ $httpBackend = $injector.get('$httpBackend');
18
+ // Get hold of a scope (i.e. the root scope)
19
+ var $rootScope = $injector.get('$rootScope');
20
+ // The $controller service is used to create instances of controllers
21
+ var $controller = $injector.get('$controller');
22
+
23
+ Page = $injector.get('Page');
24
+
25
+ controller = function(mockValues) {
26
+ if (typeof(mockValues) === 'undefined') { mockValues = defaultMockValues; }
27
+ // backend definition common for all tests
28
+ $httpBackend.when('GET', '/api/v1/nodes')
29
+ .respond(mockValues);
30
+ $httpBackend.expectGET('/api/v1/nodes');
31
+ var ctrl = $controller('NodesController', { $scope : $rootScope });
32
+ $httpBackend.flush();
33
+ return ctrl;
34
+ };
35
+ }));
36
+
37
+ afterEach(function() {
38
+ $httpBackend.verifyNoOutstandingExpectation();
39
+ $httpBackend.verifyNoOutstandingRequest();
40
+ });
41
+
42
+ describe('fetching data from "/api/v1/nodes"', function() {
43
+ it('there should be 3 nodes fetched', function() {
44
+ expect(controller().all.length).toBe(3);
45
+ });
46
+ it('first should be named "master.cl.vm"', function() {
47
+ expect(controller().all[0].name).toBe('master.cl.vm');
48
+ });
49
+ });
50
+ it('should set Page.title to "All nodes"', function() {
51
+ expect(controller()).not.toBe(undefined);
52
+ expect(Page.actualTitle()).toEqual('All nodes');
53
+ expect(Page.actualTarget()).toBe(undefined);
54
+ });
55
+ });
56
+ });
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ describe('herald.report module', function() {
4
+ beforeEach(module('herald.report'));
5
+ describe('ReportController', function() {
6
+
7
+ var controller, Page, $httpBackend;
8
+ var defaultMockValues = {
9
+ configuration_version: '1234578',
10
+ status: 'changed',
11
+ environment: 'production',
12
+ time: '2014-01-01T12:34:56',
13
+ puppet_version: '3.7.3',
14
+ host: 'master.cl.vm',
15
+ kind: 'apply',
16
+ id: 2,
17
+ log_entries: [
18
+ { level: 'debug', message: 'Stating compile', source: 'Puppet' },
19
+ { level: 'info', message: 'Compiled configuration version: "1234578" for environment production', source: 'Puppet' },
20
+ { level: 'notice', message: 'changed from "abc" to "bcd"', source: 'Stage[main]/Users/User[root]/shell' },
21
+ { level: 'notice', message: 'Config processed in 4.32 sec.', source: '' },
22
+ ]
23
+ };
24
+
25
+ beforeEach(inject(function($injector) {
26
+
27
+ // Set up the mock http service responses
28
+ $httpBackend = $injector.get('$httpBackend');
29
+ // Get hold of a scope (i.e. the root scope)
30
+ var $rootScope = $injector.get('$rootScope');
31
+ // The $controller service is used to create instances of controllers
32
+ var $controller = $injector.get('$controller');
33
+
34
+ var $routeParams = $injector.get('$routeParams');
35
+
36
+ Page = $injector.get('Page');
37
+
38
+ controller = function(id, mockValues) {
39
+ if (id == null) { id = 1; }
40
+ if (typeof(mockValues) === 'undefined') { mockValues = defaultMockValues; }
41
+
42
+ $routeParams.reportId = id;
43
+ // backend definition common for all tests
44
+ var handler = $httpBackend.when('GET', '/api/v1/reports/' + id);
45
+ if (mockValues != null) {
46
+ handler.respond(mockValues);
47
+ } else {
48
+ handler.respond(404, null);
49
+ }
50
+ $httpBackend.expectGET('/api/v1/reports/' + id);
51
+ var ctrl = $controller('ReportController', { $scope : $rootScope });
52
+ $httpBackend.flush();
53
+ return ctrl;
54
+ };
55
+ }));
56
+
57
+ afterEach(function() {
58
+ $httpBackend.verifyNoOutstandingExpectation();
59
+ $httpBackend.verifyNoOutstandingRequest();
60
+ });
61
+
62
+ describe('fetching data from "/api/v1/reports/1"', function() {
63
+ var ctrl;
64
+ beforeEach(function() {
65
+ ctrl = controller();
66
+ });
67
+ it('there should be report fetched', function() {
68
+ expect(ctrl.report).not.toEqual(null);
69
+ });
70
+ it('should have fetch report with 4 lines', function() {
71
+ expect(ctrl.report.log_entries.length).toBe(4);
72
+ });
73
+ it('should set Page.title to "Report: 1234578"', function() {
74
+ expect(ctrl).not.toBe(undefined);
75
+ expect(Page.actualTitle()).toEqual('Report');
76
+ expect(Page.actualTarget()).toBe('1234578');
77
+ });
78
+ });
79
+ describe('fetching data from "/api/v1/reports/12"', function() {
80
+ var ctrl;
81
+ beforeEach(function() {
82
+ ctrl = controller(12, null);
83
+ });
84
+ it('there should not be report fetched', function() {
85
+ expect(ctrl.report).toEqual(null);
86
+ });
87
+ it('should set Page.title to "Report: "', function() {
88
+ expect(ctrl).not.toBe(undefined);
89
+ expect(Page.actualTitle()).toEqual('Report');
90
+ expect(Page.actualTarget()).toBe(undefined);
91
+ });
92
+ });
93
+ });
94
+ });
metadata CHANGED
@@ -1,77 +1,97 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: puppet-herald
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Krzysztof Suszynski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2014-12-13 00:00:00 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
11
+ date: 2014-12-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
15
14
  name: sinatra
16
- prerelease: false
17
- requirement: &id001 !ruby/object:Gem::Requirement
18
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
19
17
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: "1.4"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
22
20
  type: :runtime
23
- version_requirements: *id001
24
- - !ruby/object:Gem::Dependency
25
- name: sinatra-contrib
26
21
  prerelease: false
27
- requirement: &id002 !ruby/object:Gem::Requirement
28
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra-contrib
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
29
31
  - - ~>
30
- - !ruby/object:Gem::Version
31
- version: "1.4"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
32
34
  type: :runtime
33
- version_requirements: *id002
34
- - !ruby/object:Gem::Dependency
35
- name: sinatra-activerecord
36
35
  prerelease: false
37
- requirement: &id003 !ruby/object:Gem::Requirement
38
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sinatra-activerecord
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
39
45
  - - ~>
40
- - !ruby/object:Gem::Version
41
- version: "2.0"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
42
48
  type: :runtime
43
- version_requirements: *id003
44
- - !ruby/object:Gem::Dependency
45
- name: micro-optparse
46
49
  prerelease: false
47
- requirement: &id004 !ruby/object:Gem::Requirement
48
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
49
52
  - - ~>
50
- - !ruby/object:Gem::Version
51
- version: "1.2"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: micro-optparse
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
52
62
  type: :runtime
53
- version_requirements: *id004
54
- - !ruby/object:Gem::Dependency
55
- name: uglifier
56
63
  prerelease: false
57
- requirement: &id005 !ruby/object:Gem::Requirement
58
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
59
66
  - - ~>
60
- - !ruby/object:Gem::Version
61
- version: "2.6"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: uglifier
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.6'
62
76
  type: :runtime
63
- version_requirements: *id005
64
- description: Provides a gateway for consuming puppet reports, a REST API and a simple Web app to display reports.
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.6'
83
+ description: Provides a gateway for consuming puppet reports, a REST API and a simple
84
+ Web app to display reports.
65
85
  email: krzysztof.suszynski@wavesoftware.pl
66
- executables:
86
+ executables:
67
87
  - puppet-herald
68
88
  extensions: []
69
-
70
89
  extra_rdoc_files: []
71
-
72
- files:
90
+ files:
73
91
  - .gitignore
74
92
  - .rspec
93
+ - .rubocop.yml
94
+ - .rubocop_todo.yml
75
95
  - .travis.yml
76
96
  - Gemfile
77
97
  - Gemfile.local.example
@@ -85,8 +105,14 @@ files:
85
105
  - db/schema.rb
86
106
  - db/seeds.rb
87
107
  - lib/puppet-herald.rb
88
- - lib/puppet-herald/app.rb
108
+ - lib/puppet-herald/app/api.rb
109
+ - lib/puppet-herald/app/configuration.rb
110
+ - lib/puppet-herald/app/frontend.rb
111
+ - lib/puppet-herald/app/views/app.erb
112
+ - lib/puppet-herald/app/views/err500.erb
113
+ - lib/puppet-herald/application.rb
89
114
  - lib/puppet-herald/cli.rb
115
+ - lib/puppet-herald/client.rb
90
116
  - lib/puppet-herald/database.rb
91
117
  - lib/puppet-herald/javascript.rb
92
118
  - lib/puppet-herald/models/log-entry.rb
@@ -96,12 +122,12 @@ files:
96
122
  - lib/puppet-herald/public/app.js
97
123
  - lib/puppet-herald/public/bower.json
98
124
  - lib/puppet-herald/public/components/artifact/artifact-directive.js
99
- - lib/puppet-herald/public/components/artifact/artifact-directive_test.js
100
125
  - lib/puppet-herald/public/components/artifact/artifact.js
101
126
  - lib/puppet-herald/public/components/directives/directives.js
102
127
  - lib/puppet-herald/public/components/directives/status-button.html
103
128
  - lib/puppet-herald/public/components/directives/status-button.js
104
129
  - lib/puppet-herald/public/components/filters/filters.js
130
+ - lib/puppet-herald/public/components/page.js
105
131
  - lib/puppet-herald/public/css/herald.css
106
132
  - lib/puppet-herald/public/img/shield97.svg
107
133
  - lib/puppet-herald/public/node/node.html
@@ -112,49 +138,53 @@ files:
112
138
  - lib/puppet-herald/public/report/report.js
113
139
  - lib/puppet-herald/stubs/puppet.rb
114
140
  - lib/puppet-herald/version.rb
115
- - lib/puppet-herald/views/app.erb
116
- - lib/puppet-herald/views/err500.erb
117
141
  - package.json
118
142
  - puppet-herald.gemspec
119
- - spec/integration/app_spec.rb
143
+ - spec/integration/application_spec.rb
120
144
  - spec/integration/fixtures/changed-notify.yaml
121
145
  - spec/integration/models/node_spec.rb
122
146
  - spec/integration/models/report_spec.rb
123
147
  - spec/model_helper.rb
124
148
  - spec/spec_helper.rb
125
149
  - spec/support/active_record.rb
150
+ - spec/support/reconnectdb.rb
126
151
  - spec/unit/puppet-herald/cli_spec.rb
152
+ - spec/unit/puppet-herald/client_spec.rb
127
153
  - spec/unit/puppet-herald/database_spec.rb
128
154
  - spec/unit/puppet-herald/javascript_spec.rb
129
155
  - spec/unit/puppet-herald/version_spec.rb
130
156
  - spec/unit/puppet-herald_spec.rb
131
157
  - test/javascript/karma.conf.js
158
+ - test/javascript/src/app_test.js
159
+ - test/javascript/src/components/artifact/artifact-directive_test.js
160
+ - test/javascript/src/components/artifact/artifact_test.js
161
+ - test/javascript/src/components/directives/status-button_test.js
162
+ - test/javascript/src/components/filters/filters_test.js
163
+ - test/javascript/src/node/node_test.js
164
+ - test/javascript/src/nodes/nodes_test.js
165
+ - test/javascript/src/report/report_test.js
132
166
  homepage: https://github.com/wavesoftware/gem-puppet-herald
133
- licenses:
167
+ licenses:
134
168
  - Apache 2.0
135
169
  metadata: {}
136
-
137
170
  post_install_message:
138
171
  rdoc_options: []
139
-
140
- require_paths:
172
+ require_paths:
141
173
  - lib
142
- required_ruby_version: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
146
178
  version: 1.9.2
147
- required_rubygems_version: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: "0"
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
152
184
  requirements: []
153
-
154
185
  rubyforge_project:
155
- rubygems_version: 2.0.14
186
+ rubygems_version: 2.4.5
156
187
  signing_key:
157
188
  specification_version: 4
158
189
  summary: a Puppet report processor
159
190
  test_files: []
160
-