activerecord-postgres_enum 0.5.2 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fd9c6d97f0434ff36fd04e33b64cd039ea6fc10afcc0dfb0d90728e4317e5ee
4
- data.tar.gz: 731183b8229e9c84d4bbefff1010e9825c274f93a06d0d26c5b53753ef187a54
3
+ metadata.gz: 2e43929712c3569c4b839d4c3464681e4841faf269e669ecb87ce36866b079ac
4
+ data.tar.gz: 25a312a9bab4f9af1c69b5e4ae39826053da9e0757be8cab4dbb96ce3549288a
5
5
  SHA512:
6
- metadata.gz: e12752bf700f712f6e82a473992a84a0a6d86b8d2c8931dd993bc24e80fe7251c5ef2a98e6af2094e0fe294e1562e32dde3954df3277d3eb4c11cec08bfc8fd8
7
- data.tar.gz: dc34f7be14cecd03afcea23fb279a57383296b673d7ed3721d837e394b22ac5e69e1d1944e48519099b3f56d587eddf2ceffdd0283e559b1641b261851a4932f
6
+ metadata.gz: af99b8890d255f425db4ad5b013c10ec88dac286b56286cd08a78ef519935032bf6b0ed53b65402e1cdc3fbaf7df73094f0febfca08d189a26ec6919b3ff9d78
7
+ data.tar.gz: 066a1f40435ea2e4ecde9384bb6ef21cdf5e4175bc2fbe4f2a0b221f26a4a598b2cc7c9e2c7c1d2bce532263a9d39c9c5c7bf9564627450d65b6a5d20db4917a
data/README.md CHANGED
@@ -53,13 +53,13 @@ rename_enum :mood, :emotions
53
53
  To add a value into existing enum:
54
54
 
55
55
  ```ruby
56
- add_enum_value :mood, "crazy"
56
+ add_enum_value :mood, "pensive"
57
57
  ```
58
58
 
59
59
  To rename a value:
60
60
 
61
61
  ```ruby
62
- rename_enum_value :mood, "crazy", "nutty"
62
+ rename_enum_value :mood, "pensive", "wistful"
63
63
  ```
64
64
 
65
65
  ## Development
@@ -24,7 +24,11 @@ module ActiveRecord
24
24
  end
25
25
 
26
26
  DEFINED_ENUMS_QUERY = <<~SQL
27
- SELECT t.OID, t.typname, t.typtype, array_agg(e.enumlabel) as enumlabels
27
+ SELECT
28
+ t.OID,
29
+ t.typname,
30
+ t.typtype,
31
+ array_to_string(array_agg(e.enumlabel ORDER BY e.enumsortorder), '\t\t', '') as enumlabels
28
32
  FROM pg_type t
29
33
  LEFT JOIN pg_enum e ON e.enumtypid = t.oid
30
34
  WHERE typtype = 'e'
@@ -34,12 +38,12 @@ module ActiveRecord
34
38
 
35
39
  def enums
36
40
  select_all(DEFINED_ENUMS_QUERY).each_with_object({}) do |row, memo|
37
- memo[row["typname"].to_sym] = row['enumlabels'].gsub(/[{}]/, '').gsub('NULL', '').split(',').sort
41
+ memo[row["typname"].to_sym] = row['enumlabels'].split("\t\t")
38
42
  end
39
43
  end
40
44
 
41
45
  def create_enum(name, values)
42
- values = values.map { |v| "'#{v}'" }
46
+ values = values.map { |v| quote v }
43
47
  execute "CREATE TYPE #{name} AS ENUM (#{values.join(', ')})"
44
48
  end
45
49
 
@@ -51,14 +55,20 @@ module ActiveRecord
51
55
  execute "ALTER TYPE #{name} RENAME TO #{new_name}"
52
56
  end
53
57
 
54
- def add_enum_value(name, value)
55
- execute "ALTER TYPE #{name} ADD VALUE '#{value}'"
58
+ def add_enum_value(name, value, after: nil, before: nil)
59
+ sql = "ALTER TYPE #{name} ADD VALUE #{quote value}"
60
+ if after
61
+ sql += " AFTER #{quote after}"
62
+ elsif before
63
+ sql += " BEFORE #{quote before}"
64
+ end
65
+ execute sql
56
66
  end
57
67
 
58
68
  def rename_enum_value(name, existing_value, new_value)
59
69
  raise "Renaming enum values is only supported in PostgreSQL 10.0+" unless rename_enum_value_supported?
60
70
 
61
- execute "ALTER TYPE #{name} RENAME VALUE '#{existing_value}' TO '#{new_value}'"
71
+ execute "ALTER TYPE #{name} RENAME VALUE #{quote existing_value} TO #{quote new_value}"
62
72
  end
63
73
 
64
74
  def migration_keys
@@ -16,8 +16,8 @@ module ActiveRecord
16
16
  statements = []
17
17
 
18
18
  @connection.enums.each do |name, values|
19
- values = values.map(&:inspect).join(', ')
20
- statements << " create_enum #{name.inspect}, [#{values}]"
19
+ values = values.map { |v| " #{v.inspect}," }.join("\n")
20
+ statements << " create_enum #{name.inspect}, [\n#{values}\n ]"
21
21
  end
22
22
 
23
23
  stream.puts statements.join("\n")
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module PostgresEnum
5
- VERSION = "0.5.2"
5
+ VERSION = "0.6.0"
6
6
  end
7
7
  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: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Merkushin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-19 00:00:00.000000000 Z
11
+ date: 2019-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '12.3'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '12.3'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec-rails
113
113
  requirement: !ruby/object:Gem::Requirement