pg_schema 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ InstalledFiles
6
+ _yardoc
7
+ coverage
8
+ doc/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3@postgres_multi_tenancy --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in qbwc.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,16 @@
1
+ require 'rails/generators'
2
+
3
+ module PgSchema
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ namespace "pg_schema:install"
7
+ desc "Copy schema support files"
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ def copy_rake_tasks
11
+ template('lib/pg_schema.rake', "lib/tasks/pg_schema.rake")
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ # https://github.com/rails/rails/blob/6c2a0675f11a9b5b8e88ed7dbccd65cb51be8029/activerecord/lib/active_record/railties/databases.rake
2
+ #
3
+ namespace :db do
4
+
5
+ desc 'Create the database defined in config/database.yml for the current Rails.env - also makes test database if in development mode'
6
+ task :create_with_schema => :load_config do
7
+ # Make the test database at the same time as the development one, if it exists
8
+ if Rails.env.development? && ActiveRecord::Base.configurations['test']
9
+ create_database(ActiveRecord::Base.configurations['test'])
10
+ end
11
+ create_database(ActiveRecord::Base.configurations[Rails.env])
12
+ end
13
+
14
+ def create_database(config)
15
+ if valid_connection?(config)
16
+ $stderr.puts "#{config['database']} already exists"
17
+ else
18
+ case config['adapter']
19
+ when 'postgresql'
20
+ encoding = config[:encoding] || ENV['CHARSET'] || 'utf8'
21
+ schema_search_path = config.delete('schema_search_path') || 'public'
22
+ default_schema = schema_search_path.split(',').first.strip
23
+
24
+ begin
25
+ unless valid_connection?(config)
26
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
27
+ ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => encoding))
28
+ ActiveRecord::Base.establish_connection(config)
29
+ $stderr.puts "Database #{config['database']} has been created."
30
+ end
31
+ ActiveRecord::Base.connection.create_schema(default_schema, config['username'])
32
+ $stderr.puts "Schema #{default_schema} has been created in #{config['database']}."
33
+ rescue
34
+ $stderr.puts $!, *($!.backtrace)
35
+ $stderr.puts "Couldn't create database #{config.inspect}."
36
+ end
37
+ else
38
+ $stderr.puts "Only PostgreSQL is supported."
39
+ end
40
+ end
41
+ end
42
+
43
+
44
+ def valid_connection?(config)
45
+ ActiveRecord::Base.establish_connection(config)
46
+ ActiveRecord::Base.connection && true
47
+ rescue
48
+ false
49
+ end
50
+
51
+ end
@@ -0,0 +1,20 @@
1
+ class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter
2
+ # Example:
3
+ # create_schema('products', 'postgres')
4
+ def create_schema(schema_name, pg_username)
5
+ execute("CREATE SCHEMA \"#{schema_name}\" AUTHORIZATION \"#{pg_username}\"")
6
+ end
7
+
8
+ # Drops a schema
9
+ #
10
+ # Example:
11
+ # drop_schema('products', 'postgres')
12
+ def drop_schema(schema_name)
13
+ execute("DROP SCHEMA \"#{schema_name}\"")
14
+ end
15
+
16
+ # Returns an array of all schemas in the database
17
+ def all_schemas
18
+ query('SELECT schema_name FROM information_schema.schemata').flatten
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module PgSchema
2
+ VERSION = "0.0.1"
3
+ end
data/lib/pg_schema.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'pg_schema/postgresql_adapter'
2
+
3
+ module PgSchema
4
+ module Loader
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ # Let ActiveRecord do its magic and then include our overrides once a
10
+ # model inherits from ActiveRecord::Base
11
+ #
12
+ def inherited(base)
13
+ base.send(:include, PgSchema::Base)
14
+ super
15
+ end
16
+ end
17
+ end
18
+
19
+ module Base
20
+ extend ActiveSupport::Concern
21
+
22
+ included do
23
+ self.table_name = "#{schema_name}.#{table_name}"
24
+ end
25
+
26
+ module ClassMethods
27
+ def schema_name
28
+ @schema_name ||= ActiveRecord::Base.connection.schema_search_path.split.first
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+ class ActiveRecord::Base
36
+ include PgSchema::Loader
37
+ end
data/pg_schema.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "pg_schema/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pg_schema"
7
+ s.version = PgSchema::VERSION
8
+ s.authors = ["Alex Skryl"]
9
+ s.email = ["rut216@gmail.com"]
10
+ s.homepage = "http://skryl.org"
11
+ s.summary = %q{Postgres schema support}
12
+ s.description = %q{Support for postgres schema}
13
+
14
+ s.rubyforge_project = "pg_schema"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pg_schema
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Skryl
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Support for postgres schema
15
+ email:
16
+ - rut216@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - .rvmrc
23
+ - Gemfile
24
+ - LICENSE.txt
25
+ - Rakefile
26
+ - lib/generators/pg_schema/install_generator.rb
27
+ - lib/generators/pg_schema/templates/lib/pg_schema.rake
28
+ - lib/pg_schema.rb
29
+ - lib/pg_schema/postgresql_adapter.rb
30
+ - lib/pg_schema/version.rb
31
+ - pg_schema.gemspec
32
+ homepage: http://skryl.org
33
+ licenses: []
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project: pg_schema
52
+ rubygems_version: 1.8.15
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: Postgres schema support
56
+ test_files: []