activerecord-postgres_enum 1.6.0 → 2.0.1
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/README.md +1 -1
- data/lib/active_record/postgres_enum/column.rb +13 -0
- data/lib/active_record/postgres_enum/column_methods.rb +12 -0
- data/lib/active_record/postgres_enum/enum_validator.rb +1 -1
- data/lib/active_record/postgres_enum/postgresql_adapter.rb +2 -32
- data/lib/active_record/postgres_enum/schema_dumper.rb +20 -9
- data/lib/active_record/postgres_enum/schema_statements.rb +15 -0
- data/lib/active_record/postgres_enum/version.rb +1 -1
- data/lib/active_record/postgres_enum.rb +41 -16
- metadata +16 -20
- data/lib/active_record/postgres_enum/extensions.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d36ad353392d74fe6bdd5aaeb03cc682cb0f84205b5502ecff4681dd5833afb
|
4
|
+
data.tar.gz: 3c854bb369675b9a188dc8b102d35053fbe942f5939ea8675ea0fb3cfe3f9848
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a95d1362c9bd42e9201c386e26908d3cb0ea7162554a2fd81e5d1b102ff4087d6b47dd5966d3770e00efea5d18e7e8438947f55118057b6dc223d4a070d8ccd
|
7
|
+
data.tar.gz: 827677270881d6e14b394fa043d8c40c6ac2f789f791d484ddf7f0d7f1cbdba365840b3c8e370002c3fb56db46a7f1ce493cb1a9d27fd2f99c4ccae9ad27cfb8
|
data/README.md
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module PostgresEnum
|
5
|
+
module ColumnMethods
|
6
|
+
# Enables `t.enum :my_field, enum_type: :my_enum_name` on migrations
|
7
|
+
def enum(name, enum_type:, **options)
|
8
|
+
column(name, enum_type, **options)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -7,7 +7,7 @@ module ActiveRecord
|
|
7
7
|
@enums ||= {}
|
8
8
|
return @enums[attr_id] if @enums.key?(attr_id)
|
9
9
|
|
10
|
-
@enums[attr_id] ||= connection.
|
10
|
+
@enums[attr_id] ||= connection.enum_types.fetch(type.to_sym) do
|
11
11
|
raise "Enum `#{type}` not found in a database #{connection}"
|
12
12
|
end
|
13
13
|
end
|
@@ -3,26 +3,6 @@
|
|
3
3
|
module ActiveRecord
|
4
4
|
module PostgresEnum
|
5
5
|
module PostgreSQLAdapter
|
6
|
-
# For Rails >= 5.2
|
7
|
-
# https://github.com/rails/rails/blob/5-2-stable/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb
|
8
|
-
module SchemaDumperExt
|
9
|
-
def prepare_column_options(column)
|
10
|
-
spec = super
|
11
|
-
spec[:enum_name] = column.sql_type.inspect if column.type == :enum
|
12
|
-
spec
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# For Rails <5.2
|
17
|
-
# https://github.com/rails/rails/blob/5-1-stable/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb
|
18
|
-
module ColumnDumperExt
|
19
|
-
def prepare_column_options(column)
|
20
|
-
spec = super
|
21
|
-
spec[:enum_name] = column.sql_type.inspect if column.type == :enum
|
22
|
-
spec
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
6
|
DEFINED_ENUMS_QUERY = <<~SQL
|
27
7
|
SELECT
|
28
8
|
t.OID,
|
@@ -36,14 +16,14 @@ module ActiveRecord
|
|
36
16
|
ORDER BY t.typname
|
37
17
|
SQL
|
38
18
|
|
39
|
-
def
|
19
|
+
def enum_types
|
40
20
|
select_all(DEFINED_ENUMS_QUERY).each_with_object({}) do |row, memo|
|
41
21
|
memo[row["typname"].to_sym] = row["enumlabels"].split("\t\t")
|
42
22
|
end
|
43
23
|
end
|
44
24
|
|
45
25
|
def create_enum(name, values, force: false, if_not_exists: nil)
|
46
|
-
return if if_not_exists &&
|
26
|
+
return if if_not_exists && enum_types.include?(name.to_sym)
|
47
27
|
|
48
28
|
drop_enum(name, cascade: force == :cascade, if_exists: true) if force
|
49
29
|
|
@@ -90,16 +70,6 @@ module ActiveRecord
|
|
90
70
|
execute "ALTER TYPE #{name} RENAME VALUE #{quote existing_value} TO #{quote new_value}"
|
91
71
|
end
|
92
72
|
|
93
|
-
def migration_keys
|
94
|
-
super + [:enum_name]
|
95
|
-
end
|
96
|
-
|
97
|
-
def prepare_column_options(column, types)
|
98
|
-
spec = super(column, types)
|
99
|
-
spec[:enum_name] = column.cast_type.enum_name.inspect if column.type == :enum
|
100
|
-
spec
|
101
|
-
end
|
102
|
-
|
103
73
|
def rename_enum_value_supported?
|
104
74
|
ActiveRecord::Base.connection.send(:postgresql_version) >= 100_000
|
105
75
|
end
|
@@ -4,24 +4,35 @@ module ActiveRecord
|
|
4
4
|
module PostgresEnum
|
5
5
|
# provide support for writing out the 'create_enum' calls in schema.rb
|
6
6
|
module SchemaDumper
|
7
|
-
|
8
|
-
|
7
|
+
unless ActiveRecord::PostgresEnum.rails_7?
|
8
|
+
def tables(stream)
|
9
|
+
types(stream)
|
9
10
|
|
10
|
-
|
11
|
+
super
|
12
|
+
end
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
14
16
|
|
15
|
-
def
|
17
|
+
def types(stream)
|
16
18
|
statements = []
|
19
|
+
if @connection.respond_to?(:enum_types)
|
20
|
+
@connection.enum_types.each do |name, values|
|
21
|
+
values = values.map { |v| " #{v.inspect}," }.join("\n")
|
22
|
+
statements << " create_enum #{name.inspect}, [\n#{values}\n ], force: :cascade"
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
|
20
|
-
statements << " create_enum #{name.inspect}, [\n#{values}\n ], force: :cascade"
|
25
|
+
stream.puts statements.join("\n\n")
|
26
|
+
stream.puts
|
21
27
|
end
|
28
|
+
end
|
22
29
|
|
23
|
-
|
24
|
-
|
30
|
+
unless ActiveRecord::PostgresEnum.rails_7?
|
31
|
+
def prepare_column_options(column)
|
32
|
+
spec = super
|
33
|
+
spec[:enum_type] ||= "\"#{column.sql_type}\"" if column.enum?
|
34
|
+
spec
|
35
|
+
end
|
25
36
|
end
|
26
37
|
end
|
27
38
|
end
|
@@ -6,34 +6,59 @@ require "active_record/connection_adapters/postgresql/schema_statements"
|
|
6
6
|
require "active_record/connection_adapters/postgresql_adapter"
|
7
7
|
require "active_support/lazy_load_hooks"
|
8
8
|
|
9
|
+
module ActiveRecord
|
10
|
+
module PostgresEnum
|
11
|
+
def self.rails_7?
|
12
|
+
ActiveRecord::VERSION::MAJOR == 7
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.rails_5?
|
16
|
+
ActiveRecord::VERSION::MAJOR == 5
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
9
21
|
require "active_record/postgres_enum/version"
|
10
22
|
require "active_record/postgres_enum/postgresql_adapter"
|
11
23
|
require "active_record/postgres_enum/schema_dumper"
|
24
|
+
require "active_record/postgres_enum/schema_statements"
|
25
|
+
require "active_record/postgres_enum/column"
|
26
|
+
require "active_record/postgres_enum/column_methods"
|
12
27
|
require "active_record/postgres_enum/command_recorder"
|
13
28
|
require "active_record/postgres_enum/enum_validator"
|
14
29
|
|
15
30
|
ActiveSupport.on_load(:active_record) do
|
16
|
-
|
31
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend ActiveRecord::PostgresEnum::PostgreSQLAdapter
|
17
32
|
|
18
|
-
ActiveRecord::SchemaDumper.prepend
|
33
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.prepend(
|
34
|
+
ActiveRecord::PostgresEnum::SchemaDumper
|
35
|
+
)
|
19
36
|
|
20
|
-
ActiveRecord::
|
37
|
+
ActiveRecord::Migration::CommandRecorder.prepend ActiveRecord::PostgresEnum::CommandRecorder
|
21
38
|
|
22
|
-
|
23
|
-
ActiveRecord::ConnectionAdapters::
|
24
|
-
|
25
|
-
|
26
|
-
|
39
|
+
unless ActiveRecord::PostgresEnum.rails_7?
|
40
|
+
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:enum] = {}
|
41
|
+
|
42
|
+
if ActiveRecord::PostgresEnum.rails_5?
|
43
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLColumn.prepend(
|
44
|
+
ActiveRecord::PostgresEnum::Column
|
45
|
+
)
|
46
|
+
else
|
47
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::Column.prepend(
|
48
|
+
ActiveRecord::PostgresEnum::Column
|
49
|
+
)
|
50
|
+
end
|
27
51
|
|
28
|
-
|
29
|
-
|
30
|
-
ActiveRecord::PostgresEnum::PostgreSQLAdapter::SchemaDumperExt
|
52
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition.include(
|
53
|
+
ActiveRecord::PostgresEnum::ColumnMethods
|
31
54
|
)
|
32
|
-
end
|
33
55
|
|
34
|
-
|
35
|
-
|
36
|
-
|
56
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::Table.include(
|
57
|
+
ActiveRecord::PostgresEnum::ColumnMethods
|
58
|
+
)
|
37
59
|
|
38
|
-
|
60
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements.prepend(
|
61
|
+
ActiveRecord::PostgresEnum::SchemaStatements
|
62
|
+
)
|
63
|
+
end
|
39
64
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgres_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Merkushin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5'
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '6.2'
|
19
|
+
version: '5.2'
|
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: '5'
|
30
|
-
- - "<"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '6.2'
|
26
|
+
version: '5.2'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: pg
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,29 +114,29 @@ dependencies:
|
|
120
114
|
requirements:
|
121
115
|
- - "~>"
|
122
116
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
117
|
+
version: '5.0'
|
124
118
|
type: :development
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
122
|
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
124
|
+
version: '5.0'
|
131
125
|
- !ruby/object:Gem::Dependency
|
132
126
|
name: standard
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
129
|
- - "~>"
|
136
130
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
131
|
+
version: '1.1'
|
138
132
|
type: :development
|
139
133
|
prerelease: false
|
140
134
|
version_requirements: !ruby/object:Gem::Requirement
|
141
135
|
requirements:
|
142
136
|
- - "~>"
|
143
137
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
145
|
-
description:
|
138
|
+
version: '1.1'
|
139
|
+
description:
|
146
140
|
email:
|
147
141
|
- merkushin.m.s@gmail.com
|
148
142
|
executables: []
|
@@ -152,11 +146,13 @@ files:
|
|
152
146
|
- LICENSE.txt
|
153
147
|
- README.md
|
154
148
|
- lib/active_record/postgres_enum.rb
|
149
|
+
- lib/active_record/postgres_enum/column.rb
|
150
|
+
- lib/active_record/postgres_enum/column_methods.rb
|
155
151
|
- lib/active_record/postgres_enum/command_recorder.rb
|
156
152
|
- lib/active_record/postgres_enum/enum_validator.rb
|
157
|
-
- lib/active_record/postgres_enum/extensions.rb
|
158
153
|
- lib/active_record/postgres_enum/postgresql_adapter.rb
|
159
154
|
- lib/active_record/postgres_enum/schema_dumper.rb
|
155
|
+
- lib/active_record/postgres_enum/schema_statements.rb
|
160
156
|
- lib/active_record/postgres_enum/version.rb
|
161
157
|
- lib/activerecord/postgres_enum.rb
|
162
158
|
homepage: https://github.com/bibendi/activerecord-postgres_enum
|
@@ -164,7 +160,7 @@ licenses:
|
|
164
160
|
- MIT
|
165
161
|
metadata:
|
166
162
|
allowed_push_host: https://rubygems.org
|
167
|
-
post_install_message:
|
163
|
+
post_install_message:
|
168
164
|
rdoc_options: []
|
169
165
|
require_paths:
|
170
166
|
- lib
|
@@ -179,8 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
175
|
- !ruby/object:Gem::Version
|
180
176
|
version: '0'
|
181
177
|
requirements: []
|
182
|
-
rubygems_version: 3.
|
183
|
-
signing_key:
|
178
|
+
rubygems_version: 3.2.32
|
179
|
+
signing_key:
|
184
180
|
specification_version: 4
|
185
181
|
summary: Integrate PostgreSQL's enum data type into ActiveRecord's schema and migrations.
|
186
182
|
test_files: []
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ActiveRecord
|
4
|
-
module ConnectionAdapters
|
5
|
-
module PostgreSQL
|
6
|
-
module OID # :nodoc:
|
7
|
-
class Enum < Type::Value # :nodoc:
|
8
|
-
attr_reader :enum_name
|
9
|
-
|
10
|
-
def initialize(enum_name:, **kwargs)
|
11
|
-
@enum_name = enum_name.to_sym
|
12
|
-
super(**kwargs)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class TypeMapInitializer
|
17
|
-
# We need to know the column name, and the default implementation discards it
|
18
|
-
def register_enum_type(row)
|
19
|
-
register row["oid"], OID::Enum.new(enum_name: row["typname"])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
module ColumnMethods # :nodoc:
|
25
|
-
# Enables `t.enum :my_field, enum_name: :my_enum_name` on migrations
|
26
|
-
def enum(name, enum_name:, **options)
|
27
|
-
column(name, enum_name, **options)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|