sql_enum 0.4.0 → 1.0.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 +4 -4
- data/.env.local +1 -0
- data/.github/workflows/tests.yml +3 -3
- data/.gitignore +1 -0
- data/Appraisals +7 -8
- data/Dockerfile +2 -1
- data/Gemfile +2 -2
- data/Gemfile.lock +30 -24
- data/README.md +6 -0
- data/docker-compose.yml +2 -1
- data/gemfiles/rails_6.1.gemfile +2 -2
- data/gemfiles/rails_7.0.gemfile +2 -2
- data/gemfiles/{rails_5.1.gemfile → rails_7.1.gemfile} +2 -2
- data/lib/active_record/connection_adapters/abstract_mysql.rb +36 -11
- data/lib/sql_enum/class_methods.rb +6 -8
- data/lib/sql_enum/version.rb +1 -1
- data/lib/sql_enum.rb +4 -0
- data/sql_enum.gemspec +3 -2
- metadata +26 -25
- data/gemfiles/rails_5.2.gemfile +0 -7
- data/gemfiles/rails_6.0.gemfile +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 77e67bb36b77c10947ed386e5ee8d88b500e2b9e86e62a5b688747b81ad8a3e5
|
|
4
|
+
data.tar.gz: 99d61ac4776af2d3cf3f7e3c28c7ff8f931aeda99d915a29ae2578495b819b67
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 930d73715dcdb3ae76416d0600a9fe6ee7b09abaa699a1556cd6c71d88be6e39e4f8413a93c3b009485f2fb0cef63a8a202f2f9c28e2982360f2ae211fe0392d
|
|
7
|
+
data.tar.gz: 67928721dc4507edf4cf3f677041ffeb29f7c01d2f7808998ae6dc404e2b659f3e73ca05066a3b28c571654b58ce334b087c0e610c1e63fc7e9f30371871dfa8
|
data/.env.local
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
DATABASE_URL="mysql2://root:@mysql/"
|
data/.github/workflows/tests.yml
CHANGED
|
@@ -10,14 +10,14 @@ jobs:
|
|
|
10
10
|
strategy:
|
|
11
11
|
matrix:
|
|
12
12
|
ruby:
|
|
13
|
-
- '2.7'
|
|
14
13
|
- '3.0'
|
|
15
14
|
- '3.1'
|
|
16
15
|
- '3.2'
|
|
16
|
+
- '3.3'
|
|
17
17
|
rails:
|
|
18
|
-
- '6.0'
|
|
19
18
|
- '6.1'
|
|
20
|
-
|
|
19
|
+
- '7.0'
|
|
20
|
+
- '7.1'
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
|
|
23
23
|
name: RSpec (Rails ${{ matrix.rails }}) (Ruby ${{ matrix.ruby }})
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
appraise "rails-6.
|
|
2
|
-
gem "rails", "~> 6.
|
|
1
|
+
appraise "rails-6.1" do
|
|
2
|
+
gem "rails", "~> 6.1"
|
|
3
3
|
end
|
|
4
4
|
|
|
5
|
-
appraise "rails-
|
|
6
|
-
gem "rails", "~>
|
|
5
|
+
appraise "rails-7.0" do
|
|
6
|
+
gem "rails", "~> 7.0"
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# end
|
|
9
|
+
appraise "rails-7.1" do
|
|
10
|
+
gem "rails", "~> 7.1"
|
|
11
|
+
end
|
data/Dockerfile
CHANGED
|
@@ -6,4 +6,5 @@ RUN mkdir -p lib/sql_enum gemfiles
|
|
|
6
6
|
COPY lib/sql_enum/version.rb ./lib/sql_enum/
|
|
7
7
|
COPY gemfiles/*.gemfile gemfiles/
|
|
8
8
|
COPY sql_enum.gemspec Gemfile Gemfile.lock Appraisals ./
|
|
9
|
-
RUN bundle install &&
|
|
9
|
+
RUN bundle install && \
|
|
10
|
+
bundle exec appraisal install
|
data/Gemfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
source "https://
|
|
1
|
+
source "https://rubygems.org"
|
|
2
2
|
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
|
3
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
4
4
|
|
|
5
5
|
# Specify your gem's dependencies in sql_enum.gemspec
|
|
6
6
|
gemspec
|
data/Gemfile.lock
CHANGED
|
@@ -1,43 +1,48 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sql_enum (0.
|
|
5
|
-
activerecord (>= 6.
|
|
6
|
-
activesupport (>= 6.
|
|
4
|
+
sql_enum (1.0.0)
|
|
5
|
+
activerecord (>= 6.1.0)
|
|
6
|
+
activesupport (>= 6.1.0)
|
|
7
7
|
mysql2
|
|
8
8
|
|
|
9
9
|
GEM
|
|
10
|
-
remote: https://
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
activemodel (
|
|
13
|
-
activesupport (=
|
|
14
|
-
activerecord (
|
|
15
|
-
activemodel (=
|
|
16
|
-
activesupport (=
|
|
17
|
-
activesupport (
|
|
12
|
+
activemodel (7.0.8)
|
|
13
|
+
activesupport (= 7.0.8)
|
|
14
|
+
activerecord (7.0.8)
|
|
15
|
+
activemodel (= 7.0.8)
|
|
16
|
+
activesupport (= 7.0.8)
|
|
17
|
+
activesupport (7.0.8)
|
|
18
18
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
19
19
|
i18n (>= 1.6, < 2)
|
|
20
20
|
minitest (>= 5.1)
|
|
21
21
|
tzinfo (~> 2.0)
|
|
22
|
-
zeitwerk (~> 2.3)
|
|
23
22
|
appraisal (2.5.0)
|
|
24
23
|
bundler
|
|
25
24
|
rake
|
|
26
25
|
thor (>= 0.14.0)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
awesome_print (1.9.2)
|
|
27
|
+
concurrent-ruby (1.2.3)
|
|
28
|
+
debug (1.9.1)
|
|
29
|
+
irb (~> 1.10)
|
|
30
|
+
reline (>= 0.3.8)
|
|
31
31
|
diff-lcs (1.5.0)
|
|
32
32
|
i18n (1.14.1)
|
|
33
33
|
concurrent-ruby (~> 1.0)
|
|
34
|
-
io-console (0.
|
|
35
|
-
irb (1.
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
io-console (0.7.2)
|
|
35
|
+
irb (1.11.1)
|
|
36
|
+
rdoc
|
|
37
|
+
reline (>= 0.4.2)
|
|
38
|
+
minitest (5.21.2)
|
|
38
39
|
mysql2 (0.5.5)
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
psych (5.1.2)
|
|
41
|
+
stringio
|
|
42
|
+
rake (13.1.0)
|
|
43
|
+
rdoc (6.6.2)
|
|
44
|
+
psych (>= 4.0.0)
|
|
45
|
+
reline (0.4.2)
|
|
41
46
|
io-console (~> 0.5)
|
|
42
47
|
rspec (3.12.0)
|
|
43
48
|
rspec-core (~> 3.12.0)
|
|
@@ -52,10 +57,10 @@ GEM
|
|
|
52
57
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
53
58
|
rspec-support (~> 3.12.0)
|
|
54
59
|
rspec-support (3.12.1)
|
|
55
|
-
|
|
60
|
+
stringio (3.1.0)
|
|
61
|
+
thor (1.3.0)
|
|
56
62
|
tzinfo (2.0.6)
|
|
57
63
|
concurrent-ruby (~> 1.0)
|
|
58
|
-
zeitwerk (2.6.11)
|
|
59
64
|
|
|
60
65
|
PLATFORMS
|
|
61
66
|
ruby
|
|
@@ -63,6 +68,7 @@ PLATFORMS
|
|
|
63
68
|
|
|
64
69
|
DEPENDENCIES
|
|
65
70
|
appraisal
|
|
71
|
+
awesome_print
|
|
66
72
|
bundler
|
|
67
73
|
debug
|
|
68
74
|
rake (~> 13.0)
|
|
@@ -70,4 +76,4 @@ DEPENDENCIES
|
|
|
70
76
|
sql_enum!
|
|
71
77
|
|
|
72
78
|
BUNDLED WITH
|
|
73
|
-
2.
|
|
79
|
+
2.5.5
|
data/README.md
CHANGED
data/docker-compose.yml
CHANGED
|
@@ -12,12 +12,13 @@ services:
|
|
|
12
12
|
|
|
13
13
|
mysql:
|
|
14
14
|
image: mysql:5.7
|
|
15
|
+
platform: linux/amd64
|
|
15
16
|
environment:
|
|
16
17
|
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
|
17
18
|
- MYSQL_DATABASE
|
|
18
19
|
- MYSQL_USER
|
|
19
20
|
- MYSQL_PASSWORD
|
|
20
21
|
healthcheck:
|
|
21
|
-
test: ["CMD", "mysqladmin"
|
|
22
|
+
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
22
23
|
timeout: 20s
|
|
23
24
|
retries: 10
|
data/gemfiles/rails_6.1.gemfile
CHANGED
data/gemfiles/rails_7.0.gemfile
CHANGED
|
@@ -1,21 +1,46 @@
|
|
|
1
|
-
# This module fails in Rails 7.0 becuase the method being modified has been
|
|
2
|
-
# changed to a class method.
|
|
3
|
-
|
|
4
1
|
module ActiveRecord
|
|
5
2
|
module ConnectionAdapters
|
|
6
3
|
class AbstractMysqlAdapter
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
class << self
|
|
5
|
+
def register_enum_type(mapping)
|
|
6
|
+
mapping.register_type(%r(enum)i) do |sql_type|
|
|
7
|
+
Type::Enum.new(limit: sql_type.to_s.scan(/'(.*?)'/).flatten)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
# In Rails 6.1, registering the enum type is an instance method and is
|
|
13
|
+
# done on initialization, In Rails 7.0 it is a class method and
|
|
14
|
+
# the registration happens when the class is loaded. So, in Rails 6.1,
|
|
15
|
+
# we can override the `initialize_type_map` method to register the enum
|
|
16
|
+
# but in Rails 7.1, we need to call register_enum_type explicitly.
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
if SqlEnum.rails_version_match?("6.1")
|
|
19
|
+
module SqlEnumMapper
|
|
20
|
+
def initialize_type_map(m = type_map)
|
|
21
|
+
super(m)
|
|
22
|
+
AbstractMysqlAdapter.register_enum_type(m)
|
|
23
|
+
end
|
|
18
24
|
end
|
|
25
|
+
|
|
26
|
+
ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(SqlEnumMapper)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if SqlEnum.rails_version_match?("7.0")
|
|
31
|
+
[
|
|
32
|
+
ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP,
|
|
33
|
+
ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP_WITH_BOOLEAN
|
|
34
|
+
].each do |m|
|
|
35
|
+
AbstractMysqlAdapter.register_enum_type(m)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Rails 7.1 drops the TYPE_MAP_WITH_BOOLEAN constant
|
|
40
|
+
if SqlEnum.rails_version_match?("7.1")
|
|
41
|
+
AbstractMysqlAdapter.register_enum_type(
|
|
42
|
+
ActiveRecord::ConnectionAdapters::Mysql2Adapter::TYPE_MAP
|
|
43
|
+
)
|
|
19
44
|
end
|
|
20
45
|
end
|
|
21
46
|
end
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
module SqlEnum
|
|
2
2
|
module ClassMethods
|
|
3
3
|
def sql_enum(column_name, options = {})
|
|
4
|
+
# skip redefinitions
|
|
5
|
+
return if defined_enums.key?(column_name.to_s)
|
|
6
|
+
|
|
4
7
|
# Query values
|
|
5
8
|
enum_column = EnumColumn.new(table_name, column_name)
|
|
6
9
|
values_map = enum_column.values.to_h { |value| [value.to_sym, value.to_s] }
|
|
@@ -14,20 +17,15 @@ module SqlEnum
|
|
|
14
17
|
|
|
15
18
|
# Override reader to return symbols
|
|
16
19
|
type_definition = ->(subtype) { EnumType.new(attr, send(column_name.to_s.pluralize), subtype) }
|
|
17
|
-
|
|
18
|
-
when 2 # Rails 5.1, 5.2, 6.0
|
|
19
|
-
decorate_attribute_type(column_name, :enum, &type_definition)
|
|
20
|
-
else
|
|
21
|
-
decorate_attribute_type(column_name, &type_definition)
|
|
22
|
-
end
|
|
20
|
+
attribute(column_name, &type_definition)
|
|
23
21
|
|
|
24
22
|
prefix_str = format_affix(column_name, prefix, suffix: '_')
|
|
25
23
|
suffix_str = format_affix(column_name, suffix, prefix: '_')
|
|
26
24
|
|
|
27
25
|
# Fix query methods to compare symbols to symbols
|
|
28
26
|
values_map.each_value do |value|
|
|
29
|
-
method_name = "#{prefix_str}#{value}#{suffix_str}"
|
|
30
|
-
define_method(
|
|
27
|
+
method_name = "#{prefix_str}#{value}#{suffix_str}?"
|
|
28
|
+
define_method(method_name) { self[column_name] == value.to_sym }
|
|
31
29
|
end
|
|
32
30
|
end
|
|
33
31
|
|
data/lib/sql_enum/version.rb
CHANGED
data/lib/sql_enum.rb
CHANGED
data/sql_enum.gemspec
CHANGED
|
@@ -25,11 +25,12 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
26
26
|
spec.require_paths = ["lib"]
|
|
27
27
|
|
|
28
|
-
spec.add_dependency "activesupport", ">= 6.0", "< 7.0"
|
|
29
|
-
spec.add_dependency "activerecord", ">= 6.0", "< 7.0"
|
|
30
28
|
spec.add_dependency "mysql2"
|
|
29
|
+
spec.add_dependency "activesupport", ">= 6.1.0"
|
|
30
|
+
spec.add_dependency "activerecord", ">= 6.1.0"
|
|
31
31
|
|
|
32
32
|
spec.add_development_dependency "appraisal"
|
|
33
|
+
spec.add_development_dependency "awesome_print"
|
|
33
34
|
spec.add_development_dependency "bundler"
|
|
34
35
|
spec.add_development_dependency "debug"
|
|
35
36
|
spec.add_development_dependency "rake", "~> 13.0"
|
metadata
CHANGED
|
@@ -1,63 +1,65 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sql_enum
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Fletcher Fowler
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-01-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: mysql2
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
20
|
-
- - "<"
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
22
|
-
version: '7.0'
|
|
19
|
+
version: '0'
|
|
23
20
|
type: :runtime
|
|
24
21
|
prerelease: false
|
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
23
|
requirements:
|
|
27
24
|
- - ">="
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '
|
|
30
|
-
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: activesupport
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
33
|
+
version: 6.1.0
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 6.1.0
|
|
33
41
|
- !ruby/object:Gem::Dependency
|
|
34
42
|
name: activerecord
|
|
35
43
|
requirement: !ruby/object:Gem::Requirement
|
|
36
44
|
requirements:
|
|
37
45
|
- - ">="
|
|
38
46
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
40
|
-
- - "<"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '7.0'
|
|
47
|
+
version: 6.1.0
|
|
43
48
|
type: :runtime
|
|
44
49
|
prerelease: false
|
|
45
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
51
|
requirements:
|
|
47
52
|
- - ">="
|
|
48
53
|
- !ruby/object:Gem::Version
|
|
49
|
-
version:
|
|
50
|
-
- - "<"
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: '7.0'
|
|
54
|
+
version: 6.1.0
|
|
53
55
|
- !ruby/object:Gem::Dependency
|
|
54
|
-
name:
|
|
56
|
+
name: appraisal
|
|
55
57
|
requirement: !ruby/object:Gem::Requirement
|
|
56
58
|
requirements:
|
|
57
59
|
- - ">="
|
|
58
60
|
- !ruby/object:Gem::Version
|
|
59
61
|
version: '0'
|
|
60
|
-
type: :
|
|
62
|
+
type: :development
|
|
61
63
|
prerelease: false
|
|
62
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
63
65
|
requirements:
|
|
@@ -65,7 +67,7 @@ dependencies:
|
|
|
65
67
|
- !ruby/object:Gem::Version
|
|
66
68
|
version: '0'
|
|
67
69
|
- !ruby/object:Gem::Dependency
|
|
68
|
-
name:
|
|
70
|
+
name: awesome_print
|
|
69
71
|
requirement: !ruby/object:Gem::Requirement
|
|
70
72
|
requirements:
|
|
71
73
|
- - ">="
|
|
@@ -142,6 +144,7 @@ extensions: []
|
|
|
142
144
|
extra_rdoc_files: []
|
|
143
145
|
files:
|
|
144
146
|
- ".env"
|
|
147
|
+
- ".env.local"
|
|
145
148
|
- ".github/workflows/tests.yml"
|
|
146
149
|
- ".gitignore"
|
|
147
150
|
- ".rspec"
|
|
@@ -157,11 +160,9 @@ files:
|
|
|
157
160
|
- bin/console
|
|
158
161
|
- bin/setup
|
|
159
162
|
- docker-compose.yml
|
|
160
|
-
- gemfiles/rails_5.1.gemfile
|
|
161
|
-
- gemfiles/rails_5.2.gemfile
|
|
162
|
-
- gemfiles/rails_6.0.gemfile
|
|
163
163
|
- gemfiles/rails_6.1.gemfile
|
|
164
164
|
- gemfiles/rails_7.0.gemfile
|
|
165
|
+
- gemfiles/rails_7.1.gemfile
|
|
165
166
|
- lib/active_record/connection_adapters/abstract_mysql.rb
|
|
166
167
|
- lib/active_record/connection_adapters/mysql/column_methods.rb
|
|
167
168
|
- lib/active_record/connection_adapters/mysql2.rb
|
|
@@ -195,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
195
196
|
- !ruby/object:Gem::Version
|
|
196
197
|
version: '0'
|
|
197
198
|
requirements: []
|
|
198
|
-
rubygems_version: 3.
|
|
199
|
+
rubygems_version: 3.5.3
|
|
199
200
|
signing_key:
|
|
200
201
|
specification_version: 4
|
|
201
202
|
summary: Enable using native sql enums
|
data/gemfiles/rails_5.2.gemfile
DELETED