puppet-herald 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YWNhZTUzMzk1M2ExNzcwNGFiZDVkNTNmNDBkZGYxNmQxNzUyYjg2MQ==
5
- data.tar.gz: !binary |-
6
- ZjBjNjQyMjYzMjc2ZGU0Y2Y4MTA3NWQyMTI1NzIxNGIxMDMwNGQzOA==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- ZjVhZjY1ZGYwOGE1ODc1YjcxYzNjMDhjYzFlNTIwY2E1M2VkYjgzNWZkYWQ0
10
- NTY4N2M2ZmUxNmVlZDMzN2U0MTZjMDg2MDMzZWI4MjNmY2FhYzNmOTZhMTJl
11
- YjZmMTA4MjVlZDk1OTFmNzM2YzM0Yjk0ZWZhMzEyOWIyZjAyMzU=
12
- data.tar.gz: !binary |-
13
- NzhhZGI2ZDhmYzFiY2I4MzYzMmY3YzMwMDM1ZTRlM2YwYzU4NWEzNDFhNWE3
14
- ZDEzOWU1YmFiNjZhNjE3NDQyNzY0ZmIwYTY0OGExNTc4OTUzZWNlZmE1ZTI0
15
- YzFlNDI4NDk4YjExODViYjUzYjZkMDJjZjg0YWMxMTUwODM1YWM=
1
+ ---
2
+ SHA512:
3
+ metadata.gz: 78f9a25bcd05308702a4aaab34357dcd95359e1c418d7795fbf46ebea7b2c327a752107952292f121d0ba627feb9c5828a29ca64d22b480097705a1b5b99275c
4
+ data.tar.gz: e3a4545a971d3c56f7062b98594351899e907828f1ce983386489e340e705a4ed73ae6a8af82b78918926cca3dfc29c78b6407545e545f32cdcf705f31d8594c
5
+ SHA1:
6
+ metadata.gz: 0cf69983b2dca3d4c86d2bcb33178563c0d2f1db
7
+ data.tar.gz: e1a41cbe6c56cce31b299b7002880da7559ddf9d
data/.gitignore CHANGED
@@ -20,3 +20,6 @@
20
20
  # Ignore all logfiles and tempfiles.
21
21
  /log/*.log
22
22
  /tmp
23
+ /node_modules
24
+ /npm-*.log
25
+ /Gemfile.local
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ ---
2
+ language: ruby
3
+ bundler_args: --without development
4
+ script:
5
+ - bundle exec rake test
6
+ # - ./node_modules/karma/bin/karma start --single-run --browsers PhantomJS test/javascript/karma.conf.js
7
+ before_install: rm -f Gemfile.lock
8
+ before_script:
9
+ - npm install
10
+ matrix:
11
+ fast_finish: true
12
+ include:
13
+ - rvm: 1.9.3
14
+ - rvm: 2.0.0
15
+ - rvm: 2.1.0
16
+ notifications:
17
+ email: false
data/Gemfile CHANGED
@@ -2,4 +2,29 @@ source ENV['GEM_SOURCE'] || "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
+ group :test do
6
+
7
+ gem 'rake', '~> 10.4'
8
+ gem 'rspec', '~> 3.1'
9
+ gem 'rspec-its', '~> 1.1'
10
+ gem 'coveralls', '~> 0.7'
11
+ gem 'simplecov', '~> 0.9'
12
+ gem 'sqlite3', '~> 1.3'
13
+
14
+ end
15
+
16
+ group :development do
17
+
18
+ gem 'inch', '~> 0.5'
19
+ gem 'travis', '~> 1.6'
20
+ gem 'pry-byebug', '~> 2.0' if RUBY_VERSION >= '2.0.0'
21
+ gem 'pry-debugger', '~> 0.2' if RUBY_VERSION < '2.0.0'
22
+
23
+ end
24
+
25
+ local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
26
+ if File.exists?(local_gemfile)
27
+ eval_gemfile local_gemfile
28
+ end
29
+
5
30
  # vim:ft=ruby
@@ -0,0 +1,7 @@
1
+
2
+ gem 'pg'
3
+ gem 'puma'
4
+ # gem 'thin'
5
+
6
+
7
+ # vim:ft=ruby
data/README.md CHANGED
@@ -1,11 +1,24 @@
1
1
  puppet-herald gem
2
2
  ========
3
3
 
4
+ ##### Status Info
5
+ [![GitHub Issues](https://img.shields.io/github/issues/wavesoftware/gem-puppet-herald.svg)](https://github.com/wavesoftware/gem-puppet-herald/issues) [![Gem](http://img.shields.io/gem/v/puppet-herald.svg)](https://rubygems.org/gems/puppet-herald) [![GitHub Release](https://img.shields.io/github/release/wavesoftware/gem-puppet-herald.svg)](https://github.com/wavesoftware/gem-puppet-herald/releases) [![Apache 2.0 License](http://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/wavesoftware/gem-puppet-herald/develop/LICENSE)
6
+
7
+ ##### Master (stable) branch
8
+ [![Build Status](https://img.shields.io/travis/wavesoftware/gem-puppet-herald/master.svg)](https://travis-ci.org/wavesoftware/gem-puppet-herald) [![Dependency Status](https://gemnasium.com/wavesoftware/gem-puppet-herald.svg)](https://gemnasium.com/wavesoftware/gem-puppet-herald) [![Coverage Status](https://img.shields.io/coveralls/wavesoftware/gem-puppet-herald/master.svg)](https://coveralls.io/r/wavesoftware/gem-puppet-herald?branch=master) [![Code Climate](https://codeclimate.com/github/wavesoftware/gem-puppet-herald/badges/gpa.svg?branch=master)](https://codeclimate.com/github/wavesoftware/gem-puppet-herald) [![Inline docs](http://inch-ci.org/github/wavesoftware/gem-puppet-herald.svg?branch=master)](http://inch-ci.org/github/wavesoftware/gem-puppet-herald)
9
+
10
+ ##### Development branch
11
+ [![Build Status](https://img.shields.io/travis/wavesoftware/gem-puppet-herald/develop.svg)](https://travis-ci.org/wavesoftware/gem-puppet-herald) [![Dependency Status](https://gemnasium.com/wavesoftware/gem-puppet-herald.svg)](https://gemnasium.com/wavesoftware/gem-puppet-herald) [![Coverage Status](https://img.shields.io/coveralls/wavesoftware/gem-puppet-herald/develop.svg)](https://coveralls.io/r/wavesoftware/gem-puppet-herald?branch=develop) [![Code Climate](https://codeclimate.com/github/wavesoftware/gem-puppet-herald/badges/gpa.svg?branch=develop)](https://codeclimate.com/github/wavesoftware/gem-puppet-herald) [![Inline docs](http://inch-ci.org/github/wavesoftware/gem-puppet-herald.svg?branch=develop)](http://inch-ci.org/github/wavesoftware/gem-puppet-herald)
12
+
4
13
  Overview
5
14
  --------
6
15
 
7
16
  Herald is a puppet report processor. He provides a gateway for consuming puppet reports, a REST API and a simple Web app to display reports.
8
17
 
18
+ ![A reports list](https://raw.githubusercontent.com/wavesoftware/gem-puppet-herald/gh-pages/images/reports.png)
19
+
20
+ ![A logs of single report](https://raw.githubusercontent.com/wavesoftware/gem-puppet-herald/gh-pages/images/logs.png)
21
+
9
22
  Puppet module
10
23
  -----
11
24
 
data/Rakefile CHANGED
@@ -1,6 +1,13 @@
1
- require 'puppet-herald/app'
1
+
2
2
  require 'sinatra/activerecord/rake'
3
3
  require 'rspec/core/rake_task'
4
4
 
5
+ desc "Run spec tests."
5
6
  RSpec::Core::RakeTask.new(:spec)
6
- task :default => :spec
7
+
8
+ desc "Run lint, and spec tests."
9
+ task :test => [
10
+ :spec
11
+ ]
12
+
13
+ task :default => :test
data/bin/puppet-herald CHANGED
@@ -10,4 +10,4 @@ rescue LoadError
10
10
  end
11
11
 
12
12
  # Process command line options and run Puppet Herald
13
- PuppetHerald::CLI.parse_options
13
+ PuppetHerald::CLI.run!
data/lib/puppet-herald.rb CHANGED
@@ -9,11 +9,7 @@ module PuppetHerald
9
9
  @@root = File.dirname(File.dirname(File.realpath(__FILE__)))
10
10
 
11
11
  def self.relative_dir dir
12
- File.join @@root, dir
13
- end
14
-
15
- def self.port
16
- @@port
12
+ File.realpath(File.join @@root, dir)
17
13
  end
18
14
 
19
15
  def self.environment
@@ -31,7 +27,23 @@ module PuppetHerald
31
27
  def self.is_in_prod?
32
28
  return !is_in_dev?
33
29
  end
30
+
31
+ def self.bug ex
32
+ file = Tempfile.new(['puppet-herald-bug', '.log'])
33
+ filepath = file.path
34
+ file.close
35
+ file.unlink
36
+ message = "v#{PuppetHerald::VERSION}-#{ex.class.to_s}: #{ex.message}"
37
+ contents = message + "\n\n" + ex.backtrace.join("\n") + "\n"
38
+ File.write(filepath, contents)
39
+ bugo = {
40
+ :message => message,
41
+ :homepage => PuppetHerald::HOMEPAGE,
42
+ :bugfile => filepath,
43
+ :help => "Please report this bug to #{PuppetHerald::HOMEPAGE} by passing contents of bug file: #{filepath}"
44
+ }
45
+ return bugo
46
+ end
34
47
  end
35
48
 
36
49
  require 'puppet-herald/database'
37
- require 'puppet-herald/app'
@@ -1,5 +1,5 @@
1
1
  require 'sinatra/base'
2
- require "sinatra/namespace"
2
+ require 'sinatra/namespace'
3
3
  require 'sinatra/activerecord'
4
4
  require 'puppet-herald'
5
5
  require 'puppet-herald/javascript'
@@ -10,36 +10,27 @@ module PuppetHerald
10
10
  class App < Sinatra::Base
11
11
  register Sinatra::Namespace
12
12
  register Sinatra::ActiveRecordExtension
13
- configure [:production, :development] do
14
- enable :logging
15
- PuppetHerald::Database.setup self
16
- end
13
+
14
+ set :database, PuppetHerald::Database.spec unless PuppetHerald::Database.spec.nil?
17
15
  if PuppetHerald::is_in_dev?
18
16
  set :environment, :development
19
17
  else
20
18
  set :environment, :production
21
19
  end
22
20
 
23
- def self.bug ex
24
- file = Tempfile.new(['puppet-herald-bug', '.log'])
25
- filepath = file.path
26
- file.close
27
- file.unlink
28
- message = "v#{PuppetHerald::VERSION}-#{ex.class.to_s}: #{ex.message}"
29
- contents = message + "\n\n" + ex.backtrace.join("\n") + "\n"
30
- File.write(filepath, contents)
31
- bugo = {
32
- :message => message,
33
- :homepage => PuppetHerald::HOMEPAGE,
34
- :bugfile => filepath,
35
- :help => "Please report this bug to #{PuppetHerald::HOMEPAGE} by passing contents of bug file: #{filepath}"
36
- }
37
- return bugo
21
+ def self.run! options = {}, &block
22
+ ActiveRecord::Base.establish_connection(PuppetHerald::Database.spec)
23
+ ActiveRecord::Migrator.up "db/migrate"
24
+ super options, *block
38
25
  end
39
26
 
40
27
  error do
41
- @bug = PuppetHerald::App.bug(env['sinatra.error'])
42
- erb :err500
28
+ @bug = PuppetHerald::bug(env['sinatra.error'])
29
+ if response.content_type == 'application/json'
30
+ @bug.to_json
31
+ else
32
+ erb :err500
33
+ end
43
34
  end
44
35
 
45
36
  get %r{/app\.min\.(js\.map|js)} do |ext|
@@ -1,4 +1,5 @@
1
1
  require 'micro-optparse'
2
+ require 'logger'
2
3
  require 'puppet-herald'
3
4
  require 'puppet-herald/version'
4
5
  require 'puppet-herald/database'
@@ -6,7 +7,37 @@ require 'puppet-herald/database'
6
7
  module PuppetHerald
7
8
  class CLI
8
9
 
9
- def self.parse_options
10
+ @@logger = Logger.new STDOUT
11
+ @@errlogger = Logger.new STDERR
12
+ @@retcode = 0
13
+
14
+ def self.retcode= val
15
+ @@retcode = val if @@retcode == 0
16
+ end
17
+
18
+ def self.logger
19
+ @@logger
20
+ end
21
+
22
+ def self.errlogger
23
+ @@errlogger
24
+ end
25
+
26
+ def self.run! argv=ARGV
27
+ @@retcode = 0
28
+ begin
29
+ options = parse_options argv
30
+ require 'puppet-herald/app'
31
+ PuppetHerald::App.run! options
32
+ rescue Exception => ex
33
+ bug = PuppetHerald.bug(ex)
34
+ errlogger.fatal "Unexpected error occured, mayby a bug?\n\n#{bug[:message]}\n\n#{bug[:help]}"
35
+ self.retcode = 1
36
+ end
37
+ Kernel::exit @@retcode
38
+ end
39
+
40
+ def self.parse_options argv
10
41
  usage = ""
11
42
  banner = <<-eos
12
43
  #{PuppetHerald::NAME} v#{PuppetHerald::VERSION} - #{PuppetHerald::SUMMARY}
@@ -30,24 +61,20 @@ CAUTION! For security reasons, don't pass password in connection string, use --p
30
61
  p.option :dbconn, "Connection string to database, see info above", :default => defaultdb
31
62
  p.option :passfile, "If using postgresql, this file will be read for password to database", :default => defaultdbpass
32
63
  end
33
- options = parser.process!
64
+ options = parser.process!(argv)
34
65
 
35
- puts "Starting #{PuppetHerald::NAME} v#{PuppetHerald::VERSION}..."
66
+ logger.info "Starting #{PuppetHerald::NAME} v#{PuppetHerald::VERSION} in #{PuppetHerald::environment}..."
36
67
  PuppetHerald::Database.dbconn = options[:dbconn]
37
68
  PuppetHerald::Database.passfile = options[:passfile]
38
69
  begin
39
- PuppetHerald::Database.validate! :echo => true
70
+ PuppetHerald::Database.spec :echo => true
40
71
  rescue Exception => ex
41
- STDERR.puts "FATAL ERROR - Database configuration is invalid!\n\n#{ex.message}"
42
- exit 2
43
- end
44
- begin
45
- PuppetHerald::App.run! options
46
- rescue Exception => ex
47
- bug = PuppetHerald::App.bug(ex)
48
- STDERR.puts "FATAL ERROR - Unexpected error occured, mayby a bug?\n\n#{bug[:message]}\n\n#{bug[:help]}"
49
- exit 1
72
+ errlogger.fatal "Database configuration is invalid!\n\n#{ex.message}"
73
+ self.retcode = 2
74
+ raise ex
50
75
  end
76
+
77
+ return options
51
78
  end
52
79
  end
53
80
  end
@@ -1,10 +1,16 @@
1
1
  require 'fileutils'
2
+ require 'logger'
2
3
 
3
4
  module PuppetHerald
4
5
  class Database
5
6
 
6
7
  @@dbconn = nil
7
8
  @@passfile = nil
9
+ @@logger = Logger.new STDOUT
10
+
11
+ def self.logger
12
+ @@logger
13
+ end
8
14
 
9
15
  def self.dbconn= dbconn
10
16
  @@dbconn = dbconn
@@ -14,18 +20,23 @@ module PuppetHerald
14
20
  @@passfile = passfile
15
21
  end
16
22
 
17
- def self.validate! echo=false
18
- db = URI.parse(@@dbconn)
23
+ def self.spec echo=false
24
+ return nil if @@dbconn.nil?
19
25
  connection = {}
20
- if db.scheme.to_s.empty?
21
- raise "Database scheme couldn't be empty! Connection string given: #{@@dbconn}"
26
+ match = @@dbconn.match(/^(sqlite3?|postgres(?:ql)?):\/\/(.+)$/)
27
+ unless match
28
+ raise "Invalid database connection string given: #{@@dbconn}"
22
29
  end
23
- if ['sqlite', 'sqlite3'].include? db.scheme
24
- file = File.expand_path("#{db.host}#{db.path}")
25
- FileUtils.touch file
30
+ if ['sqlite', 'sqlite3'].include? match[1]
31
+ dbname = match[2]
32
+ unless dbname.match /^(?:file:)?:mem/
33
+ dbname = File.expand_path(dbname)
34
+ FileUtils.touch dbname
35
+ end
26
36
  connection[:adapter] = 'sqlite3'
27
- connection[:database] = file
37
+ connection[:database] = dbname
28
38
  else
39
+ db = URI.parse @@dbconn
29
40
  dbname = db.path[1..-1]
30
41
  connection[:adapter] = db.scheme == 'postgres' ? 'postgresql' : db.scheme
31
42
  connection[:host] = db.host
@@ -38,13 +49,9 @@ module PuppetHerald
38
49
  if echo
39
50
  copy = connection.dup
40
51
  copy[:password] = '***' unless copy[:password].nil?
41
- puts "Using #{copy.inspect} for database."
52
+ logger.info "Using #{copy.inspect} for database."
42
53
  end
43
54
  return connection
44
55
  end
45
-
46
- def self.setup app
47
- ActiveRecord::Base.establish_connection(validate!)
48
- end
49
56
  end
50
57
  end
@@ -2,14 +2,13 @@
2
2
  "name": "puppet-herald",
3
3
  "description": "Report processor for Puppet",
4
4
  "version": "0.1.0",
5
- "homepage": "https://github.com/wavesoftware/puppet-herald",
5
+ "homepage": "https://github.com/wavesoftware/gem-puppet-herald",
6
6
  "license": "Apache 2.0",
7
7
  "private": false,
8
8
  "dependencies": {
9
9
  "angular": "1.3.x",
10
10
  "angular-route": "1.3.x",
11
11
  "angular-loader": "1.3.x",
12
- "angular-mocks": "~1.3.x",
13
- "html5-boilerplate": "~4.3.0"
12
+ "angular-mocks": "1.3.x"
14
13
  }
15
14
  }
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  describe('herald.artifact module', function() {
4
- beforeEach(module('myApp.artifact'));
4
+ beforeEach(module('herald.artifact'));
5
5
 
6
6
  describe('app-version directive', function() {
7
7
  it('should print current version', function() {
@@ -4,12 +4,12 @@ module PuppetHerald
4
4
  version = desired
5
5
  if desired.match(/[^0-9\.]+/)
6
6
  git = `git describe --tags --dirty --always`
7
- version += "-" + git[1..-1]
7
+ version += "." + git.gsub('-', '.')
8
8
  end
9
9
  return version.strip
10
10
  end
11
11
 
12
- VERSION = version_prep '0.1.0'
12
+ VERSION = version_prep '0.1.1'
13
13
  LICENSE = 'Apache 2.0'
14
14
  NAME = 'Puppet Herald'
15
15
  PACKAGE = 'puppet-herald'
data/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "puppet-herald",
3
+ "version": "0.1.1",
4
+ "description": "Provides a gateway for consuming puppet reports, a REST API and a simple Web app to display reports.",
5
+ "main": "lib/puppet-herald/public/app.js",
6
+ "directories": {
7
+ "test": "test"
8
+ },
9
+ "dependencies": {
10
+ "angular": "1.3.x",
11
+ "angular-route": "1.3.x",
12
+ "angular-loader": "1.3.x",
13
+ "angular-mocks": "1.3.x"
14
+ },
15
+ "devDependencies": {
16
+ "jasmine-core": "~2.1.0",
17
+ "karma-jasmine": "~0.3.0",
18
+ "karma": "~0.12.0",
19
+ "phantomjs": "~1.9.0",
20
+ "karma-phantomjs-launcher": "~0.1"
21
+ },
22
+ "scripts": {
23
+ "test": "test/javascript/karma.conf.js"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/wavesoftware/gem-puppet-herald.git"
28
+ },
29
+ "keywords": [
30
+ "puppet",
31
+ "reports",
32
+ "herald"
33
+ ],
34
+ "author": "Krzysztof Suszynski",
35
+ "license": "Apache 2.0",
36
+ "bugs": {
37
+ "url": "https://github.com/wavesoftware/gem-puppet-herald/issues"
38
+ },
39
+ "homepage": "https://github.com/wavesoftware/gem-puppet-herald"
40
+ }
@@ -20,42 +20,14 @@ Gem::Specification.new do |gem|
20
20
  # Dependencies
21
21
  gem.required_ruby_version = '>= 1.9.2'
22
22
 
23
- prydebugger = if RUBY_VERSION >= "2.0.0" then 'pry-byebug' else 'pry-debugger' end
24
- dependencies = {
25
- :runtime => [
26
- 'rake',
27
- 'sinatra',
28
- 'sinatra-contrib',
29
- 'sinatra-activerecord',
30
- 'micro-optparse',
31
- 'uglifier',
32
- 'sqlite3',
33
- 'pg',
34
- 'puma'
35
- ],
36
- :test => [
37
- 'rspec',
38
- 'rspec-its',
39
- 'coveralls',
40
- 'simplecov'
41
- ],
42
- :developmant => [
43
- 'inch',
44
- 'travis',
45
- 'travis-lint',
46
- prydebugger
47
- ]
48
- }
23
+ # Runtime
24
+ gem.add_runtime_dependency 'sinatra', '~> 1.4'
25
+ gem.add_runtime_dependency 'sinatra-contrib', '~> 1.4'
26
+ gem.add_runtime_dependency 'sinatra-activerecord', '~> 2.0'
27
+ gem.add_runtime_dependency 'micro-optparse', '~> 1.2'
28
+ gem.add_runtime_dependency 'uglifier', '~> 2.6'
49
29
 
50
- dependencies[:runtime].each do |spec|
51
- gem.add_runtime_dependency spec
52
- end
53
- dependencies[:test].each do |spec|
54
- gem.add_development_dependency spec
55
- end
56
- dependencies[:developmant].each do |spec|
57
- gem.add_development_dependency spec
58
- end
30
+ # Development and test dependencies specified in Gemfile
59
31
 
60
32
  end
61
33
 
@@ -0,0 +1,21 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'model_helper'
4
+ require 'rspec'
5
+ require 'rack/test'
6
+
7
+ xdescribe 'The Herald App', :rollback => true do
8
+ include Rack::Test::Methods
9
+
10
+ def app
11
+ require 'puppet-herald/app'
12
+ PuppetHerald::App
13
+ end
14
+
15
+ it "on '/' redirects to '/app.html'" do
16
+ get '/'
17
+ expect(last_response).not_to be_ok
18
+ expect(last_response.status).to eq(301)
19
+ expect(last_response.header['Location']).to eq('http://example.org/app.html')
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ require 'model_helper'
2
+ require 'puppet-herald/models/report'
3
+ require 'puppet-herald/models/log-entry'
4
+ require 'puppet-herald/models/node'
5
+
6
+ describe Node, '.get_with_reports', :rollback => true do
7
+ let(:yaml) { File.read(File.expand_path("../../fixtures/changed-notify.yaml", __FILE__)) }
8
+ let(:id) { Report.create_from_yaml(yaml).node_id }
9
+
10
+ context 'fetching an existing node' do
11
+ subject { Node.get_with_reports id }
12
+
13
+ it "should return value that isn't nil" do
14
+ subject.should_not be_nil
15
+ end
16
+ it "should return a report object" do
17
+ subject.class.should eq(Node)
18
+ end
19
+ it "should return persisted node" do
20
+ subject.persisted?.should be_truthy
21
+ end
22
+ it "should have status 'changed'" do
23
+ subject.status.should eq('changed')
24
+ end
25
+ end
26
+ end
@@ -2,7 +2,7 @@ require 'model_helper'
2
2
  require 'puppet-herald/models/report'
3
3
  require 'puppet-herald/models/log-entry'
4
4
 
5
- describe Report, ".create_from_yaml" do
5
+ describe Report, ".create_from_yaml", :rollback => true do
6
6
  context 'for valid YAML' do
7
7
  let(:yaml) { File.read(File.expand_path("../../fixtures/changed-notify.yaml", __FILE__)) }
8
8
  it 'that is really not empty' do
@@ -35,4 +35,37 @@ describe Report, ".create_from_yaml" do
35
35
  end
36
36
  end
37
37
  end
38
+ end
39
+
40
+ describe Report, '.get_with_log_entries', :rollback => true do
41
+ let(:yaml) { File.read(File.expand_path("../../fixtures/changed-notify.yaml", __FILE__)) }
42
+ let(:id) { Report.create_from_yaml(yaml).id }
43
+
44
+ context 'fetching an existing report' do
45
+ subject { Report.get_with_log_entries id }
46
+
47
+ it "should return value that isn't nil" do
48
+ subject.should_not be_nil
49
+ end
50
+ it "should return a report object" do
51
+ subject.class.should eq(Report)
52
+ end
53
+ it "should return persisted report" do
54
+ subject.persisted?.should be_truthy
55
+ end
56
+ it "should have status 'changed'" do
57
+ subject.status.should eq('changed')
58
+ end
59
+ it "should have 3 log entries, also persisted" do
60
+ subject.log_entries.size.should eq(3)
61
+ subject.log_entries.each do |log|
62
+ log.persisted?.should be_truthy
63
+ end
64
+ end
65
+ it "should have parent node, that is persistedand has status 'changed'" do
66
+ subject.node.should_not be_nil
67
+ subject.node.status.should eq('changed')
68
+ subject.node.persisted?.should be_truthy
69
+ end
70
+ end
38
71
  end
data/spec/model_helper.rb CHANGED
@@ -1,2 +1,2 @@
1
+ require 'spec_helper'
1
2
  require 'support/active_record'
2
- require 'spec_helper'
data/spec/spec_helper.rb CHANGED
@@ -4,10 +4,13 @@ begin
4
4
  gem 'simplecov'
5
5
  require 'simplecov'
6
6
  SimpleCov.start do
7
+ add_filter "/test/"
7
8
  add_filter "/spec/"
8
9
  add_filter "/.vendor/"
9
10
  add_filter "/vendor/"
10
11
  add_filter "/gems/"
12
+ add_filter "/node_modules/"
13
+ add_filter "/coverage/"
11
14
  end
12
15
  rescue Gem::LoadError
13
16
  # do nothing
@@ -1,14 +1,16 @@
1
+ require 'puppet-herald/database'
1
2
  require 'active_record'
2
3
  require 'stringio' # silence the output
3
4
  $stdout = StringIO.new # from migrator
4
5
 
5
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
6
+ PuppetHerald::Database.dbconn = 'sqlite3://:memory:'
7
+ ActiveRecord::Base.establish_connection(PuppetHerald::Database.spec)
6
8
  ActiveRecord::Migrator.up "db/migrate"
7
9
 
8
10
  $stdout = STDOUT
9
11
 
10
12
  RSpec.configure do |config|
11
- config.around do |example|
13
+ config.around(:example, {:rollback => true}) do |example|
12
14
  ActiveRecord::Base.transaction do
13
15
  example.run
14
16
  raise ActiveRecord::Rollback
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+ require 'puppet-herald'
3
+ require 'puppet-herald/cli'
4
+
5
+ context 'With silenced loggers' do
6
+
7
+ before :each do
8
+ PuppetHerald::CLI::logger.level = 100
9
+ PuppetHerald::CLI::errlogger.level = 100
10
+ PuppetHerald::Database::logger.level = 100
11
+ PuppetHerald::Database::dbconn = nil
12
+ end
13
+
14
+ describe PuppetHerald::CLI, '.parse_options' do
15
+ subject { PuppetHerald::CLI::parse_options argv }
16
+
17
+ context 'on defaults' do
18
+ let(:argv) { [] }
19
+ its(:class) { should be Hash }
20
+ it { subject[:port].should eq 11303 }
21
+ end
22
+
23
+ context 'on with invalid DB' do
24
+ let(:argv) { ['--dbconn', '/non-exist/db.sqlite'] }
25
+
26
+ it { expect { subject }.to raise_error(RuntimeError, /Invalid database connection string given/) }
27
+ end
28
+ end
29
+
30
+ describe PuppetHerald::CLI, '.run!' do
31
+ subject { PuppetHerald::CLI::run! argv }
32
+
33
+ context 'on defaults' do
34
+ let(:argv) { [] }
35
+ before :each do
36
+ require 'puppet-herald/app'
37
+ expect(Kernel).to receive(:exit).with(0)
38
+ expect(PuppetHerald::App).to receive(:run!).and_return :none
39
+ end
40
+
41
+ it { expect(subject).to be_nil }
42
+ end
43
+
44
+ context 'on with invalid DB' do
45
+ let(:argv) { ['--dbconn', '/non-exist/db.sqlite'] }
46
+ before :each do
47
+ expect(Kernel).to receive(:exit).with(2)
48
+ end
49
+
50
+ it { expect(subject).to be_nil }
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ require 'puppet-herald'
3
+ require 'puppet-herald/database'
4
+
5
+ describe PuppetHerald::Database, '.spec' do
6
+ let(:tempdir) { Dir.tmpdir }
7
+ let(:echo) { false }
8
+ subject { PuppetHerald::Database::spec echo }
9
+ context 'with invalid dbconn' do
10
+ before :each do
11
+ PuppetHerald::Database::dbconn = "#{tempdir}/non-existing.db"
12
+ end
13
+ it { expect { subject }.to raise_error(RuntimeError, /Invalid database connection string given/) }
14
+ end
15
+ context 'using sqlite' do
16
+ context 'with non existing database' do
17
+ before :each do
18
+ PuppetHerald::Database::dbconn = 'sqlite:///non-existing/non-existing.db'
19
+ end
20
+ it { expect { subject }.to raise_error(Errno::ENOENT, /No such file or directory/) }
21
+ end
22
+ context 'with creatable database file' do
23
+ before :each do
24
+ PuppetHerald::Database::dbconn = "sqlite://#{tempdir}/non-existing.db"
25
+ end
26
+ its(:class) { should be Hash }
27
+ its(:size) { should eq 2 }
28
+ context 'while echoing!!' do
29
+ let(:echo) { true }
30
+ before :each do
31
+ PuppetHerald::Database::logger.level = Logger::FATAL
32
+ end
33
+ its(:class) { should be Hash }
34
+ its(:size) { should eq 2 }
35
+ end
36
+ end
37
+ end
38
+ context 'using postgres' do
39
+ before :each do
40
+ PuppetHerald::Database::dbconn = "postgres://abc@localhost:6543/adb"
41
+ end
42
+ context 'with non existing passfile' do
43
+ before :each do
44
+ PuppetHerald::Database::passfile = "/non-existing/passfile"
45
+ end
46
+ it { expect { subject }.to raise_error(Errno::ENOENT, /No such file or directory/) }
47
+ end
48
+ context 'with existing passfile' do
49
+ before :each do
50
+ PuppetHerald::Database::passfile = __FILE__
51
+ end
52
+ its(:class) { should be Hash }
53
+ its(:size) { should eq 7 }
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ require 'puppet-herald'
3
+ require 'puppet-herald/javascript'
4
+
5
+ describe PuppetHerald::Javascript, '.files' do
6
+ context 'running in dev environment' do
7
+ before :each do
8
+ expect(PuppetHerald).to receive(:is_in_dev?).twice.and_return true
9
+ expect(Dir).to receive(:glob).twice.and_return(['aaa.js', 'a/bbb.js', 'ccc_test.js'])
10
+ PuppetHerald::Javascript::files
11
+ end
12
+ after :each do
13
+ PuppetHerald::Javascript::class_variable_set '@@files', nil
14
+ end
15
+ let(:files) { PuppetHerald::Javascript::files }
16
+ it { files.size.should eq 2 }
17
+ it { files.should include 'aaa.js' }
18
+ it { files.should_not include 'ccc_test.js' }
19
+ end
20
+
21
+ context 'running in prod environment' do
22
+ before :each do
23
+ expect(PuppetHerald).to receive(:is_in_dev?).twice.and_return false
24
+ expect(Dir).to receive(:glob).once.and_return(['aaa.js', 'a/bbb.js', 'ccc_test.js'])
25
+ PuppetHerald::Javascript::files
26
+ end
27
+ after :each do
28
+ PuppetHerald::Javascript::class_variable_set '@@files', nil
29
+ end
30
+ let(:files) { PuppetHerald::Javascript::files }
31
+ it { files.size.should eq 2 }
32
+ it { files.should include 'aaa.js' }
33
+ it { files.should_not include 'ccc_test.js' }
34
+ end
35
+ end
36
+
37
+ describe PuppetHerald::Javascript, '.uglify' do
38
+ subject { PuppetHerald::Javascript::uglify 'myapp.js.map' }
39
+
40
+ it { subject.size.should eq 2 }
41
+ it { subject['js'].should_not be_empty }
42
+ it { subject['js.map'].should_not be_empty }
43
+ it { subject['js'].should include('myapp.js.map') }
44
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require 'puppet-herald'
3
+ require 'puppet-herald/version'
4
+
5
+ describe PuppetHerald, '.version_prep' do
6
+ context 'on stable version v1.2.3' do
7
+ subject { PuppetHerald::version_prep '1.2.3' }
8
+ it { subject.should eq '1.2.3' }
9
+ end
10
+ context 'on unstable version v1.2.3.pre' do
11
+ subject { PuppetHerald::version_prep '1.2.3.pre' }
12
+ it { subject.should match /^1\.2\.3\.pre\.v\d+\.\d+\.\d+(?:\.\d+\.g[0-9a-f]{7}(?:\.dirty)?)?$/ }
13
+ end
14
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+ require 'puppet-herald'
3
+
4
+ describe PuppetHerald, '.relative_dir' do
5
+ let(:thisfile) { File.realpath(__FILE__) }
6
+ context 'on directory "."' do
7
+ subject { PuppetHerald.relative_dir '.' }
8
+
9
+ it do
10
+ subject.should_not be_nil
11
+ end
12
+
13
+ it 'should give a common path' do
14
+ thisfile.should include(subject)
15
+ end
16
+
17
+ it do
18
+ thisfile.gsub(subject, '').should eq('/spec/unit/puppet-herald_spec.rb')
19
+ end
20
+ end
21
+
22
+ context 'on directory "lib/puppet-herald/public"' do
23
+ subject { PuppetHerald.relative_dir 'lib/puppet-herald/public' }
24
+
25
+ it { Pathname.new(File.join(subject, 'app.js')).should be_file }
26
+ end
27
+ end
28
+
29
+ describe PuppetHerald do
30
+ after :each do
31
+ ENV.delete 'PUPPET_HERALD_ENV'
32
+ end
33
+ context 'on unset environment variable' do
34
+ before :each do
35
+ ENV.delete 'PUPPET_HERALD_ENV'
36
+ end
37
+ describe '.environment' do
38
+ it { subject::environment.should eq(:production) }
39
+ end
40
+ describe '.is_in_prod?' do
41
+ it { subject.should be_is_in_prod }
42
+ end
43
+ end
44
+
45
+ context 'on environment variable set to dev' do
46
+ before :each do
47
+ ENV['PUPPET_HERALD_ENV'] = 'dev'
48
+ end
49
+ describe '.environment' do
50
+ it { subject::environment.should eq(:dev) }
51
+ end
52
+ describe '.is_in_prod?' do
53
+ it { subject.should be_is_in_dev }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ module.exports = function(config) {
2
+ config.set({
3
+ frameworks: ['jasmine'],
4
+
5
+ files: [
6
+ '../../node_modules/angular/angular.js',
7
+ '../../node_modules/angular-loader/angular-loader.js',
8
+ '../../node_modules/angular-mocks/angular-mocks.js',
9
+ '../../node_modules/angular-route/angular-route.js',
10
+ '../../lib/puppet-herald/public/**/*_test.js'
11
+ ]
12
+ });
13
+ };
metadata CHANGED
@@ -1,264 +1,80 @@
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.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Krzysztof Suszynski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-13 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ! '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ! '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
11
+
12
+ date: 2014-12-13 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
28
15
  name: sinatra
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ! '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ! '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: sinatra-contrib
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
16
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: sinatra-activerecord
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ! '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: micro-optparse
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ! '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: "1.4"
76
22
  type: :runtime
23
+ version_requirements: *id001
24
+ - !ruby/object:Gem::Dependency
25
+ name: sinatra-contrib
77
26
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ! '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: uglifier
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
27
+ requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: "1.4"
90
32
  type: :runtime
33
+ version_requirements: *id002
34
+ - !ruby/object:Gem::Dependency
35
+ name: sinatra-activerecord
91
36
  prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ! '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: sqlite3
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
37
+ requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: "2.0"
104
42
  type: :runtime
43
+ version_requirements: *id003
44
+ - !ruby/object:Gem::Dependency
45
+ name: micro-optparse
105
46
  prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: pg
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
47
+ requirement: &id004 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ~>
50
+ - !ruby/object:Gem::Version
51
+ version: "1.2"
118
52
  type: :runtime
53
+ version_requirements: *id004
54
+ - !ruby/object:Gem::Dependency
55
+ name: uglifier
119
56
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ! '>='
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: puma
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
131
- version: '0'
57
+ requirement: &id005 !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: "2.6"
132
62
  type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ! '>='
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ! '>='
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ! '>='
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: rspec-its
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ! '>='
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ! '>='
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: coveralls
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ! '>='
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: simplecov
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ! '>='
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ! '>='
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: inch
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ! '>='
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ! '>='
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: travis
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ! '>='
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ! '>='
221
- - !ruby/object:Gem::Version
222
- version: '0'
223
- - !ruby/object:Gem::Dependency
224
- name: travis-lint
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ! '>='
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
- - !ruby/object:Gem::Dependency
238
- name: pry-debugger
239
- requirement: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ! '>='
242
- - !ruby/object:Gem::Version
243
- version: '0'
244
- type: :development
245
- prerelease: false
246
- version_requirements: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - ! '>='
249
- - !ruby/object:Gem::Version
250
- version: '0'
251
- description: Provides a gateway for consuming puppet reports, a REST API and a simple
252
- Web app to display reports.
63
+ version_requirements: *id005
64
+ description: Provides a gateway for consuming puppet reports, a REST API and a simple Web app to display reports.
253
65
  email: krzysztof.suszynski@wavesoftware.pl
254
- executables:
66
+ executables:
255
67
  - puppet-herald
256
68
  extensions: []
69
+
257
70
  extra_rdoc_files: []
258
- files:
71
+
72
+ files:
259
73
  - .gitignore
260
74
  - .rspec
75
+ - .travis.yml
261
76
  - Gemfile
77
+ - Gemfile.local.example
262
78
  - README.md
263
79
  - Rakefile
264
80
  - bin/puppet-herald
@@ -298,34 +114,47 @@ files:
298
114
  - lib/puppet-herald/version.rb
299
115
  - lib/puppet-herald/views/app.erb
300
116
  - lib/puppet-herald/views/err500.erb
117
+ - package.json
301
118
  - puppet-herald.gemspec
119
+ - spec/integration/app_spec.rb
120
+ - spec/integration/fixtures/changed-notify.yaml
121
+ - spec/integration/models/node_spec.rb
122
+ - spec/integration/models/report_spec.rb
302
123
  - spec/model_helper.rb
303
124
  - spec/spec_helper.rb
304
125
  - spec/support/active_record.rb
305
- - spec/unit/fixtures/changed-notify.yaml
306
- - spec/unit/models/report_spec.rb
126
+ - spec/unit/puppet-herald/cli_spec.rb
127
+ - spec/unit/puppet-herald/database_spec.rb
128
+ - spec/unit/puppet-herald/javascript_spec.rb
129
+ - spec/unit/puppet-herald/version_spec.rb
130
+ - spec/unit/puppet-herald_spec.rb
131
+ - test/javascript/karma.conf.js
307
132
  homepage: https://github.com/wavesoftware/gem-puppet-herald
308
- licenses:
133
+ licenses:
309
134
  - Apache 2.0
310
135
  metadata: {}
136
+
311
137
  post_install_message:
312
138
  rdoc_options: []
313
- require_paths:
139
+
140
+ require_paths:
314
141
  - lib
315
- required_ruby_version: !ruby/object:Gem::Requirement
316
- requirements:
317
- - - ! '>='
318
- - !ruby/object:Gem::Version
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
319
146
  version: 1.9.2
320
- required_rubygems_version: !ruby/object:Gem::Requirement
321
- requirements:
322
- - - ! '>='
323
- - !ruby/object:Gem::Version
324
- version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: "0"
325
152
  requirements: []
153
+
326
154
  rubyforge_project:
327
- rubygems_version: 2.4.5
155
+ rubygems_version: 2.0.14
328
156
  signing_key:
329
157
  specification_version: 4
330
158
  summary: a Puppet report processor
331
159
  test_files: []
160
+