sequel-rake-tasks 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sequel_rake_tasks.rb +79 -76
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7b2c0db8889e2a81ba874b93ec497d2754d6ad3
4
- data.tar.gz: 691df9fe73570b494e81fd80f7ca55fd8debe15b
3
+ metadata.gz: b214379f62b5bfc4bd7d16cdf8df633f55bda179
4
+ data.tar.gz: 4b6231426549c6cb1d6f11157eb604e4bb9faec0
5
5
  SHA512:
6
- metadata.gz: ef62b4fd49ec44e95bda69fa2bdaa0235403ae48b3c626198c062293eed3d70dfb81fe471848fbf48e370b5470185fc623392359044b414c820a97592cdd0065
7
- data.tar.gz: e60428cabf7dfc916194646b2dc4cca60fb5a75bbd44145d74a2cfeed7bbe91bfcaf58148eb88be536b0a20767eaff1e0501d02b1161e7810d4e002e2b48b3f6
6
+ metadata.gz: e7fbd79ead48fa9b288aa593c9418724ffd2b3241ec7c1014c857a6877a32247235b4aac1d503dbba507661d1653735820dc5b4320bb40dc33894fcfc3971d0a
7
+ data.tar.gz: d10bc73755382ac2ba6b53d3fa4b045be0265a1c596d73f1a0c88c86be268766cbb35506ffce3a353fdaf46661caa8fb81f80aa04a5336e42171e240f6b1cac8
@@ -9,42 +9,33 @@ module Sequel
9
9
  class RakeTasks < ::Rake::TaskLib
10
10
  include ::Rake::DSL if defined?(::Rake::DSL)
11
11
 
12
- attr_reader :connection,
13
- :connection_config,
14
- :migrator_klass,
15
- :migrations_dir,
16
- :migrations_opts,
17
- :schema_file,
18
- :seed_file,
19
- :structure_file
20
-
21
12
  def initialize(options)
22
- @connection = options[:connection]
23
- @connection_config = options[:connection_config]
24
- @migrator_klass = options[:migrator]
25
- @migrations_dir = options[:migrations_dir]
26
- @migrations_opts = options[:migrations_opts]
27
- @schema_file = options[:schema_file]
28
- @seed_file = options[:seed_file]
29
- @structure_file = options[:structure_file]
13
+ @options = options
30
14
  define_tasks
31
15
  end
32
16
 
17
+ private
18
+
33
19
  def db_commands
34
- @db_commands ||= MysqlDbCommands.new(connection_config)
20
+ assert_option(:connection_config) do |connection_config|
21
+ MysqlDbCommands.new(connection_config)
22
+ end
35
23
  end
36
24
 
37
- def migrator
38
- @migrator ||= begin
39
- args = [connection, migrations_dir]
40
- args << migrations_opts if migrations_opts
41
- migrator_klass.new(*args)
25
+ def assert_option(option, &block)
26
+ if value = get_option(option)
27
+ yield value
28
+ else
29
+ raise "`#{option}` option not defined!"
42
30
  end
43
31
  end
44
32
 
33
+ def get_option(option)
34
+ @options[option]
35
+ end
36
+
45
37
  def define_tasks
46
38
  namespace :db do
47
-
48
39
  desc 'Setup the database.'
49
40
  task :setup => [:create, :migrate]
50
41
 
@@ -52,7 +43,7 @@ module Sequel
52
43
  task :reset => [:drop, :setup]
53
44
 
54
45
  desc 'Create the database.'
55
- task :create do |t, args|
46
+ task :create do
56
47
  db_commands.create_database
57
48
  end
58
49
 
@@ -61,67 +52,96 @@ module Sequel
61
52
  db_commands.drop_database
62
53
  end
63
54
 
64
- desc 'Load the seeds'
55
+ desc 'Load the seeds.'
65
56
  task :seed do
66
- load(seed_file)
57
+ assert_option(:seed_file) do |seed_file|
58
+ load(seed_file)
59
+ end
67
60
  end
68
61
 
69
62
  desc 'Migrate the database.'
70
63
  task :migrate do
71
- migrator.run
72
- Rake::Task['db:schema:dump'].invoke
64
+ assert_option(:migrator) do |migrator_klass|
65
+ assert_option(:migrations_dir) do |migrations_dir|
66
+ db_commands.migrate(migrator_klass, migrations_dir, get_option(:migrations_opts))
67
+ Rake::Task['db:schema:dump'].invoke if get_option(:schema_file)
68
+ end
69
+ end
73
70
  end
74
71
 
75
72
  namespace :schema do
76
-
77
73
  desc 'Dump the current database schema as a migration.'
78
74
  task :dump do
79
- connection.extension :schema_dumper
80
- text = connection.dump_schema_migration(same_db: false)
81
- text = text.gsub(/ +$/, '') # remove trailing whitespace
82
- File.open(schema_file, 'w') { |f| f.write(text) }
75
+ assert_option(:schema_file) do |schema_file|
76
+ db_commands.dump_schema(schema_file)
77
+ end
83
78
  end
84
79
 
85
80
  desc 'Loads the schema_file into the current environment\'s database'
86
81
  task :load do
87
- eval(File.read schema_file).apply(connection, :up)
82
+ assert_option(:schema_file) do |schema_file|
83
+ db_commands.load_schema(schema_file)
84
+ end
88
85
  end
89
86
  end
90
87
 
91
88
  namespace :structure do
92
-
93
89
  desc 'Load the database structure file'
94
90
  task :load do
95
- raise '`structure_file` option not defined!' unless structure_file
96
- db_commands.load_sql_file(structure_file)
91
+ assert_option(:structure_file) do |structure_file|
92
+ db_commands.load_sql_file(structure_file)
93
+ end
97
94
  end
98
-
99
95
  end
100
-
101
96
  end
102
97
  end
103
-
104
98
  end
105
99
 
106
100
  class MysqlDbCommands
107
-
108
101
  def initialize(connection_config)
109
102
  @connection_config = connection_config
110
103
  end
111
104
 
112
105
  def drop_database
113
- execute("DROP DATABASE IF EXISTS `#{database_name}`")
106
+ with_master_connection do |connection|
107
+ connection.execute("DROP DATABASE IF EXISTS `#{database_name}`")
108
+ end
114
109
  end
115
110
 
116
111
  def create_database
117
- execute("CREATE DATABASE IF NOT EXISTS `#{database_name}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
112
+ with_master_connection do |connection|
113
+ connection.execute("CREATE DATABASE IF NOT EXISTS `#{database_name}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
114
+ end
118
115
  end
119
116
 
120
117
  def load_sql_file(filename)
121
- commands = base_commands
122
- commands << '--execute' << %{SET FOREIGN_KEY_CHECKS = 0; SOURCE #{filename}; SET FOREIGN_KEY_CHECKS = 1}
123
- commands << '--database' << database_name
124
- system(*commands)
118
+ with_database_connection do |connection|
119
+ connection.execute("SET FOREIGN_KEY_CHECKS = 0; SOURCE #{filename}; SET FOREIGN_KEY_CHECKS = 1")
120
+ end
121
+ end
122
+
123
+ def load_schema(schema_file)
124
+ with_database_connection do |connection|
125
+ eval(File.read schema_file).apply(connection, :up)
126
+ end
127
+ end
128
+
129
+ def dump_schema(schema_file)
130
+ with_database_connection do |connection|
131
+ connection.extension :schema_dumper
132
+ text = connection.dump_schema_migration(same_db: false)
133
+ text = text.gsub(/ +$/, '') # remove trailing whitespace
134
+ File.open(schema_file, 'w') { |f| f.write(text) }
135
+ end
136
+ end
137
+
138
+ def migrate(migrator_klass, migrations_dir, migrations_opts)
139
+ with_database_connection do |connection|
140
+ args = [connection, migrations_dir]
141
+ args << migrations_opts if migrations_opts
142
+ migrator = migrator_klass.new(*args)
143
+ migrator.run
144
+ end
125
145
  end
126
146
 
127
147
  private
@@ -136,21 +156,6 @@ module Sequel
136
156
  connection_config[:username]
137
157
  end
138
158
 
139
- def password
140
- connection_config[:password]
141
- end
142
-
143
- def host
144
- end
145
-
146
- def host
147
- connection_config[:host]
148
- end
149
-
150
- def port
151
- connection_config[:port]
152
- end
153
-
154
159
  def charset
155
160
  connection_config[:charset] || 'utf8'
156
161
  end
@@ -159,23 +164,21 @@ module Sequel
159
164
  connection_config[:collation] || 'utf8_unicode_ci'
160
165
  end
161
166
 
162
- def execute(statement)
163
- commands = base_commands
164
- commands << '-e' << statement
165
- system(*commands)
167
+ def with_database_connection(&block)
168
+ with_connection(connection_config, &block)
166
169
  end
167
170
 
168
- def base_commands
169
- commands = %w(mysql)
170
- commands << "--user=#{Shellwords.escape(username)}" unless blank?(username)
171
- commands << "--password=#{Shellwords.escape(password)}" unless blank?(password)
172
- commands << "--host=#{host}" unless blank?(host)
173
- commands
171
+ def with_master_connection(&block)
172
+ with_connection(connection_config.reject { |key, value| key.to_s == "database" }, &block)
174
173
  end
175
174
 
176
- def blank?(str)
177
- str.nil? || str.strip == ""
175
+ def with_connection(config, &block)
176
+ connection = Sequel.connect(config)
177
+ begin
178
+ yield connection
179
+ ensure
180
+ connection.disconnect
181
+ end
178
182
  end
179
-
180
183
  end
181
184
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-rake-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Myles Megyesi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-16 00:00:00.000000000 Z
12
+ date: 2018-03-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  version: '0'
68
68
  requirements: []
69
69
  rubyforge_project:
70
- rubygems_version: 2.2.2
70
+ rubygems_version: 2.6.14
71
71
  signing_key:
72
72
  specification_version: 4
73
73
  summary: Rake tasks for Sequel