storey 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/storey/duplicator.rb +21 -11
- data/lib/storey/exceptions.rb +1 -0
- data/lib/storey/version.rb +1 -1
- data/lib/storey.rb +15 -1
- data/rvmrc.sample +1 -0
- data/spec/dummy/db/schema.rb +1 -11
- data/spec/storey/command_line_switches_spec.rb +22 -0
- data/spec/storey/create_spec.rb +9 -0
- metadata +105 -15
- data/.rvmrc +0 -1
data/.gitignore
CHANGED
data/lib/storey/duplicator.rb
CHANGED
@@ -43,12 +43,8 @@ class Storey::Duplicator
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def load_schema(options={})
|
46
|
-
options[:host] ||= Storey.database_config[:host] unless Storey.database_config[:host].blank?
|
47
|
-
options[:dbname] ||= Storey.database_config[:database]
|
48
|
-
options[:username] ||= Storey.database_config[:username]
|
49
46
|
options[:file] ||= self.target_file
|
50
|
-
|
51
|
-
switches = options.map { |k, v| "--#{k}=#{v}" }.join(" ")
|
47
|
+
switches = Storey.command_line_switches(options)
|
52
48
|
|
53
49
|
if duplicating_from_default?
|
54
50
|
# Since we are copying the source schema and we're after structure only,
|
@@ -57,19 +53,33 @@ class Storey::Duplicator
|
|
57
53
|
::Storey.create_plain_schema self.target_schema
|
58
54
|
end
|
59
55
|
|
60
|
-
source_schema_migrations = ::Storey.switch(self.source_schema) do
|
61
|
-
ActiveRecord::Migrator.get_all_versions
|
62
|
-
end
|
63
|
-
|
64
56
|
`psql #{switches}`
|
65
57
|
|
58
|
+
copy_source_schema_migrations
|
59
|
+
|
60
|
+
ENV['PGPASSWORD'] = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def copy_source_schema_migrations
|
66
64
|
::Storey.switch self.target_schema do
|
67
65
|
source_schema_migrations.each do |version|
|
68
|
-
|
66
|
+
unless target_schema_migrations.include?(version)
|
67
|
+
ActiveRecord::Base.connection.execute "INSERT INTO schema_migrations (version) VALUES ('#{version}');"
|
68
|
+
end
|
69
69
|
end
|
70
70
|
end
|
71
|
+
end
|
71
72
|
|
72
|
-
|
73
|
+
def source_schema_migrations
|
74
|
+
::Storey.switch(self.source_schema) do
|
75
|
+
ActiveRecord::Migrator.get_all_versions
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def target_schema_migrations
|
80
|
+
::Storey.switch(self.target_schema) do
|
81
|
+
ActiveRecord::Migrator.get_all_versions
|
82
|
+
end
|
73
83
|
end
|
74
84
|
|
75
85
|
def replace_occurances
|
data/lib/storey/exceptions.rb
CHANGED
data/lib/storey/version.rb
CHANGED
data/lib/storey.rb
CHANGED
@@ -59,7 +59,18 @@ module Storey
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def create_plain_schema(schema_name)
|
62
|
-
|
62
|
+
switches = self.command_line_switches(:command => %{"CREATE SCHEMA #{self.suffixify schema_name}"})
|
63
|
+
command = "psql #{switches}"
|
64
|
+
system(command)
|
65
|
+
end
|
66
|
+
|
67
|
+
def command_line_switches(options={})
|
68
|
+
switches = {}
|
69
|
+
switches[:host] = self.database_config[:host] if self.database_config.has_key?(:host)
|
70
|
+
switches[:dbname] = self.database_config[:database]
|
71
|
+
switches[:username] = self.database_config[:username]
|
72
|
+
switches = switches.merge(options)
|
73
|
+
switches.map {|k, v| "--#{k}=#{v}"}.join(' ')
|
63
74
|
end
|
64
75
|
|
65
76
|
def schemas(options={})
|
@@ -102,6 +113,9 @@ module Storey
|
|
102
113
|
rescue ActiveRecord::StatementInvalid => e
|
103
114
|
if e.to_s =~ /invalid value for parameter "search_path"/
|
104
115
|
fail Storey::SchemaNotFound, %{The schema "#{path}" cannot be found.}
|
116
|
+
elsif e.to_s =~ /relation ".*" does not exist at character \d+/
|
117
|
+
warn "Still unsure why the following error occurs, but see https://github.com/ramontayag/storey/issues/11"
|
118
|
+
raise e
|
105
119
|
else
|
106
120
|
raise e
|
107
121
|
end
|
data/rvmrc.sample
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use ruby-1.9.2-p290
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,16 +11,6 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
15
|
-
|
16
|
-
create_table "companies", :force => true do |t|
|
17
|
-
t.string "name"
|
18
|
-
t.string "schema_name"
|
19
|
-
end
|
20
|
-
|
21
|
-
create_table "posts", :force => true do |t|
|
22
|
-
t.string "name"
|
23
|
-
t.text "body"
|
24
|
-
end
|
14
|
+
ActiveRecord::Schema.define(:version => 0) do
|
25
15
|
|
26
16
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Storey, '.command_line_switches' do
|
4
|
+
it 'should build default command line switches for calling the psql command' do
|
5
|
+
described_class.stub(:database_config).and_return(:host => 'hoop',
|
6
|
+
:database => 'db',
|
7
|
+
:username => 'jj')
|
8
|
+
described_class.command_line_switches.
|
9
|
+
should == "--host=hoop --dbname=db --username=jj"
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'given options' do
|
13
|
+
it 'should add the options to the switches, overriding any default' do
|
14
|
+
described_class.stub(:database_config).and_return(:host => 'hoop',
|
15
|
+
:database => 'db',
|
16
|
+
:username => 'jj')
|
17
|
+
|
18
|
+
described_class.command_line_switches(:a => 'boo', :host => 'loop').
|
19
|
+
should == "--host=loop --dbname=db --username=jj --a=boo"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/storey/create_spec.rb
CHANGED
@@ -9,6 +9,15 @@ describe Storey, "#create" do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
context 'when in a database transaction and loading the database structure' do
|
13
|
+
it 'should not blow up and continue to create the schema' do
|
14
|
+
ActiveRecord::Base.transaction do
|
15
|
+
Storey.create 'foobar'
|
16
|
+
end
|
17
|
+
Storey.schemas.should include('foobar')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
12
21
|
it "should copy the schema_migrations over" do
|
13
22
|
Storey.create "foobar"
|
14
23
|
public_schema_migrations = Storey.switch { ActiveRecord::Migrator.get_all_versions }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: storey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec-rails
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: pg
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 0.12.2
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.12.2
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: database_cleaner
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: pry
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: rails
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,7 +85,12 @@ dependencies:
|
|
65
85
|
version: 3.2.2
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 3.2.2
|
69
94
|
description: Storey aims to simplify the implementation of managing a multi-tenant
|
70
95
|
application.
|
71
96
|
email:
|
@@ -76,7 +101,6 @@ extra_rdoc_files: []
|
|
76
101
|
files:
|
77
102
|
- .gitignore
|
78
103
|
- .rspec
|
79
|
-
- .rvmrc
|
80
104
|
- Gemfile
|
81
105
|
- README.md
|
82
106
|
- Rakefile
|
@@ -89,6 +113,7 @@ files:
|
|
89
113
|
- lib/storey/railtie.rb
|
90
114
|
- lib/storey/version.rb
|
91
115
|
- lib/tasks/storey.rake
|
116
|
+
- rvmrc.sample
|
92
117
|
- spec/config/database.yml.sample
|
93
118
|
- spec/dummy/Rakefile
|
94
119
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -131,6 +156,7 @@ files:
|
|
131
156
|
- spec/fixtures/.gitkeep
|
132
157
|
- spec/migrator_spec.rb
|
133
158
|
- spec/spec_helper.rb
|
159
|
+
- spec/storey/command_line_switches_spec.rb
|
134
160
|
- spec/storey/configuration_spec.rb
|
135
161
|
- spec/storey/create_plain_schema_spec.rb
|
136
162
|
- spec/storey/create_spec.rb
|
@@ -159,16 +185,80 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
159
185
|
- - ! '>='
|
160
186
|
- !ruby/object:Gem::Version
|
161
187
|
version: '0'
|
188
|
+
segments:
|
189
|
+
- 0
|
190
|
+
hash: 1992492096624626052
|
162
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
192
|
none: false
|
164
193
|
requirements:
|
165
194
|
- - ! '>='
|
166
195
|
- !ruby/object:Gem::Version
|
167
196
|
version: '0'
|
197
|
+
segments:
|
198
|
+
- 0
|
199
|
+
hash: 1992492096624626052
|
168
200
|
requirements: []
|
169
201
|
rubyforge_project: storey
|
170
|
-
rubygems_version: 1.8.
|
202
|
+
rubygems_version: 1.8.24
|
171
203
|
signing_key:
|
172
204
|
specification_version: 3
|
173
205
|
summary: Manage multiple PostgreSQL schemas in your multi-tenant app.
|
174
|
-
test_files:
|
206
|
+
test_files:
|
207
|
+
- spec/config/database.yml.sample
|
208
|
+
- spec/dummy/Rakefile
|
209
|
+
- spec/dummy/app/assets/javascripts/application.js
|
210
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
211
|
+
- spec/dummy/app/controllers/application_controller.rb
|
212
|
+
- spec/dummy/app/helpers/application_helper.rb
|
213
|
+
- spec/dummy/app/mailers/.gitkeep
|
214
|
+
- spec/dummy/app/models/.gitkeep
|
215
|
+
- spec/dummy/app/models/company.rb
|
216
|
+
- spec/dummy/app/models/fake.rb
|
217
|
+
- spec/dummy/app/models/post.rb
|
218
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
219
|
+
- spec/dummy/config.ru
|
220
|
+
- spec/dummy/config/application.rb
|
221
|
+
- spec/dummy/config/boot.rb
|
222
|
+
- spec/dummy/config/database.yml.sample
|
223
|
+
- spec/dummy/config/environment.rb
|
224
|
+
- spec/dummy/config/environments/development.rb
|
225
|
+
- spec/dummy/config/environments/production.rb
|
226
|
+
- spec/dummy/config/environments/test.rb
|
227
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
228
|
+
- spec/dummy/config/initializers/inflections.rb
|
229
|
+
- spec/dummy/config/initializers/mime_types.rb
|
230
|
+
- spec/dummy/config/initializers/secret_token.rb
|
231
|
+
- spec/dummy/config/initializers/session_store.rb
|
232
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
233
|
+
- spec/dummy/config/locales/en.yml
|
234
|
+
- spec/dummy/config/routes.rb
|
235
|
+
- spec/dummy/db/migrate/20120115060713_create_companies.rb
|
236
|
+
- spec/dummy/db/migrate/20120115060728_create_posts.rb
|
237
|
+
- spec/dummy/db/schema.rb
|
238
|
+
- spec/dummy/lib/assets/.gitkeep
|
239
|
+
- spec/dummy/log/.gitkeep
|
240
|
+
- spec/dummy/log/development.log
|
241
|
+
- spec/dummy/public/404.html
|
242
|
+
- spec/dummy/public/422.html
|
243
|
+
- spec/dummy/public/500.html
|
244
|
+
- spec/dummy/public/favicon.ico
|
245
|
+
- spec/dummy/script/rails
|
246
|
+
- spec/fixtures/.gitkeep
|
247
|
+
- spec/migrator_spec.rb
|
248
|
+
- spec/spec_helper.rb
|
249
|
+
- spec/storey/command_line_switches_spec.rb
|
250
|
+
- spec/storey/configuration_spec.rb
|
251
|
+
- spec/storey/create_plain_schema_spec.rb
|
252
|
+
- spec/storey/create_spec.rb
|
253
|
+
- spec/storey/drop_spec.rb
|
254
|
+
- spec/storey/dumper_spec.rb
|
255
|
+
- spec/storey/duplicate_spec.rb
|
256
|
+
- spec/storey/excluded_models_spec.rb
|
257
|
+
- spec/storey/hstore_spec.rb
|
258
|
+
- spec/storey/persistent_schemas_spec.rb
|
259
|
+
- spec/storey/schema_search_path_for_spec.rb
|
260
|
+
- spec/storey/schema_spec.rb
|
261
|
+
- spec/storey/schemas_spec.rb
|
262
|
+
- spec/storey/suffixify_spec.rb
|
263
|
+
- spec/storey/switch_spec.rb
|
264
|
+
- spec/tasks/storey_rake_spec.rb
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use ruby-1.9.2-p290@storey --create
|