multi_ar 5.1.3 → 6.0.0.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9a84a45efae46d76b878918d4b5a05251c9a69b744c9441a1d1a723e86f5341
4
- data.tar.gz: 864a297a5c7615a566a03681ce323bb88cfced098c4c3c293823d72f16088577
3
+ metadata.gz: 4be873bd564b04b81d3a4245160c98007dec42edb692cabf64ce1a4ae3e2b5ef
4
+ data.tar.gz: c33cbbed7eea9697166655ba9952e3155048c156975c82a20413bd99bb86b366
5
5
  SHA512:
6
- metadata.gz: 045fc555b3557a4dc55ac02629d46be893696066551a89da2e197953c0620b4de77a20bfd6264c2ea134f2bba002b84d0358d215c265d66243b2ea55305fc442
7
- data.tar.gz: aaf8c5830298cf650d0a957678692d466e627b2861d0d089ba40684112d658a3bbebbed46d69b5bb6642109c8e9b5e322220a1170f1cd610a92987031436e7c3
6
+ metadata.gz: e6a1152839e3967942d039eac8f6bc91a9ac572fe804f9d0cf1bbbc9aa040428d858350c5ed49d2dbcc3c2e0876bbc7a2801f606fb15876d2332e380d728af6f
7
+ data.tar.gz: 9ece6a831414d6bfbbdaf168db31e219ef3f161b31ad36e046da51f2244e2c06269da387217cd4250d7b96c81fa79cb665150afeb95a5d70a3db43623d9bb607
checksums.yaml.gz.sig CHANGED
Binary file
@@ -65,6 +65,7 @@ module MultiAR
65
65
  p.banner @description if @description
66
66
  p.opt "init", "Create stub environment with configuration and database.yaml. " +
67
67
  "For current dir, use “.”.", type: :string
68
+ p.opt "gem", "Run migrations from an installed gem", type: :string
68
69
  p.opt "databases", "List of databases to perform operations", type: :strings if(@options["databases"] != false && !@options["databases"].respond_to?(:each))
69
70
  p.opt "db_config", "Path to database config file", type: :string, default: DEFAULT_DB_CONFIG if @options["db_config"] == true
70
71
  p.opt "config", "Path to MultiAR framework config file", type: :string, default: "config/settings.yaml" if @options["config"] == true
@@ -137,6 +138,7 @@ module MultiAR
137
138
  opts[:db_config] = @opts["db_config"] unless @opts["db_config"].nil?
138
139
  #opts[:migration_dirs] = [ @opts["migration_dir"] ]
139
140
  opts[:config] = @opts["config"] unless @opts["config"].nil?
141
+ opts[:migrations_from_gem] = @opts["gem"] unless @opts["gem"].nil?
140
142
  opts[:databases] = parse_databases_input(@opts["databases"])
141
143
  opts[:environment] = @opts["environment"]
142
144
  opts[:verbose] = @opts["verbose"]
@@ -155,7 +157,7 @@ module MultiAR
155
157
  elsif !@options["migration_dir"].nil?
156
158
  out[database] = "#{@options["migration_dir"]}/#{database}"
157
159
  else
158
- out[database] = "db/migrate/#{database}"
160
+ out[database] = nil
159
161
  end
160
162
  end
161
163
 
@@ -180,6 +182,8 @@ module MultiAR
180
182
  File.write database_config, bootstrap_db_config(opts) unless File.exist?(database_config)
181
183
  end
182
184
 
185
+ bootstrap_db_dir opts
186
+
183
187
  bootstrap_config opts
184
188
  end
185
189
 
@@ -191,9 +195,6 @@ module MultiAR
191
195
  str = ""
192
196
  databases = parse_databases_input(opts["databases"])
193
197
  databases.each do |db, migration_path|
194
- # This is a bit misleading place to create the migration dir, but it needs to be done somewhere.
195
- FileUtils.mkdir_p(migration_path)
196
-
197
198
  # Create the config file
198
199
  [ "development", "production", "test"].each do |env|
199
200
  full_name = "#{db}_#{env}"
@@ -211,6 +212,14 @@ module MultiAR
211
212
  str
212
213
  end
213
214
 
215
+ def bootstrap_db_dir opts
216
+ databases = parse_databases_input(opts["databases"])
217
+ databases.each do |db, migration_path|
218
+ migration_path = "db/migrate/#{db}" if migration_path.nil?
219
+ FileUtils.mkdir_p(migration_path)
220
+ end
221
+ end
222
+
214
223
  def bootstrap_gemfile
215
224
 
216
225
  str = <<-EOS.gsub(/^ {6}/, "")
@@ -10,7 +10,8 @@ module ActiveRecordMigrations
10
10
  source_root ::ActiveRecord::Generators::MigrationGenerator.source_root
11
11
 
12
12
  def db_migrate_path
13
- databases = MultiAR::MultiAR::databases.first[1]
13
+ database_name = MultiAR::MultiAR::databases.first[0]
14
+ MultiAR::MultiAR::solve_migration_path database_name
14
15
  end
15
16
  end
16
17
  end
@@ -102,7 +102,8 @@ module Rake
102
102
  multiple_databases_task "migrate", "db" do |database_name|
103
103
  establish_connection database_name
104
104
 
105
- context = ActiveRecord::MigrationContext.new(MultiAR::MultiAR.databases[database_name])
105
+ migration_path = MultiAR::MultiAR::solve_migration_path database_name
106
+ context = ActiveRecord::MigrationContext.new(migration_path, ::ActiveRecord::Base.connection.schema_migration)
106
107
  context.migrate
107
108
 
108
109
  #MultiAR::MultiAR.migration_dirs.each do |dir|
@@ -1,4 +1,4 @@
1
1
 
2
2
  module MultiAR
3
- VERSION = "5.1.3"
3
+ VERSION = "6.0.0-beta"
4
4
  end
data/lib/multi_ar.rb CHANGED
@@ -19,6 +19,8 @@ module MultiAR
19
19
  # This will always be overridden, when MultiAR is initialized. Don’t try to do any funny logic with this.
20
20
  @@__databases = {}
21
21
 
22
+ @default_migration_path = "db/migrate"
23
+
22
24
  class << self
23
25
  # Instance of MultiAR::MultiAR, automatically assigned by MultiAR::MultiAR#new.
24
26
  # Used internally in the gem, to access configuration and other internal parts.
@@ -27,7 +29,7 @@ module MultiAR
27
29
 
28
30
  # @param databases array of available databases
29
31
  # @todo config file is overriding parameters passed here... I think it should be other way around, but need more custom logic for that :/
30
- def initialize databases: nil, environment: "development", config: "config/settings.yaml", db_config: "config/database.yaml", verbose: false
32
+ def initialize databases: nil, environment: "development", config: "config/settings.yaml", db_config: "config/database.yaml", verbose: false, migrations_from_gem: nil
31
33
 
32
34
  # first load config
33
35
  if not config.nil? and File.exist? config
@@ -46,6 +48,9 @@ module MultiAR
46
48
  raise "#{db_config} is not valid path to a file. Try specifying --db-config <path> or configuring it in the configuration file." if db_config.nil? or !File.exist?(db_config)
47
49
  #raise "databases is not responding to :each. Try passing passing --databases <database> or configuring it in the configuration file." unless databases.respond_to? :each
48
50
 
51
+ # One can run migrations from a gem, instead of current project.
52
+ load_migration_gem migrations_from_gem, databases if not migrations_from_gem.nil?
53
+
49
54
  parse_databases_input databases unless databases.nil?
50
55
 
51
56
  #@databases = databases
@@ -115,11 +120,13 @@ module MultiAR
115
120
  #
116
121
  # @note often you want to add full path to this dir, `__dir__` is useful for this.
117
122
  def self.add_database database_name, migration_path
118
- raise "Migration dir #{migration_path} does not exist." unless Dir.exist? migration_path
119
- begin
120
- ActiveRecord::Tasks::DatabaseTasks.migrations_paths << migration_path
121
- rescue NameError
122
- # multi_ar can be used without migration support, so adding a database to migration paths is only necessary when actually running migrations.
123
+ unless migration_path.nil?
124
+ raise "Migration dir #{migration_path} does not exist." unless Dir.exist? migration_path
125
+ begin
126
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths << migration_path
127
+ rescue NameError
128
+ # multi_ar can be used without migration support, so adding a database to migration paths is only necessary when actually running migrations.
129
+ end
123
130
  end
124
131
  @@__databases[database_name] = migration_path
125
132
  end
@@ -141,6 +148,17 @@ module MultiAR
141
148
  @@__databases
142
149
  end
143
150
 
151
+ # Returns calculated migration path or if path have not been given, fallback to default db/migrate/DB_NAME if it exists.
152
+ def self.solve_migration_path database_name
153
+ path = self.databases[database_name]
154
+ if path.nil?
155
+ path = "db/migrate/#{database_name}"
156
+ raise "Trying to use migrations for non-existing database. Please specify database if you have migrations in custom location. Given database: #{database_name}" unless File.exist? path
157
+ end
158
+
159
+ path
160
+ end
161
+
144
162
  # TODO: remember to remove these if not needed...
145
163
  # Helper to resolve a path to database
146
164
  #def self.resolve_database_path
@@ -152,6 +170,36 @@ module MultiAR
152
170
 
153
171
  private
154
172
 
173
+ def load_migration_gem migrations_from_gem, databases
174
+ # If the gem is not installed, we just want to fail.
175
+ gem migrations_from_gem
176
+
177
+ spec = Gem.loaded_specs[migrations_from_gem]
178
+ gem_dir = nil
179
+ if spec.respond_to? :full_gem_path
180
+ gem_dir = spec.full_gem_path
181
+ else
182
+ require_paths = spec["require_paths"]
183
+ gem_dir = require_paths[0]
184
+ end
185
+
186
+ # This file contains gem specific details which can be used to bootstrap MultiAR.
187
+ # There could be default values, but for security, as loading arbitrary gems accidentally could cause hard-to-recognize security bugs, since migrations are plain Ruby code.
188
+ # TODO: document contents of that file somewhere.
189
+ info_file = "#{gem_dir}/config/multi_ar_gem.yaml"
190
+
191
+ raise "File #{info_file} does not exist. Please check that your gem contains config/multi_ar_gem.yaml for automatic operation." unless File.exist? info_file
192
+ yaml = YAML.load_file info_file
193
+
194
+ migration_dir = yaml["migration_dir"]
195
+
196
+ # Put in gem’s migration path, so stuff should just magically work
197
+
198
+ databases.each do |database, migration_path|
199
+ databases[database] = "#{gem_dir}/#{migration_dir}"
200
+ end
201
+ end
202
+
155
203
  # Supports three different input formats:
156
204
  #
157
205
  # 1. Array with strings of database names
@@ -163,7 +211,7 @@ module MultiAR
163
211
  if database.kind_of? Hash
164
212
  ::MultiAR::MultiAR::add_database database["database"], database["migration_path"]
165
213
  else
166
- ::MultiAR::MultiAR::add_database database, "db/migrate/#{database}"
214
+ ::MultiAR::MultiAR::add_database database, "#{default_migration_path}/#{database}"
167
215
  end
168
216
  end
169
217
  return
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_ar
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.3
4
+ version: 6.0.0.pre.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samu Voutilainen
@@ -10,26 +10,31 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- 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
- 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
- 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
- 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
- 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
- kFh083Ccrecp9O+0whVcarpfGgVa8OghGOZCmHKonJmuOhzMYjBRhnJlnnwP/HJg
19
- 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
- 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
- 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
- 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
- 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
- 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
- QHNtYXIuZmkwDQYJKoZIhvcNAQEFBQADggEBAILOxHMA9DBO9N4cYuRqjMjzkuQ/
26
- 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
- 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
- 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
- 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
- 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
35
+ 37jzNNQuoDPqiNcASg0XaZAxvWI=
31
36
  -----END CERTIFICATE-----
32
- date: 2018-11-27 00:00:00.000000000 Z
37
+ date: 2019-08-28 00:00:00.000000000 Z
33
38
  dependencies:
34
39
  - !ruby/object:Gem::Dependency
35
40
  name: optimist
@@ -51,28 +56,28 @@ dependencies:
51
56
  requirements:
52
57
  - - "~>"
53
58
  - !ruby/object:Gem::Version
54
- version: '5.0'
59
+ version: '6.0'
55
60
  type: :runtime
56
61
  prerelease: false
57
62
  version_requirements: !ruby/object:Gem::Requirement
58
63
  requirements:
59
64
  - - "~>"
60
65
  - !ruby/object:Gem::Version
61
- version: '5.0'
66
+ version: '6.0'
62
67
  - !ruby/object:Gem::Dependency
63
68
  name: rake
64
69
  requirement: !ruby/object:Gem::Requirement
65
70
  requirements:
66
71
  - - "~>"
67
72
  - !ruby/object:Gem::Version
68
- version: '11.2'
73
+ version: '12.3'
69
74
  type: :runtime
70
75
  prerelease: false
71
76
  version_requirements: !ruby/object:Gem::Requirement
72
77
  requirements:
73
78
  - - "~>"
74
79
  - !ruby/object:Gem::Version
75
- version: '11.2'
80
+ version: '12.3'
76
81
  - !ruby/object:Gem::Dependency
77
82
  name: safe_attributes
78
83
  requirement: !ruby/object:Gem::Requirement
@@ -107,28 +112,28 @@ dependencies:
107
112
  requirements:
108
113
  - - "~>"
109
114
  - !ruby/object:Gem::Version
110
- version: '1.4'
115
+ version: '3.0'
111
116
  type: :development
112
117
  prerelease: false
113
118
  version_requirements: !ruby/object:Gem::Requirement
114
119
  requirements:
115
120
  - - "~>"
116
121
  - !ruby/object:Gem::Version
117
- version: '1.4'
122
+ version: '3.0'
118
123
  - !ruby/object:Gem::Dependency
119
124
  name: cucumber
120
125
  requirement: !ruby/object:Gem::Requirement
121
126
  requirements:
122
127
  - - "~>"
123
128
  - !ruby/object:Gem::Version
124
- version: '2.1'
129
+ version: '3.1'
125
130
  type: :development
126
131
  prerelease: false
127
132
  version_requirements: !ruby/object:Gem::Requirement
128
133
  requirements:
129
134
  - - "~>"
130
135
  - !ruby/object:Gem::Version
131
- version: '2.1'
136
+ version: '3.1'
132
137
  - !ruby/object:Gem::Dependency
133
138
  name: sqlite3
134
139
  requirement: !ruby/object:Gem::Requirement
@@ -190,12 +195,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
195
  version: '0'
191
196
  required_rubygems_version: !ruby/object:Gem::Requirement
192
197
  requirements:
193
- - - ">="
198
+ - - ">"
194
199
  - !ruby/object:Gem::Version
195
- version: '0'
200
+ version: 1.3.1
196
201
  requirements: []
197
202
  rubyforge_project:
198
- rubygems_version: 2.7.3
203
+ rubygems_version: 2.7.6.2
199
204
  signing_key:
200
205
  specification_version: 4
201
206
  summary: Multi database feature set for ActiveRecord
metadata.gz.sig CHANGED
Binary file