ar-enum 0.1.0 → 0.2.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: 7fafa2cb564dcb6f21264144628705d9c7d68af50a13ea21638ef448a447de8a
4
- data.tar.gz: 607ed017f7d41594e0c1c48d89a854b3921607236a859160076491c8091118dc
3
+ metadata.gz: 7d0d98ef7326a262b83b299baaf0912de2452f3cfba75e4ce47365896fa82bdc
4
+ data.tar.gz: 825fb4e5a0e0911eaff410324abaf15a72251b5434dbfcbfb2f71b57cbf161c4
5
5
  SHA512:
6
- metadata.gz: 57fceb9b862e7bb38e953bedd08843af834fe5f35e8665388441a712b520eebd4991f6520275d5a1f71f4f186058f35eb3180e139c03456f027af89b78ad2e61
7
- data.tar.gz: ebf8f91d84c179226b6303faaad634059336bc1da8edd8ff641d8ffc6c234fa2f7bf002bfadf90fc24f05d3677ade918555bc1f642c31a2171328459b320735c
6
+ metadata.gz: a13ac7fde7ec4ddb9ec49182b16cfe23d8c0ce1f1e3c6313dda9714f5e0b5b7a57d608196fb9c47c43f59019a8132ecc8f1b8118f4b61fc514b9d277db2869e1
7
+ data.tar.gz: d40f5cb1237b57d14b5d188ef4bbfd56a590658ae93f5e640490692d7a961eea5fe5d2e18d4877b3cc133273f0dcde0ed54508327acb4930ec689608e21e8ede
data/README.md CHANGED
@@ -26,6 +26,8 @@ Or install it yourself as:
26
26
 
27
27
  ## Usage
28
28
 
29
+ ### Creating enums
30
+
29
31
  To create a `enum` type, use the method `create_enum`.
30
32
 
31
33
  ```ruby
@@ -38,6 +40,8 @@ create_table :articles do |t|
38
40
  end
39
41
  ```
40
42
 
43
+ ### Dropping enums
44
+
41
45
  To remove the enum, use `drop_enum`.
42
46
 
43
47
  ```ruby
@@ -57,6 +61,8 @@ change_column :articles, :status, :text
57
61
  drop_enum :article_status
58
62
  ```
59
63
 
64
+ ### Adding new labels
65
+
60
66
  Use `add_enum_label` to add new values to the enum type. You can control where the value will be inserted by using `before: label` and `after: label`.
61
67
 
62
68
  ```ruby
@@ -72,16 +78,34 @@ add_enum_value :article_status, "unlisted", after: "draft"
72
78
  add_enum_value :article_status, "unlisted", before: "published"
73
79
  ```
74
80
 
81
+ **WARNING:** PostgreSQL does not have a way of removing values from enum types.
82
+
83
+ ### Renaming existing labels
84
+
75
85
  Use `rename_enum_label` to rename a value.
76
86
 
77
87
  ```ruby
78
88
  create_enum :article_status, %w[draft unlisted published]
79
89
 
80
- # labels will be [draft, hidden, unlisted]
81
- rename_enum_label :article_status, "unlisted", "hidden"
90
+ # labels will be [draft, unlisted, live]
91
+ rename_enum_label :article_status, "published", "live"
82
92
  ```
83
93
 
84
- **WARNING:** PostgreSQL does not have a way of removing values from enum types.
94
+ ### Reversing changes
95
+
96
+ The following commands can be reversed:
97
+
98
+ - `create_enum`
99
+ - `rename_enum_label`
100
+
101
+
102
+ ```ruby
103
+ class CreateColorEnumClass < ActiveRecord::Migration
104
+ def change
105
+ create_enum :color, %w[red blue black]
106
+ end
107
+ end
108
+ ```
85
109
 
86
110
  ## Development
87
111
 
data/lib/ar/enum.rb CHANGED
@@ -4,14 +4,17 @@ require "active_support/all"
4
4
  require "active_record"
5
5
  require "active_record/connection_adapters/postgresql_adapter"
6
6
  require "active_record/schema_dumper"
7
+ require "active_record/migration/command_recorder"
7
8
  require "ar/enum/version"
8
9
 
9
10
  module AR
10
11
  module Enum
11
12
  require "ar/enum/adapter"
12
13
  require "ar/enum/schema_dumper"
14
+ require "ar/enum/command_recorder"
13
15
  end
14
16
  end
15
17
 
18
+ ActiveRecord::Migration::CommandRecorder.include AR::Enum::CommandRecorder
16
19
  ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.include AR::Enum::Adapter
17
20
  ActiveRecord::SchemaDumper.prepend AR::Enum::SchemaDumper
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AR
4
+ module Enum
5
+ module CommandRecorder
6
+ def create_enum(name, values)
7
+ record(__method__, [name, values])
8
+ end
9
+
10
+ def rename_enum_label(name, from, to)
11
+ record(__method__, [name, from, to])
12
+ end
13
+
14
+ def invert_create_enum(args)
15
+ name, _ = args
16
+ [:drop_enum, name]
17
+ end
18
+
19
+ def invert_rename_enum_label(args)
20
+ name, to, from = args
21
+ [:rename_enum_label, [name, from, to]]
22
+ end
23
+ end
24
+ end
25
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AR
4
4
  module Enum
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
@@ -129,6 +129,7 @@ files:
129
129
  - lib/ar-enum.rb
130
130
  - lib/ar/enum.rb
131
131
  - lib/ar/enum/adapter.rb
132
+ - lib/ar/enum/command_recorder.rb
132
133
  - lib/ar/enum/schema_dumper.rb
133
134
  - lib/ar/enum/version.rb
134
135
  homepage: https://rubygems.org/gems/ar-enum