sql_enum 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ba5a5a0695bc9c11496ca90509646d98e2e005e7c89664aba78acb1de45d270
4
- data.tar.gz: 1cb90fe77fcc9b7e2d84c0fe9b9b41ddee264de6e488d5de8dbc9462371a8ecd
3
+ metadata.gz: b4f885963c1a9b5c4d6612807ea7627f34fc455a730a45ed93fe380bc2a4d0ff
4
+ data.tar.gz: 8489d2a5a017117bb1d5a0d5bb88ccab8f11e4be19a915374ee3d12222d45f76
5
5
  SHA512:
6
- metadata.gz: 795a28c30fc3fddb87865fc82325243c67a009694c409ffe880dace43c0d601cdcc32b4d9806a9d9c3220616dcc82be9b0e57ca8ccb3bb14c2d6562457c588a5
7
- data.tar.gz: 67835417b809b63b7d97deb3531d059f3df63d1450406b0216cb81540a7276c691635126da7afdbf1dcf87fb128f7fe63cc8e196073fac55254e321ca1b66b58
6
+ metadata.gz: 6f4ed451ed9dd0d9f6b0e0d5475efadea5bc1de0d3f19e54bfd2066dfb2685cdb7e9f601bd1ca5b977af17b0df19c89860b5ee2bc5791fbdaf19f2644bbd32de
7
+ data.tar.gz: c27592b8fc57952f8237d8dd19c21e50335b7f9a5de2081074a331b5972f7fa4eacbd61745e3da3424086f5f35e64a2df909d866973d96c3268fa758bdd2f36c
@@ -2,15 +2,31 @@ name: Tests
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [ master ]
5
+ branches: [ main ]
6
6
  pull_request:
7
7
 
8
8
  jobs:
9
9
  rspec:
10
+ strategy:
11
+ matrix:
12
+ ruby:
13
+ - '2.7'
14
+ - '3.0'
15
+ - '3.1'
16
+ - '3.2'
17
+ rails:
18
+ - '6.0'
19
+ - '6.1'
20
+
10
21
  runs-on: ubuntu-latest
11
22
 
23
+ name: RSpec (Rails ${{ matrix.rails }}) (Ruby ${{ matrix.ruby }})
24
+
12
25
  steps:
13
26
  - uses: actions/checkout@v2
14
-
27
+ - uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby }}
30
+ bundler-cache: true
15
31
  - name: Test
16
- run: docker-compose run --rm rspec
32
+ run: docker-compose run --rm rspec bundle exec appraisal rails-${{ matrix.rails }} rspec
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ gemfiles/*.lock
data/Appraisals ADDED
@@ -0,0 +1,12 @@
1
+ appraise "rails-6.0" do
2
+ gem "rails", "~> 6.0.0"
3
+ end
4
+
5
+ appraise "rails-6.1" do
6
+ gem "rails", "~> 6.1.0"
7
+ end
8
+
9
+ # Rails 7.0 doesn't work yet
10
+ # appraise "rails-7.0" do
11
+ # gem "rails", "~> 7.0"
12
+ # end
data/Dockerfile CHANGED
@@ -1,12 +1,9 @@
1
1
  FROM ruby:3.0
2
2
 
3
- # throw errors if Gemfile has been modified since Gemfile.lock
4
- RUN bundle config --global frozen 1
5
-
6
3
  WORKDIR /usr/src/app
7
4
 
8
- # Bundler caching
9
- RUN mkdir -p lib/sql_enum
5
+ RUN mkdir -p lib/sql_enum gemfiles
10
6
  COPY lib/sql_enum/version.rb ./lib/sql_enum/
11
- COPY sql_enum.gemspec Gemfile Gemfile.lock ./
12
- RUN bundle install
7
+ COPY gemfiles/*.gemfile gemfiles/
8
+ COPY sql_enum.gemspec Gemfile Gemfile.lock Appraisals ./
9
+ RUN bundle install && exec appraisal install
data/Gemfile.lock CHANGED
@@ -1,54 +1,70 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sql_enum (0.3.0)
5
- activerecord (>= 5.0)
6
- activesupport (>= 5.0)
4
+ sql_enum (0.4.0)
5
+ activerecord (>= 6.0, < 7.0)
6
+ activesupport (>= 6.0, < 7.0)
7
7
  mysql2
8
8
 
9
9
  GEM
10
10
  remote: https://gem-proxy.chime.com/
11
11
  specs:
12
- activemodel (6.1.4.1)
13
- activesupport (= 6.1.4.1)
14
- activerecord (6.1.4.1)
15
- activemodel (= 6.1.4.1)
16
- activesupport (= 6.1.4.1)
17
- activesupport (6.1.4.1)
12
+ activemodel (6.1.7.6)
13
+ activesupport (= 6.1.7.6)
14
+ activerecord (6.1.7.6)
15
+ activemodel (= 6.1.7.6)
16
+ activesupport (= 6.1.7.6)
17
+ activesupport (6.1.7.6)
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
22
  zeitwerk (~> 2.3)
23
- concurrent-ruby (1.1.9)
24
- diff-lcs (1.3)
25
- i18n (1.8.10)
23
+ appraisal (2.5.0)
24
+ bundler
25
+ rake
26
+ thor (>= 0.14.0)
27
+ concurrent-ruby (1.2.2)
28
+ debug (1.8.0)
29
+ irb (>= 1.5.0)
30
+ reline (>= 0.3.1)
31
+ diff-lcs (1.5.0)
32
+ i18n (1.14.1)
26
33
  concurrent-ruby (~> 1.0)
27
- minitest (5.14.4)
28
- mysql2 (0.5.3)
29
- rake (13.0.3)
30
- rspec (3.7.0)
31
- rspec-core (~> 3.7.0)
32
- rspec-expectations (~> 3.7.0)
33
- rspec-mocks (~> 3.7.0)
34
- rspec-core (3.7.1)
35
- rspec-support (~> 3.7.0)
36
- rspec-expectations (3.7.0)
34
+ io-console (0.6.0)
35
+ irb (1.7.4)
36
+ reline (>= 0.3.6)
37
+ minitest (5.19.0)
38
+ mysql2 (0.5.5)
39
+ rake (13.0.6)
40
+ reline (0.3.8)
41
+ io-console (~> 0.5)
42
+ rspec (3.12.0)
43
+ rspec-core (~> 3.12.0)
44
+ rspec-expectations (~> 3.12.0)
45
+ rspec-mocks (~> 3.12.0)
46
+ rspec-core (3.12.2)
47
+ rspec-support (~> 3.12.0)
48
+ rspec-expectations (3.12.3)
37
49
  diff-lcs (>= 1.2.0, < 2.0)
38
- rspec-support (~> 3.7.0)
39
- rspec-mocks (3.7.0)
50
+ rspec-support (~> 3.12.0)
51
+ rspec-mocks (3.12.6)
40
52
  diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.7.0)
42
- rspec-support (3.7.1)
43
- tzinfo (2.0.4)
53
+ rspec-support (~> 3.12.0)
54
+ rspec-support (3.12.1)
55
+ thor (1.2.2)
56
+ tzinfo (2.0.6)
44
57
  concurrent-ruby (~> 1.0)
45
- zeitwerk (2.5.1)
58
+ zeitwerk (2.6.11)
46
59
 
47
60
  PLATFORMS
48
61
  ruby
62
+ x86_64-linux
49
63
 
50
64
  DEPENDENCIES
65
+ appraisal
51
66
  bundler
67
+ debug
52
68
  rake (~> 13.0)
53
69
  rspec (~> 3.0)
54
70
  sql_enum!
data/README.md CHANGED
@@ -66,4 +66,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
66
66
 
67
67
  ## Code of Conduct
68
68
 
69
- Everyone interacting in the SqlEnum project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/1debit/sql_enum/blob/master/CODE_OF_CONDUCT.md).
69
+ Everyone interacting in the SqlEnum project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/1debit/sql_enum/blob/main/CODE_OF_CONDUCT.md).
data/docker-compose.yml CHANGED
@@ -8,7 +8,7 @@ services:
8
8
  depends_on:
9
9
  mysql:
10
10
  condition: service_healthy
11
- command: bundle exec rspec
11
+ command: bundle exec appraisal rspec
12
12
 
13
13
  mysql:
14
14
  image: mysql:5.7
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://gem-proxy.chime.com"
4
+
5
+ gem "rails", "~> 5.1.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://gem-proxy.chime.com"
4
+
5
+ gem "rails", "~> 5.2.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://gem-proxy.chime.com"
4
+
5
+ gem "rails", "~> 6.0.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://gem-proxy.chime.com"
4
+
5
+ gem "rails", "~> 6.1.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://gem-proxy.chime.com"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+
7
+ gemspec path: "../"
@@ -1,3 +1,6 @@
1
+ # This module fails in Rails 7.0 becuase the method being modified has been
2
+ # changed to a class method.
3
+
1
4
  module ActiveRecord
2
5
  module ConnectionAdapters
3
6
  class AbstractMysqlAdapter
@@ -5,7 +5,7 @@ module ActiveRecord
5
5
  module MySQL
6
6
  module ColumnMethods
7
7
  def enum(*args, **options)
8
- args.each { |name| column(name, :enum, options) }
8
+ args.each { |name| column(name, :enum, **options) }
9
9
  end
10
10
  end
11
11
  end
@@ -3,18 +3,41 @@ module SqlEnum
3
3
  def sql_enum(column_name, options = {})
4
4
  # Query values
5
5
  enum_column = EnumColumn.new(table_name, column_name)
6
- values = enum_column.values.to_h { |value| [value.to_sym, value.to_s] }
6
+ values_map = enum_column.values.to_h { |value| [value.to_sym, value.to_s] }
7
7
 
8
8
  # Check option defaults
9
9
  prefix = options.fetch(:_prefix, !!SqlEnum.configuration&.default_prefix)
10
10
  suffix = options.fetch(:_suffix, !!SqlEnum.configuration&.default_suffix)
11
11
 
12
12
  # Define enum using Rails enum
13
- enum(column_name => values, _prefix: prefix, _suffix: suffix)
13
+ enum(column_name => values_map, _prefix: prefix, _suffix: suffix)
14
14
 
15
15
  # Override reader to return symbols
16
- concerning "SqlEnum#{column_name.to_s.camelize}" do
17
- define_method(column_name) { super()&.to_sym }
16
+ type_definition = ->(subtype) { EnumType.new(attr, send(column_name.to_s.pluralize), subtype) }
17
+ case method(:decorate_attribute_type).arity
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
23
+
24
+ prefix_str = format_affix(column_name, prefix, suffix: '_')
25
+ suffix_str = format_affix(column_name, suffix, prefix: '_')
26
+
27
+ # Fix query methods to compare symbols to symbols
28
+ values_map.each_value do |value|
29
+ method_name = "#{prefix_str}#{value}#{suffix_str}"
30
+ define_method("#{method_name}?") { self[column_name] == value.to_sym }
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def format_affix(column_name, affix, prefix: '', suffix: '')
37
+ if affix == true
38
+ "#{prefix}#{column_name}#{suffix}"
39
+ elsif affix
40
+ "#{prefix}#{affix}#{suffix}"
18
41
  end
19
42
  end
20
43
  end
@@ -21,13 +21,13 @@ module SqlEnum
21
21
  end
22
22
 
23
23
  def schema_values_query
24
- <<~EOSQL
25
- SELECT column_type
26
- FROM information_schema.COLUMNS
27
- WHERE TABLE_SCHEMA = '#{database_name}'
28
- AND TABLE_NAME = '#{table_name}'
29
- AND COLUMN_NAME = '#{column_name}'
30
- EOSQL
24
+ <<~SQL
25
+ SELECT column_type
26
+ FROM information_schema.COLUMNS
27
+ WHERE TABLE_SCHEMA = '#{database_name}'
28
+ AND TABLE_NAME = '#{table_name}'
29
+ AND COLUMN_NAME = '#{column_name}'
30
+ SQL
31
31
  end
32
32
  end
33
33
  end
@@ -0,0 +1,12 @@
1
+ module SqlEnum
2
+ # EnumType that always returns a symbol
3
+ class EnumType < ActiveRecord::Enum::EnumType
4
+ def cast(arg)
5
+ super&.to_sym
6
+ end
7
+
8
+ def deserialize(arg)
9
+ super&.to_sym
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module SqlEnum
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/sql_enum.rb CHANGED
@@ -20,5 +20,6 @@ require_relative 'active_record/connection_adapters/mysql/column_methods'
20
20
  require_relative 'sql_enum/version'
21
21
  require_relative 'sql_enum/configuration'
22
22
  require_relative 'sql_enum/enum_column'
23
+ require_relative 'sql_enum/enum_type'
23
24
  require_relative 'sql_enum/class_methods'
24
25
  require_relative 'sql_enum/active_record'
data/sql_enum.gemspec CHANGED
@@ -13,6 +13,11 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/1debit/sql_enum"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.metadata = {
17
+ 'homepage_uri' => spec.homepage,
18
+ 'source_code_uri' => spec.homepage,
19
+ }
20
+
16
21
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
22
  f.match(%r{^(test|spec|features)/})
18
23
  end
@@ -20,11 +25,13 @@ Gem::Specification.new do |spec|
20
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
26
  spec.require_paths = ["lib"]
22
27
 
23
- spec.add_dependency "activesupport", ">= 5.0"
24
- spec.add_dependency "activerecord", ">= 5.0"
28
+ spec.add_dependency "activesupport", ">= 6.0", "< 7.0"
29
+ spec.add_dependency "activerecord", ">= 6.0", "< 7.0"
25
30
  spec.add_dependency "mysql2"
26
31
 
32
+ spec.add_development_dependency "appraisal"
27
33
  spec.add_development_dependency "bundler"
34
+ spec.add_development_dependency "debug"
28
35
  spec.add_development_dependency "rake", "~> 13.0"
29
36
  spec.add_development_dependency "rspec", "~> 3.0"
30
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.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: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2023-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '6.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '5.0'
29
+ version: '6.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activerecord
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '5.0'
39
+ version: '6.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '7.0'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
- version: '5.0'
49
+ version: '6.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '7.0'
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: mysql2
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +64,20 @@ dependencies:
52
64
  - - ">="
53
65
  - !ruby/object:Gem::Version
54
66
  version: '0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: appraisal
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
55
81
  - !ruby/object:Gem::Dependency
56
82
  name: bundler
57
83
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +92,20 @@ dependencies:
66
92
  - - ">="
67
93
  - !ruby/object:Gem::Version
68
94
  version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: debug
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
69
109
  - !ruby/object:Gem::Dependency
70
110
  name: rake
71
111
  requirement: !ruby/object:Gem::Requirement
@@ -106,6 +146,7 @@ files:
106
146
  - ".gitignore"
107
147
  - ".rspec"
108
148
  - ".travis.yml"
149
+ - Appraisals
109
150
  - CODE_OF_CONDUCT.md
110
151
  - Dockerfile
111
152
  - Gemfile
@@ -116,6 +157,11 @@ files:
116
157
  - bin/console
117
158
  - bin/setup
118
159
  - docker-compose.yml
160
+ - gemfiles/rails_5.1.gemfile
161
+ - gemfiles/rails_5.2.gemfile
162
+ - gemfiles/rails_6.0.gemfile
163
+ - gemfiles/rails_6.1.gemfile
164
+ - gemfiles/rails_7.0.gemfile
119
165
  - lib/active_record/connection_adapters/abstract_mysql.rb
120
166
  - lib/active_record/connection_adapters/mysql/column_methods.rb
121
167
  - lib/active_record/connection_adapters/mysql2.rb
@@ -125,12 +171,15 @@ files:
125
171
  - lib/sql_enum/class_methods.rb
126
172
  - lib/sql_enum/configuration.rb
127
173
  - lib/sql_enum/enum_column.rb
174
+ - lib/sql_enum/enum_type.rb
128
175
  - lib/sql_enum/version.rb
129
176
  - sql_enum.gemspec
130
177
  homepage: https://github.com/1debit/sql_enum
131
178
  licenses:
132
179
  - MIT
133
- metadata: {}
180
+ metadata:
181
+ homepage_uri: https://github.com/1debit/sql_enum
182
+ source_code_uri: https://github.com/1debit/sql_enum
134
183
  post_install_message:
135
184
  rdoc_options: []
136
185
  require_paths:
@@ -146,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
195
  - !ruby/object:Gem::Version
147
196
  version: '0'
148
197
  requirements: []
149
- rubygems_version: 3.2.22
198
+ rubygems_version: 3.1.6
150
199
  signing_key:
151
200
  specification_version: 4
152
201
  summary: Enable using native sql enums