multidb 3.2.0

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 (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.md +21 -0
  7. data/README.md +65 -0
  8. data/lib/multi_db/action_controller_patches.rb +53 -0
  9. data/lib/multi_db/active_record_patches.rb +94 -0
  10. data/lib/multi_db/after_initialize_patches.rb +3 -0
  11. data/lib/multi_db/engine.rb +28 -0
  12. data/lib/multi_db/multidb.rake +360 -0
  13. data/lib/multi_db/organization.rb +60 -0
  14. data/lib/multi_db/organization_host.rb +7 -0
  15. data/lib/multidb.rb +10 -0
  16. data/multidb.gemspec +26 -0
  17. data/testapp_mysql2/.simplecov +3 -0
  18. data/testapp_mysql2/Gemfile +25 -0
  19. data/testapp_mysql2/Gemfile.lock +148 -0
  20. data/testapp_mysql2/Rakefile +7 -0
  21. data/testapp_mysql2/app/assets/javascripts/application.js +15 -0
  22. data/testapp_mysql2/app/assets/stylesheets/application.css +13 -0
  23. data/testapp_mysql2/app/controllers/application_controller.rb +3 -0
  24. data/testapp_mysql2/app/models/organization.rb +14 -0
  25. data/testapp_mysql2/app/views/layouts/application.html.erb +14 -0
  26. data/testapp_mysql2/config/application.rb +62 -0
  27. data/testapp_mysql2/config/boot.rb +6 -0
  28. data/testapp_mysql2/config/database.yml +17 -0
  29. data/testapp_mysql2/config/environment.rb +5 -0
  30. data/testapp_mysql2/config/environments/development.rb +37 -0
  31. data/testapp_mysql2/config/environments/production.rb +67 -0
  32. data/testapp_mysql2/config/environments/test.rb +37 -0
  33. data/testapp_mysql2/config/initializers/backtrace_silencers.rb +7 -0
  34. data/testapp_mysql2/config/initializers/inflections.rb +15 -0
  35. data/testapp_mysql2/config/initializers/mime_types.rb +5 -0
  36. data/testapp_mysql2/config/initializers/secret_token.rb +7 -0
  37. data/testapp_mysql2/config/initializers/session_store.rb +8 -0
  38. data/testapp_mysql2/config/initializers/wrap_parameters.rb +14 -0
  39. data/testapp_mysql2/config/routes.rb +58 -0
  40. data/testapp_mysql2/config.ru +4 -0
  41. data/testapp_mysql2/db/migrate/master/20140110031857_add_organizations_tables.rb +22 -0
  42. data/testapp_mysql2/db/migrate/sessions/20140110031856_add_sessions_table.rb +14 -0
  43. data/testapp_mysql2/db/schema_master.rb +35 -0
  44. data/testapp_mysql2/db/schema_organization.rb +16 -0
  45. data/testapp_mysql2/db/schema_sessions.rb +26 -0
  46. data/testapp_mysql2/log/.gitkeep +0 -0
  47. data/testapp_mysql2/script/rails +6 -0
  48. data/testapp_mysql2/spec/models/organization_spec.rb +61 -0
  49. data/testapp_mysql2/spec/spec_helper.rb +24 -0
  50. metadata +112 -0
@@ -0,0 +1,58 @@
1
+ Testapp::Application.routes.draw do
2
+ # The priority is based upon order of creation:
3
+ # first created -> highest priority.
4
+
5
+ # Sample of regular route:
6
+ # match 'products/:id' => 'catalog#view'
7
+ # Keep in mind you can assign values other than :controller and :action
8
+
9
+ # Sample of named route:
10
+ # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
11
+ # This route can be invoked with purchase_url(:id => product.id)
12
+
13
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
14
+ # resources :products
15
+
16
+ # Sample resource route with options:
17
+ # resources :products do
18
+ # member do
19
+ # get 'short'
20
+ # post 'toggle'
21
+ # end
22
+ #
23
+ # collection do
24
+ # get 'sold'
25
+ # end
26
+ # end
27
+
28
+ # Sample resource route with sub-resources:
29
+ # resources :products do
30
+ # resources :comments, :sales
31
+ # resource :seller
32
+ # end
33
+
34
+ # Sample resource route with more complex sub-resources
35
+ # resources :products do
36
+ # resources :comments
37
+ # resources :sales do
38
+ # get 'recent', :on => :collection
39
+ # end
40
+ # end
41
+
42
+ # Sample resource route within a namespace:
43
+ # namespace :admin do
44
+ # # Directs /admin/products/* to Admin::ProductsController
45
+ # # (app/controllers/admin/products_controller.rb)
46
+ # resources :products
47
+ # end
48
+
49
+ # You can have the root of your site routed with "root"
50
+ # just remember to delete public/index.html.
51
+ # root :to => 'welcome#index'
52
+
53
+ # See how all your routes lay out with "rake routes"
54
+
55
+ # This is a legacy wild controller route that's not recommended for RESTful applications.
56
+ # Note: This route will make all actions in every controller accessible via GET requests.
57
+ # match ':controller(/:action(/:id))(.:format)'
58
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Testapp::Application
@@ -0,0 +1,22 @@
1
+ class AddOrganizationsTables < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :organization_hosts do |t|
5
+ t.integer :organization_id, :null => false
6
+ t.string :host, :null => false
7
+ t.datetime :created_at, :null => false
8
+ t.datetime :updated_at, :null => false
9
+ end
10
+ add_index :organization_hosts, [:host], :unique => true
11
+
12
+ create_table :organizations do |t|
13
+ t.string :name
14
+ t.string :code, :null => false
15
+ t.boolean :active, :default => true, :null => false
16
+ t.datetime :created_at, :null => false
17
+ t.datetime :updated_at, :null => false
18
+ end
19
+ add_index :organizations, [:code], :unique => true
20
+ end
21
+
22
+ end
@@ -0,0 +1,14 @@
1
+ class AddSessionsTable < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :sessions do |t|
5
+ t.string :session_id, :null => false
6
+ t.text :data
7
+ t.timestamps
8
+ end
9
+
10
+ add_index :sessions, :session_id
11
+ add_index :sessions, :updated_at
12
+ end
13
+
14
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20140110031857) do
15
+
16
+ create_table "organization_hosts", :force => true do |t|
17
+ t.integer "organization_id", :null => false
18
+ t.string "host", :null => false
19
+ t.datetime "created_at", :null => false
20
+ t.datetime "updated_at", :null => false
21
+ end
22
+
23
+ add_index "organization_hosts", ["host"], :name => "index_organization_hosts_on_host", :unique => true
24
+
25
+ create_table "organizations", :force => true do |t|
26
+ t.string "name"
27
+ t.string "code", :null => false
28
+ t.boolean "active", :default => true, :null => false
29
+ t.datetime "created_at", :null => false
30
+ t.datetime "updated_at", :null => false
31
+ end
32
+
33
+ add_index "organizations", ["code"], :name => "index_organizations_on_code", :unique => true
34
+
35
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 0) do
15
+
16
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20140110031856) do
15
+
16
+ create_table "sessions", :force => true do |t|
17
+ t.string "session_id", :null => false
18
+ t.text "data"
19
+ t.datetime "created_at", :null => false
20
+ t.datetime "updated_at", :null => false
21
+ end
22
+
23
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
24
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
25
+
26
+ end
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,61 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: organizations
4
+ #
5
+ # id :integer not null, primary key
6
+ # name :string(255)
7
+ # code :string(255) not null
8
+ # active :boolean default(TRUE), not null
9
+ # created_at :datetime not null
10
+ # updated_at :datetime not null
11
+ #
12
+
13
+ require 'spec_helper'
14
+
15
+ describe Organization do
16
+ it { should have_many(:hosts) }
17
+
18
+ it { should validate_presence_of(:code) }
19
+ it { should validate_uniqueness_of(:code) }
20
+
21
+ describe "#ensure_code" do
22
+ it "creates a url-safe version of #name" do
23
+ org = Organization.new
24
+ org.name = 'Test Practice 1'
25
+ org.code = nil
26
+ expect(org.valid?).to be_true
27
+ expect(org.code).to eq 'test-practice-1'
28
+ end
29
+
30
+ it "makes sure #code is never nil after validation (as long as name is set)" do
31
+ org = Organization.new
32
+ org.name = 'Testing 123'
33
+ org.code = nil
34
+ expect(org.code).to be_nil
35
+ expect(org.valid?).to be_true
36
+ expect(org.code).not_to be_nil
37
+ end
38
+
39
+ it "auto-increments generated #code (test2, test3, etc.) to work around conflicts" do
40
+ org = Organization.first
41
+
42
+ org2 = Organization.new
43
+ org2.name = org.code
44
+ org2.code = nil
45
+ expect(org2.valid?).to be_true
46
+ expect(org2.code).to eq "#{org.code}2"
47
+ end
48
+ end
49
+
50
+ describe "create_with_database" do
51
+ it "creates a new organization and creates database" do
52
+ org = nil
53
+ expect {
54
+ org = Organization.create_with_database('createusingdefaultstest', nil)
55
+ }.to change(Organization, :count).by(1)
56
+ org.drop_database!
57
+ org.destroy
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,24 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ require 'simplecov'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+
5
+ require 'rspec/rails'
6
+ require 'rspec/autorun'
7
+ # require 'factory_girl_rails'
8
+
9
+ # Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
10
+
11
+ RSpec.configure do |config|
12
+ config.order = "random"
13
+
14
+ config.before(:suite) do
15
+ Organization.create_with_database('test', 'Developer Test Practice') unless Organization.find_by_code('test')
16
+ end
17
+
18
+ config.before(:each) do
19
+ Organization.first.connect
20
+ end
21
+
22
+ config.after(:suite) do
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: multidb
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Namba
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.2.16
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.2.16
33
+ description: Enables multitenant setup with one database per tenant. See README for
34
+ details.
35
+ email: aaron@biggerbird.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - ".gitignore"
41
+ - ".rspec"
42
+ - ".ruby-version"
43
+ - Gemfile
44
+ - LICENSE.md
45
+ - README.md
46
+ - lib/multi_db/action_controller_patches.rb
47
+ - lib/multi_db/active_record_patches.rb
48
+ - lib/multi_db/after_initialize_patches.rb
49
+ - lib/multi_db/engine.rb
50
+ - lib/multi_db/multidb.rake
51
+ - lib/multi_db/organization.rb
52
+ - lib/multi_db/organization_host.rb
53
+ - lib/multidb.rb
54
+ - multidb.gemspec
55
+ - testapp_mysql2/.simplecov
56
+ - testapp_mysql2/Gemfile
57
+ - testapp_mysql2/Gemfile.lock
58
+ - testapp_mysql2/Rakefile
59
+ - testapp_mysql2/app/assets/javascripts/application.js
60
+ - testapp_mysql2/app/assets/stylesheets/application.css
61
+ - testapp_mysql2/app/controllers/application_controller.rb
62
+ - testapp_mysql2/app/models/organization.rb
63
+ - testapp_mysql2/app/views/layouts/application.html.erb
64
+ - testapp_mysql2/config.ru
65
+ - testapp_mysql2/config/application.rb
66
+ - testapp_mysql2/config/boot.rb
67
+ - testapp_mysql2/config/database.yml
68
+ - testapp_mysql2/config/environment.rb
69
+ - testapp_mysql2/config/environments/development.rb
70
+ - testapp_mysql2/config/environments/production.rb
71
+ - testapp_mysql2/config/environments/test.rb
72
+ - testapp_mysql2/config/initializers/backtrace_silencers.rb
73
+ - testapp_mysql2/config/initializers/inflections.rb
74
+ - testapp_mysql2/config/initializers/mime_types.rb
75
+ - testapp_mysql2/config/initializers/secret_token.rb
76
+ - testapp_mysql2/config/initializers/session_store.rb
77
+ - testapp_mysql2/config/initializers/wrap_parameters.rb
78
+ - testapp_mysql2/config/routes.rb
79
+ - testapp_mysql2/db/migrate/master/20140110031857_add_organizations_tables.rb
80
+ - testapp_mysql2/db/migrate/sessions/20140110031856_add_sessions_table.rb
81
+ - testapp_mysql2/db/schema_master.rb
82
+ - testapp_mysql2/db/schema_organization.rb
83
+ - testapp_mysql2/db/schema_sessions.rb
84
+ - testapp_mysql2/log/.gitkeep
85
+ - testapp_mysql2/script/rails
86
+ - testapp_mysql2/spec/models/organization_spec.rb
87
+ - testapp_mysql2/spec/spec_helper.rb
88
+ homepage: https://github.com/anamba/imagine_cms
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 1.9.3
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 1.8.11
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.2.0.rc.1
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: MultiDB for ActiveRecord
112
+ test_files: []