better_record 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/better_record/base.rb +7 -0
- data/config/initializers/active_record/gender_type.rb +3 -0
- data/config/initializers/active_record/money_type.rb +0 -1
- data/db/migrate/{20180725160802_create_better_record_db_functions.rb → 20180518042050_create_better_record_db_functions.rb} +0 -0
- data/db/migrate/20180518042060_create_better_record_enum_types.rb +18 -0
- data/db/migrate/{20180725201614_create_better_record_table_sizes.rb → 20180518042070_create_better_record_table_sizes.rb} +0 -0
- data/lib/better_record.rb +5 -0
- data/lib/better_record/concerns/active_record_extensions/connection_adapter_extensions.rb +87 -0
- data/lib/better_record/gender.rb +51 -0
- data/lib/better_record/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a405b0c0c1a44d6f315d0c9f364f855b1702f8c476a1eb50d6987b97b318c1a9
|
4
|
+
data.tar.gz: f3bd70fccb3de3710f73529de507052f44d946662e7889426d1ae0ac3b13a2e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf1a31b4a42734e665b44d2cd9e40ac0a3023f99dc888bfb160982d7eabe22df3e892539e667c14d2a8b7c8d7df277c0728f02ef724de69c561fe9ecb21bfe7d
|
7
|
+
data.tar.gz: c133b0a2f00e425b146a7de7822269e0c73d4c28901804ad421441cb09b28d889b3da20525a2347f1fcdc99198e74ee9135057a1ae9dd05493345d0126950cb5
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module BetterRecord
|
2
4
|
class Base < ActiveRecord::Base
|
3
5
|
self.abstract_class = true
|
@@ -28,6 +30,9 @@ module BetterRecord
|
|
28
30
|
# == Boolean Class Methods ================================================
|
29
31
|
|
30
32
|
# == Class Methods ========================================================
|
33
|
+
def self.gender_enum(col)
|
34
|
+
enum col, BetterRecord::Gender::ENUM
|
35
|
+
end
|
31
36
|
|
32
37
|
# == Boolean Methods ======================================================
|
33
38
|
|
@@ -45,5 +50,7 @@ module BetterRecord
|
|
45
50
|
super()
|
46
51
|
end
|
47
52
|
end
|
53
|
+
|
54
|
+
|
48
55
|
end
|
49
56
|
end
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateBetterRecordEnumTypes < ActiveRecord::Migration[5.2]
|
2
|
+
def up
|
3
|
+
execute <<-SQL
|
4
|
+
DO $$
|
5
|
+
BEGIN
|
6
|
+
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'gender') THEN
|
7
|
+
CREATE TYPE gender AS ENUM ('F', 'M');
|
8
|
+
END IF;
|
9
|
+
END
|
10
|
+
$$;
|
11
|
+
SQL
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def down
|
16
|
+
execute "DROP TYPE IF EXISTS gender;"
|
17
|
+
end
|
18
|
+
end
|
File without changes
|
data/lib/better_record.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
module PostgreSQL
|
4
|
+
module OID # :nodoc:
|
5
|
+
class Enum < Type::Value
|
6
|
+
attr_accessor :value_array, :type_override
|
7
|
+
|
8
|
+
def cast(value)
|
9
|
+
value_array ? value_array.find {|v| /^#{v}/i =~ value.to_s } : value.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
type_override || :enum
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def cast_value(value)
|
19
|
+
value_array ? value_array.find {|v| /^#{v}/i =~ value.to_s } : value.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
# This class uses the data from PostgreSQL pg_type table to build
|
23
|
+
# the OID -> Type mapping.
|
24
|
+
# - OID is an integer representing the type.
|
25
|
+
# - Type is an OID::Type object.
|
26
|
+
# This class has side effects on the +store+ passed during initialization.
|
27
|
+
|
28
|
+
class TypeMapInitializer # :nodoc:
|
29
|
+
private
|
30
|
+
def register_enum_type(row)
|
31
|
+
use_sym = true
|
32
|
+
enum_val = OID::Enum.new
|
33
|
+
enum_val.value_array = row['enumlabel'][1..-2].split(',').presence
|
34
|
+
enum_val.value_array.map!(&:to_i) if enum_val.value_array.all? {|v| v =~ /^[0-9]+$/}
|
35
|
+
|
36
|
+
enum_val.type_override = ActiveRecord::Type.registry.__send__(:registrations).find do |type|
|
37
|
+
if type.matches?(row['typname'].to_sym)
|
38
|
+
true
|
39
|
+
elsif type.matches?(row['typname'])
|
40
|
+
use_sym = false
|
41
|
+
true
|
42
|
+
end
|
43
|
+
end && (use_sym ? row['typname'].to_sym : row['typname'])
|
44
|
+
|
45
|
+
register row["oid"], enum_val
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class PostgreSQLAdapter
|
52
|
+
private
|
53
|
+
def load_additional_types(oids = nil)
|
54
|
+
initializer = OID::TypeMapInitializer.new(type_map)
|
55
|
+
|
56
|
+
if supports_ranges?
|
57
|
+
query = <<-SQL
|
58
|
+
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype,
|
59
|
+
array_agg(e.enumlabel) as enumlabel
|
60
|
+
FROM pg_type as t
|
61
|
+
LEFT JOIN pg_range as r ON t.oid = r.rngtypid
|
62
|
+
LEFT JOIN pg_catalog.pg_enum as e ON t.oid = e.enumtypid
|
63
|
+
SQL
|
64
|
+
else
|
65
|
+
query = <<-SQL
|
66
|
+
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, t.typtype, t.typbasetype
|
67
|
+
FROM pg_type as t
|
68
|
+
SQL
|
69
|
+
end
|
70
|
+
|
71
|
+
if oids
|
72
|
+
query += "WHERE t.oid::integer IN (%s)" % oids.join(", ")
|
73
|
+
else
|
74
|
+
query += initializer.query_conditions_for_initial_load
|
75
|
+
end
|
76
|
+
|
77
|
+
if supports_ranges?
|
78
|
+
query += "GROUP BY 1,2,3,4,5,6,7,8"
|
79
|
+
end
|
80
|
+
|
81
|
+
execute_and_clear(query, "SCHEMA", []) do |records|
|
82
|
+
initializer.run(records)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BetterRecord
|
4
|
+
module Gender
|
5
|
+
ENUM = {
|
6
|
+
F: 'F',
|
7
|
+
M: 'M',
|
8
|
+
f: 'F',
|
9
|
+
m: 'M',
|
10
|
+
female: 'F',
|
11
|
+
Female: 'F',
|
12
|
+
male: 'M',
|
13
|
+
Male: 'M',
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
module TableDefinition
|
17
|
+
def gender(*args, **opts)
|
18
|
+
args.each do |name|
|
19
|
+
column name, :gender, **opts
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Type < ActiveRecord::Type::Value
|
25
|
+
|
26
|
+
def cast(value)
|
27
|
+
convert_to_gender(value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def deserialize(value)
|
31
|
+
super(convert_to_gender(value))
|
32
|
+
end
|
33
|
+
|
34
|
+
def serialize(value)
|
35
|
+
super(convert_to_gender(value))
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def convert_to_gender(value)
|
40
|
+
case value.to_s
|
41
|
+
when /^[Mm]/
|
42
|
+
'M'
|
43
|
+
when /^[Ff]/
|
44
|
+
'F'
|
45
|
+
else
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampson Crowley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -245,6 +245,7 @@ files:
|
|
245
245
|
- app/views/better_record/table_sizes/index.html.erb
|
246
246
|
- app/views/better_record/table_sizes/show.html.erb
|
247
247
|
- app/views/layouts/better_record/application.html.erb
|
248
|
+
- config/initializers/active_record/gender_type.rb
|
248
249
|
- config/initializers/active_record/money_type.rb
|
249
250
|
- config/initializers/concerns.rb
|
250
251
|
- config/initializers/core_ext/date.rb
|
@@ -257,8 +258,9 @@ files:
|
|
257
258
|
- config/initializers/mime_types.rb
|
258
259
|
- config/initializers/redis_store.rb
|
259
260
|
- config/routes.rb
|
260
|
-
- db/migrate/
|
261
|
-
- db/migrate/
|
261
|
+
- db/migrate/20180518042050_create_better_record_db_functions.rb
|
262
|
+
- db/migrate/20180518042060_create_better_record_enum_types.rb
|
263
|
+
- db/migrate/20180518042070_create_better_record_table_sizes.rb
|
262
264
|
- db/postgres-audit-trigger.psql
|
263
265
|
- lib/better_record.rb
|
264
266
|
- lib/better_record/batches.rb
|
@@ -267,6 +269,7 @@ files:
|
|
267
269
|
- lib/better_record/concerns/active_record_extensions/associations_extensions/builder_extensions/association_extensions.rb
|
268
270
|
- lib/better_record/concerns/active_record_extensions/attribute_methods/write.rb
|
269
271
|
- lib/better_record/concerns/active_record_extensions/base_extensions.rb
|
272
|
+
- lib/better_record/concerns/active_record_extensions/connection_adapter_extensions.rb
|
270
273
|
- lib/better_record/concerns/active_record_extensions/reflection_extensions.rb
|
271
274
|
- lib/better_record/concerns/controllers/authenticatable.rb
|
272
275
|
- lib/better_record/concerns/controllers/sessionable.rb
|
@@ -274,6 +277,7 @@ files:
|
|
274
277
|
- lib/better_record/encoder.rb
|
275
278
|
- lib/better_record/engine.rb
|
276
279
|
- lib/better_record/fake_redis.rb
|
280
|
+
- lib/better_record/gender.rb
|
277
281
|
- lib/better_record/inject_methods.rb
|
278
282
|
- lib/better_record/jwt.rb
|
279
283
|
- lib/better_record/migration.rb
|