ardb 0.27.3 → 0.28.0

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/ardb.gemspec +3 -4
  4. data/lib/ardb.rb +135 -68
  5. data/lib/ardb/adapter/base.rb +39 -24
  6. data/lib/ardb/adapter/mysql.rb +1 -2
  7. data/lib/ardb/adapter/postgresql.rb +14 -12
  8. data/lib/ardb/adapter/sqlite.rb +3 -8
  9. data/lib/ardb/adapter_spy.rb +67 -87
  10. data/lib/ardb/cli.rb +11 -219
  11. data/lib/ardb/{clirb.rb → cli/clirb.rb} +2 -1
  12. data/lib/ardb/cli/commands.rb +275 -0
  13. data/lib/ardb/migration.rb +8 -6
  14. data/lib/ardb/migration_helpers.rb +1 -1
  15. data/lib/ardb/pg_json.rb +90 -0
  16. data/lib/ardb/version.rb +1 -1
  17. data/test/helper.rb +15 -3
  18. data/test/support/factory.rb +15 -0
  19. data/test/support/fake_schema.rb +5 -0
  20. data/test/support/postgresql/migrations/.gitkeep +0 -0
  21. data/test/support/postgresql/pg_json_migrations/20160519133432_create_pg_json_migrate_test.rb +13 -0
  22. data/test/support/postgresql/schema.rb +3 -0
  23. data/test/support/postgresql/setup_test_db.rb +51 -0
  24. data/test/support/relative_require_test_db_file.rb +2 -0
  25. data/test/support/require_test_db_file.rb +1 -0
  26. data/test/system/pg_json_tests.rb +85 -0
  27. data/test/unit/adapter/base_tests.rb +104 -39
  28. data/test/unit/adapter/mysql_tests.rb +2 -1
  29. data/test/unit/adapter/postgresql_tests.rb +10 -9
  30. data/test/unit/adapter/sqlite_tests.rb +8 -3
  31. data/test/unit/adapter_spy_tests.rb +57 -66
  32. data/test/unit/ardb_tests.rb +323 -36
  33. data/test/unit/cli_tests.rb +193 -146
  34. data/test/unit/has_slug_tests.rb +9 -9
  35. data/test/unit/migration_helpers_tests.rb +18 -12
  36. data/test/unit/migration_tests.rb +18 -11
  37. data/test/unit/pg_json_tests.rb +39 -0
  38. data/test/unit/record_spy_tests.rb +1 -1
  39. data/test/unit/test_helpers_tests.rb +2 -6
  40. data/test/unit/use_db_default_tests.rb +2 -2
  41. metadata +29 -34
  42. data/lib/ardb/root_path.rb +0 -15
  43. data/test/unit/config_tests.rb +0 -58
@@ -1,18 +1,13 @@
1
- require 'pathname'
2
1
  require 'fileutils'
3
2
  require 'ardb'
4
3
  require 'ardb/adapter/base'
5
4
 
6
- class Ardb::Adapter
5
+ module Ardb::Adapter
7
6
 
8
7
  class Sqlite < Base
9
8
 
10
9
  def db_file_path
11
- if (path = Pathname.new(self.database)).absolute?
12
- path.to_s
13
- else
14
- Ardb.config.root_path.join(path).to_s
15
- end
10
+ File.expand_path(self.database, self.config.root_path)
16
11
  end
17
12
 
18
13
  def validate!
@@ -24,7 +19,7 @@ class Ardb::Adapter
24
19
  def create_db
25
20
  validate!
26
21
  FileUtils.mkdir_p File.dirname(self.db_file_path)
27
- ActiveRecord::Base.establish_connection(self.config_settings)
22
+ ActiveRecord::Base.establish_connection(self.connect_hash)
28
23
  end
29
24
 
30
25
  def drop_db
@@ -1,112 +1,92 @@
1
- require 'much-plugin'
1
+ require 'ardb'
2
+ require 'ardb/adapter/base'
2
3
 
3
4
  module Ardb
4
5
 
5
- module AdapterSpy
6
- include MuchPlugin
7
-
8
- def self.new(&block)
9
- block ||= proc{ }
10
- record_spy = Class.new{ include Ardb::AdapterSpy }
11
- record_spy.class_eval(&block)
12
- record_spy
6
+ class AdapterSpy < Ardb::Adapter::Base
7
+
8
+ attr_accessor :drop_tables_called_count
9
+ attr_accessor :dump_schema_called_count, :load_schema_called_count
10
+ attr_accessor :drop_db_called_count, :create_db_called_count
11
+ attr_accessor :connect_db_called_count, :migrate_db_called_count
12
+
13
+ def initialize(config = nil)
14
+ super(config || Ardb::Config.new)
15
+ @drop_tables_called_count = 0
16
+ @dump_schema_called_count = 0
17
+ @load_schema_called_count = 0
18
+ @drop_db_called_count = 0
19
+ @create_db_called_count = 0
20
+ @connect_db_called_count = 0
21
+ @migrate_db_called_count = 0
13
22
  end
14
23
 
15
- plugin_included do
16
- include InstanceMethods
24
+ def create_db_called?
25
+ self.create_db_called_count > 0
17
26
  end
18
27
 
19
- module InstanceMethods
20
-
21
- attr_accessor :drop_tables_called_count
22
- attr_accessor :dump_schema_called_count, :load_schema_called_count
23
- attr_accessor :drop_db_called_count, :create_db_called_count
24
- attr_accessor :connect_db_called_count, :migrate_db_called_count
25
-
26
- def drop_tables_called_count
27
- @drop_tables_called_count ||= 0
28
- end
29
-
30
- def drop_tables_called?
31
- self.drop_tables_called_count > 0
32
- end
33
-
34
- def drop_tables(*args, &block)
35
- self.drop_tables_called_count += 1
36
- end
37
-
38
- def dump_schema_called_count
39
- @dump_schema_called_count ||= 0
40
- end
41
-
42
- def dump_schema_called?
43
- self.dump_schema_called_count > 0
44
- end
45
-
46
- def dump_schema(*args, &block)
47
- self.dump_schema_called_count += 1
48
- end
49
-
50
- def load_schema_called_count
51
- @load_schema_called_count ||= 0
52
- end
28
+ def drop_db_called?
29
+ self.drop_db_called_count > 0
30
+ end
53
31
 
54
- def load_schema_called?
55
- self.load_schema_called_count > 0
56
- end
32
+ def drop_tables_called?
33
+ self.drop_tables_called_count > 0
34
+ end
57
35
 
58
- def load_schema(*args, &block)
59
- self.load_schema_called_count += 1
60
- end
36
+ def connect_db_called?
37
+ self.connect_db_called_count > 0
38
+ end
61
39
 
62
- def drop_db_called_count
63
- @drop_db_called_count ||= 0
64
- end
40
+ def migrate_db_called?
41
+ self.migrate_db_called_count > 0
42
+ end
65
43
 
66
- def drop_db_called?
67
- self.drop_db_called_count > 0
68
- end
44
+ def load_schema_called?
45
+ self.load_schema_called_count > 0
46
+ end
69
47
 
70
- def drop_db(*args, &block)
71
- self.drop_db_called_count += 1
72
- end
48
+ def dump_schema_called?
49
+ self.dump_schema_called_count > 0
50
+ end
73
51
 
74
- def create_db_called_count
75
- @create_db_called_count ||= 0
76
- end
52
+ # Overwritten `Adapter::Base` methods
77
53
 
78
- def create_db_called?
79
- self.create_db_called_count > 0
80
- end
54
+ def foreign_key_add_sql
55
+ "FAKE ADD FOREIGN KEY SQL :from_table :from_column " \
56
+ ":to_table :to_column :name"
57
+ end
81
58
 
82
- def create_db(*args, &block)
83
- self.create_db_called_count += 1
84
- end
59
+ def foreign_key_drop_sql
60
+ "FAKE DROP FOREIGN KEY SQL :from_table :from_column " \
61
+ ":to_table :to_column :name"
62
+ end
85
63
 
86
- def connect_db_called_count
87
- @connect_db_called_count ||= 0
88
- end
64
+ def create_db(*args, &block)
65
+ self.create_db_called_count += 1
66
+ end
89
67
 
90
- def connect_db_called?
91
- self.connect_db_called_count > 0
92
- end
68
+ def drop_db(*args, &block)
69
+ self.drop_db_called_count += 1
70
+ end
93
71
 
94
- def connect_db(*args, &block)
95
- self.connect_db_called_count += 1
96
- end
72
+ def drop_tables(*args, &block)
73
+ self.drop_tables_called_count += 1
74
+ end
97
75
 
98
- def migrate_db_called_count
99
- @migrate_db_called_count ||= 0
100
- end
76
+ def connect_db(*args, &block)
77
+ self.connect_db_called_count += 1
78
+ end
101
79
 
102
- def migrate_db_called?
103
- self.migrate_db_called_count > 0
104
- end
80
+ def migrate_db(*args, &block)
81
+ self.migrate_db_called_count += 1
82
+ end
105
83
 
106
- def migrate_db(*args, &block)
107
- self.migrate_db_called_count += 1
108
- end
84
+ def load_schema(*args, &block)
85
+ self.load_schema_called_count += 1
86
+ end
109
87
 
88
+ def dump_schema(*args, &block)
89
+ self.dump_schema_called_count += 1
110
90
  end
111
91
 
112
92
  end
@@ -1,22 +1,17 @@
1
- require 'ardb'
2
- require 'ardb/clirb'
1
+ require 'ardb/cli/clirb'
2
+ require 'ardb/cli/commands'
3
+ require 'ardb/version'
3
4
 
4
5
  module Ardb
5
6
 
6
7
  class CLI
7
8
 
8
- class InvalidCommand; end
9
- class ConnectCommand; end
10
- class CreateCommand; end
11
- class DropCommand; end
12
- class MigrateCommand; end
13
- class GenerateMigrationCommand; end
14
- COMMANDS = Hash.new{ |h, k| InvalidCommand.new(k) }.tap do |h|
15
- h['connect'] = ConnectCommand
16
- h['create'] = CreateCommand
17
- h['drop'] = DropCommand
18
- h['migrate'] = MigrateCommand
19
- h['generate-migration'] = GenerateMigrationCommand
9
+ COMMANDS = CommandSet.new{ |unknown| InvalidCommand.new(unknown) }.tap do |c|
10
+ c.add(ConnectCommand, 'connect')
11
+ c.add(CreateCommand, 'create')
12
+ c.add(DropCommand, 'drop')
13
+ c.add(MigrateCommand, 'migrate')
14
+ c.add(GenerateMigrationCommand, 'generate-migration')
20
15
  end
21
16
 
22
17
  def self.run(args)
@@ -32,11 +27,10 @@ module Ardb
32
27
  def run(args)
33
28
  begin
34
29
  $LOAD_PATH.push(Dir.pwd) unless $LOAD_PATH.include?(Dir.pwd)
35
- Ardb.init(false) # don't establish a connection
36
30
 
37
31
  cmd_name = args.shift
38
- cmd = COMMANDS[cmd_name].new(args)
39
- cmd.run
32
+ cmd = COMMANDS[cmd_name]
33
+ cmd.run(args)
40
34
  rescue CLIRB::HelpExit
41
35
  @stdout.puts cmd.help
42
36
  rescue CLIRB::VersionExit
@@ -65,208 +59,6 @@ module Ardb
65
59
  end
66
60
  end
67
61
 
68
- InvalidCommandError = Class.new(ArgumentError)
69
- CommandExitError = Class.new(RuntimeError)
70
-
71
- class InvalidCommand
72
-
73
- attr_reader :name, :argv, :clirb
74
-
75
- def initialize(name)
76
- @name = name
77
- @argv = []
78
- @clirb = Ardb::CLIRB.new
79
- end
80
-
81
- def new(args)
82
- @argv = [@name, args].flatten.compact
83
- self
84
- end
85
-
86
- def run
87
- @clirb.parse!(@argv)
88
- raise CLIRB::HelpExit if @clirb.args.empty? || @name.to_s.empty?
89
- raise InvalidCommandError, "'#{self.name}' is not a command."
90
- end
91
-
92
- def help
93
- "Usage: ardb [COMMAND] [options]\n\n" \
94
- "Commands: #{COMMANDS.keys.sort.join(', ')}\n" \
95
- "Options: #{@clirb}"
96
- end
97
-
98
- end
99
-
100
- class ConnectCommand
101
-
102
- attr_reader :clirb
103
-
104
- def initialize(argv, stdout = nil, stderr = nil)
105
- @argv = argv
106
- @stdout = stdout || $stdout
107
- @stderr = stderr || $stderr
108
-
109
- @clirb = Ardb::CLIRB.new
110
- @adapter = Ardb::Adapter.send(Ardb.config.db.adapter)
111
- end
112
-
113
- def run
114
- @clirb.parse!(@argv)
115
- begin
116
- Ardb.init
117
- @adapter.connect_db
118
- @stdout.puts "connected to #{Ardb.config.db.adapter} db `#{Ardb.config.db.database}`"
119
- rescue StandardError => e
120
- @stderr.puts e
121
- @stderr.puts e.backtrace.join("\n")
122
- @stderr.puts "error connecting to #{Ardb.config.db.database.inspect} database " \
123
- "with #{Ardb.config.db_settings.inspect}"
124
- raise CommandExitError
125
- end
126
- end
127
-
128
- def help
129
- "Usage: ardb connect [options]\n\n" \
130
- "Options: #{@clirb}"
131
- end
132
-
133
- end
134
-
135
- class CreateCommand
136
-
137
- attr_reader :clirb
138
-
139
- def initialize(argv, stdout = nil, stderr = nil)
140
- @argv = argv
141
- @stdout = stdout || $stdout
142
- @stderr = stderr || $stderr
143
-
144
- @clirb = Ardb::CLIRB.new
145
- @adapter = Ardb::Adapter.send(Ardb.config.db.adapter)
146
- end
147
-
148
- def run
149
- @clirb.parse!(@argv)
150
- begin
151
- @adapter.create_db
152
- @stdout.puts "created #{Ardb.config.db.adapter} db `#{Ardb.config.db.database}`"
153
- rescue StandardError => e
154
- @stderr.puts e
155
- @stderr.puts "error creating #{Ardb.config.db.database.inspect} database"
156
- raise CommandExitError
157
- end
158
- end
159
-
160
- def help
161
- "Usage: ardb create [options]\n\n" \
162
- "Options: #{@clirb}"
163
- end
164
-
165
- end
166
-
167
- class DropCommand
168
-
169
- attr_reader :clirb
170
-
171
- def initialize(argv, stdout = nil, stderr = nil)
172
- @argv = argv
173
- @stdout = stdout || $stdout
174
- @stderr = stderr || $stderr
175
-
176
- @clirb = Ardb::CLIRB.new
177
- @adapter = Ardb::Adapter.send(Ardb.config.db.adapter)
178
- end
179
-
180
- def run
181
- @clirb.parse!(@argv)
182
- begin
183
- @adapter.drop_db
184
- @stdout.puts "dropped #{Ardb.config.db.adapter} db `#{Ardb.config.db.database}`"
185
- rescue StandardError => e
186
- @stderr.puts e
187
- @stderr.puts "error dropping #{Ardb.config.db.database.inspect} database"
188
- raise CommandExitError
189
- end
190
- end
191
-
192
- def help
193
- "Usage: ardb drop [options]\n\n" \
194
- "Options: #{@clirb}"
195
- end
196
-
197
- end
198
-
199
- class MigrateCommand
200
-
201
- attr_reader :clirb
202
-
203
- def initialize(argv, stdout = nil, stderr = nil)
204
- @argv = argv
205
- @stdout = stdout || $stdout
206
- @stderr = stderr || $stderr
207
-
208
- @clirb = Ardb::CLIRB.new
209
- @adapter = Ardb::Adapter.send(Ardb.config.db.adapter)
210
- end
211
-
212
- def run
213
- @clirb.parse!(@argv)
214
- begin
215
- Ardb.init
216
- @adapter.migrate_db
217
- @adapter.dump_schema unless ENV['ARDB_MIGRATE_NO_SCHEMA']
218
- rescue StandardError => e
219
- @stderr.puts e
220
- @stderr.puts e.backtrace.join("\n")
221
- @stderr.puts "error migrating #{Ardb.config.db.database.inspect} database"
222
- raise CommandExitError
223
- end
224
- end
225
-
226
- def help
227
- "Usage: ardb migrate [options]\n\n" \
228
- "Options: #{@clirb}"
229
- end
230
-
231
- end
232
-
233
- class GenerateMigrationCommand
234
-
235
- attr_reader :clirb
236
-
237
- def initialize(argv, stdout = nil, stderr = nil)
238
- @argv = argv
239
- @stdout = stdout || $stdout
240
- @stderr = stderr || $stderr
241
-
242
- @clirb = Ardb::CLIRB.new
243
- end
244
-
245
- def run
246
- @clirb.parse!(@argv)
247
- begin
248
- require "ardb/migration"
249
- path = Ardb::Migration.new(@clirb.args.first).save!.file_path
250
- @stdout.puts "generated #{path}"
251
- rescue Ardb::Migration::NoIdentifierError => exception
252
- error = ArgumentError.new("MIGRATION-NAME must be provided")
253
- error.set_backtrace(exception.backtrace)
254
- raise error
255
- rescue StandardError => e
256
- @stderr.puts e
257
- @stderr.puts e.backtrace.join("\n")
258
- @stderr.puts "error generating migration"
259
- raise CommandExitError
260
- end
261
- end
262
-
263
- def help
264
- "Usage: ardb generate-migration [options] MIGRATION-NAME\n\n" \
265
- "Options: #{@clirb}"
266
- end
267
-
268
- end
269
-
270
62
  end
271
63
 
272
64
  end