Flipper 1.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.
Files changed (5) hide show
  1. data/README +3 -2
  2. data/Rakefile +4 -1
  3. data/lib/flipper.rb +12 -2
  4. data/test/flipper_test.rb +41 -28
  5. metadata +21 -4
data/README CHANGED
@@ -22,7 +22,8 @@ database on the fly for each HTTP requests. This is what Flipper does.
22
22
 
23
23
  == Status
24
24
 
25
- The current status is quite good. Flipper is currently used on a daily basis on commercial projects.
25
+ The current status is quite good. Flipper is currently used on a daily basis on
26
+ commercial projects.
26
27
 
27
28
 
28
29
  == Installation
@@ -48,7 +49,7 @@ To use flipper just include the <code>Flipper</code> module and add a before fil
48
49
  The collection PER COLLECTION is licensed as follows:
49
50
 
50
51
  Ruby Facets
51
- Copyright (c) 2004-2006 Thomas Sawyer
52
+ Copyright (c) 2007 Philippe Hanrigou & Dan Manges
52
53
 
53
54
  Distributed under the terms of the Ruby license.
54
55
 
data/Rakefile CHANGED
@@ -29,7 +29,7 @@ Gem::manage_gems
29
29
  specification = Gem::Specification.new do |s|
30
30
  s.name = "Flipper"
31
31
  s.summary = "Switch your Rails database on the fly for each HTTP request. Useful for integration and acceptance testing (test isolation & state management)."
32
- s.version = "1.0"
32
+ s.version = "1.1"
33
33
  s.author = 'Philippe Hanrigou & Dan Manges'
34
34
  s.description = s.summary
35
35
  s.email = 'flipper-developer@rubyforge.org'
@@ -43,6 +43,9 @@ specification = Gem::Specification.new do |s|
43
43
  s.autorequire = 'flipper'
44
44
  s.files = FileList['{lib,test}/**/*.rb', '[A-Z]*$', 'Rakefile'].to_a
45
45
  s.test_file = "test/all_tests.rb"
46
+
47
+ s.add_dependency('dust', '>= 1.0.5')
48
+ s.add_dependency('mocha', '>= 0.5.5')
46
49
  end
47
50
 
48
51
  Rake::GemPackageTask.new(specification) do |package|
@@ -4,7 +4,7 @@
4
4
  # class ApplicationController < ActionController::Base
5
5
  # include Flipper
6
6
  #
7
- # before_filter :switch_database # if RAILS_ENV == "selenium"
7
+ # before_filter :switch_database # unless RAILS_ENV == "production"
8
8
  #
9
9
  # ...
10
10
  # end
@@ -20,7 +20,7 @@ module Flipper
20
20
  # If anything goes wrong while switching database, attempts to rollback to the previous database configuration
21
21
  # before raising an exception.
22
22
  def switch_database
23
- database_configuration = params[:flipper_db_config] || session[:flipper_db_config]
23
+ database_configuration = flipper_database_configuration
24
24
  return unless database_configuration
25
25
 
26
26
  prior_configuration = ActiveRecord::Base.connection.instance_variable_get(:@config)
@@ -33,5 +33,15 @@ module Flipper
33
33
  raise
34
34
  end
35
35
  end
36
+
37
+ protected
38
+
39
+ def flipper_database_configuration
40
+ if params[:flipper_db_config]
41
+ params[:flipper_db_config][:port] = params[:flipper_db_config][:port].to_i if params[:flipper_db_config][:port]
42
+ return params[:flipper_db_config]
43
+ end
44
+ session[:flipper_db_config]
45
+ end
36
46
 
37
47
  end
@@ -17,36 +17,17 @@ unit_tests do
17
17
  @controller = Class.new { include Flipper }.new
18
18
  end
19
19
 
20
- test "controller establishes new db connection and clears active connection when receiving database_connection from params" do
20
+ test "controller establishes new db connection and clears active connection when there is a flipper specific database_connection" do
21
21
  @controller.stubs(:session).returns({})
22
- @controller.stubs(:params).returns(:flipper_db_config => :connection_hash)
23
- ActiveRecord::Base.stubs(:connection).returns(stub_everything)
24
- ActiveRecord::Base.expects(:clear_active_connections!)
25
- ActiveRecord::Base.expects(:establish_connection).with(:connection_hash)
26
- @controller.send(:switch_database)
27
- end
28
-
29
- test "controller establishes new db connection and clears active connection when receiving database_connection from session" do
30
- @controller.stubs(:session).returns(:flipper_db_config => :connection_hash)
31
- @controller.stubs(:params).returns(:flipper_db_config => nil)
22
+ @controller.stubs(:flipper_database_configuration).returns(:connection_hash)
32
23
  ActiveRecord::Base.stubs(:connection).returns(stub_everything)
33
24
  ActiveRecord::Base.expects(:clear_active_connections!)
34
25
  ActiveRecord::Base.expects(:establish_connection).with(:connection_hash)
35
26
  @controller.send(:switch_database)
36
27
  end
37
28
 
38
- test "controller checks for database configuration in params before session" do
39
- @controller.stubs(:session).returns(:flipper_db_config => :session_connection_hash)
40
- @controller.stubs(:params).returns(:flipper_db_config => :params_connection_hash)
41
- ActiveRecord::Base.stubs(:connection).returns(stub_everything)
42
- ActiveRecord::Base.expects(:clear_active_connections!)
43
- ActiveRecord::Base.expects(:establish_connection).with(:params_connection_hash)
44
- @controller.send(:switch_database)
45
- end
46
-
47
- test "controller does not establish a new db connection nor clears active connection when there is no database_connection neither in params nor in session" do
48
- @controller.stubs(:session).returns({})
49
- @controller.stubs(:params).returns(:flipper_db_config => nil)
29
+ test "controller does not establish a new db connection nor clears active connection when there is no flipper specific database_connection" do
30
+ @controller.stubs(:flipper_database_configuration).returns(nil)
50
31
  ActiveRecord::Base.stubs(:connection).returns(stub_everything)
51
32
  ActiveRecord::Base.expects(:clear_active_connections!).never
52
33
  ActiveRecord::Base.expects(:establish_connection).never
@@ -54,18 +35,17 @@ unit_tests do
54
35
  end
55
36
 
56
37
  test "database configuration is stored in session after passed in through params" do
57
- @controller.stubs(:session).returns(session = {})
58
- @controller.stubs(:params).returns(:flipper_db_config => :connection_hash)
38
+ @controller.stubs(:session).returns({})
39
+ @controller.stubs(:flipper_database_configuration).returns(:connection_hash)
59
40
  ActiveRecord::Base.stubs(:connection).returns(stub_everything)
60
41
  ActiveRecord::Base.stubs(:clear_active_connections!)
61
42
  ActiveRecord::Base.stubs(:establish_connection)
62
43
  @controller.send(:switch_database)
63
- assert_equal :connection_hash, session[:flipper_db_config]
44
+ assert_equal :connection_hash, @controller.session[:flipper_db_config]
64
45
  end
65
46
 
66
47
  test "controller restores original db connection and raises exception when establishing a new database_connection fails" do
67
- @controller.stubs(:session).returns({})
68
- @controller.stubs(:params).returns(:flipper_db_config => :connection_hash)
48
+ @controller.stubs(:flipper_database_configuration).returns(:connection_hash)
69
49
  ActiveRecord::Base.stubs(:connection).returns(connection = stub)
70
50
  connection.instance_variable_set "@config", :old_configuration
71
51
  ActiveRecord::Base.expects(:clear_active_connections!)
@@ -75,4 +55,37 @@ unit_tests do
75
55
  assert_raises(RuntimeError) { @controller.send(:switch_database) }
76
56
  end
77
57
 
58
+ test "flipper_database_configuration returns nil when no configuration is defined in params or session" do
59
+ @controller.stubs(:session).returns({})
60
+ @controller.stubs(:params).returns({})
61
+ assert_nil @controller.send :flipper_database_configuration
62
+ end
63
+
64
+ test "flipper_database_configuration returns flipper_db_config parameters when receiving database_connection from params" do
65
+ the_config = { :foo => :bar }
66
+ @controller.stubs(:session).returns({})
67
+ @controller.stubs(:params).returns(:flipper_db_config => the_config )
68
+ assert_equal the_config, @controller.send(:flipper_database_configuration)
69
+ end
70
+
71
+ test "flipper_database_configuration returns configuration defined in session when not specified in HTTP parameters" do
72
+ @controller.stubs(:session).returns({ :flipper_db_config => :connection_hash })
73
+ @controller.stubs(:params).returns({})
74
+ assert_equal :connection_hash, @controller.send(:flipper_database_configuration)
75
+ end
76
+
77
+ test "flipper_database_configuration convert port to integer when specified in HTTP parameters database configuration" do
78
+ @controller.stubs(:session).returns({})
79
+ @controller.stubs(:params).returns(:flipper_db_config => { :port => "1234" })
80
+ config = @controller.send(:flipper_database_configuration)
81
+ assert_equal 1234, config[:port]
82
+ end
83
+
84
+ test "database configuration defined in parameters overrides any configuration defined in session" do
85
+ the_config = { :foo => :bar }
86
+ @controller.stubs(:session).returns({ :flipper_db_config => :session_connection_hash })
87
+ @controller.stubs(:params).returns({ :flipper_db_config => the_config })
88
+ assert_equal the_config, @controller.send(:flipper_database_configuration)
89
+ end
90
+
78
91
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: Flipper
5
5
  version: !ruby/object:Gem::Version
6
- version: "1.0"
7
- date: 2007-09-15 00:00:00 -04:00
6
+ version: "1.1"
7
+ date: 2007-11-07 00:00:00 -05:00
8
8
  summary: Switch your Rails database on the fly for each HTTP request. Useful for integration and acceptance testing (test isolation & state management).
9
9
  require_paths:
10
10
  - lib
@@ -50,5 +50,22 @@ extensions: []
50
50
 
51
51
  requirements: []
52
52
 
53
- dependencies: []
54
-
53
+ dependencies:
54
+ - !ruby/object:Gem::Dependency
55
+ name: dust
56
+ version_requirement:
57
+ version_requirements: !ruby/object:Gem::Version::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.5
62
+ version:
63
+ - !ruby/object:Gem::Dependency
64
+ name: mocha
65
+ version_requirement:
66
+ version_requirements: !ruby/object:Gem::Version::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.5.5
71
+ version: