purobu 0.0.1 → 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.
data/README.md CHANGED
@@ -105,19 +105,46 @@ heroku_api.get_config_vars('some-app').body
105
105
  # {"HEROKU_POSTGRESQL_PURPLE_URL"=>"postgres://user:pass@host:5732/database"}
106
106
  heroku_api.get_addons('some-app').body
107
107
  # [{"slug"=>"crane", "selective"=>false,
108
- "configured"=>true,
109
- "url"=>nil,
110
- "state"=>"public",
111
- "group_description"=>"Heroku Postgresql",
112
- "consumes_dyno_hours"=>false,
113
- "price"=>{"cents"=>0, "unit"=>"month"},
114
- "attachment_name"=>"HEROKU_POSTGRESQL_TEAL",
115
- "plan_description"=>"Crane",
116
- "name"=>"heroku-postgresql:crane",
117
- "beta"=>false,
118
- "attachable"=>false,
119
- "description"=>"Heroku Postgres Crane",
120
- "terms_of_service"=>false}]
108
+ # "configured"=>true,
109
+ # "url"=>nil,
110
+ # "state"=>"public",
111
+ # "group_description"=>"Heroku Postgresql",
112
+ # "consumes_dyno_hours"=>false,
113
+ # "price"=>{"cents"=>0, "unit"=>"month"},
114
+ # "attachment_name"=>"HEROKU_POSTGRESQL_TEAL",
115
+ # "plan_description"=>"Crane",
116
+ # "name"=>"heroku-postgresql:crane",
117
+ # "beta"=>false,
118
+ # "attachable"=>false,
119
+ # "description"=>"Heroku Postgres Crane",
120
+ # "terms_of_service"=>false}]
121
+ ```
122
+
123
+ ## Adding helpers
124
+
125
+ You can add helpers to be used across your tests via `helpers`:
126
+
127
+ ```ruby
128
+ helpers do
129
+ def do_it
130
+ # it does it
131
+ end
132
+ end
133
+
134
+ test do
135
+ verify do
136
+ do_it # it does it
137
+ end
138
+ end
139
+ ```
140
+
141
+ A `database_connection` helper is included which can be used in your tests:
142
+
143
+ ```ruby
144
+ url = 'postgres://user:pass@host/database'
145
+ database_connection(url) do |conn|
146
+ conn # a Sequel connection object
147
+ end
121
148
  ```
122
149
 
123
150
  ## Meta
@@ -0,0 +1,40 @@
1
+ require 'sequel'
2
+
3
+ module Purobu
4
+ class DatabaseConnection
5
+
6
+ attr_reader :url
7
+
8
+ def initialize(url)
9
+ @url = url
10
+ end
11
+
12
+ def connect
13
+ attempts = 0
14
+ begin
15
+ connection = Sequel.connect(url)
16
+ rescue => e
17
+ Purobu.log(connection_failure: "Connection attempt to '#{@url}' failed.")
18
+ end
19
+
20
+ if block_given?
21
+ begin
22
+ yield connection
23
+ ensure
24
+ connection.disconnect
25
+ end
26
+ else
27
+ return connection
28
+ end
29
+ end
30
+
31
+ module Helper
32
+ def database_connection(url, &block)
33
+ Purobu::DatabaseConnection.new(url).connect(&block)
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+ Purobu::Helpers.register(Purobu::DatabaseConnection::Helper)
40
+ end
data/lib/purobu/dsl.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Purobu
2
2
  class DSL
3
3
  attr_reader :runner, :files
4
+
4
5
  def initialize(opts = {})
5
6
  @runner = Runner.new
6
7
  @files = opts[:files] || Dir['**/test_*.rb']
@@ -0,0 +1,23 @@
1
+ module Purobu
2
+ module Helpers
3
+ CLASSES = [Purobu::Test, Purobu::Runner, Purobu::DSL].freeze
4
+
5
+ def self.register(helpers)
6
+ CLASSES.each do |klass|
7
+ klass.class_eval do
8
+ include helpers
9
+ end
10
+ end
11
+ end
12
+
13
+ module HelpersHelper
14
+ def helpers(&block)
15
+ ::Purobu::Helpers.register(Module.new(&block))
16
+ end
17
+ alias :helper :helpers
18
+ end
19
+ self.register(HelpersHelper)
20
+
21
+ end
22
+ end
23
+
@@ -1,4 +1,5 @@
1
1
  require 'heroku-api'
2
+
2
3
  module Purobu
3
4
  module HerokuHelpers
4
5
  def heroku(*args)
@@ -10,3 +11,5 @@ module Purobu
10
11
  end
11
12
  end
12
13
  end
14
+
15
+ Purobu::Helpers.register(Purobu::HerokuHelpers)
data/lib/purobu/runner.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require 'thread'
2
2
  module Purobu
3
3
  class Runner
4
- include HerokuHelpers
5
-
6
4
  attr_reader :tests, :thread_count
7
5
 
8
6
  def initialize
data/lib/purobu/test.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require 'heroku'
2
2
  module Purobu
3
3
  class Test
4
- include HerokuHelpers
5
-
6
4
  attr_reader :setups, :teardowns, :name
7
5
  attr_writer :exercise, :verification
8
6
 
@@ -1,3 +1,3 @@
1
1
  module Purobu
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/purobu.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require "purobu/version"
2
2
  require "purobu/log"
3
3
  require "purobu/configuration"
4
- require "purobu/heroku_helpers"
5
4
  require "purobu/test"
6
5
  require "purobu/runner"
7
6
  require "purobu/dsl"
7
+ require "purobu/helpers"
8
+ require "purobu/database_connection"
9
+ require "purobu/heroku_helpers"
8
10
  require "purobu/heroku"
9
11
  require "purobu/reporter"
data/purobu.gemspec CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/purobu/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Harold Giménez"]
6
6
  gem.email = ["harold.gimenez@gmail.com"]
7
- gem.description = %q{ Probe your production or staging environment for behavior correctness }
7
+ gem.description = %q{ Black-box integration test framework for components on the Heroku platform. }
8
8
  gem.summary = %q{ Black-box integration test framework for components on the Heroku platform. }
9
9
  gem.homepage = "http://practiceovertheory.com"
10
10
 
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.add_dependency "heroku", "2.28.2"
19
19
  gem.add_dependency "heroku-api"
20
20
  gem.add_dependency "scrolls", "0.2.1"
21
+ gem.add_dependency "sequel"
21
22
  gem.add_development_dependency "rspec"
22
23
  gem.add_development_dependency "fakefs"
23
24
  end
@@ -0,0 +1,34 @@
1
+ require 'purobu'
2
+
3
+ describe Purobu::DatabaseConnection, '#connect' do
4
+
5
+ let(:url) { 'postgres:///foo' }
6
+
7
+ it 'yields a connection to the given url' do
8
+ conn = double(:connection, close: nil)
9
+ conn.should_receive(:disconnect).once
10
+ Sequel.should_receive(:connect).with(url).and_return(conn)
11
+
12
+ expect { |block|
13
+ Purobu::DatabaseConnection.new(url).connect &block
14
+ }.to yield_with_args(conn)
15
+ end
16
+
17
+ it 'gives the connection object when no block is given 'do
18
+ conn = double(:connection, close: nil)
19
+ conn.should_not_receive(:disconnect)
20
+ Sequel.should_receive(:connect).with(url).and_return(conn)
21
+
22
+ Purobu::DatabaseConnection.new(url).connect.should == conn
23
+ end
24
+
25
+ it 'exposes a database_connection helper' do
26
+ conn = double(:conn)
27
+ conn.should_receive(:connect).once
28
+ Purobu::DatabaseConnection.stub(:new).with(url).and_return(conn)
29
+
30
+ test = Purobu::Test.new
31
+ test.database_connection(url)
32
+ end
33
+
34
+ end
@@ -0,0 +1,27 @@
1
+ require 'purobu'
2
+
3
+ module TestHelpers
4
+ def test_helper
5
+ throw :test_helper
6
+ end
7
+ end
8
+
9
+ describe Purobu::Helpers, '.register' do
10
+ it 'makes helpers available to tests and the runner' do
11
+ Purobu::Helpers.register(TestHelpers)
12
+
13
+ test = Purobu::Test.new
14
+ expect { test.test_helper }.to throw_symbol :test_helper
15
+ end
16
+
17
+ it 'exposes a helper helper' do
18
+ test = Purobu::Test.new
19
+ test.helper do
20
+ def test_helper
21
+ throw :test_helper
22
+ end
23
+ end
24
+
25
+ expect { test.test_helper }.to throw_symbol :test_helper
26
+ end
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purobu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: heroku
16
- requirement: &70132005273080 !ruby/object:Gem::Requirement
16
+ requirement: &70336029135080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.28.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70132005273080
24
+ version_requirements: *70336029135080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: heroku-api
27
- requirement: &70132005172240 !ruby/object:Gem::Requirement
27
+ requirement: &70336029134040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70132005172240
35
+ version_requirements: *70336029134040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: scrolls
38
- requirement: &70132005159400 !ruby/object:Gem::Requirement
38
+ requirement: &70336029021320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,21 @@ dependencies:
43
43
  version: 0.2.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70132005159400
46
+ version_requirements: *70336029021320
47
+ - !ruby/object:Gem::Dependency
48
+ name: sequel
49
+ requirement: &70336029004160 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70336029004160
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: rspec
49
- requirement: &70132005150920 !ruby/object:Gem::Requirement
60
+ requirement: &70336028995820 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70132005150920
68
+ version_requirements: *70336028995820
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: fakefs
60
- requirement: &70132005148440 !ruby/object:Gem::Requirement
71
+ requirement: &70336028987520 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,8 +76,9 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70132005148440
69
- description: ! ' Probe your production or staging environment for behavior correctness '
79
+ version_requirements: *70336028987520
80
+ description: ! ' Black-box integration test framework for components on the Heroku
81
+ platform. '
70
82
  email:
71
83
  - harold.gimenez@gmail.com
72
84
  executables:
@@ -82,7 +94,9 @@ files:
82
94
  - bin/purobu
83
95
  - lib/purobu.rb
84
96
  - lib/purobu/configuration.rb
97
+ - lib/purobu/database_connection.rb
85
98
  - lib/purobu/dsl.rb
99
+ - lib/purobu/helpers.rb
86
100
  - lib/purobu/heroku.rb
87
101
  - lib/purobu/heroku_helpers.rb
88
102
  - lib/purobu/log.rb
@@ -91,7 +105,9 @@ files:
91
105
  - lib/purobu/test.rb
92
106
  - lib/purobu/version.rb
93
107
  - purobu.gemspec
108
+ - spec/purobu/database_connection_spec.rb
94
109
  - spec/purobu/dsl_spec.rb
110
+ - spec/purobu/helpers_spec.rb
95
111
  - spec/purobu/reporter_spec.rb
96
112
  - spec/purobu/runner_spec.rb
97
113
  - spec/purobu/test_spec.rb
@@ -120,7 +136,9 @@ signing_key:
120
136
  specification_version: 3
121
137
  summary: Black-box integration test framework for components on the Heroku platform.
122
138
  test_files:
139
+ - spec/purobu/database_connection_spec.rb
123
140
  - spec/purobu/dsl_spec.rb
141
+ - spec/purobu/helpers_spec.rb
124
142
  - spec/purobu/reporter_spec.rb
125
143
  - spec/purobu/runner_spec.rb
126
144
  - spec/purobu/test_spec.rb