jumanjiman_spec_helper 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ *~ # emacs buffer
2
+ *.swp # vim buffer
3
+
4
+ # some people really do this
5
+ *.orig
6
+ *.bak
7
+ *.old
8
+
9
+ # from `bundle gem'
10
+ *.gem
11
+ *.rbc
12
+ .bundle
13
+ .config
14
+ .yardoc
15
+ Gemfile.lock
16
+ InstalledFiles
17
+ _yardoc
18
+ coverage
19
+ doc/
20
+ lib/bundler/man
21
+ pkg
22
+ rdoc
23
+ spec/reports
24
+ test/tmp
25
+ test/version_tmp
26
+ tmp
@@ -0,0 +1,17 @@
1
+ ---
2
+ # http://about.travis-ci.org/docs/user/getting-started/
3
+
4
+ rvm:
5
+ - 1.8.7
6
+ - 1.9.3
7
+ - 2.0.0
8
+
9
+ before_script:
10
+ - 'bundle install'
11
+
12
+ script:
13
+ - 'rake spec'
14
+
15
+ # http://about.travis-ci.org/docs/user/notifications/#Email-notifications
16
+ notifications:
17
+ email: false
@@ -0,0 +1,18 @@
1
+ ## Basics
2
+
3
+ 1. Fork https://github.com/jumanjiman/jumanjiman_spec_helper/fork_select
4
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
5
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
6
+ 4. Push to the branch (`git push origin my-new-feature`)
7
+ 5. Create new Pull Request
8
+
9
+
10
+ ## Contributor agreement
11
+
12
+ By contributing to this project, you certify that:
13
+
14
+ * You have the right to contribute the content of your commit,
15
+ and your contribution complies with legal requirements.
16
+
17
+ * Your contribution becomes licensed according to LICENSE.txt
18
+ in this repo.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # vim: set ts=2 sw=2 ai et syntax=ruby:
2
+ source 'https://rubygems.org'
3
+
4
+ # Specify your gem's dependencies in jumanjiman_spec_helper.gemspec
5
+ gemspec
@@ -0,0 +1,16 @@
1
+ Copyright (C) 2013 Paul Morgan
2
+
3
+ Paul Morgan can be contacted at: jumanjiman@gmail.com
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
@@ -0,0 +1,47 @@
1
+ # JumanjimanSpecHelper
2
+
3
+ [![Build Status](https://travis-ci.org/jumanjiman/jumanjiman_spec_helper.png?branch=master)](https://travis-ci.org/jumanjiman/jumanjiman_spec_helper)
4
+
5
+ This gem provides reusable components that can be helpful when
6
+ writing rspec for [Puppet](https://puppetlabs.com/puppet/what-is-puppet/)
7
+ modules.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'jumanjiman_spec_helper'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install jumanjiman_spec_helper
22
+
23
+ ## Usage
24
+
25
+ ### Shared contexts
26
+
27
+ #### Environment variables
28
+
29
+ Environment variables created in one rspec example can invalidate
30
+ other examples, giving either false positives or false failures.
31
+ This module cleans up your environment between examples.
32
+
33
+ * Preserve environment variables that exist *before* rspec examples
34
+ * Discard environment variables created *within* rspec examples
35
+
36
+ Add to `spec/spec_helper.rb`:
37
+
38
+ ```ruby
39
+ require 'jumanjiman_spec_helper/environment_context'
40
+ RSpec.configure do |c|
41
+ # your normal config
42
+ c.include JumanjimanSpecHelper::EnvironmentContext
43
+ end
44
+ ```
45
+
46
+ That's it! Now environment variables will be automatically
47
+ cleaned up between rspec examples.
@@ -0,0 +1,28 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+
3
+ # use the local git version of library for dev
4
+ lib = File.expand_path('../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+
7
+ # library of useful (to me) utils
8
+ require 'jumanjiman_spec_helper'
9
+
10
+ # lock dependencies and load paths, but lazy-load gems
11
+ JumanjimanSpecHelper::Bundle.setup :development
12
+
13
+ # bundle skeleton
14
+ require "bundler/gem_tasks"
15
+
16
+ task :default do |t|
17
+ puts %x!rake -T!
18
+ end
19
+
20
+ require 'rake/dsl_definition'
21
+ require 'rspec/core/rake_task'
22
+
23
+ RSpec::Core::RakeTask.new(:spec) do |t|
24
+ t.pattern = 'spec/**/*_spec.rb'
25
+ t.rspec_opts = [
26
+ '--color',
27
+ ]
28
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # vim: set ts=2 sw=2 ai et ruler syntax=ruby:
3
+ #
4
+ # This gemspec was created with `bundle gem jumanjiman_spec_helper'
5
+ # http://net.tutsplus.com/tutorials/ruby/gem-creation-with-bundler/
6
+ #
7
+ lib = File.expand_path('../lib', __FILE__)
8
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
+ require 'jumanjiman_spec_helper/version'
10
+
11
+ # http://rubygems.rubyforge.org/rubygems-update/Gem/Specification.html
12
+ Gem::Specification.new do |gem|
13
+ gem.name = "jumanjiman_spec_helper"
14
+ gem.version = JumanjimanSpecHelper::VERSION
15
+ gem.authors = ["Paul Morgan"]
16
+ gem.email = ["jumanjiman@gmail.com"]
17
+ gem.description = %q{Puppet spec helper and common rspec tests}
18
+ gem.summary = %q{Provides common rspec tests for Puppet modules}
19
+ gem.homepage = ""
20
+
21
+ gem.files = `git ls-files`.split($/)
22
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
23
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
24
+ gem.require_paths = ["lib"]
25
+
26
+ # http://docs.rubygems.org/read/chapter/20#development_dependencies
27
+ gem.add_development_dependency 'rake', '>= 10.0'
28
+ gem.add_development_dependency 'rspec-core', '2.12.2'
29
+ gem.add_development_dependency 'rspec', '2.12.0'
30
+ gem.add_development_dependency 'rspec-expectations', '2.12.1'
31
+ gem.add_development_dependency 'rspec-mocks', '2.12.2'
32
+ # https://github.com/freerange/mocha#bundler
33
+ gem.add_development_dependency 'minitest', '4.5.0'
34
+ gem.add_development_dependency 'mocha', '0.13.2'
35
+ end
@@ -0,0 +1,7 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ require "jumanjiman_spec_helper/version"
3
+
4
+ module JumanjimanSpecHelper
5
+ require 'jumanjiman_spec_helper/bundle'
6
+ require 'jumanjiman_spec_helper/environment_context'
7
+ end
@@ -0,0 +1,56 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ module JumanjimanSpecHelper
3
+ module Bundle
4
+ require 'rubygems' # ugh, support older distros
5
+ require 'bundler'
6
+ require 'yaml'
7
+
8
+ # lock dependencies and setup load paths
9
+ # http://myronmars.to/n/dev-blog/2012/12/5-reasons-to-avoid-bundler-require
10
+ # http://anti-pattern.com/bundler-setup-vs-bundler-require
11
+ def self.setup(envs = [:default], load_early = false)
12
+ if load_early
13
+ # load all gems at startup
14
+ Bundler.require(envs)
15
+ else
16
+ # do not load until required
17
+ Bundler.setup(envs)
18
+ end
19
+ rescue Bundler::GemfileNotFound,
20
+ Bundler::GemNotFound,
21
+ Bundler::VersionConflict => e
22
+ # some of us are not ruby experts; we need a reminder
23
+ print_bundle_error e
24
+ exit
25
+ rescue Exception => e
26
+ puts e.class
27
+ puts e.message
28
+ puts e.backtrace
29
+ exit
30
+ end
31
+
32
+ def self.bundle_config
33
+ File.join('.bundle', 'config')
34
+ end
35
+
36
+ def self.desired_bundle
37
+ File.join(ENV['HOME'], '.bundle')
38
+ end
39
+
40
+ def self.actual_bundle
41
+ path = YAML.load_file(bundle_config)['BUNDLE_PATH']
42
+ File.expand_path(path) # expand the tilde if necessary
43
+ rescue
44
+ ''
45
+ end
46
+
47
+ def self.print_bundle_error(e)
48
+ puts e.message
49
+ if File.exist?(bundle_config)
50
+ puts 'Try running `bundle update`'
51
+ else
52
+ puts 'Try running `bundle install --path=%s`' % desired_bundle
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,20 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ module JumanjimanSpecHelper
3
+ module EnvironmentContext
4
+ require 'rspec/core'
5
+ extend RSpec::SharedContext
6
+ before :each do
7
+ # Store environment variables (to be restored later)
8
+ @env = Hash.new
9
+ ENV.each {|k,v| @env[k] = v}
10
+ end
11
+
12
+ after :each do
13
+ # Restore environment variables
14
+ @env.each {|k,v| ENV[k] = v}
15
+
16
+ # remove environment vars that did not exist before test
17
+ ENV.keys.reject{|k| @env.include?(k)}.each{|k| ENV.delete(k)}
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,4 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ module JumanjimanSpecHelper
3
+ VERSION = '0.0.2'
4
+ end
@@ -0,0 +1,35 @@
1
+ IDEAL_CONSOLE_WIDTH = 72
2
+ def horizontal_rule(width = 5)
3
+ '=' * [width, IDEAL_CONSOLE_WIDTH].min
4
+ end
5
+
6
+ # use the local git version of library for dev
7
+ lib = File.expand_path('../../lib', __FILE__)
8
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
+
10
+ # common dependencies
11
+ gems = [
12
+ 'test/unit', # https://github.com/freerange/mocha#bundler
13
+ 'mocha/setup', # http://gofreerange.com/mocha/docs/Mocha/Configuration.html
14
+ 'jumanjiman_spec_helper',
15
+ ]
16
+ begin
17
+ gems.each {|gem| require gem}
18
+ rescue Exception => e
19
+ # emphasize dependency failures in case a task spews lots of output
20
+ puts horizontal_rule(e.message.length)
21
+ puts e.message
22
+ puts horizontal_rule(e.message.length)
23
+ exit(1)
24
+ end
25
+
26
+ RSpec.configure do |c|
27
+ # https://www.relishapp.com/rspec/rspec-core/v/2-12/docs/mock-framework-integration/mock-with-mocha!
28
+ c.mock_framework = :mocha
29
+
30
+ # see output for all failures
31
+ c.fail_fast = false
32
+
33
+ # show times for 10 slowest examples (unless there are failed examples)
34
+ c.profile_examples = true
35
+ end
@@ -0,0 +1,60 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ require 'spec_helper'
3
+ describe 'JumanjimanSpecHelper::EnvironmentContext' do
4
+ # create two keys, each with random name
5
+ key1 = (0...8).map{(65+rand(26)).chr}.join # exist before examples
6
+ key2 = (0...8).map{(65+rand(26)).chr}.join # create within examples
7
+
8
+ # both keys get this value
9
+ value = 'boogabooga'
10
+
11
+ before :all do
12
+ ENV[key1] = value
13
+ @reporter = RSpec::Core::Reporter.new
14
+ end
15
+
16
+ after :all do
17
+ # remove persistent key
18
+ ENV.delete(key1)
19
+ end
20
+
21
+ it 'is accessible as JumanjimanSpecHelper::EnvironmentContext' do
22
+ JumanjimanSpecHelper::EnvironmentContext
23
+ end
24
+
25
+ context 'when included' do
26
+ it 'preserves environment variable created before example' do
27
+ group = RSpec::Core::ExampleGroup.describe do
28
+ include JumanjimanSpecHelper::EnvironmentContext
29
+ end
30
+ group.run(@reporter)
31
+ ENV[key1].should == value
32
+ end
33
+
34
+ it 'discards environment variable created within example' do
35
+ group = RSpec::Core::ExampleGroup.describe do
36
+ include JumanjimanSpecHelper::EnvironmentContext
37
+ it {ENV[key2] = value} # create env var in example
38
+ end
39
+ group.run(@reporter)
40
+ ENV[key2].should be_nil
41
+ end
42
+ end
43
+
44
+ context 'when not included' do
45
+ it 'preserves environment variable created before example' do
46
+ group = RSpec::Core::ExampleGroup.describe do
47
+ end
48
+ group.run(@reporter)
49
+ ENV[key1].should == value
50
+ end
51
+
52
+ it 'preserves environment variable created within example' do
53
+ group = RSpec::Core::ExampleGroup.describe do
54
+ it {ENV[key2] = value} # create env var in example
55
+ end
56
+ group.run(@reporter)
57
+ ENV[key2].should == value
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,5 @@
1
+ # vim: set ts=2 sw=2 ai et ruler:
2
+ require 'spec_helper'
3
+ describe 'JumanjimanSpecHelper::VERSION' do
4
+ it {should be_a(String)}
5
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jumanjiman_spec_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paul Morgan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '10.0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '10.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec-core
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.12.2
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.12.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.12.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.12.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec-expectations
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.12.1
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.12.1
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec-mocks
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 2.12.2
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 2.12.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 4.5.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 4.5.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: mocha
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.13.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.13.2
126
+ description: Puppet spec helper and common rspec tests
127
+ email:
128
+ - jumanjiman@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .travis.yml
135
+ - CONTRIBUTING.md
136
+ - Gemfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - jumanjiman_spec_helper.gemspec
141
+ - lib/jumanjiman_spec_helper.rb
142
+ - lib/jumanjiman_spec_helper/bundle.rb
143
+ - lib/jumanjiman_spec_helper/environment_context.rb
144
+ - lib/jumanjiman_spec_helper/version.rb
145
+ - spec/spec_helper.rb
146
+ - spec/unit/environment_context_spec.rb
147
+ - spec/unit/version_spec.rb
148
+ homepage: ''
149
+ licenses: []
150
+ post_install_message:
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ segments:
161
+ - 0
162
+ hash: -4202932635494857772
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ segments:
170
+ - 0
171
+ hash: -4202932635494857772
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 1.8.25
175
+ signing_key:
176
+ specification_version: 3
177
+ summary: Provides common rspec tests for Puppet modules
178
+ test_files:
179
+ - spec/spec_helper.rb
180
+ - spec/unit/environment_context_spec.rb
181
+ - spec/unit/version_spec.rb