purobu 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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