activerecord-mysql-enum 0.1.4 → 2.0.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
- SHA1:
3
- metadata.gz: 578ac3f22e8b3c8918ba90a0275b6cec90bc5b65
4
- data.tar.gz: ee0b982c920256d50afeae9b9a2b8b4ec143e10f
2
+ SHA256:
3
+ metadata.gz: 459885e4a5040ecec66b8e13a82810c5b58a516e7b6d862540861b983ec16671
4
+ data.tar.gz: 22dc3afd5d45bf3a5b7f6ca49105742ac805b9385e470983eaf38be9d22a58fb
5
5
  SHA512:
6
- metadata.gz: fe548ee120207058a9e1af2a87bcd95a120be896aa02b0e826ed856de893121d7604b106125d7f093695a0efd704959a3651eacd8940ea33779d474df3eada0f
7
- data.tar.gz: 0e240650af84b1e562789fad514c9f1a01d11dedc3c39d67734632b51d0301a0e87b4d99c4814690c7cef107742d9b7f32c404cd9a622284d181a24c76948c02
6
+ metadata.gz: '0219e9b653b15e4354b8e515ee815a7dd6daa99c7ccc88470017e3802096e739008ce985c67bfee9aa543f918a5a58a2a5d449c3b6f2dc00601c2412143f7df6'
7
+ data.tar.gz: 2215b573018c5d3971294b2d9a672434497437c5c9f846e1ee945491ab2629f03152da44bf0a55dfa91ea17bff3e44ed964655b39aab3d6eb5e5ca748c01f1c0
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: ActiveRecord MySQL Enum
3
+ on: [push]
4
+ jobs:
5
+ test:
6
+ name: Unit Tests
7
+ runs-on: ubuntu-latest
8
+ services:
9
+ mysql:
10
+ image: mysql:5.7
11
+ env:
12
+ MYSQL_DATABASE: activerecord_mysql_enum_test
13
+ MYSQL_USER: user
14
+ MYSQL_PASSWORD: password
15
+ MYSQL_ROOT_PASSWORD: rootpassword
16
+ ports:
17
+ - 3306:3306
18
+ options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ ruby: [2.5.8, 2.6.5, 2.7.1]
23
+ gemfile:
24
+ - gemfiles/rails_5.gemfile
25
+ - gemfiles/rails_6.gemfile
26
+ env:
27
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
28
+ DATABASE_MYSQL_HOST: 127.0.0.1
29
+ DATABASE_MYSQL_USERNAME: user
30
+ DATABASE_MYSQL_PASSWORD: password
31
+ steps:
32
+ - uses: actions/checkout@v2
33
+ - uses: ruby/setup-ruby@v1
34
+ with:
35
+ ruby-version: ${{ matrix.ruby }}
36
+ bundler: 1.17.3
37
+ bundler-cache: true
38
+ - run: RAILS_ENV=test bundle exec rake db:create
39
+ - run: bundle exec rspec
data/.gitignore CHANGED
@@ -6,3 +6,9 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /log/*.log
10
+ /db/*.sqlite3
11
+ .idea
12
+ gemfiles/*.lock
13
+ coverage/
14
+ spec/dummy/log/*.log
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require rails_helper
data/Appraisals ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'rails-5' do
4
+ gem 'rails', '~> 5.2'
5
+ gem 'mysql2', '~> 0.4'
6
+ end
7
+
8
+ appraise 'rails-6' do
9
+ gem 'rails', '~> 6.0.0'
10
+ gem 'mysql2', '~> 0.5'
11
+ end
data/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
5
  Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.0.0] - 2021-08-10
8
+ ### Removed
9
+ - Dropped support for Rails less than 5
10
+
11
+ ## [1.0.0] - 2020-09-16
12
+ ### Added
13
+ - A Rspec test suit
14
+ - Dummy Rails app to be used by tests
15
+ - Test coverage reports via Coveralls/SimpleCov
16
+ - A coverage report badge to the README
17
+ - Unit tests being run on push with TravisCI
18
+ - Appraisal to test Rails 4.2, 5.2, and 6.0
19
+ - A dependency on the mysql2 gem
20
+
21
+ ### Changed
22
+ - Existing tests to be run with Rspec
23
+
24
+ ### Removed
25
+ - Support for the mysql gem
26
+ - Support for Rails < 4.2
27
+
7
28
  ## [0.1.4] - 2020-08-20
8
29
  ### Fixed
9
30
  - Fixed bug in `mysql_adapter` where optional arguments being passed to `type_to_sql` would cause
@@ -28,6 +49,8 @@ Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0
28
49
  ### Changed
29
50
  - Renamed the gem from `enum_column3` to `activerecord-mysql-enum`
30
51
 
52
+ [2.0.0]: https://github.com/Invoca/activerecord-mysql-enum/compare/v1.0.0...v2.0.0
53
+ [1.0.0]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.4...v1.0.0
31
54
  [0.1.4]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.3...v0.1.4
32
55
  [0.1.3]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.2...v0.1.3
33
56
  [0.1.2]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.1...v0.1.2
data/Gemfile CHANGED
@@ -5,8 +5,11 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in active_table_set.gemspec
6
6
  gemspec
7
7
 
8
- gem 'bundler', '~> 1.8'
8
+ gem 'appraisal'
9
+ gem 'coveralls', require: false
9
10
  gem 'pry'
10
11
  gem 'pry-byebug'
11
12
  gem 'rake', '~> 13.0'
12
- gem 'rails', '~> 4.2'
13
+ gem 'rails', '~> 5.2'
14
+ gem 'rspec'
15
+ gem 'rspec-rails', '~> 3.0'
data/Gemfile.lock CHANGED
@@ -1,124 +1,187 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activerecord-mysql-enum (0.1.4)
5
- activerecord (>= 4.2, < 7)
4
+ activerecord-mysql-enum (2.0.0)
5
+ activerecord (>= 5.2, < 7)
6
+ mysql2 (>= 0.4.5, < 0.6)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- actionmailer (4.2.11.3)
11
- actionpack (= 4.2.11.3)
12
- actionview (= 4.2.11.3)
13
- activejob (= 4.2.11.3)
11
+ actioncable (5.2.6)
12
+ actionpack (= 5.2.6)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailer (5.2.6)
16
+ actionpack (= 5.2.6)
17
+ actionview (= 5.2.6)
18
+ activejob (= 5.2.6)
14
19
  mail (~> 2.5, >= 2.5.4)
15
- rails-dom-testing (~> 1.0, >= 1.0.5)
16
- actionpack (4.2.11.3)
17
- actionview (= 4.2.11.3)
18
- activesupport (= 4.2.11.3)
19
- rack (~> 1.6)
20
- rack-test (~> 0.6.2)
21
- rails-dom-testing (~> 1.0, >= 1.0.5)
20
+ rails-dom-testing (~> 2.0)
21
+ actionpack (5.2.6)
22
+ actionview (= 5.2.6)
23
+ activesupport (= 5.2.6)
24
+ rack (~> 2.0, >= 2.0.8)
25
+ rack-test (>= 0.6.3)
26
+ rails-dom-testing (~> 2.0)
22
27
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
23
- actionview (4.2.11.3)
24
- activesupport (= 4.2.11.3)
28
+ actionview (5.2.6)
29
+ activesupport (= 5.2.6)
25
30
  builder (~> 3.1)
26
- erubis (~> 2.7.0)
27
- rails-dom-testing (~> 1.0, >= 1.0.5)
31
+ erubi (~> 1.4)
32
+ rails-dom-testing (~> 2.0)
28
33
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
29
- activejob (4.2.11.3)
30
- activesupport (= 4.2.11.3)
31
- globalid (>= 0.3.0)
32
- activemodel (4.2.11.3)
33
- activesupport (= 4.2.11.3)
34
- builder (~> 3.1)
35
- activerecord (4.2.11.3)
36
- activemodel (= 4.2.11.3)
37
- activesupport (= 4.2.11.3)
38
- arel (~> 6.0)
39
- activesupport (4.2.11.3)
40
- i18n (~> 0.7)
34
+ activejob (5.2.6)
35
+ activesupport (= 5.2.6)
36
+ globalid (>= 0.3.6)
37
+ activemodel (5.2.6)
38
+ activesupport (= 5.2.6)
39
+ activerecord (5.2.6)
40
+ activemodel (= 5.2.6)
41
+ activesupport (= 5.2.6)
42
+ arel (>= 9.0)
43
+ activestorage (5.2.6)
44
+ actionpack (= 5.2.6)
45
+ activerecord (= 5.2.6)
46
+ marcel (~> 1.0.0)
47
+ activesupport (5.2.6)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
41
50
  minitest (~> 5.1)
42
- thread_safe (~> 0.3, >= 0.3.4)
43
51
  tzinfo (~> 1.1)
44
- arel (6.0.4)
52
+ appraisal (2.4.1)
53
+ bundler
54
+ rake
55
+ thor (>= 0.14.0)
56
+ arel (9.0.0)
45
57
  builder (3.2.4)
46
58
  byebug (11.1.3)
47
59
  coderay (1.1.3)
48
- concurrent-ruby (1.1.7)
60
+ concurrent-ruby (1.1.9)
61
+ coveralls (0.8.23)
62
+ json (>= 1.8, < 3)
63
+ simplecov (~> 0.16.1)
64
+ term-ansicolor (~> 1.3)
65
+ thor (>= 0.19.4, < 2.0)
66
+ tins (~> 1.6)
49
67
  crass (1.0.6)
50
- erubis (2.7.0)
51
- globalid (0.4.2)
52
- activesupport (>= 4.2.0)
53
- i18n (0.9.5)
68
+ diff-lcs (1.4.4)
69
+ docile (1.4.0)
70
+ erubi (1.10.0)
71
+ globalid (0.5.2)
72
+ activesupport (>= 5.0)
73
+ i18n (1.8.10)
54
74
  concurrent-ruby (~> 1.0)
55
- loofah (2.6.0)
75
+ json (2.5.1)
76
+ loofah (2.11.0)
56
77
  crass (~> 1.0.2)
57
78
  nokogiri (>= 1.5.9)
58
79
  mail (2.7.1)
59
80
  mini_mime (>= 0.1.1)
81
+ marcel (1.0.1)
60
82
  method_source (1.0.0)
61
- mini_mime (1.0.2)
62
- mini_portile2 (2.4.0)
63
- minitest (5.14.1)
64
- nokogiri (1.10.10)
65
- mini_portile2 (~> 2.4.0)
66
- pry (0.13.1)
83
+ mini_mime (1.1.0)
84
+ mini_portile2 (2.6.1)
85
+ minitest (5.14.4)
86
+ mysql2 (0.5.3)
87
+ nio4r (2.5.8)
88
+ nokogiri (1.12.2)
89
+ mini_portile2 (~> 2.6.1)
90
+ racc (~> 1.4)
91
+ pry (0.14.1)
67
92
  coderay (~> 1.1)
68
93
  method_source (~> 1.0)
69
- pry-byebug (3.9.0)
94
+ pry-byebug (3.8.0)
70
95
  byebug (~> 11.0)
71
- pry (~> 0.13.0)
72
- rack (1.6.13)
73
- rack-test (0.6.3)
74
- rack (>= 1.0)
75
- rails (4.2.11.3)
76
- actionmailer (= 4.2.11.3)
77
- actionpack (= 4.2.11.3)
78
- actionview (= 4.2.11.3)
79
- activejob (= 4.2.11.3)
80
- activemodel (= 4.2.11.3)
81
- activerecord (= 4.2.11.3)
82
- activesupport (= 4.2.11.3)
83
- bundler (>= 1.3.0, < 2.0)
84
- railties (= 4.2.11.3)
85
- sprockets-rails
86
- rails-deprecated_sanitizer (1.0.3)
87
- activesupport (>= 4.2.0.alpha)
88
- rails-dom-testing (1.0.9)
89
- activesupport (>= 4.2.0, < 5.0)
90
- nokogiri (~> 1.6)
91
- rails-deprecated_sanitizer (>= 1.0.1)
96
+ pry (~> 0.10)
97
+ racc (1.5.2)
98
+ rack (2.2.3)
99
+ rack-test (1.1.0)
100
+ rack (>= 1.0, < 3)
101
+ rails (5.2.6)
102
+ actioncable (= 5.2.6)
103
+ actionmailer (= 5.2.6)
104
+ actionpack (= 5.2.6)
105
+ actionview (= 5.2.6)
106
+ activejob (= 5.2.6)
107
+ activemodel (= 5.2.6)
108
+ activerecord (= 5.2.6)
109
+ activestorage (= 5.2.6)
110
+ activesupport (= 5.2.6)
111
+ bundler (>= 1.3.0)
112
+ railties (= 5.2.6)
113
+ sprockets-rails (>= 2.0.0)
114
+ rails-dom-testing (2.0.3)
115
+ activesupport (>= 4.2.0)
116
+ nokogiri (>= 1.6)
92
117
  rails-html-sanitizer (1.3.0)
93
118
  loofah (~> 2.3)
94
- railties (4.2.11.3)
95
- actionpack (= 4.2.11.3)
96
- activesupport (= 4.2.11.3)
119
+ railties (5.2.6)
120
+ actionpack (= 5.2.6)
121
+ activesupport (= 5.2.6)
122
+ method_source
97
123
  rake (>= 0.8.7)
98
- thor (>= 0.18.1, < 2.0)
99
- rake (13.0.1)
100
- sprockets (3.7.2)
124
+ thor (>= 0.19.0, < 2.0)
125
+ rake (13.0.6)
126
+ rspec (3.9.0)
127
+ rspec-core (~> 3.9.0)
128
+ rspec-expectations (~> 3.9.0)
129
+ rspec-mocks (~> 3.9.0)
130
+ rspec-core (3.9.3)
131
+ rspec-support (~> 3.9.3)
132
+ rspec-expectations (3.9.4)
133
+ diff-lcs (>= 1.2.0, < 2.0)
134
+ rspec-support (~> 3.9.0)
135
+ rspec-mocks (3.9.1)
136
+ diff-lcs (>= 1.2.0, < 2.0)
137
+ rspec-support (~> 3.9.0)
138
+ rspec-rails (3.9.1)
139
+ actionpack (>= 3.0)
140
+ activesupport (>= 3.0)
141
+ railties (>= 3.0)
142
+ rspec-core (~> 3.9.0)
143
+ rspec-expectations (~> 3.9.0)
144
+ rspec-mocks (~> 3.9.0)
145
+ rspec-support (~> 3.9.0)
146
+ rspec-support (3.9.4)
147
+ simplecov (0.16.1)
148
+ docile (~> 1.1)
149
+ json (>= 1.8, < 3)
150
+ simplecov-html (~> 0.10.0)
151
+ simplecov-html (0.10.2)
152
+ sprockets (4.0.2)
101
153
  concurrent-ruby (~> 1.0)
102
154
  rack (> 1, < 3)
103
- sprockets-rails (3.2.1)
155
+ sprockets-rails (3.2.2)
104
156
  actionpack (>= 4.0)
105
157
  activesupport (>= 4.0)
106
158
  sprockets (>= 3.0.0)
107
- thor (1.0.1)
159
+ sync (0.5.0)
160
+ term-ansicolor (1.7.1)
161
+ tins (~> 1.0)
162
+ thor (1.1.0)
108
163
  thread_safe (0.3.6)
109
- tzinfo (1.2.7)
164
+ tins (1.29.1)
165
+ sync
166
+ tzinfo (1.2.9)
110
167
  thread_safe (~> 0.1)
168
+ websocket-driver (0.7.5)
169
+ websocket-extensions (>= 0.1.0)
170
+ websocket-extensions (0.1.5)
111
171
 
112
172
  PLATFORMS
113
173
  ruby
114
174
 
115
175
  DEPENDENCIES
116
176
  activerecord-mysql-enum!
117
- bundler (~> 1.8)
177
+ appraisal
178
+ coveralls
118
179
  pry
119
180
  pry-byebug
120
- rails (~> 4.2)
181
+ rails (~> 5.2)
121
182
  rake (~> 13.0)
183
+ rspec
184
+ rspec-rails (~> 3.0)
122
185
 
123
186
  BUNDLED WITH
124
187
  1.17.3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ActiveRecord::Mysql::Enum
1
+ # ActiveRecord::Mysql::Enum [![Coverage Status](https://coveralls.io/repos/github/Invoca/activerecord-mysql-enum/badge.svg?branch=master)](https://coveralls.io/github/Invoca/activerecord-mysql-enum?branch=master)
2
2
 
3
3
  This gem is an extension to ActiveRecord which enables native support of
4
4
  enumerations in the database schema using the ENUM type in MySQL. Forked
@@ -7,17 +7,15 @@ which was itself a fork of a fork of Nick Pohodnya's original gem for
7
7
  Rails 3, [enum_column3](https://github.com/electronick/enum_column).
8
8
 
9
9
  ## Support
10
- Currently this has been manually tested with Rails version 4 and 5, and works with scaffolding.
10
+ Currently this is tested with Rails version 5.2, and 6.0.
11
11
 
12
12
  **Supported adapters:**
13
- - mysql
14
13
  - mysql2
15
- - jdbcmysql (by Nilesh Trivedi)
16
14
 
17
15
  ## Installation
18
16
  In your `Gemfile` add the following snippet
19
17
  ```ruby
20
- gem 'activerecord-mysql-enum', '~> 0.1', require: 'active_record/mysql/enum'
18
+ gem 'activerecord-mysql-enum', '~> 1.0', require: 'active_record/mysql/enum'
21
19
  ```
22
20
 
23
21
  ## Usage
@@ -50,17 +48,3 @@ irb(1)> Enumeration.columns_hash['color'].limit
50
48
  irb(2)> @enumeration.column_for_attribute(:color).limit
51
49
  => [:red, :blue, :green, :yellow]
52
50
  ```
53
-
54
- ### Form Helpers
55
- You can use enum_select helper to generate input for enumerated attribute as:
56
- ```ruby
57
- <%= enum_select(@enumeration, 'severity')%>
58
- ```
59
-
60
- Or using `form_for`:
61
- ```ruby
62
- <%= form_for @enumeration do |f| %>
63
- <%= f.label :severity %>
64
- <%= f.enum_select :severity %>
65
- <% end %>
66
- ```
data/Rakefile CHANGED
@@ -1,4 +1,17 @@
1
- #!/usr/bin/env rake
2
- # frozen_string_literal: true
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+ require File.expand_path('../spec/dummy/config/application', __FILE__)
4
+ Rails.application.config.root = "spec/dummy"
3
5
 
4
6
  Bundler::GemHelper.install_tasks
7
+ Rails.application.load_tasks
8
+
9
+ task default: :rspec
10
+
11
+ desc "run rspec unit tests"
12
+ begin
13
+ require 'rspec/core/rake_task'
14
+ RSpec::Core::RakeTask.new(:rspec) do |rspec_task|
15
+ # rspec_task.exclude_pattern = 'spec/e2e/**/*_spec.rb'
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ {}
data/enum_column.gemspec CHANGED
@@ -28,5 +28,6 @@ Gem::Specification.new do |spec|
28
28
  end
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency 'activerecord', '>= 4.2', '< 7'
31
+ spec.add_dependency 'activerecord', '>= 5.2', '< 7'
32
+ spec.add_dependency 'mysql2', '>= 0.4.5', '< 0.6'
32
33
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "coveralls", require: false
7
+ gem "pry"
8
+ gem "pry-byebug"
9
+ gem "rake", "~> 13.0"
10
+ gem "rails", "~> 5.2"
11
+ gem "rspec"
12
+ gem "rspec-rails", "~> 3.0"
13
+ gem "mysql2", "~> 0.4"
14
+
15
+ gemspec path: "../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "coveralls", require: false
7
+ gem "pry"
8
+ gem "pry-byebug"
9
+ gem "rake", "~> 13.0"
10
+ gem "rails", "~> 6.0.0"
11
+ gem "rspec"
12
+ gem "rspec-rails", "~> 3.0"
13
+ gem "mysql2", "~> 0.5"
14
+
15
+ gemspec path: "../"
@@ -9,16 +9,11 @@ if defined?(::Rails::Railtie)
9
9
  ActiveSupport.on_load :active_record do
10
10
  require 'active_record/mysql/enum/mysql_adapter'
11
11
  require 'active_record/mysql/enum/enum_type'
12
- require 'active_record/mysql/enum/enum_adapter'
13
12
  require 'active_record/mysql/enum/enum_column_adapter'
14
13
  require 'active_record/mysql/enum/schema_definitions'
15
14
  require 'active_record/mysql/enum/quoting'
16
15
  require 'active_record/mysql/enum/validations'
17
16
  end
18
-
19
- ActiveSupport.on_load :action_view do
20
- require 'active_record/mysql/enum/active_record_helper'
21
- end
22
17
  end
23
18
  end
24
19
  end
@@ -3,111 +3,58 @@
3
3
  # This module provides all the column helper methods to deal with the
4
4
  # values and adds the common type management code for the adapters.
5
5
 
6
-
7
- # try rails 3.1, then rails 3.2+, mysql column adapters
8
- column_class = if defined? ActiveRecord::ConnectionAdapters::Mysql2Column
9
- ActiveRecord::ConnectionAdapters::Mysql2Column
10
- elsif defined? ActiveRecord::ConnectionAdapters::MysqlColumn
11
- ActiveRecord::ConnectionAdapters::MysqlColumn
12
- elsif defined? ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column
13
- ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column
14
- elsif defined? ActiveRecord::ConnectionAdapters::MysqlAdapter::Column
15
- ActiveRecord::ConnectionAdapters::MysqlAdapter::Column
16
- elsif defined? ActiveRecord::ConnectionAdapters::MySQL::Column
17
- ActiveRecord::ConnectionAdapters::MySQL::Column
18
- end
19
-
20
- if column_class
21
- column_class.class_eval do
22
-
23
- if instance_methods.include?(:extract_default)
24
- alias __extract_default_enum extract_default
25
- def extract_default
26
- if type == :enum
27
- if @default == '' || @default.nil?
28
- @default = nil
6
+ module ActiveRecord
7
+ module Mysql
8
+ module Enum
9
+
10
+ class << self
11
+ def mysql_column_adapter
12
+ if defined? ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column
13
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column
14
+ elsif defined? ActiveRecord::ConnectionAdapters::MySQL::Column
15
+ ActiveRecord::ConnectionAdapters::MySQL::Column
29
16
  else
30
- @default = @default.intern
17
+ raise "could not find MySQL::Column or equivalent connection adapter"
31
18
  end
32
19
  end
33
- __extract_default_enum
34
20
  end
35
- end
36
21
 
37
- def __enum_type_cast(value)
38
- if type == :enum
39
- self.class.value_to_symbol(value)
40
- else
41
- __type_cast_enum(value)
42
- end
43
- end
22
+ ActiveRecordColumnWithEnums = Enum.mysql_column_adapter
44
23
 
45
- if instance_methods.include?(:type_cast_from_database)
46
- alias __type_cast_enum type_cast_from_database
47
- # Convert to a symbol.
48
- def type_cast_from_database(value)
49
- __enum_type_cast(value)
50
- end
51
- elsif instance_methods.include?(:type_cast)
52
- alias __type_cast_enum type_cast
53
- def type_cast(value)
54
- __enum_type_cast(value)
55
- end
56
- end
24
+ module EnumColumnAdapter
25
+ def initialize(*)
26
+ super
57
27
 
58
- # Deprecated in Rails 4.1
59
- if instance_methods.include?(:type_cast_code)
60
- alias __type_cast_code_enum type_cast_code
61
- # Code to convert to a symbol.
62
- def type_cast_code(var_name)
63
- if type == :enum
64
- "#{self.class.name}.value_to_symbol(#{var_name})"
65
- else
66
- __type_cast_code_enum(var_name)
28
+ if type == :enum
29
+ @default = if @default.present?
30
+ @default.to_sym
31
+ end
32
+ end
67
33
  end
68
- end
69
- end
70
34
 
71
- class << self
72
- # Safely convert the value to a symbol.
73
- def value_to_symbol(value)
74
- case value
75
- when Symbol
76
- value
77
- when String
78
- value.empty? ? nil : value.intern
79
- else
80
- nil
35
+ # Convert to a symbol.
36
+ def type_cast_from_database(value)
37
+ if type == :enum
38
+ EnumColumnAdapter.value_to_symbol(value)
39
+ else
40
+ super
41
+ end
81
42
  end
82
- end
83
- end
84
-
85
- private
86
43
 
87
- # Deprecated in Rails 4.2
88
- if private_instance_methods.include?(:simplified_type)
89
- alias __simplified_type_enum simplified_type
90
- # The enum simple type.
91
- def simplified_type(field_type)
92
- if field_type =~ /enum/i
93
- :enum
94
- else
95
- __simplified_type_enum(field_type)
44
+ class << self
45
+ # Safely convert the value to a symbol.
46
+ def value_to_symbol(value)
47
+ case value
48
+ when Symbol
49
+ value
50
+ when String
51
+ value.to_sym if value.present?
52
+ end
53
+ end
96
54
  end
97
55
  end
98
- end
99
56
 
100
- # Deprecated in Rails 4.2
101
- if private_instance_methods.include?(:extract_limit)
102
- alias __extract_limit_enum extract_limit
103
- def extract_limit(sql_type)
104
- if sql_type =~ /^enum/i
105
- sql_type.sub(/^enum\('(.+)'\)/i, '\1').split("','").map { |v| v.intern }
106
- else
107
- __extract_limit_enum(sql_type)
108
- end
109
- end
57
+ ActiveRecordColumnWithEnums.prepend EnumColumnAdapter
110
58
  end
111
-
112
59
  end
113
60
  end
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- adapter_class = if defined? ActiveRecord::ConnectionAdapters::MySQLJdbcConnection
4
- ActiveRecord::ConnectionAdapters::MySQLJdbcConnection
5
- # elsif defined? ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
6
- # ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
7
- elsif defined? ActiveRecord::ConnectionAdapters::Mysql2Adapter
8
- ActiveRecord::ConnectionAdapters::Mysql2Adapter
9
- elsif defined? ActiveRecord::ConnectionAdapters::MysqlAdapter
10
- ActiveRecord::ConnectionAdapters::MysqlAdapter
11
- end
12
-
13
3
  module ActiveRecord
14
4
  module Mysql
15
5
  module Enum
6
+
7
+ class << self
8
+ def mysql_adapter
9
+ defined? ActiveRecord::ConnectionAdapters::Mysql2Adapter or raise "Could not find MySQL connection adapter"
10
+
11
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter
12
+ end
13
+ end
14
+
15
+ ActiveRecordMysqlAdapter = Enum.mysql_adapter
16
+
16
17
  module MysqlAdapter
17
18
  def native_database_types #:nodoc
18
19
  types = super
@@ -27,39 +28,20 @@ module ActiveRecord
27
28
  # be done on a per adapter basis, but is generalized here.
28
29
  #
29
30
  # will generate enum('a', 'b', 'c') for :limit => [:a, :b, :c]
30
- if Rails::VERSION::MAJOR < 5
31
- def type_to_sql(type, limit = nil, *args)
32
- if type.to_s == 'enum'
33
- column_type_sql =
34
- if (native_database_type = native_database_types[type])
35
- native_database_type[:name]
36
- else
37
- 'enum'
38
- end
39
-
40
- quoted_values = limit.map { |v| quote(v) }.join(',')
41
-
42
- "#{column_type_sql}(#{quoted_values})"
43
- else
44
- super
45
- end
46
- end
47
- else
48
- def type_to_sql(type, limit: nil, **_options) # :nodoc:
49
- if type.to_s == 'enum'
50
- column_type_sql =
51
- if (native_database_type = native_database_types[type])
52
- native_database_type[:name]
53
- else
54
- 'enum'
55
- end
31
+ def type_to_sql(type, limit: nil, **_options) # :nodoc:
32
+ if type.to_s == 'enum'
33
+ column_type_sql =
34
+ if (native_database_type = native_database_types[type])
35
+ native_database_type[:name]
36
+ else
37
+ 'enum'
38
+ end
56
39
 
57
- quoted_values = limit.map { |v| quote(v) }.join(',')
40
+ quoted_values = limit.map { |v| quote(v) }.join(',')
58
41
 
59
- "#{column_type_sql}(#{quoted_values})"
60
- else
61
- super
62
- end
42
+ "#{column_type_sql}(#{quoted_values})"
43
+ else
44
+ super
63
45
  end
64
46
  end
65
47
 
@@ -75,10 +57,8 @@ module ActiveRecord
75
57
  end
76
58
  end
77
59
  end
60
+
61
+ ActiveRecordMysqlAdapter.prepend ActiveRecord::Mysql::Enum::MysqlAdapter
78
62
  end
79
63
  end
80
64
  end
81
-
82
- if adapter_class
83
- adapter_class.prepend(ActiveRecord::Mysql::Enum::MysqlAdapter)
84
- end
@@ -7,21 +7,11 @@ module ActiveRecord
7
7
 
8
8
  # Quote a symbol as a normal string. This will support quoting of
9
9
  # enumerated values.
10
- if Rails::VERSION::MAJOR < 5
11
- def quote(value, column = nil)
12
- if !value.is_a? Symbol
13
- __quote_enum(value, column)
14
- else
15
- ActiveRecord::Base.send(:quote_bound_value, value.to_s)
16
- end
17
- end
18
- else
19
- def quote(value)
20
- if !value.is_a? Symbol
21
- __quote_enum(value)
22
- else
23
- ActiveRecord::Base.send(:quote_bound_value, value.to_s)
24
- end
10
+ def quote(value)
11
+ if !value.is_a? Symbol
12
+ __quote_enum(value)
13
+ else
14
+ ActiveRecord::Base.send(:quote_bound_value, value.to_s)
25
15
  end
26
16
  end
27
17
  end
@@ -3,7 +3,7 @@
3
3
  module ActiveRecord
4
4
  module Mysql
5
5
  module Enum
6
- VERSION = "0.1.4"
6
+ VERSION = "2.0.0"
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1 @@
1
+ require 'active_record/mysql/enum'
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-mysql-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pohodnya
8
8
  - Invoca Development
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-20 00:00:00.000000000 Z
12
+ date: 2021-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,7 +17,7 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '4.2'
20
+ version: '5.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
23
  version: '7'
@@ -27,10 +27,30 @@ dependencies:
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: '4.2'
30
+ version: '5.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '7'
34
+ - !ruby/object:Gem::Dependency
35
+ name: mysql2
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.4.5
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '0.6'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.4.5
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.6'
34
54
  description: Enable enum type for the MySQL Adapter in ActiveRecord
35
55
  email:
36
56
  - development@invoca.com
@@ -40,18 +60,23 @@ extra_rdoc_files: []
40
60
  files:
41
61
  - ".dependabot/config.yml"
42
62
  - ".github/workflows/gem_release.yml"
63
+ - ".github/workflows/test.yml"
43
64
  - ".gitignore"
65
+ - ".rspec"
66
+ - Appraisals
44
67
  - CHANGELOG.md
45
68
  - Gemfile
46
69
  - Gemfile.lock
47
70
  - LICENSE
48
71
  - README.md
49
72
  - Rakefile
73
+ - app/assets/config/manifest.js
50
74
  - enum_column.gemspec
75
+ - gemfiles/.bundle/config
76
+ - gemfiles/rails_5.gemfile
77
+ - gemfiles/rails_6.gemfile
51
78
  - init.rb
52
79
  - lib/active_record/mysql/enum.rb
53
- - lib/active_record/mysql/enum/active_record_helper.rb
54
- - lib/active_record/mysql/enum/enum_adapter.rb
55
80
  - lib/active_record/mysql/enum/enum_column_adapter.rb
56
81
  - lib/active_record/mysql/enum/enum_type.rb
57
82
  - lib/active_record/mysql/enum/mysql_adapter.rb
@@ -59,13 +84,14 @@ files:
59
84
  - lib/active_record/mysql/enum/schema_definitions.rb
60
85
  - lib/active_record/mysql/enum/validations.rb
61
86
  - lib/active_record/mysql/enum/version.rb
87
+ - lib/activerecord-mysql-enum.rb
62
88
  - rails/init.rb
63
89
  homepage: http://github.com/Invoca/activerecord-mysql-enum
64
90
  licenses: []
65
91
  metadata:
66
92
  source_code_uri: https://github.com/Invoca/activerecord-mysql-enum
67
93
  allowed_push_host: https://rubygems.org
68
- post_install_message:
94
+ post_install_message:
69
95
  rdoc_options: []
70
96
  require_paths:
71
97
  - lib
@@ -80,9 +106,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
106
  - !ruby/object:Gem::Version
81
107
  version: '0'
82
108
  requirements: []
83
- rubyforge_project:
84
- rubygems_version: 2.6.13
85
- signing_key:
109
+ rubygems_version: 3.0.1
110
+ signing_key:
86
111
  specification_version: 4
87
112
  summary: Enable enum type for the MySQL Adapter in ActiveRecord
88
113
  test_files: []
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if defined?(Rails::Generator)
4
- module Rails
5
- module Generator
6
- class GeneratedAttribute
7
- def field_type_with_enumerated_attribute
8
- return (@field_type = :enum_select) if type == :enum
9
- field_type_without_enumerated_attribute
10
- end
11
- alias_method_chain :field_type, :enumerated_attribute
12
- end
13
- end
14
- end
15
- end
16
-
17
- if defined?(ActionView::Base)
18
- module ActionView
19
- module Helpers
20
-
21
- #form_options_helper.rb
22
- module FormOptionsHelper
23
- #def select
24
- def enum_select(object, method, options={}, html_options={})
25
- InstanceTag.new(object, method, self, options.delete(:object)).to_enum_select_tag(options, html_options)
26
- end
27
- end
28
-
29
- class InstanceTag
30
- def to_enum_select_tag(options, html_options={})
31
- if self.object.respond_to?(method_name.to_sym)
32
- column = self.object.column_for_attribute(method_name)
33
- if (value = self.object.__send__(method_name.to_sym))
34
- options[:selected] ||= value.to_s
35
- else
36
- options[:include_blank] = column.null if options[:include_blank].nil?
37
- end
38
- end
39
- to_select_tag(column.limit, options, html_options)
40
- end
41
-
42
- #initialize record_name, method, self
43
- if respond_to?(:to_tag)
44
- def to_tag_with_enumerated_attribute(options={})
45
- #look for an enum
46
- if (column_type == :enum && self.object.class.respond_to?(method_name.to_sym))
47
- to_enum_select_tag(options)
48
- else
49
- to_tag_without_enumerated_attribute(options)
50
- end
51
- end
52
- alias_method_chain :to_tag, :enumerated_attribute
53
- end
54
-
55
- end
56
-
57
- class FormBuilder
58
- def enum_select(method, options={}, html_options={})
59
- @template.enum_select(@object_name, method, objectify_options(options), @default_options.merge(html_options))
60
- end
61
- end
62
-
63
- end
64
- end
65
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides all the column helper methods to deal with the
4
- # values and adds the common type management code for the adapters.
5
-
6
- adapter_class = if defined? ActiveRecord::ConnectionAdapters::Mysql2Adapter
7
- ActiveRecord::ConnectionAdapters::Mysql2Adapter
8
- elsif defined? ActiveRecord::ConnectionAdapters::MysqlAdapter
9
- ActiveRecord::ConnectionAdapters::MysqlAdapter
10
- end
11
-
12
- if adapter_class
13
- adapter_class.class_eval do
14
-
15
- protected
16
- if instance_methods.include?(:initialize_type_map)
17
- def initialize_type_map_with_enum_types(m)
18
- initialize_type_map_without_enum_types(m)
19
- m.register_type(%r(enum)i) do |sql_type|
20
- limit = sql_type.sub(/^enum\('(.+)'\)/i, '\1').split("','").map { |v| v.intern }
21
- ActiveRecord::Type::Enum.new(limit: limit)
22
- end
23
- end
24
- alias_method_chain :initialize_type_map, :enum_types
25
- end
26
- end
27
- end