activerecord-mysql-enum 0.1.2 → 1.0.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +6 -0
- data/.rspec +1 -0
- data/.travis.yml +29 -0
- data/Appraisals +13 -0
- data/CHANGELOG.md +32 -1
- data/Gemfile +4 -1
- data/Gemfile.lock +51 -2
- data/README.md +3 -19
- data/Rakefile +15 -2
- data/app/assets/config/manifest.js +1 -0
- data/enum_column.gemspec +1 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_4.gemfile +14 -0
- data/gemfiles/rails_5.gemfile +14 -0
- data/gemfiles/rails_6.gemfile +14 -0
- data/lib/active_record/mysql/enum.rb +0 -5
- data/lib/active_record/mysql/enum/enum_column_adapter.rb +38 -91
- data/lib/active_record/mysql/enum/mysql_adapter.rb +33 -26
- data/lib/active_record/mysql/enum/version.rb +1 -1
- data/lib/activerecord-mysql-enum.rb +1 -0
- metadata +27 -6
- data/lib/active_record/mysql/enum/active_record_helper.rb +0 -65
- data/lib/active_record/mysql/enum/enum_adapter.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 654ebffea2d493ba5392b1aab3f69048c2c38462cf1782d109ee417e46605a89
|
4
|
+
data.tar.gz: 28009a9d255721863644711c217633a26b7de8275764508f80bca2ac1a086d7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d68c31a06bb274bfc8599f4c120976e3b5534df6bdb299fee0ba9495e08ef8a4fece362d2da6e0fb0b793a3d0275a393a27dbcf87302804ffbe4e3197e14bd88
|
7
|
+
data.tar.gz: d6e78050ab6bdce2a23e8f3479a82eef0dd669cbb357bafd843a550de1781b96d35fc14888f2f4f28ff2a7104a0175b75a88a46130776c0477c29e2cd6dc986f
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require rails_helper
|
data/.travis.yml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
dist: trusty
|
3
|
+
language: ruby
|
4
|
+
sudo: false
|
5
|
+
cache: bundler
|
6
|
+
rvm:
|
7
|
+
- 2.4.5
|
8
|
+
- 2.5.8
|
9
|
+
- 2.6.5
|
10
|
+
- 2.7.1
|
11
|
+
- ruby-head
|
12
|
+
gemfile:
|
13
|
+
- gemfiles/rails_4.gemfile
|
14
|
+
- gemfiles/rails_5.gemfile
|
15
|
+
- gemfiles/rails_6.gemfile
|
16
|
+
matrix:
|
17
|
+
fast_finish: false
|
18
|
+
exclude:
|
19
|
+
- gemfile: gemfiles/rails_4.gemfile
|
20
|
+
rvm: 2.7.1
|
21
|
+
- gemfile: gemfiles/rails_5.gemfile
|
22
|
+
rvm: 2.4.5
|
23
|
+
- gemfile: gemfiles/rails_6.gemfile
|
24
|
+
rvm: 2.4.5
|
25
|
+
allow_failures:
|
26
|
+
- rvm: ruby-head
|
27
|
+
script:
|
28
|
+
- RAILS_ENV=test bundle exec rake db:create
|
29
|
+
- bundle exec rspec
|
data/Appraisals
ADDED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,32 @@ 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
|
+
## [1.0.0] - Unreleased
|
8
|
+
### Added
|
9
|
+
- A Rspec test suit
|
10
|
+
- Dummy Rails app to be used by tests
|
11
|
+
- Test coverage reports via Coveralls/SimpleCov
|
12
|
+
- A coverage report badge to the README
|
13
|
+
- Unit tests being run on push with TravisCI
|
14
|
+
- Appraisal to test Rails 4.2, 5.2, and 6.0
|
15
|
+
- A dependency on the mysql2 gem
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
- Existing tests to be run with Rspec
|
19
|
+
|
20
|
+
### Removed
|
21
|
+
- Support for the mysql gem
|
22
|
+
- Support for Rails < 4.2
|
23
|
+
|
24
|
+
## [0.1.4] - Unreleased
|
25
|
+
### Fixed
|
26
|
+
- Fixed bug in `mysql_adapter` where optional arguments being passed to `type_to_sql` would cause
|
27
|
+
an unexpected error
|
28
|
+
|
29
|
+
## [0.1.3] - 2020-08-19
|
30
|
+
### Changed
|
31
|
+
- refactor mysql adapter
|
32
|
+
|
7
33
|
## [0.1.2] - 2020-08-18
|
8
34
|
### Changed
|
9
35
|
- fixed frozen string to reassign value instead of append
|
@@ -19,4 +45,9 @@ Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0
|
|
19
45
|
### Changed
|
20
46
|
- Renamed the gem from `enum_column3` to `activerecord-mysql-enum`
|
21
47
|
|
22
|
-
[
|
48
|
+
[1.0.0]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.4...v1.0.0
|
49
|
+
[0.1.4]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.3...v0.1.4
|
50
|
+
[0.1.3]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.2...v0.1.3
|
51
|
+
[0.1.2]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.1...v0.1.2
|
52
|
+
[0.1.1]: https://github.com/Invoca/activerecord-mysql-enum/compare/v0.1.0...v0.1.1
|
53
|
+
[0.1.0]: https://github.com/Invoca/activerecord-mysql-enum/tree/v0.1.0
|
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 '
|
8
|
+
gem 'appraisal'
|
9
|
+
gem 'coveralls', require: false
|
9
10
|
gem 'pry'
|
10
11
|
gem 'pry-byebug'
|
11
12
|
gem 'rake', '~> 13.0'
|
12
13
|
gem 'rails', '~> 4.2'
|
14
|
+
gem 'rspec'
|
15
|
+
gem 'rspec-rails', '~> 3.0'
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activerecord-mysql-enum (0.
|
4
|
+
activerecord-mysql-enum (1.0.0.pre.2)
|
5
5
|
activerecord (>= 4.2, < 7)
|
6
|
+
mysql2 (= 0.4.5)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -41,17 +42,30 @@ GEM
|
|
41
42
|
minitest (~> 5.1)
|
42
43
|
thread_safe (~> 0.3, >= 0.3.4)
|
43
44
|
tzinfo (~> 1.1)
|
45
|
+
appraisal (2.3.0)
|
46
|
+
bundler
|
47
|
+
rake
|
48
|
+
thor (>= 0.14.0)
|
44
49
|
arel (6.0.4)
|
45
50
|
builder (3.2.4)
|
46
51
|
byebug (11.1.3)
|
47
52
|
coderay (1.1.3)
|
48
53
|
concurrent-ruby (1.1.7)
|
54
|
+
coveralls (0.8.23)
|
55
|
+
json (>= 1.8, < 3)
|
56
|
+
simplecov (~> 0.16.1)
|
57
|
+
term-ansicolor (~> 1.3)
|
58
|
+
thor (>= 0.19.4, < 2.0)
|
59
|
+
tins (~> 1.6)
|
49
60
|
crass (1.0.6)
|
61
|
+
diff-lcs (1.4.4)
|
62
|
+
docile (1.3.2)
|
50
63
|
erubis (2.7.0)
|
51
64
|
globalid (0.4.2)
|
52
65
|
activesupport (>= 4.2.0)
|
53
66
|
i18n (0.9.5)
|
54
67
|
concurrent-ruby (~> 1.0)
|
68
|
+
json (2.3.1)
|
55
69
|
loofah (2.6.0)
|
56
70
|
crass (~> 1.0.2)
|
57
71
|
nokogiri (>= 1.5.9)
|
@@ -61,6 +75,7 @@ GEM
|
|
61
75
|
mini_mime (1.0.2)
|
62
76
|
mini_portile2 (2.4.0)
|
63
77
|
minitest (5.14.1)
|
78
|
+
mysql2 (0.4.5)
|
64
79
|
nokogiri (1.10.10)
|
65
80
|
mini_portile2 (~> 2.4.0)
|
66
81
|
pry (0.13.1)
|
@@ -97,6 +112,32 @@ GEM
|
|
97
112
|
rake (>= 0.8.7)
|
98
113
|
thor (>= 0.18.1, < 2.0)
|
99
114
|
rake (13.0.1)
|
115
|
+
rspec (3.9.0)
|
116
|
+
rspec-core (~> 3.9.0)
|
117
|
+
rspec-expectations (~> 3.9.0)
|
118
|
+
rspec-mocks (~> 3.9.0)
|
119
|
+
rspec-core (3.9.2)
|
120
|
+
rspec-support (~> 3.9.3)
|
121
|
+
rspec-expectations (3.9.2)
|
122
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
123
|
+
rspec-support (~> 3.9.0)
|
124
|
+
rspec-mocks (3.9.1)
|
125
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
126
|
+
rspec-support (~> 3.9.0)
|
127
|
+
rspec-rails (3.9.1)
|
128
|
+
actionpack (>= 3.0)
|
129
|
+
activesupport (>= 3.0)
|
130
|
+
railties (>= 3.0)
|
131
|
+
rspec-core (~> 3.9.0)
|
132
|
+
rspec-expectations (~> 3.9.0)
|
133
|
+
rspec-mocks (~> 3.9.0)
|
134
|
+
rspec-support (~> 3.9.0)
|
135
|
+
rspec-support (3.9.3)
|
136
|
+
simplecov (0.16.1)
|
137
|
+
docile (~> 1.1)
|
138
|
+
json (>= 1.8, < 3)
|
139
|
+
simplecov-html (~> 0.10.0)
|
140
|
+
simplecov-html (0.10.2)
|
100
141
|
sprockets (3.7.2)
|
101
142
|
concurrent-ruby (~> 1.0)
|
102
143
|
rack (> 1, < 3)
|
@@ -104,8 +145,13 @@ GEM
|
|
104
145
|
actionpack (>= 4.0)
|
105
146
|
activesupport (>= 4.0)
|
106
147
|
sprockets (>= 3.0.0)
|
148
|
+
sync (0.5.0)
|
149
|
+
term-ansicolor (1.7.1)
|
150
|
+
tins (~> 1.0)
|
107
151
|
thor (1.0.1)
|
108
152
|
thread_safe (0.3.6)
|
153
|
+
tins (1.25.0)
|
154
|
+
sync
|
109
155
|
tzinfo (1.2.7)
|
110
156
|
thread_safe (~> 0.1)
|
111
157
|
|
@@ -114,11 +160,14 @@ PLATFORMS
|
|
114
160
|
|
115
161
|
DEPENDENCIES
|
116
162
|
activerecord-mysql-enum!
|
117
|
-
|
163
|
+
appraisal
|
164
|
+
coveralls
|
118
165
|
pry
|
119
166
|
pry-byebug
|
120
167
|
rails (~> 4.2)
|
121
168
|
rake (~> 13.0)
|
169
|
+
rspec
|
170
|
+
rspec-rails (~> 3.0)
|
122
171
|
|
123
172
|
BUNDLED WITH
|
124
173
|
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
|
10
|
+
Currently this is tested with Rails version 4.2, 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
|
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
|
-
|
2
|
-
#
|
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
@@ -0,0 +1,14 @@
|
|
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", "~> 4.2"
|
11
|
+
gem "rspec"
|
12
|
+
gem "rspec-rails", "~> 3.0"
|
13
|
+
|
14
|
+
gemspec path: "../"
|
@@ -0,0 +1,14 @@
|
|
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
|
+
|
14
|
+
gemspec path: "../"
|
@@ -0,0 +1,14 @@
|
|
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"
|
11
|
+
gem "rspec"
|
12
|
+
gem "rspec-rails", "~> 3.0"
|
13
|
+
|
14
|
+
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
elsif defined? ActiveRecord::ConnectionAdapters::
|
15
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
-
|
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
|
@@ -28,29 +29,37 @@ module ActiveRecord
|
|
28
29
|
#
|
29
30
|
# will generate enum('a', 'b', 'c') for :limit => [:a, :b, :c]
|
30
31
|
if Rails::VERSION::MAJOR < 5
|
31
|
-
def type_to_sql(type, limit = nil,
|
32
|
+
def type_to_sql(type, limit = nil, *args)
|
32
33
|
if type.to_s == 'enum'
|
33
|
-
|
34
|
-
|
34
|
+
column_type_sql =
|
35
|
+
if (native_database_type = native_database_types[type])
|
36
|
+
native_database_type[:name]
|
37
|
+
else
|
38
|
+
'enum'
|
39
|
+
end
|
35
40
|
|
36
|
-
|
41
|
+
quoted_values = limit.map { |v| quote(v) }.join(',')
|
37
42
|
|
38
|
-
column_type_sql
|
43
|
+
"#{column_type_sql}(#{quoted_values})"
|
39
44
|
else
|
40
|
-
super
|
45
|
+
super
|
41
46
|
end
|
42
47
|
end
|
43
48
|
else
|
44
|
-
def type_to_sql(type, limit: nil,
|
49
|
+
def type_to_sql(type, limit: nil, **_options) # :nodoc:
|
45
50
|
if type.to_s == 'enum'
|
46
|
-
|
47
|
-
|
51
|
+
column_type_sql =
|
52
|
+
if (native_database_type = native_database_types[type])
|
53
|
+
native_database_type[:name]
|
54
|
+
else
|
55
|
+
'enum'
|
56
|
+
end
|
48
57
|
|
49
|
-
|
58
|
+
quoted_values = limit.map { |v| quote(v) }.join(',')
|
50
59
|
|
51
|
-
column_type_sql
|
60
|
+
"#{column_type_sql}(#{quoted_values})"
|
52
61
|
else
|
53
|
-
super
|
62
|
+
super
|
54
63
|
end
|
55
64
|
end
|
56
65
|
end
|
@@ -67,10 +76,8 @@ module ActiveRecord
|
|
67
76
|
end
|
68
77
|
end
|
69
78
|
end
|
79
|
+
|
80
|
+
ActiveRecordMysqlAdapter.prepend ActiveRecord::Mysql::Enum::MysqlAdapter
|
70
81
|
end
|
71
82
|
end
|
72
83
|
end
|
73
|
-
|
74
|
-
if adapter_class
|
75
|
-
adapter_class.prepend(ActiveRecord::Mysql::Enum::MysqlAdapter)
|
76
|
-
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'active_record/mysql/enum'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-mysql-enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.pre.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Pohodnya
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -31,6 +31,20 @@ dependencies:
|
|
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
|
+
type: :runtime
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.4.5
|
34
48
|
description: Enable enum type for the MySQL Adapter in ActiveRecord
|
35
49
|
email:
|
36
50
|
- development@invoca.com
|
@@ -41,17 +55,23 @@ files:
|
|
41
55
|
- ".dependabot/config.yml"
|
42
56
|
- ".github/workflows/gem_release.yml"
|
43
57
|
- ".gitignore"
|
58
|
+
- ".rspec"
|
59
|
+
- ".travis.yml"
|
60
|
+
- Appraisals
|
44
61
|
- CHANGELOG.md
|
45
62
|
- Gemfile
|
46
63
|
- Gemfile.lock
|
47
64
|
- LICENSE
|
48
65
|
- README.md
|
49
66
|
- Rakefile
|
67
|
+
- app/assets/config/manifest.js
|
50
68
|
- enum_column.gemspec
|
69
|
+
- gemfiles/.bundle/config
|
70
|
+
- gemfiles/rails_4.gemfile
|
71
|
+
- gemfiles/rails_5.gemfile
|
72
|
+
- gemfiles/rails_6.gemfile
|
51
73
|
- init.rb
|
52
74
|
- 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
75
|
- lib/active_record/mysql/enum/enum_column_adapter.rb
|
56
76
|
- lib/active_record/mysql/enum/enum_type.rb
|
57
77
|
- lib/active_record/mysql/enum/mysql_adapter.rb
|
@@ -59,6 +79,7 @@ files:
|
|
59
79
|
- lib/active_record/mysql/enum/schema_definitions.rb
|
60
80
|
- lib/active_record/mysql/enum/validations.rb
|
61
81
|
- lib/active_record/mysql/enum/version.rb
|
82
|
+
- lib/activerecord-mysql-enum.rb
|
62
83
|
- rails/init.rb
|
63
84
|
homepage: http://github.com/Invoca/activerecord-mysql-enum
|
64
85
|
licenses: []
|
@@ -76,9 +97,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
97
|
version: '0'
|
77
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
99
|
requirements:
|
79
|
-
- - "
|
100
|
+
- - ">"
|
80
101
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
102
|
+
version: 1.3.1
|
82
103
|
requirements: []
|
83
104
|
rubygems_version: 3.0.1
|
84
105
|
signing_key:
|
@@ -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
|