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.
- checksums.yaml +7 -7
- data/Gemfile +4 -5
- data/README.md +252 -3
- data/ardb.gemspec +8 -8
- data/bin/ardb +1 -1
- data/lib/ardb.rb +155 -72
- data/lib/ardb/adapter/base.rb +67 -47
- data/lib/ardb/adapter/mysql.rb +3 -19
- data/lib/ardb/adapter/postgresql.rb +33 -37
- data/lib/ardb/adapter/sqlite.rb +7 -16
- data/lib/ardb/adapter_spy.rb +58 -92
- data/lib/ardb/cli.rb +18 -226
- data/lib/ardb/{clirb.rb → cli/clirb.rb} +16 -18
- data/lib/ardb/cli/commands.rb +365 -0
- data/lib/ardb/db_tests.rb +2 -4
- data/lib/ardb/default_order_by.rb +3 -13
- data/lib/ardb/migration.rb +18 -20
- data/lib/ardb/record_spy.rb +7 -26
- data/lib/ardb/relation_spy.rb +0 -6
- data/lib/ardb/require_autoloaded_active_record_files.rb +103 -58
- data/lib/ardb/test_helpers.rb +2 -5
- data/lib/ardb/use_db_default.rb +4 -15
- data/lib/ardb/version.rb +1 -1
- data/script/determine_autoloaded_active_record_files.rb +11 -8
- data/test/helper.rb +9 -6
- data/test/support/factory.rb +17 -2
- data/test/support/fake_schema.rb +5 -0
- data/test/support/postgresql/migrations/.keep +0 -0
- data/test/support/postgresql/schema.rb +2 -0
- data/test/support/postgresql/setup_test_db.rb +51 -0
- data/test/support/relative_require_test_db_file.rb +2 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/system/.keep +0 -0
- data/test/unit/adapter/base_tests.rb +163 -75
- data/test/unit/adapter/mysql_tests.rb +4 -20
- data/test/unit/adapter/postgresql_tests.rb +20 -28
- data/test/unit/adapter/sqlite_tests.rb +9 -12
- data/test/unit/adapter_spy_tests.rb +48 -71
- data/test/unit/ardb_tests.rb +338 -38
- data/test/unit/cli_tests.rb +334 -225
- data/test/unit/db_tests_tests.rb +3 -6
- data/test/unit/default_order_by_tests.rb +4 -8
- data/test/unit/migration_tests.rb +20 -17
- data/test/unit/record_spy_tests.rb +18 -23
- data/test/unit/relation_spy_tests.rb +17 -46
- data/test/unit/test_helpers_tests.rb +5 -20
- data/test/unit/use_db_default_tests.rb +9 -13
- metadata +111 -100
- data/lib/ardb/has_slug.rb +0 -107
- data/lib/ardb/migration_helpers.rb +0 -77
- data/lib/ardb/root_path.rb +0 -15
- data/test/unit/config_tests.rb +0 -58
- data/test/unit/has_slug_tests.rb +0 -341
- data/test/unit/migration_helpers_tests.rb +0 -59
@@ -1,10 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/test_helpers"
|
3
3
|
|
4
|
-
require
|
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
|
-
@
|
22
|
-
@
|
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
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/use_db_default"
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
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
|
-
|
31
|
-
subject.use_db_default(
|
32
|
-
assert_includes
|
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].
|
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.
|
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.
|
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
|
-
|
14
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
29
|
-
requirements:
|
30
|
-
- - ~>
|
31
|
-
-
|
32
|
-
version:
|
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
|
-
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
-
|
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
|
-
|
48
|
-
requirements:
|
49
|
-
- -
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version:
|
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
|
-
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
|
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
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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
|
-
|
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
|
-
|
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
|
-
-
|
158
|
-
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
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
|
data/lib/ardb/has_slug.rb
DELETED
@@ -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
|