activerecord-pg_enum 0.1.1 → 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: 2bbfe6c729c9007f5ef0957ac8cb1854ca3f1c4735e32ad77f2e69acd919299e
4
- data.tar.gz: f6ab04b012fb0be96ec35e5ba94457d01815bcfadebcabba72fd34688b11baa3
3
+ metadata.gz: cd614eca633279bd5a19660137152b8461356b8431fea368a3c3a947c64715f7
4
+ data.tar.gz: ce1bba6131f601029c42402e2561869530f4a2ff2bc0d38a56b84c3ba9226f03
5
5
  SHA512:
6
- metadata.gz: fc82a1ac6688320020943da922e8d409198a7461d635a0eb1a046a0442bdbf2164638352287532dc7ec991083a6fdc2cd8f824c23ff93dd2ff7480a93797e6cb
7
- data.tar.gz: 6a93c60c30d7b1e89f21473b6d6459c14f157d00dec1ecd69154dfdcc609b01466f7aa16b8a69dbe60fe03f8c0444cfad5e9ae0c54bc010ecd71bdff8ddae2a9
6
+ metadata.gz: '095f6470ee10ea1c3499b8452cf5e0d9e8d8e5cbc937e91969014574c6558eec1bc30a85306017a98a5e6ae2ddc631381ca91af5d4eb8a4c8991d50dc4575bf2'
7
+ data.tar.gz: ad1ecac7919ea5e73a0653bc8700403b002a5ca518ef305d713c2a22f1ab8bd13ae17f54652bd0c07cdc72cf425ae5bcdaeb9668443627f4891887557dea02f5
data/CHANGELOG.md CHANGED
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.0] - 2018-08-18
10
+ ### Changed
11
+ - Change API of `create_enum` to take two arguments instead, the name and an array of values
12
+
9
13
  ## [0.1.1] - 2018-08-14
10
14
  - Bump Ruby requirement to 2.2.2 (for Rails 5.2) until earlier framework versions are supported.
11
15
  - `enum_types` are listed in alphabetical order
data/README.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  This gem is a small monkeypatch to ActiveRecord so that your `schema.rb` file can support PostgreSQL's native enumerated types.
4
4
 
5
+ This will allow you to use enum columns in your database without replacing `schema.rb` with `structure.sql`.
6
+
7
+ ## Version support
8
+
9
+ Currently only Rails 5.2 is supported. Support for previous versions going back to 4.1 are planned.
10
+
5
11
  ## Installation
6
12
 
7
13
  Add this line to your application's Gemfile:
@@ -20,7 +26,57 @@ Or install it yourself as:
20
26
 
21
27
  ## Usage
22
28
 
23
- TODO: Write usage instructions here
29
+ ### Migrations
30
+
31
+ Defining a new ENUM
32
+
33
+ ```ruby
34
+ class AddContactMethodType < ActiveRecord::Migration[5.2]
35
+ def up
36
+ create_enum "contact_method_type", %w[Email Phone]
37
+ end
38
+
39
+ def down
40
+ drop_enum "contact_method_type"
41
+ end
42
+ end
43
+ ```
44
+
45
+ Adding a value to an existing ENUM
46
+
47
+ ```ruby
48
+ class AddSMSToContactMethodType < ActiveRecord::Migration[5.2]
49
+ def up
50
+ add_enum_value "contact_method_type", "SMS", before: "Phone"
51
+ end
52
+
53
+ def down
54
+ raise ActiveRecord::IrreversibleMigration
55
+ end
56
+ end
57
+ ```
58
+
59
+ ### Helper Methods
60
+
61
+ ```ruby
62
+ class ContactInfo < ActiveRecord::Base
63
+ include ActiveRecord::PGEnum::Helper
64
+
65
+ pg_enum contact_method: %w[Email SMS Phone]
66
+ end
67
+ ```
68
+
69
+ `pg_enum` is a wrapper around the official `enum` method that converts array syntax into strings. The above example is equivalent to:
70
+
71
+ ```ruby
72
+ class ContactInfo < ActiveRecord::Base
73
+ include ActiveRecord::PGEnum::Helper
74
+
75
+ enum contact_method: { Email: "Email", SMS: "SMS", Phone: "Phone" }
76
+ end
77
+ ```
78
+
79
+ There's no technical reason why you couldn't detect enum columns at startup time and automatically do this wireup, but I feel that the benefit of self-documenting outweighs the convenience.
24
80
 
25
81
  ## Development
26
82
 
@@ -14,7 +14,7 @@ module ActiveRecord
14
14
  stream.puts " # These are custom enum types that must be created before they can be used in the schema definition"
15
15
 
16
16
  enum_types.each do |name, definition|
17
- stream.puts %Q{ create_enum "#{name}", "#{definition.join("\", \"")}"}
17
+ stream.puts %Q{ create_enum "#{name}", %w[#{definition.join(" ")}]"}
18
18
  end
19
19
 
20
20
  stream.puts
@@ -6,12 +6,12 @@ module ActiveRecord
6
6
  # Example:
7
7
  #
8
8
  # create_enum("foo_type", "foo", "bar", "baz")
9
- def create_enum(name, *values)
10
- execute "CREATE TYPE #{name} AS ENUM (#{values.map { |v| "'#{v}'" }.join(", ")})"
9
+ def create_enum(name, values)
10
+ execute "CREATE TYPE #{name} AS ENUM (#{Array(values).map { |v| "'#{v}'" }.join(", ")})"
11
11
  end
12
12
 
13
13
  # Drop an ENUM type from the database.
14
- def drop_enum(name, *values_for_revert)
14
+ def drop_enum(name, values_for_revert = nil)
15
15
  execute "DROP TYPE #{name}"
16
16
  end
17
17
 
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module PGEnum
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-pg_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Lassek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-14 00:00:00.000000000 Z
11
+ date: 2018-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg