multi_ar 1.0.0.pre.rc1 → 1.0.0.pre.rc2
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/bin/multi_ar +8 -60
- data/lib/multi_ar/interface.rb +47 -4
- data/lib/multi_ar/{multi_ar_model.rb → model.rb} +1 -1
- data/lib/multi_ar/rake/tasks.rb +18 -19
- data/lib/multi_ar/version.rb +1 -1
- data/lib/multi_ar.rb +34 -12
- data.tar.gz.sig +0 -0
- metadata +4 -6
- metadata.gz.sig +0 -0
- data/bin/mar +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d54d942aefe519b7959ea7d8207c03b304c437f2
|
4
|
+
data.tar.gz: abf83b48064b3e378000ff19b05642c7986919ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d4b9241137a3c3bc78f0b9c0c8b04fa13701ef08250596c5fb1b54a95063049fa950c17298ecc64f92afc81bdef7fcbe9a69108b1dac8b0f7986404b500b756
|
7
|
+
data.tar.gz: ea38c3fb2c44b79041ff14e94988e1c7494a57091a7f5bf3fbedf74ebd9ae62dffbe975b8e5ccee222d11a301ce05df973fbfbdfe679d937dc6cd7423e0617c5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/bin/multi_ar
CHANGED
@@ -1,65 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../lib/multi_ar/interface"
|
4
4
|
|
5
|
-
require_relative "../lib/multi_ar"
|
6
5
|
require_relative "../lib/multi_ar/version"
|
7
|
-
require_relative "../lib/multi_ar/helper/rake_ext"
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
opt "all_rake_tasks", "List all Rake tasks, not only commented ones", short: "A", type: :flag
|
17
|
-
opt "common_migrations", "Run the migrations bundled with the gem, for common databases.", type: :flag, default: true
|
18
|
-
opt "config", "Location to configuration file of MultiAR.", type: :string, default: "config/multi_ar.yaml"
|
19
|
-
opt "databases", "List of databases to perform operations", type: :strings
|
20
|
-
opt "db_config", "Path to database config file", type: :string, default: "config/database.yaml"
|
21
|
-
opt "environment", "The environment to use. Corresponds to database config name " +
|
22
|
-
"(environment for foo_development is “development”).", type: :string, default: "development"
|
23
|
-
# TODO: not implemented currently, do we really need this?
|
24
|
-
#opt "list_databases", "Lists databases that contains migrations in the gem", type: :flag
|
25
|
-
opt "migration_dir", "The directory where migrations for databases are read from", type: :string, default: "db/migrate"
|
26
|
-
opt "task", "Rake task to execute", type: :string
|
27
|
-
opt "tasks", "List available Rake tasks", short: "T", type: :flag
|
28
|
-
opt "verbose", "Be more verbose", type: :flag
|
29
|
-
end
|
30
|
-
|
31
|
-
opts = Trollop::with_standard_exception_handling p do
|
32
|
-
|
33
|
-
args = ARGV.clone
|
34
|
-
|
35
|
-
# and then reparse with arguments from the config file (here so that Trollop can erase ARGV)
|
36
|
-
result = p.parse ARGV
|
37
|
-
|
38
|
-
# show help screen
|
39
|
-
raise Trollop::HelpNeeded if args.empty? # need to be different what we parse, as parser will remove used arguments
|
40
|
-
|
41
|
-
result
|
42
|
-
end
|
43
|
-
|
44
|
-
# running the task
|
45
|
-
|
46
|
-
multi_ar = MultiAR::MultiAR.new common_migrations: opts["common_migrations"],
|
47
|
-
config: opts["config"],
|
48
|
-
databases: opts["databases"],
|
49
|
-
db_config: opts["db_config"],
|
50
|
-
environment: opts["environment"],
|
51
|
-
migration_dir: opts["migration_dir"]
|
52
|
-
|
53
|
-
if opts["tasks"] || opts["all_rake_tasks"]
|
54
|
-
multi_ar.list_tasks all_rake_tasks: opts["all_rake_tasks"]
|
55
|
-
exit 1
|
56
|
-
end
|
57
|
-
|
58
|
-
if opts["task"].nil?
|
59
|
-
puts "Task must be specified. Check if you passed --task option."
|
60
|
-
exit 1
|
61
|
-
end
|
62
|
-
puts "Running task #{opts["task"]}" if opts["verbose"]
|
63
|
-
multi_ar.rake_task opts["task"]
|
64
|
-
|
65
|
-
#rake.top_level
|
7
|
+
interface = MultiAR::Interface.new
|
8
|
+
interface.version = "multi_ar-#{MultiAR::VERSION}"
|
9
|
+
interface.description = "Multi database migration tools utilizing ActiveRecord"
|
10
|
+
interface.migration_framework = true
|
11
|
+
opts = interface.cli do |parser|
|
12
|
+
# Nya.
|
13
|
+
end
|
data/lib/multi_ar/interface.rb
CHANGED
@@ -38,6 +38,9 @@ module MultiAR
|
|
38
38
|
# Array of databases that will be used insted if none have not been passed through CLI.
|
39
39
|
attr_accessor :databases
|
40
40
|
|
41
|
+
# If set to true, migration framework and other Rake related functionality will be enabled.
|
42
|
+
attr_accessor :migration_framework
|
43
|
+
|
41
44
|
# Boolean of whether no arguments are needed
|
42
45
|
attr_accessor :run_by_default
|
43
46
|
|
@@ -64,13 +67,25 @@ module MultiAR
|
|
64
67
|
p.version @version if @version
|
65
68
|
p.banner @description if @description
|
66
69
|
p.opt "init", "Create stub environment with configuration and database.yaml", type: :string
|
67
|
-
p.opt "databases", "
|
70
|
+
p.opt "databases", "List of databases to perform operations", type: :strings if @options["databases"]
|
68
71
|
p.opt "db_config", "Path to database config file", type: :string, default: "config/database.yaml" if @options["db_config"]
|
69
|
-
p.opt "config", "Path to config file",
|
72
|
+
p.opt "config", "Path to MultiAR framework config file", type: :string, default: "config/settings.yaml" if @options["config"]
|
70
73
|
p.opt "dry", "Run the program without doing anything. Useful for debugging with -v", type: :flag if @options["dry"]
|
71
|
-
p.opt "environment", "
|
74
|
+
p.opt "environment", "The environment to use. Corresponds to database config name " +
|
75
|
+
"(environment for foo_development is “development”).", type: :string, default: "development"
|
72
76
|
p.opt "verbose", "Be verbose", type: :flag if @options["verbose"]
|
73
77
|
|
78
|
+
if @migration_framework == true
|
79
|
+
p.opt "all_rake_tasks", "List all Rake tasks, not only commented ones", short: "A", type: :flag
|
80
|
+
# TODO: what for this is...?
|
81
|
+
#p.opt "common_migrations", "Run the migrations bundled with the gem, for common databases.", type: :flag, default: true
|
82
|
+
# TODO: not implemented currently, do we really need this?
|
83
|
+
#p.opt "list_databases", "Lists databases that contains migrations in the gem", type: :flag
|
84
|
+
p.opt "migration_dir", "The directory where migrations for databases are read from", type: :string, default: "db/migrate"
|
85
|
+
p.opt "task", "Rake task to execute", short: "t", type: :string
|
86
|
+
p.opt "tasks", "List available Rake tasks", short: "T", type: :flag
|
87
|
+
end
|
88
|
+
|
74
89
|
yield p if block_given?
|
75
90
|
|
76
91
|
opts = Trollop::with_standard_exception_handling p do
|
@@ -85,16 +100,44 @@ module MultiAR
|
|
85
100
|
result
|
86
101
|
end
|
87
102
|
|
88
|
-
bootstrap opts if opts["init"]
|
103
|
+
bootstrap opts if opts["init"] # Bootstrap will exit after execution; in that case nothing after this will be run.
|
89
104
|
|
90
105
|
raise "--config must be path to valid file" if @options["config"] and not File.exist? opts["config"]
|
91
106
|
raise "config/database.yaml seems to be missing" if @options["db_config"] and not File.exist? opts["db_config"]
|
92
107
|
|
93
108
|
@opts = opts
|
109
|
+
|
110
|
+
init_multi_ar
|
111
|
+
|
112
|
+
# Then run Rake tasks as requested
|
113
|
+
|
114
|
+
return if not @migration_framework # TODO: I think there should be much more fine grained control for this
|
115
|
+
|
116
|
+
if opts["tasks"] || opts["all_rake_tasks"]
|
117
|
+
@multi_ar.list_tasks all_rake_tasks: opts["all_rake_tasks"]
|
118
|
+
exit 1
|
119
|
+
end
|
120
|
+
|
121
|
+
if opts["task"].nil?
|
122
|
+
puts "Task must be specified. Check if you passed --task option."
|
123
|
+
exit 1
|
124
|
+
end
|
125
|
+
|
126
|
+
puts "Running task #{opts["task"]}" if opts["verbose"]
|
127
|
+
@multi_ar.rake_task opts["task"]
|
94
128
|
end
|
95
129
|
|
96
130
|
private
|
97
131
|
|
132
|
+
def init_multi_ar
|
133
|
+
@multi_ar = MultiAR::MultiAR.new common_migrations: @opts["common_migrations"],
|
134
|
+
config: @opts["config"],
|
135
|
+
databases: @opts["databases"],
|
136
|
+
db_config: @opts["db_config"],
|
137
|
+
environment: @opts["environment"],
|
138
|
+
migration_dir: @opts["migration_dir"]
|
139
|
+
end
|
140
|
+
|
98
141
|
# @note This method will always quit the application or raise another exception for errors. Catch SystemExit if that’s not good for you.
|
99
142
|
def bootstrap opts
|
100
143
|
opts["databases"] ||= @databases
|
data/lib/multi_ar/rake/tasks.rb
CHANGED
@@ -9,9 +9,9 @@ require "active_record/tasks/database_tasks"
|
|
9
9
|
|
10
10
|
require_relative "migration_generator"
|
11
11
|
|
12
|
-
module
|
12
|
+
module Rake
|
13
13
|
|
14
|
-
# Utility that defines Rake tasks of
|
14
|
+
# Utility that defines Rake tasks of MultiAR
|
15
15
|
class Tasks
|
16
16
|
#include Rake::DSL
|
17
17
|
|
@@ -24,17 +24,17 @@ module MultiAR::Rake
|
|
24
24
|
unless name.kind_of?(String) || name.nil?
|
25
25
|
raise ArgumentError, "Expected a String or Symbol for a namespace name"
|
26
26
|
end
|
27
|
-
Rake.application.in_namespace(name, &block)
|
27
|
+
::Rake.application.in_namespace(name, &block)
|
28
28
|
end
|
29
29
|
|
30
30
|
# Defines a Rake task’s description (see Rake’s desc() in dsl_definition.rb)
|
31
31
|
def self.desc(description)
|
32
|
-
Rake.application.last_description = description
|
32
|
+
::Rake.application.last_description = description
|
33
33
|
end
|
34
34
|
|
35
35
|
# Defines a Rake task (see Rake’s task() in dsl_definition.rb)
|
36
36
|
def self.task(*args, &block)
|
37
|
-
Rake::Task.define_task(*args, &block)
|
37
|
+
::Rake::Task.define_task(*args, &block)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -42,10 +42,9 @@ module MultiAR::Rake
|
|
42
42
|
attr_accessor :databases
|
43
43
|
attr_accessor :environment
|
44
44
|
attr_accessor :common_migrations
|
45
|
-
attr_accessor :migration_dir
|
46
45
|
end
|
47
46
|
|
48
|
-
# When called, this declares Rake tasks of
|
47
|
+
# When called, this declares Rake tasks of MultiAR,
|
49
48
|
# most notably custom active record migration tasks.
|
50
49
|
def self.define
|
51
50
|
load "active_record/railties/databases.rake"
|
@@ -84,14 +83,11 @@ module MultiAR::Rake
|
|
84
83
|
multiple_databases_task "migrate", "db" do |database_name|
|
85
84
|
establish_connection database_name
|
86
85
|
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
MultiAR::MultiAR.migration_dirs.each do |dir|
|
87
|
+
path = "#{dir}/#{database_name}/"
|
88
|
+
# The database should be present only on one migration dir, so this will fail if there is more than one migration dir
|
90
89
|
ActiveRecord::Migrator.migrate path if Dir.exist? path
|
91
90
|
end
|
92
|
-
|
93
|
-
path = "#{migration_dir}/#{database_name}/"
|
94
|
-
ActiveRecord::Migrator.migrate path if Dir.exist? path
|
95
91
|
end
|
96
92
|
|
97
93
|
multiple_databases_task "create", "db" do |database_name|
|
@@ -102,8 +98,11 @@ module MultiAR::Rake
|
|
102
98
|
multiple_databases_task "rollback", "db" do |database_name|
|
103
99
|
establish_connection database_name
|
104
100
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
105
|
-
|
106
|
-
|
101
|
+
MultiAR::MultiAR.migration_dirs.each do |dir|
|
102
|
+
path = "#{dir}/#{database_name}/"
|
103
|
+
# The database should be present only on one migration dir, so this will fail if there is more than one migration dir
|
104
|
+
ActiveRecord::Migrator.rollback(path, step) if Dir.exist? path
|
105
|
+
end
|
107
106
|
end
|
108
107
|
|
109
108
|
multiple_databases_task "drop", "db" do |database_name|
|
@@ -117,9 +116,9 @@ module MultiAR::Rake
|
|
117
116
|
def self.rename_task name, namespace = nil
|
118
117
|
new_name = "old_#{name}"
|
119
118
|
#new_name = "#{namespace}:#{new_name}" unless namespace.nil?
|
120
|
-
Rake::Task[name].rename(new_name)
|
121
|
-
old_comment = Rake::Task[new_name].comment
|
122
|
-
Rake::Task[new_name].clear_comments
|
119
|
+
::Rake::Task[name].rename(new_name)
|
120
|
+
old_comment = ::Rake::Task[new_name].comment
|
121
|
+
::Rake::Task[new_name].clear_comments
|
123
122
|
old_comment
|
124
123
|
end
|
125
124
|
|
@@ -130,7 +129,7 @@ module MultiAR::Rake
|
|
130
129
|
DSL.desc "Runs task #{name} for all selected databases"
|
131
130
|
DSL.task name.to_sym do
|
132
131
|
databases.each do |database_name|
|
133
|
-
Rake::Task["#{name}:#{database_name}"].invoke
|
132
|
+
::Rake::Task["#{name}:#{database_name}"].invoke
|
134
133
|
end
|
135
134
|
end
|
136
135
|
|
data/lib/multi_ar/version.rb
CHANGED
data/lib/multi_ar.rb
CHANGED
@@ -7,15 +7,17 @@ require_relative "multi_ar/database"
|
|
7
7
|
|
8
8
|
module MultiAR
|
9
9
|
|
10
|
-
# Base of
|
10
|
+
# Base of MultiAR gem.
|
11
11
|
#
|
12
|
-
# Must be initialized before most actions works, that relies on
|
12
|
+
# Must be initialized before most actions works, that relies on MultiAR#app for getting configuration.
|
13
13
|
class MultiAR
|
14
14
|
|
15
15
|
attr_reader :databases
|
16
16
|
attr_reader :db_config
|
17
17
|
attr_reader :environment
|
18
18
|
|
19
|
+
@@migration_dirs = []
|
20
|
+
|
19
21
|
class << self
|
20
22
|
# Instance of MultiAR::MultiAR, automatically assigned by MultiAR::MultiAR#new.
|
21
23
|
# Used internally in the gem, to access configuration and other internal parts.
|
@@ -24,7 +26,7 @@ module MultiAR
|
|
24
26
|
|
25
27
|
# @param databases array of available databases
|
26
28
|
# @todo config file is overriding parameters passed here... I think it should be other way around, but need more custom logic for that :/
|
27
|
-
def initialize databases:, environment: "development", config: "config/multi_ar.yaml", db_config: "config/database.yaml", common_migrations: true
|
29
|
+
def initialize databases:, environment: "development", config: "config/multi_ar.yaml", db_config: "config/database.yaml", common_migrations: true
|
28
30
|
|
29
31
|
# first load config
|
30
32
|
if File.exist? config
|
@@ -44,25 +46,44 @@ module MultiAR
|
|
44
46
|
@db_config = db_config
|
45
47
|
@environment = environment
|
46
48
|
|
47
|
-
Database.initialize db_config: db_config
|
49
|
+
Database.initialize db_config: db_config
|
48
50
|
|
49
51
|
ActiveRecord::Tasks::DatabaseTasks.class_eval { attr_accessor :sub_db_dir }
|
50
52
|
ActiveRecord::Tasks::DatabaseTasks.sub_db_dir = databases.first # TODO: I don’t think this is how it should work
|
51
53
|
|
52
|
-
@rake = Rake::Application.new
|
53
|
-
Rake.application = @rake
|
54
|
+
@rake = ::Rake::Application.new
|
55
|
+
::Rake.application = @rake
|
54
56
|
@rake.init
|
55
|
-
Rake::TaskManager.record_task_metadata = true
|
57
|
+
::Rake::TaskManager.record_task_metadata = true
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
RakeTasks.define
|
59
|
+
Rake::Tasks.databases = databases
|
60
|
+
Rake::Tasks.environment = environment
|
61
|
+
Rake::Tasks.common_migrations = common_migrations
|
62
|
+
Rake::Tasks.define
|
62
63
|
|
63
64
|
MultiAR.app = self
|
64
65
|
end
|
65
66
|
|
67
|
+
# Array of paths to directories where migrations resides.
|
68
|
+
# @see add_migration_dir
|
69
|
+
def self.migration_dirs
|
70
|
+
return @@migration_dirs
|
71
|
+
end
|
72
|
+
|
73
|
+
# Add a path to a directory where migrations resides. For standard Rails setup, this would be “db/migrate”.
|
74
|
+
#
|
75
|
+
# The directory structure of how MultiAR uses the path is a bit different from traditional way: for each
|
76
|
+
# database, there is directory inside the migration dir.
|
77
|
+
#
|
78
|
+
# For example, if project uses database named “messy_database” and migration dir is “my/migration/dir”,
|
79
|
+
# migrations would be looked from path “my/migration/dir/messy_database”.
|
80
|
+
#
|
81
|
+
# @note often you want to add full path to this dir, `__dir__` is useful for this.
|
82
|
+
def self.add_migration_dir path
|
83
|
+
raise "Migration dir #{path} does not exist." unless Dir.exist? path
|
84
|
+
@@migration_dirs << path
|
85
|
+
end
|
86
|
+
|
66
87
|
# @todo this shows rake in start of the command, we want to show multi_ar instead.
|
67
88
|
def list_tasks all_rake_tasks: false
|
68
89
|
@rake.options.show_all_tasks = true if all_rake_tasks
|
@@ -71,6 +92,7 @@ module MultiAR
|
|
71
92
|
@rake.display_tasks_and_comments
|
72
93
|
end
|
73
94
|
|
95
|
+
# Invokes Rake task from `task_name`
|
74
96
|
def rake_task task_name
|
75
97
|
@rake.invoke_task task_name
|
76
98
|
end
|
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: 1.0.0.pre.
|
4
|
+
version: 1.0.0.pre.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samu Voutilainen
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
Ws73WZ+F+DOnfopIMUaeYUzKyUG+59p17ls//xzTouiLjcC9ee5ZaC9e+TzYsp4t
|
30
30
|
ofnwRrqEHVW+zRWs/VIwm70F2Jnl5eSc3MjyhpWIC0eGFXtBY1XYCrHeCdQ=
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2015-10-
|
32
|
+
date: 2015-10-06 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: trollop
|
@@ -141,16 +141,14 @@ description: |-
|
|
141
141
|
email: smar@smar.fi
|
142
142
|
executables:
|
143
143
|
- multi_ar
|
144
|
-
- mar
|
145
144
|
extensions: []
|
146
145
|
extra_rdoc_files: []
|
147
146
|
files:
|
148
|
-
- bin/mar
|
149
147
|
- bin/multi_ar
|
150
148
|
- lib/multi_ar.rb
|
151
149
|
- lib/multi_ar/database.rb
|
152
150
|
- lib/multi_ar/interface.rb
|
153
|
-
- lib/multi_ar/
|
151
|
+
- lib/multi_ar/model.rb
|
154
152
|
- lib/multi_ar/rake/ext.rb
|
155
153
|
- lib/multi_ar/rake/migration_generator.rb
|
156
154
|
- lib/multi_ar/rake/tasks.rb
|
@@ -175,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
173
|
version: 1.3.1
|
176
174
|
requirements: []
|
177
175
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.4.
|
176
|
+
rubygems_version: 2.4.8
|
179
177
|
signing_key:
|
180
178
|
specification_version: 4
|
181
179
|
summary: Multi database migrations and utilities for ActiveRecord
|
metadata.gz.sig
CHANGED
Binary file
|
data/bin/mar
DELETED