fourthbase 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +24 -0
  4. data/.yardopts +1 -0
  5. data/Appraisals +19 -0
  6. data/CHANGELOG.md +37 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +191 -0
  10. data/Rakefile +24 -0
  11. data/VERSION +1 -0
  12. data/fourthbase.gemspec +25 -0
  13. data/gemfiles/rails40.gemfile +8 -0
  14. data/gemfiles/rails41.gemfile +8 -0
  15. data/gemfiles/rails42.gemfile +8 -0
  16. data/gemfiles/rails50.gemfile +8 -0
  17. data/lib/fourth_base.rb +20 -0
  18. data/lib/fourth_base/base.rb +8 -0
  19. data/lib/fourth_base/databases.rake +121 -0
  20. data/lib/fourth_base/databases_rails_five.rake +22 -0
  21. data/lib/fourth_base/databases_rails_four.rake +22 -0
  22. data/lib/fourth_base/forced.rb +21 -0
  23. data/lib/fourth_base/on_base.rb +36 -0
  24. data/lib/fourth_base/railtie.rb +52 -0
  25. data/lib/fourth_base/test_help.rb +11 -0
  26. data/lib/fourth_base/version.rb +3 -0
  27. data/lib/fourthbase.rb +1 -0
  28. data/lib/rails/fourth_base/generators/migration_generator.rb +25 -0
  29. data/test/cases/dbtask_test.rb +248 -0
  30. data/test/cases/forced_test.rb +49 -0
  31. data/test/cases/generator_test.rb +64 -0
  32. data/test/cases/on_base_test.rb +35 -0
  33. data/test/cases/railtie_test.rb +31 -0
  34. data/test/cases/rake_test.rb +0 -0
  35. data/test/dummy_apps/rails_five/Rakefile +2 -0
  36. data/test/dummy_apps/rails_five/app/controllers/application_controller.rb +7 -0
  37. data/test/dummy_apps/rails_five/app/helpers/application_helper.rb +3 -0
  38. data/test/dummy_apps/rails_five/app/models/application_record.rb +3 -0
  39. data/test/dummy_apps/rails_five/app/models/comment.rb +6 -0
  40. data/test/dummy_apps/rails_five/app/models/comment_forced.rb +6 -0
  41. data/test/dummy_apps/rails_five/app/models/post.rb +7 -0
  42. data/test/dummy_apps/rails_five/app/models/user.rb +6 -0
  43. data/test/dummy_apps/rails_five/bin/rails +5 -0
  44. data/test/dummy_apps/rails_five/config/database.yml +13 -0
  45. data/test/dummy_apps/rails_five/config/routes.rb +3 -0
  46. data/test/dummy_apps/rails_five/db/migrate/20141209165002_create_users.rb +11 -0
  47. data/test/dummy_apps/rails_five/db/migrate/20141214142700_create_posts.rb +12 -0
  48. data/test/dummy_apps/rails_five/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
  49. data/test/dummy_apps/rails_five/init.rb +42 -0
  50. data/test/dummy_apps/rails_five/log/.keep +0 -0
  51. data/test/dummy_apps/rails_five/tmp/.keep +0 -0
  52. data/test/dummy_apps/rails_four/Rakefile +2 -0
  53. data/test/dummy_apps/rails_four/app/controllers/application_controller.rb +7 -0
  54. data/test/dummy_apps/rails_four/app/helpers/application_helper.rb +3 -0
  55. data/test/dummy_apps/rails_four/app/models/comment.rb +6 -0
  56. data/test/dummy_apps/rails_four/app/models/comment_forced.rb +6 -0
  57. data/test/dummy_apps/rails_four/app/models/post.rb +7 -0
  58. data/test/dummy_apps/rails_four/app/models/user.rb +6 -0
  59. data/test/dummy_apps/rails_four/bin/rails +5 -0
  60. data/test/dummy_apps/rails_four/config/database.yml +14 -0
  61. data/test/dummy_apps/rails_four/config/routes.rb +3 -0
  62. data/test/dummy_apps/rails_four/db/migrate/20141209165002_create_users.rb +11 -0
  63. data/test/dummy_apps/rails_four/db/migrate/20141214142700_create_posts.rb +12 -0
  64. data/test/dummy_apps/rails_four/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
  65. data/test/dummy_apps/rails_four/init.rb +42 -0
  66. data/test/dummy_apps/rails_four/log/.keep +0 -0
  67. data/test/dummy_apps/rails_four/tmp/.keep +0 -0
  68. data/test/test_helper.rb +46 -0
  69. data/test/test_helpers/dummy_app_helpers.rb +94 -0
  70. data/test/test_helpers/rails_version_helpers.rb +29 -0
  71. data/test/test_helpers/stream_helpers.rb +40 -0
  72. data/thirdbase-2.1.1.gem +0 -0
  73. data/thirdbase-2.1.2.gem +0 -0
  74. metadata +206 -0
@@ -0,0 +1,12 @@
1
+ class CreatePosts < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :posts, force: true do |t|
5
+ t.text :title
6
+ t.text :body
7
+ t.references :user, index: true
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,11 @@
1
+ class CreateComments < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :comments, force: true do |t|
5
+ t.text :body
6
+ t.references :user, index: true
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,42 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __FILE__)
3
+ require 'bundler/setup'
4
+ require 'rails/all'
5
+ Bundler.require(:default, Rails.env)
6
+
7
+ module Dummy
8
+ class Application < ::Rails::Application
9
+
10
+ # Basic Engine
11
+ config.root = File.join __FILE__, '..'
12
+ config.cache_store = :memory_store
13
+ config.assets.enabled = false
14
+ config.secret_token = '012345678901234567890123456789'
15
+ config.active_support.test_order = :random
16
+
17
+ # Mimic Test Environment Config.
18
+ config.consider_all_requests_local = true
19
+ config.action_controller.perform_caching = false
20
+ config.action_dispatch.show_exceptions = false
21
+ config.action_controller.allow_forgery_protection = false
22
+ config.action_mailer.delivery_method = :test
23
+ config.active_support.deprecation = :stderr
24
+ config.allow_concurrency = true
25
+ config.cache_classes = true
26
+ config.dependency_loading = true
27
+ config.preload_frameworks = true
28
+ config.eager_load = true
29
+ config.secret_key_base = '012345678901234567890123456789'
30
+
31
+ # Keep pending test:prepare via pending migrations from running.
32
+ config.active_record.maintain_test_schema = false if ActiveRecord::Base.respond_to?(:maintain_test_schema)
33
+
34
+ config.active_record.schema_format = ENV['SCHEMA_FORMAT'] ? :sql : :ruby
35
+
36
+ if ENV['WITH_FOURTHBASE_TASKS'].present?
37
+ config.fourth_base.run_with_db_tasks = ENV['WITH_FOURTHBASE_TASKS'] == 'true'
38
+ end
39
+ end
40
+ end
41
+
42
+ Dummy::Application.initialize!
File without changes
File without changes
@@ -0,0 +1,46 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+ require 'bundler/setup'
4
+ Bundler.require :default, :development
5
+ require 'fourth_base'
6
+ require 'active_support/test_case'
7
+ require 'active_support/testing/autorun'
8
+
9
+ if Rails.version.to_i == 4
10
+ require 'dummy_apps/rails_four/init'
11
+ else
12
+ require 'dummy_apps/rails_five/init'
13
+ end
14
+
15
+ require 'rails/test_help'
16
+ Dir['test/test_helpers/*.{rb}'].each { |f| require_relative "../#{f}" }
17
+
18
+ ActiveSupport.test_order = :random if ActiveSupport.respond_to?(:test_order)
19
+
20
+ module FourthBase
21
+ class TestCase < ActiveSupport::TestCase
22
+
23
+ if Rails.version.to_i == 4
24
+ self.use_transactional_fixtures = false
25
+ else
26
+ self.use_transactional_tests = false
27
+ end
28
+
29
+ include RailsVersionHelpers,
30
+ DummyAppHelpers,
31
+ StreamHelpers
32
+
33
+ setup :delete_dummy_files
34
+ teardown :delete_dummy_files
35
+
36
+ private
37
+
38
+ def establish_connection
39
+ ActiveRecord::Base.establish_connection
40
+ ActiveRecord::Base.connection
41
+ FourthBase::Base.establish_connection(FourthBase.config)
42
+ FourthBase::Base.connection
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,94 @@
1
+ module FourthBase
2
+ module DummyAppHelpers
3
+
4
+ extend ActiveSupport::Concern
5
+
6
+ private
7
+
8
+ def dummy_app
9
+ ::Dummy::Application
10
+ end
11
+
12
+ def dummy_root
13
+ dummy_app.root
14
+ end
15
+
16
+ def dummy_config
17
+ dummy_app.config
18
+ end
19
+
20
+ def dummy_tmp
21
+ dummy_app.root.join 'tmp'
22
+ end
23
+
24
+ def dummy_db
25
+ dummy_app.root.join 'db'
26
+ end
27
+
28
+ def dummy_schema
29
+ dummy_db.join 'schema.rb'
30
+ end
31
+
32
+ def dummy_fourthbase_schema
33
+ dummy_db.join('fourthbase', 'schema.rb')
34
+ end
35
+
36
+ def dummy_database_sqlite
37
+ Dir.chdir(dummy_db){ Dir['*.sqlite3'] }.first
38
+ end
39
+
40
+ def dummy_migration
41
+ @dummy_migration ||= begin
42
+ vers = Time.now.utc.strftime '%Y%m%d%H%M%S'
43
+ file = dummy_root.join 'db', 'fourthbase', 'migrate', "#{vers}_create_foos.rb"
44
+ if rails_50_up?
45
+ migr = %|class CreateFoos < ActiveRecord::Migration[4.2] ; def change ; create_table(:foos) ; end ; end|
46
+ else
47
+ migr = %|class CreateFoos < ActiveRecord::Migration ; def change ; create_table(:foos) ; end ; end|
48
+ end
49
+ File.open(file,'w') { |f| f.write(migr) }
50
+ {version: vers, file: file}
51
+ end
52
+ end
53
+
54
+ def delete_dummy_files
55
+ FileUtils.rm_rf dummy_schema
56
+ FileUtils.rm_rf dummy_fourthbase_schema
57
+ Dir.chdir(dummy_db) { Dir['**/structure.sql'].each { |structure| FileUtils.rm_rf(structure) } }
58
+ Dir.chdir(dummy_db) { FileUtils.rm_rf(dummy_database_sqlite) } if dummy_database_sqlite
59
+ FileUtils.rm_rf(dummy_migration[:file]) if defined?(@dummy_migration) && @dummy_migration
60
+ `mysql -uroot -e "DROP DATABASE IF EXISTS fourthbase_test"`
61
+ end
62
+
63
+ # Runners
64
+
65
+ def run_cmd
66
+ 'rake'
67
+ end
68
+
69
+ def run_db(args, stream=:stdout, with_fourthbase_tasks=true)
70
+ capture(stream) do
71
+ Dir.chdir(dummy_root) { Kernel.system "env WITH_FOURTHBASE_TASKS=#{with_fourthbase_tasks} #{run_cmd} db:#{args}" }
72
+ end
73
+ end
74
+
75
+ def run_fourthbase(args, stream=:stdout)
76
+ capture(stream) do
77
+ Dir.chdir(dummy_root) { Kernel.system "#{run_cmd} db:fourth_base:#{args}" }
78
+ end
79
+ end
80
+
81
+ # Assertions
82
+
83
+ def assert_dummy_databases
84
+ assert_equal 'base.sqlite3', dummy_database_sqlite
85
+ assert_match(/fourthbase_test/, `mysql -uroot -e "SHOW DATABASES"`)
86
+ end
87
+
88
+ def refute_dummy_databases
89
+ assert_nil dummy_database_sqlite
90
+ refute_match(/fourthbase_test/, `mysql -uroot -e "SHOW DATABASES"`)
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,29 @@
1
+ module FourthBase
2
+ module RailsVersionHelpers
3
+
4
+ extend ActiveSupport::Concern
5
+
6
+ included { extend RailsVersionHelpers }
7
+
8
+ private
9
+
10
+ def rails_version
11
+ Rails.version.to(2)
12
+ end
13
+
14
+ ['4.0', '4.1', '4.2', '5.0'].each do |v|
15
+
16
+ vm = v.sub '.', ''
17
+
18
+ define_method :"rails_#{vm}?" do
19
+ rails_version == v
20
+ end
21
+
22
+ define_method :"rails_#{vm}_up?" do
23
+ rails_version >= v
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ module FourthBase
2
+ module StreamHelpers
3
+
4
+ private
5
+
6
+ def silence_stream(stream)
7
+ old_stream = stream.dup
8
+ stream.reopen(IO::NULL)
9
+ stream.sync = true
10
+ yield
11
+ ensure
12
+ stream.reopen(old_stream)
13
+ old_stream.close
14
+ end
15
+
16
+ def quietly
17
+ silence_stream(STDOUT) do
18
+ silence_stream(STDERR) do
19
+ yield
20
+ end
21
+ end
22
+ end
23
+
24
+ def capture(stream)
25
+ stream = stream.to_s
26
+ captured_stream = Tempfile.new(stream)
27
+ stream_io = eval("$#{stream}")
28
+ origin_stream = stream_io.dup
29
+ stream_io.reopen(captured_stream)
30
+ yield
31
+ stream_io.rewind
32
+ return captured_stream.read
33
+ ensure
34
+ captured_stream.close
35
+ captured_stream.unlink
36
+ stream_io.reopen(origin_stream)
37
+ end
38
+
39
+ end
40
+ end
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fourthbase
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Karle Durante
8
+ - Hunter Madison
9
+ - Ken Collins
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2017-11-07 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '4.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '4.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: appraisal
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: pry
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rake
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: sqlite3
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: yard
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ description: FourthBase provides support for Rails to manage dual databases by extending
100
+ ActiveRecord tasks that create, migrate, and test your databases.
101
+ email:
102
+ - kdurante@customink.com
103
+ - hunterglenmadison@icloud.com
104
+ - ken@metaskills.net
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - ".gitignore"
110
+ - ".travis.yml"
111
+ - ".yardopts"
112
+ - Appraisals
113
+ - CHANGELOG.md
114
+ - Gemfile
115
+ - LICENSE.txt
116
+ - README.md
117
+ - Rakefile
118
+ - VERSION
119
+ - fourthbase.gemspec
120
+ - gemfiles/rails40.gemfile
121
+ - gemfiles/rails41.gemfile
122
+ - gemfiles/rails42.gemfile
123
+ - gemfiles/rails50.gemfile
124
+ - lib/fourth_base.rb
125
+ - lib/fourth_base/base.rb
126
+ - lib/fourth_base/databases.rake
127
+ - lib/fourth_base/databases_rails_five.rake
128
+ - lib/fourth_base/databases_rails_four.rake
129
+ - lib/fourth_base/forced.rb
130
+ - lib/fourth_base/on_base.rb
131
+ - lib/fourth_base/railtie.rb
132
+ - lib/fourth_base/test_help.rb
133
+ - lib/fourth_base/version.rb
134
+ - lib/fourthbase.rb
135
+ - lib/rails/fourth_base/generators/migration_generator.rb
136
+ - test/cases/dbtask_test.rb
137
+ - test/cases/forced_test.rb
138
+ - test/cases/generator_test.rb
139
+ - test/cases/on_base_test.rb
140
+ - test/cases/railtie_test.rb
141
+ - test/cases/rake_test.rb
142
+ - test/dummy_apps/rails_five/Rakefile
143
+ - test/dummy_apps/rails_five/app/controllers/application_controller.rb
144
+ - test/dummy_apps/rails_five/app/helpers/application_helper.rb
145
+ - test/dummy_apps/rails_five/app/models/application_record.rb
146
+ - test/dummy_apps/rails_five/app/models/comment.rb
147
+ - test/dummy_apps/rails_five/app/models/comment_forced.rb
148
+ - test/dummy_apps/rails_five/app/models/post.rb
149
+ - test/dummy_apps/rails_five/app/models/user.rb
150
+ - test/dummy_apps/rails_five/bin/rails
151
+ - test/dummy_apps/rails_five/config/database.yml
152
+ - test/dummy_apps/rails_five/config/routes.rb
153
+ - test/dummy_apps/rails_five/db/migrate/20141209165002_create_users.rb
154
+ - test/dummy_apps/rails_five/db/migrate/20141214142700_create_posts.rb
155
+ - test/dummy_apps/rails_five/db/secondbase/migrate/20151202075826_create_comments.rb
156
+ - test/dummy_apps/rails_five/init.rb
157
+ - test/dummy_apps/rails_five/log/.keep
158
+ - test/dummy_apps/rails_five/tmp/.keep
159
+ - test/dummy_apps/rails_four/Rakefile
160
+ - test/dummy_apps/rails_four/app/controllers/application_controller.rb
161
+ - test/dummy_apps/rails_four/app/helpers/application_helper.rb
162
+ - test/dummy_apps/rails_four/app/models/comment.rb
163
+ - test/dummy_apps/rails_four/app/models/comment_forced.rb
164
+ - test/dummy_apps/rails_four/app/models/post.rb
165
+ - test/dummy_apps/rails_four/app/models/user.rb
166
+ - test/dummy_apps/rails_four/bin/rails
167
+ - test/dummy_apps/rails_four/config/database.yml
168
+ - test/dummy_apps/rails_four/config/routes.rb
169
+ - test/dummy_apps/rails_four/db/migrate/20141209165002_create_users.rb
170
+ - test/dummy_apps/rails_four/db/migrate/20141214142700_create_posts.rb
171
+ - test/dummy_apps/rails_four/db/secondbase/migrate/20151202075826_create_comments.rb
172
+ - test/dummy_apps/rails_four/init.rb
173
+ - test/dummy_apps/rails_four/log/.keep
174
+ - test/dummy_apps/rails_four/tmp/.keep
175
+ - test/test_helper.rb
176
+ - test/test_helpers/dummy_app_helpers.rb
177
+ - test/test_helpers/rails_version_helpers.rb
178
+ - test/test_helpers/stream_helpers.rb
179
+ - thirdbase-2.1.1.gem
180
+ - thirdbase-2.1.2.gem
181
+ homepage: http://github.com/tommyalvarez/fourthbase
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options:
187
+ - "--charset=UTF-8"
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ requirements: []
201
+ rubyforge_project:
202
+ rubygems_version: 2.4.8
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: Seamless fourth database integration for Rails.
206
+ test_files: []