ardb 0.27.3 → 0.29.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 (54) hide show
  1. checksums.yaml +7 -7
  2. data/Gemfile +4 -5
  3. data/README.md +252 -3
  4. data/ardb.gemspec +8 -8
  5. data/bin/ardb +1 -1
  6. data/lib/ardb.rb +155 -72
  7. data/lib/ardb/adapter/base.rb +67 -47
  8. data/lib/ardb/adapter/mysql.rb +3 -19
  9. data/lib/ardb/adapter/postgresql.rb +33 -37
  10. data/lib/ardb/adapter/sqlite.rb +7 -16
  11. data/lib/ardb/adapter_spy.rb +58 -92
  12. data/lib/ardb/cli.rb +18 -226
  13. data/lib/ardb/{clirb.rb → cli/clirb.rb} +16 -18
  14. data/lib/ardb/cli/commands.rb +365 -0
  15. data/lib/ardb/db_tests.rb +2 -4
  16. data/lib/ardb/default_order_by.rb +3 -13
  17. data/lib/ardb/migration.rb +18 -20
  18. data/lib/ardb/record_spy.rb +7 -26
  19. data/lib/ardb/relation_spy.rb +0 -6
  20. data/lib/ardb/require_autoloaded_active_record_files.rb +103 -58
  21. data/lib/ardb/test_helpers.rb +2 -5
  22. data/lib/ardb/use_db_default.rb +4 -15
  23. data/lib/ardb/version.rb +1 -1
  24. data/script/determine_autoloaded_active_record_files.rb +11 -8
  25. data/test/helper.rb +9 -6
  26. data/test/support/factory.rb +17 -2
  27. data/test/support/fake_schema.rb +5 -0
  28. data/test/support/postgresql/migrations/.keep +0 -0
  29. data/test/support/postgresql/schema.rb +2 -0
  30. data/test/support/postgresql/setup_test_db.rb +51 -0
  31. data/test/support/relative_require_test_db_file.rb +2 -0
  32. data/test/support/require_test_db_file.rb +1 -0
  33. data/test/system/.keep +0 -0
  34. data/test/unit/adapter/base_tests.rb +163 -75
  35. data/test/unit/adapter/mysql_tests.rb +4 -20
  36. data/test/unit/adapter/postgresql_tests.rb +20 -28
  37. data/test/unit/adapter/sqlite_tests.rb +9 -12
  38. data/test/unit/adapter_spy_tests.rb +48 -71
  39. data/test/unit/ardb_tests.rb +338 -38
  40. data/test/unit/cli_tests.rb +334 -225
  41. data/test/unit/db_tests_tests.rb +3 -6
  42. data/test/unit/default_order_by_tests.rb +4 -8
  43. data/test/unit/migration_tests.rb +20 -17
  44. data/test/unit/record_spy_tests.rb +18 -23
  45. data/test/unit/relation_spy_tests.rb +17 -46
  46. data/test/unit/test_helpers_tests.rb +5 -20
  47. data/test/unit/use_db_default_tests.rb +9 -13
  48. metadata +111 -100
  49. data/lib/ardb/has_slug.rb +0 -107
  50. data/lib/ardb/migration_helpers.rb +0 -77
  51. data/lib/ardb/root_path.rb +0 -15
  52. data/test/unit/config_tests.rb +0 -58
  53. data/test/unit/has_slug_tests.rb +0 -341
  54. data/test/unit/migration_helpers_tests.rb +0 -59
@@ -1,10 +1,9 @@
1
- require 'assert'
2
- require 'ardb/test_helpers'
1
+ require "assert"
2
+ require "ardb/test_helpers"
3
3
 
4
- require 'ardb/adapter_spy'
4
+ require "ardb/adapter_spy"
5
5
 
6
6
  module Ardb::TestHelpers
7
-
8
7
  class UnitTests < Assert::Context
9
8
  desc "Ardb::TestHelpers"
10
9
  subject{ Ardb::TestHelpers }
@@ -13,19 +12,13 @@ module Ardb::TestHelpers
13
12
  should have_imeths :create_db!, :create_db, :drop_db!, :drop_db
14
13
  should have_imeths :connect_db!, :connect_db, :migrate_db!, :migrate_db
15
14
  should have_imeths :reset_db, :reset_db!
16
-
17
15
  end
18
16
 
19
17
  class UsageTests < UnitTests
20
18
  setup do
21
- @adapter_spy_class = Ardb::AdapterSpy.new
22
- @orig_ardb_adapter = Ardb.adapter
23
- Ardb::Adapter.current = @adapter_spy = @adapter_spy_class.new
24
- end
25
- teardown do
26
- Ardb::Adapter.current = @orig_ardb_adapter
19
+ @adapter_spy = Ardb::AdapterSpy.new
20
+ Assert.stub(Ardb, :adapter){ @adapter_spy }
27
21
  end
28
-
29
22
  end
30
23
 
31
24
  class DropTablesTests < UsageTests
@@ -36,7 +29,6 @@ module Ardb::TestHelpers
36
29
  subject.drop_tables
37
30
  assert_equal 1, @adapter_spy.drop_tables_called_count
38
31
  end
39
-
40
32
  end
41
33
 
42
34
  class LoadSchemaTests < UsageTests
@@ -47,7 +39,6 @@ module Ardb::TestHelpers
47
39
  subject.load_schema
48
40
  assert_equal 1, @adapter_spy.load_schema_called_count
49
41
  end
50
-
51
42
  end
52
43
 
53
44
  class CreateDbTests < UsageTests
@@ -68,7 +59,6 @@ module Ardb::TestHelpers
68
59
  subject.create_db!
69
60
  assert_equal 2, @adapter_spy.create_db_called_count
70
61
  end
71
-
72
62
  end
73
63
 
74
64
  class DropDbTests < UsageTests
@@ -89,7 +79,6 @@ module Ardb::TestHelpers
89
79
  subject.drop_db!
90
80
  assert_equal 2, @adapter_spy.drop_db_called_count
91
81
  end
92
-
93
82
  end
94
83
 
95
84
  class ConnectDbTests < UsageTests
@@ -110,7 +99,6 @@ module Ardb::TestHelpers
110
99
  subject.connect_db!
111
100
  assert_equal 2, @adapter_spy.connect_db_called_count
112
101
  end
113
-
114
102
  end
115
103
 
116
104
  class MigrateDbTests < UsageTests
@@ -131,7 +119,6 @@ module Ardb::TestHelpers
131
119
  subject.migrate_db!
132
120
  assert_equal 2, @adapter_spy.migrate_db_called_count
133
121
  end
134
-
135
122
  end
136
123
 
137
124
  class ResetDbTests < UsageTests
@@ -172,7 +159,5 @@ module Ardb::TestHelpers
172
159
  assert_equal 2, @adapter_spy.create_db_called_count
173
160
  assert_equal 2, @adapter_spy.load_schema_called_count
174
161
  end
175
-
176
162
  end
177
-
178
163
  end
@@ -1,11 +1,10 @@
1
- require 'assert'
2
- require 'ardb/use_db_default'
1
+ require "assert"
2
+ require "ardb/use_db_default"
3
3
 
4
- require 'much-plugin'
5
- require 'ardb/record_spy'
4
+ require "much-plugin"
5
+ require "ardb/record_spy"
6
6
 
7
7
  module Ardb::UseDbDefault
8
-
9
8
  class UnitTests < Assert::Context
10
9
  desc "Ardb::UseDbDefault"
11
10
  setup do
@@ -27,9 +26,9 @@ module Ardb::UseDbDefault
27
26
  end
28
27
 
29
28
  should "add use db default attributes using `use_db_default`" do
30
- attr_name = Factory.string
31
- subject.use_db_default(attr_name)
32
- assert_includes attr_name, subject.ardb_use_db_default_attrs
29
+ an_attr_name = Factory.string
30
+ subject.use_db_default(an_attr_name)
31
+ assert_includes an_attr_name, subject.ardb_use_db_default_attrs
33
32
 
34
33
  attr_names = [Factory.string, Factory.string.to_sym]
35
34
  subject.use_db_default(*attr_names)
@@ -58,7 +57,6 @@ module Ardb::UseDbDefault
58
57
  exp = [:ardb_allow_db_to_default_attrs]
59
58
  assert_equal exp, callback.args
60
59
  end
61
-
62
60
  end
63
61
 
64
62
  class InitTests < UnitTests
@@ -71,13 +69,13 @@ module Ardb::UseDbDefault
71
69
 
72
70
  # simulate activerecords `@attributes` hash
73
71
  @original_attrs = @attr_names.inject({}) do |h, n|
74
- h.merge!(n => [nil, Factory.string, Factory.integer].choice)
72
+ h.merge!(n => [nil, Factory.string, Factory.integer].sample)
75
73
  end
76
74
  @original_attrs.merge!(Factory.string => Factory.string)
77
75
  @record.attributes = @original_attrs.dup
78
76
 
79
77
  # randomly pick a use-db-default attribute to be changed
80
- @record.changed_use_db_default_attrs = [@attr_names.choice]
78
+ @record.changed_use_db_default_attrs = [@attr_names.sample]
81
79
  @unchanged_attr_names = @attr_names - @record.changed_use_db_default_attrs
82
80
 
83
81
  # we should always get the record we just inserted back
@@ -132,7 +130,6 @@ module Ardb::UseDbDefault
132
130
  assert_equal @original_attrs[name], subject.attributes[name]
133
131
  end
134
132
  end
135
-
136
133
  end
137
134
 
138
135
  module UseDbDefaultRecordSpy
@@ -156,5 +153,4 @@ module Ardb::UseDbDefault
156
153
  end
157
154
  end
158
155
  end
159
-
160
156
  end
metadata CHANGED
@@ -1,88 +1,108 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ardb
3
- version: !ruby/object:Gem::Version
4
- version: 0.27.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.29.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Kelly Redding
8
8
  - Collin Redding
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2016-04-07 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2020-12-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: assert
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ~>
21
- - !ruby/object:Gem::Version
22
- version: 2.15.1
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 2.18.1
23
21
  type: :development
24
- version_requirements: *id001
25
- - !ruby/object:Gem::Dependency
26
- name: activerecord
27
22
  prerelease: false
28
- requirement: &id002 !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ~>
31
- - &id003 !ruby/object:Gem::Version
32
- version: "3.2"
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 2.18.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: activerecord
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">"
33
+ - !ruby/object:Gem::Version
34
+ version: '5.0'
35
+ - - "<"
36
+ - !ruby/object:Gem::Version
37
+ version: '7.0'
33
38
  type: :runtime
34
- version_requirements: *id002
35
- - !ruby/object:Gem::Dependency
36
- name: activesupport
37
39
  prerelease: false
38
- requirement: &id004 !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ~>
41
- - *id003
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">"
43
+ - !ruby/object:Gem::Version
44
+ version: '5.0'
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '7.0'
48
+ - !ruby/object:Gem::Dependency
49
+ name: activesupport
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - - "<"
56
+ - !ruby/object:Gem::Version
57
+ version: '7.0'
42
58
  type: :runtime
43
- version_requirements: *id004
44
- - !ruby/object:Gem::Dependency
45
- name: much-plugin
46
59
  prerelease: false
47
- requirement: &id005 !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ~>
50
- - !ruby/object:Gem::Version
51
- version: 0.1.0
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">"
63
+ - !ruby/object:Gem::Version
64
+ version: '5.0'
65
+ - - "<"
66
+ - !ruby/object:Gem::Version
67
+ version: '7.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: much-plugin
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.2.1
52
75
  type: :runtime
53
- version_requirements: *id005
54
- - !ruby/object:Gem::Dependency
55
- name: ns-options
56
76
  prerelease: false
57
- requirement: &id006 !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 1.1.6
62
- type: :runtime
63
- version_requirements: *id006
64
- - !ruby/object:Gem::Dependency
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.2.1
82
+ - !ruby/object:Gem::Dependency
65
83
  name: scmd
66
- prerelease: false
67
- requirement: &id007 !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ~>
70
- - !ruby/object:Gem::Version
71
- version: 3.0.1
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 3.0.3
72
89
  type: :runtime
73
- version_requirements: *id007
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 3.0.3
74
96
  description: Activerecord database tools.
75
- email:
97
+ email:
76
98
  - kelly@kellyredding.com
77
99
  - collin.redding@me.com
78
- executables:
100
+ executables:
79
101
  - ardb
80
102
  extensions: []
81
-
82
103
  extra_rdoc_files: []
83
-
84
- files:
85
- - .gitignore
104
+ files:
105
+ - ".gitignore"
86
106
  - Gemfile
87
107
  - LICENSE
88
108
  - README.md
@@ -95,16 +115,14 @@ files:
95
115
  - lib/ardb/adapter/sqlite.rb
96
116
  - lib/ardb/adapter_spy.rb
97
117
  - lib/ardb/cli.rb
98
- - lib/ardb/clirb.rb
118
+ - lib/ardb/cli/clirb.rb
119
+ - lib/ardb/cli/commands.rb
99
120
  - lib/ardb/db_tests.rb
100
121
  - lib/ardb/default_order_by.rb
101
- - lib/ardb/has_slug.rb
102
122
  - lib/ardb/migration.rb
103
- - lib/ardb/migration_helpers.rb
104
123
  - lib/ardb/record_spy.rb
105
124
  - lib/ardb/relation_spy.rb
106
125
  - lib/ardb/require_autoloaded_active_record_files.rb
107
- - lib/ardb/root_path.rb
108
126
  - lib/ardb/test_helpers.rb
109
127
  - lib/ardb/use_db_default.rb
110
128
  - lib/ardb/version.rb
@@ -112,6 +130,13 @@ files:
112
130
  - script/determine_autoloaded_active_record_files.rb
113
131
  - test/helper.rb
114
132
  - test/support/factory.rb
133
+ - test/support/fake_schema.rb
134
+ - test/support/postgresql/migrations/.keep
135
+ - test/support/postgresql/schema.rb
136
+ - test/support/postgresql/setup_test_db.rb
137
+ - test/support/relative_require_test_db_file.rb
138
+ - test/support/require_test_db_file.rb
139
+ - test/system/.keep
115
140
  - test/unit/adapter/base_tests.rb
116
141
  - test/unit/adapter/mysql_tests.rb
117
142
  - test/unit/adapter/postgresql_tests.rb
@@ -119,58 +144,47 @@ files:
119
144
  - test/unit/adapter_spy_tests.rb
120
145
  - test/unit/ardb_tests.rb
121
146
  - test/unit/cli_tests.rb
122
- - test/unit/config_tests.rb
123
147
  - test/unit/db_tests_tests.rb
124
148
  - test/unit/default_order_by_tests.rb
125
- - test/unit/has_slug_tests.rb
126
- - test/unit/migration_helpers_tests.rb
127
149
  - test/unit/migration_tests.rb
128
150
  - test/unit/record_spy_tests.rb
129
151
  - test/unit/relation_spy_tests.rb
130
152
  - test/unit/test_helpers_tests.rb
131
153
  - test/unit/use_db_default_tests.rb
132
154
  - tmp/.gitkeep
133
- - tmp/mysqltest/.gitkeep
134
- - tmp/pgtest/.gitkeep
135
- - tmp/pgtest/Gemfile
136
- - tmp/pgtest/Gemfile.lock
137
- - tmp/pgtest/config/.gitkeep
138
- - tmp/sqlitetest/.gitkeep
139
- - tmp/sqlitetest/Gemfile
140
- - tmp/sqlitetest/Gemfile.lock
141
- - tmp/sqlitetest/config/.gitkeep
142
- - tmp/testdb/config/.gitkeep
143
- - tmp/testdb/config/db.rb
144
- - tmp/testdb/fake_schema.rb
145
155
  homepage: http://github.com/redding/ardb
146
- licenses:
156
+ licenses:
147
157
  - MIT
148
158
  metadata: {}
149
-
150
159
  post_install_message:
151
160
  rdoc_options: []
152
-
153
- require_paths:
161
+ require_paths:
154
162
  - lib
155
- required_ruby_version: !ruby/object:Gem::Requirement
156
- requirements:
157
- - &id008
158
- - ">="
159
- - !ruby/object:Gem::Version
160
- version: "0"
161
- required_rubygems_version: !ruby/object:Gem::Requirement
162
- requirements:
163
- - *id008
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '2.4'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
164
173
  requirements: []
165
-
166
- rubyforge_project:
167
- rubygems_version: 2.5.1
174
+ rubygems_version: 3.1.2
168
175
  signing_key:
169
176
  specification_version: 4
170
177
  summary: Activerecord database tools.
171
- test_files:
178
+ test_files:
172
179
  - test/helper.rb
173
180
  - test/support/factory.rb
181
+ - test/support/fake_schema.rb
182
+ - test/support/postgresql/migrations/.keep
183
+ - test/support/postgresql/schema.rb
184
+ - test/support/postgresql/setup_test_db.rb
185
+ - test/support/relative_require_test_db_file.rb
186
+ - test/support/require_test_db_file.rb
187
+ - test/system/.keep
174
188
  - test/unit/adapter/base_tests.rb
175
189
  - test/unit/adapter/mysql_tests.rb
176
190
  - test/unit/adapter/postgresql_tests.rb
@@ -178,11 +192,8 @@ test_files:
178
192
  - test/unit/adapter_spy_tests.rb
179
193
  - test/unit/ardb_tests.rb
180
194
  - test/unit/cli_tests.rb
181
- - test/unit/config_tests.rb
182
195
  - test/unit/db_tests_tests.rb
183
196
  - test/unit/default_order_by_tests.rb
184
- - test/unit/has_slug_tests.rb
185
- - test/unit/migration_helpers_tests.rb
186
197
  - test/unit/migration_tests.rb
187
198
  - test/unit/record_spy_tests.rb
188
199
  - test/unit/relation_spy_tests.rb
@@ -1,107 +0,0 @@
1
- require 'much-plugin'
2
-
3
- module Ardb
4
-
5
- module HasSlug
6
- include MuchPlugin
7
-
8
- DEFAULT_ATTRIBUTE = :slug
9
- DEFAULT_PREPROCESSOR = :downcase
10
- DEFAULT_SEPARATOR = '-'.freeze
11
-
12
- plugin_included do
13
- extend ClassMethods
14
- include InstanceMethods
15
-
16
- @ardb_has_slug_configs = Hash.new{ |h, k| h[k] = {} }
17
- end
18
-
19
- module ClassMethods
20
-
21
- def has_slug(options = nil)
22
- options ||= {}
23
- raise(ArgumentError, "a source must be provided") unless options[:source]
24
-
25
- attribute = (options[:attribute] || DEFAULT_ATTRIBUTE).to_sym
26
- @ardb_has_slug_configs[attribute].merge!({
27
- :source_proc => options[:source].to_proc,
28
- :preprocessor_proc => (options[:preprocessor] || DEFAULT_PREPROCESSOR).to_proc,
29
- :separator => options[:separator] || DEFAULT_SEPARATOR,
30
- :allow_underscores => !!options[:allow_underscores]
31
- })
32
-
33
- # since the slug isn't written till an after callback we can't always
34
- # validate presence of it
35
- validates_presence_of(attribute, :on => :update)
36
-
37
- if options[:skip_unique_validation] != true
38
- validates_uniqueness_of(attribute, {
39
- :case_sensitive => true,
40
- :scope => options[:unique_scope]
41
- })
42
- end
43
-
44
- after_create :ardb_has_slug_generate_slugs
45
- after_update :ardb_has_slug_generate_slugs
46
- end
47
-
48
- def ardb_has_slug_configs
49
- @ardb_has_slug_configs
50
- end
51
-
52
- end
53
-
54
- module InstanceMethods
55
-
56
- private
57
-
58
- def reset_slug(attribute = nil)
59
- attribute ||= DEFAULT_ATTRIBUTE
60
- self.send("#{attribute}=", nil)
61
- end
62
-
63
- def ardb_has_slug_generate_slugs
64
- self.class.ardb_has_slug_configs.each do |attr_name, config|
65
- slug_source = if !self.send(attr_name) || self.send(attr_name).to_s.empty?
66
- self.instance_eval(&config[:source_proc])
67
- else
68
- self.send(attr_name)
69
- end
70
-
71
- generated_slug = Slug.new(slug_source, {
72
- :preprocessor => config[:preprocessor_proc],
73
- :separator => config[:separator],
74
- :allow_underscores => config[:allow_underscores]
75
- })
76
- next if self.send(attr_name) == generated_slug
77
- self.send("#{attr_name}=", generated_slug)
78
- self.update_column(attr_name, generated_slug)
79
- end
80
- end
81
-
82
- end
83
-
84
- module Slug
85
- def self.new(string, options = nil)
86
- options ||= {}
87
- preprocessor = options[:preprocessor]
88
- separator = options[:separator]
89
- allow_underscores = options[:allow_underscores]
90
- regexp_escaped_sep = Regexp.escape(separator)
91
-
92
- slug = preprocessor.call(string.to_s.dup)
93
- # Turn unwanted chars into the separator
94
- slug.gsub!(/[^\w#{regexp_escaped_sep}]+/, separator)
95
- # Turn underscores into the separator, unless allowing
96
- slug.gsub!(/_/, separator) unless allow_underscores
97
- # No more than one of the separator in a row.
98
- slug.gsub!(/#{regexp_escaped_sep}{2,}/, separator)
99
- # Remove leading/trailing separator.
100
- slug.gsub!(/\A#{regexp_escaped_sep}|#{regexp_escaped_sep}\z/, '')
101
- slug
102
- end
103
- end
104
-
105
- end
106
-
107
- end