enum_type 2.1.2 → 2.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 +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +3 -3
- data/Gemfile.lock +16 -17
- data/README.md +53 -0
- data/Rakefile +22 -13
- data/VERSION +1 -1
- data/enum_type.gemspec +28 -31
- data/lib/enum_type.rb +20 -4
- data/lib/enum_type/extensions.rb +3 -1
- data/spec/enum_type_spec.rb +38 -24
- data/spec/spec_helper.rb +2 -1
- metadata +31 -44
- data/README.textile +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94e443bdb2349b66f3c88f2cf08420a46cec5553
|
4
|
+
data.tar.gz: 0b2a7406a96f7e7b37c5fff4bf66d15f59f5bb28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77cb03044e0796c8f02917eecc3b84fbde000c2c5dadc74b2e11f22520986257d05ed5a7cc992486bd58d23f40c82261a127c2266efb92457e6cdc16880679b4
|
7
|
+
data.tar.gz: b6c47f3f60dd12ec1a70418ae14067df7126bd5e2cd1af707f93493461c8f606b9eaa6f10ca1768730939164e6d6e91d0c0ddd73418ca05190dbc0dfe518138b
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0
|
1
|
+
ruby-2.0.0
|
data/Gemfile
CHANGED
@@ -8,11 +8,11 @@ group :development do
|
|
8
8
|
# DEVELOPMENT
|
9
9
|
gem 'jeweler'
|
10
10
|
gem 'yard'
|
11
|
-
gem '
|
11
|
+
gem 'redcarpet', require: nil
|
12
12
|
|
13
13
|
# TEST
|
14
14
|
gem 'rspec'
|
15
15
|
gem 'factory_girl'
|
16
|
-
|
17
|
-
|
16
|
+
gem 'pg', platform: :mri
|
17
|
+
gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby
|
18
18
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
6
|
-
activemodel (4.0.1)
|
7
|
-
activesupport (= 4.0.1)
|
4
|
+
activemodel (4.0.2)
|
5
|
+
activesupport (= 4.0.2)
|
8
6
|
builder (~> 3.1.0)
|
9
|
-
activerecord (4.0.
|
10
|
-
activemodel (= 4.0.
|
7
|
+
activerecord (4.0.2)
|
8
|
+
activemodel (= 4.0.2)
|
11
9
|
activerecord-deprecated_finders (~> 1.0.2)
|
12
|
-
activesupport (= 4.0.
|
10
|
+
activesupport (= 4.0.2)
|
13
11
|
arel (~> 4.0.0)
|
14
12
|
activerecord-deprecated_finders (1.0.3)
|
15
|
-
activerecord-jdbc-adapter (1.3.
|
13
|
+
activerecord-jdbc-adapter (1.3.4)
|
16
14
|
activerecord (>= 2.2)
|
17
|
-
activerecord-jdbcpostgresql-adapter (1.3.
|
18
|
-
activerecord-jdbc-adapter (~> 1.3.
|
15
|
+
activerecord-jdbcpostgresql-adapter (1.3.4)
|
16
|
+
activerecord-jdbc-adapter (~> 1.3.4)
|
19
17
|
jdbc-postgres (>= 9.1)
|
20
|
-
activesupport (4.0.
|
18
|
+
activesupport (4.0.2)
|
21
19
|
i18n (~> 0.6, >= 0.6.4)
|
22
20
|
minitest (~> 4.2)
|
23
21
|
multi_json (~> 1.3)
|
@@ -44,8 +42,8 @@ GEM
|
|
44
42
|
hashie (2.0.5)
|
45
43
|
highline (1.6.20)
|
46
44
|
httpauth (0.2.0)
|
47
|
-
i18n (0.6.
|
48
|
-
jdbc-postgres (9.
|
45
|
+
i18n (0.6.9)
|
46
|
+
jdbc-postgres (9.3.1100)
|
49
47
|
jeweler (1.8.8)
|
50
48
|
builder
|
51
49
|
bundler (~> 1.0)
|
@@ -72,11 +70,12 @@ GEM
|
|
72
70
|
multi_json (~> 1.0)
|
73
71
|
multi_xml (~> 0.5)
|
74
72
|
rack (~> 1.2)
|
75
|
-
pg (0.17.
|
73
|
+
pg (0.17.1)
|
76
74
|
rack (1.5.2)
|
77
|
-
rake (10.1.
|
78
|
-
rdoc (4.0
|
75
|
+
rake (10.1.1)
|
76
|
+
rdoc (4.1.0)
|
79
77
|
json (~> 1.4)
|
78
|
+
redcarpet (3.0.0)
|
80
79
|
rspec (2.14.1)
|
81
80
|
rspec-core (~> 2.14.0)
|
82
81
|
rspec-expectations (~> 2.14.0)
|
@@ -97,12 +96,12 @@ PLATFORMS
|
|
97
96
|
ruby
|
98
97
|
|
99
98
|
DEPENDENCIES
|
100
|
-
RedCloth
|
101
99
|
activerecord (>= 4.0)
|
102
100
|
activerecord-jdbcpostgresql-adapter
|
103
101
|
activesupport (>= 4.0)
|
104
102
|
factory_girl
|
105
103
|
jeweler
|
106
104
|
pg
|
105
|
+
redcarpet
|
107
106
|
rspec
|
108
107
|
yard
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
enum_type
|
2
|
+
=========
|
3
|
+
|
4
|
+
**Enumerated Types in ActiveRecord**
|
5
|
+
|
6
|
+
| | |
|
7
|
+
|:------------|:--------------------------------|
|
8
|
+
| **Author** | Tim Morgan |
|
9
|
+
| **Version** | 2.1.2 (Nov 10, 2013) |
|
10
|
+
| **License** | Released under the MIT license. |
|
11
|
+
|
12
|
+
About
|
13
|
+
-----
|
14
|
+
|
15
|
+
`enum_type` allows you to effectively use the PostgreSQL `ENUM` data type in
|
16
|
+
your ActiveRecord models. It's a really simple gem that just adds a convenience
|
17
|
+
method to take care of the usual "witch chant" that accompanies building an
|
18
|
+
enumerated type in Rails.
|
19
|
+
|
20
|
+
Installation
|
21
|
+
------------
|
22
|
+
|
23
|
+
**Important Note:** This gem requires Ruby 1.9+. Ruby 1.8 is not supported, and
|
24
|
+
will never be.
|
25
|
+
|
26
|
+
First, add the `enum_type` gem to your `Gemfile`:
|
27
|
+
|
28
|
+
```` ruby
|
29
|
+
gem 'enum_type'
|
30
|
+
````
|
31
|
+
|
32
|
+
Then, extend your model with the `EnumType` module:
|
33
|
+
|
34
|
+
```` ruby
|
35
|
+
class MyModel < ActiveRecord::Base
|
36
|
+
extend EnumType
|
37
|
+
end
|
38
|
+
````
|
39
|
+
|
40
|
+
Usage
|
41
|
+
-----
|
42
|
+
|
43
|
+
In your model, call the `enum_type` method, providing one or more enumerated
|
44
|
+
fields, and any additional options:
|
45
|
+
|
46
|
+
```` ruby
|
47
|
+
class MyModel < ActiveRecord::Base
|
48
|
+
extend EnumType
|
49
|
+
enum_type :status, %w( active pending admin superadmin banned )
|
50
|
+
end
|
51
|
+
````
|
52
|
+
|
53
|
+
See the {EnumType#enum_type} method documentation for more information.
|
data/Rakefile
CHANGED
@@ -11,12 +11,12 @@ require 'rake'
|
|
11
11
|
|
12
12
|
require 'jeweler'
|
13
13
|
Jeweler::Tasks.new do |gem|
|
14
|
-
gem.name
|
15
|
-
gem.summary
|
16
|
-
gem.description
|
17
|
-
gem.email
|
18
|
-
gem.homepage
|
19
|
-
gem.authors
|
14
|
+
gem.name = "enum_type"
|
15
|
+
gem.summary = %Q{PostgreSQL enumerated types in ActiveRecord}
|
16
|
+
gem.description = %Q{Allows ActiveRecord to better use PostgreSQL's ENUM types.}
|
17
|
+
gem.email = 'git@timothymorgan.info'
|
18
|
+
gem.homepage = 'http://github.com/riscfuture/enum_type'
|
19
|
+
gem.authors = ["Tim Morgan"]
|
20
20
|
gem.required_ruby_version = '>= 1.9'
|
21
21
|
gem.add_dependency "activerecord", ">= 0"
|
22
22
|
end
|
@@ -26,14 +26,23 @@ require 'rspec/core/rake_task'
|
|
26
26
|
RSpec::Core::RakeTask.new
|
27
27
|
|
28
28
|
require 'yard'
|
29
|
+
|
30
|
+
# bring sexy back (sexy == tables)
|
31
|
+
module YARD::Templates::Helpers::HtmlHelper
|
32
|
+
def html_markup_markdown(text)
|
33
|
+
markup_class(:markdown).new(text, :gh_blockcode, :fenced_code, :autolink, :tables, :no_intraemphasis).to_html
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
YARD::Rake::YardocTask.new('doc') do |doc|
|
30
|
-
doc.options <<
|
31
|
-
doc.options <<
|
32
|
-
doc.options <<
|
33
|
-
doc.options <<
|
34
|
-
doc.options <<
|
35
|
-
|
36
|
-
|
38
|
+
doc.options << '-m' << 'markdown'
|
39
|
+
doc.options << '-M' << 'redcarpet'
|
40
|
+
doc.options << '--protected' << '--no-private'
|
41
|
+
doc.options << '-r' << 'README.md'
|
42
|
+
doc.options << '-o' << 'doc'
|
43
|
+
doc.options << '--title' << 'enum_type Documentation'
|
44
|
+
|
45
|
+
doc.files = %w(lib/**/* README.md)
|
37
46
|
end
|
38
47
|
|
39
48
|
task(default: :spec)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/enum_type.gemspec
CHANGED
@@ -2,20 +2,21 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: enum_type 2.
|
5
|
+
# stub: enum_type 2.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "enum_type"
|
9
|
-
s.version = "2.
|
9
|
+
s.version = "2.2.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
12
13
|
s.authors = ["Tim Morgan"]
|
13
|
-
s.date = "2013-
|
14
|
+
s.date = "2013-12-26"
|
14
15
|
s.description = "Allows ActiveRecord to better use PostgreSQL's ENUM types."
|
15
16
|
s.email = "git@timothymorgan.info"
|
16
17
|
s.extra_rdoc_files = [
|
17
18
|
"LICENSE",
|
18
|
-
"README.
|
19
|
+
"README.md"
|
19
20
|
]
|
20
21
|
s.files = [
|
21
22
|
".document",
|
@@ -25,7 +26,7 @@ Gem::Specification.new do |s|
|
|
25
26
|
"Gemfile",
|
26
27
|
"Gemfile.lock",
|
27
28
|
"LICENSE",
|
28
|
-
"README.
|
29
|
+
"README.md",
|
29
30
|
"Rakefile",
|
30
31
|
"VERSION",
|
31
32
|
"enum_type.gemspec",
|
@@ -36,9 +37,8 @@ Gem::Specification.new do |s|
|
|
36
37
|
"spec/spec_helper.rb"
|
37
38
|
]
|
38
39
|
s.homepage = "http://github.com/riscfuture/enum_type"
|
39
|
-
s.require_paths = ["lib"]
|
40
40
|
s.required_ruby_version = Gem::Requirement.new(">= 1.9")
|
41
|
-
s.rubygems_version = "2.
|
41
|
+
s.rubygems_version = "2.2.0"
|
42
42
|
s.summary = "PostgreSQL enumerated types in ActiveRecord"
|
43
43
|
|
44
44
|
if s.respond_to? :specification_version then
|
@@ -47,37 +47,34 @@ Gem::Specification.new do |s|
|
|
47
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
48
|
s.add_runtime_dependency(%q<activerecord>, [">= 4.0"])
|
49
49
|
s.add_runtime_dependency(%q<activesupport>, [">= 4.0"])
|
50
|
-
s.add_development_dependency(%q<jeweler
|
51
|
-
s.add_development_dependency(%q<yard
|
52
|
-
s.add_development_dependency(%q<
|
53
|
-
s.add_development_dependency(%q<rspec
|
54
|
-
s.add_development_dependency(%q<factory_girl
|
55
|
-
s.add_development_dependency(%q<pg
|
56
|
-
s.add_development_dependency(%q<activerecord-jdbcpostgresql-adapter
|
57
|
-
s.add_runtime_dependency(%q<activerecord>, [">= 0"])
|
50
|
+
s.add_development_dependency(%q<jeweler>)
|
51
|
+
s.add_development_dependency(%q<yard>)
|
52
|
+
s.add_development_dependency(%q<redcarpet>)
|
53
|
+
s.add_development_dependency(%q<rspec>)
|
54
|
+
s.add_development_dependency(%q<factory_girl>)
|
55
|
+
s.add_development_dependency(%q<pg>)
|
56
|
+
s.add_development_dependency(%q<activerecord-jdbcpostgresql-adapter>)
|
58
57
|
else
|
59
58
|
s.add_dependency(%q<activerecord>, [">= 4.0"])
|
60
59
|
s.add_dependency(%q<activesupport>, [">= 4.0"])
|
61
|
-
s.add_dependency(%q<jeweler
|
62
|
-
s.add_dependency(%q<yard
|
63
|
-
s.add_dependency(%q<
|
64
|
-
s.add_dependency(%q<rspec
|
65
|
-
s.add_dependency(%q<factory_girl
|
66
|
-
s.add_dependency(%q<pg
|
67
|
-
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter
|
68
|
-
s.add_dependency(%q<activerecord>, [">= 0"])
|
60
|
+
s.add_dependency(%q<jeweler>)
|
61
|
+
s.add_dependency(%q<yard>)
|
62
|
+
s.add_dependency(%q<redcarpet>)
|
63
|
+
s.add_dependency(%q<rspec>)
|
64
|
+
s.add_dependency(%q<factory_girl>)
|
65
|
+
s.add_dependency(%q<pg>)
|
66
|
+
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter>)
|
69
67
|
end
|
70
68
|
else
|
71
69
|
s.add_dependency(%q<activerecord>, [">= 4.0"])
|
72
70
|
s.add_dependency(%q<activesupport>, [">= 4.0"])
|
73
|
-
s.add_dependency(%q<jeweler
|
74
|
-
s.add_dependency(%q<yard
|
75
|
-
s.add_dependency(%q<
|
76
|
-
s.add_dependency(%q<rspec
|
77
|
-
s.add_dependency(%q<factory_girl
|
78
|
-
s.add_dependency(%q<pg
|
79
|
-
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter
|
80
|
-
s.add_dependency(%q<activerecord>, [">= 0"])
|
71
|
+
s.add_dependency(%q<jeweler>)
|
72
|
+
s.add_dependency(%q<yard>)
|
73
|
+
s.add_dependency(%q<redcarpet>)
|
74
|
+
s.add_dependency(%q<rspec>)
|
75
|
+
s.add_dependency(%q<factory_girl>)
|
76
|
+
s.add_dependency(%q<pg>)
|
77
|
+
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter>)
|
81
78
|
end
|
82
79
|
end
|
83
80
|
|
data/lib/enum_type.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'enum_type/extensions'
|
2
2
|
|
3
|
-
# Adds the
|
3
|
+
# Adds the `enum_type` method to a model.
|
4
4
|
#
|
5
5
|
# @example Basic usage
|
6
6
|
# class MyModel < ActiveRecord::Base
|
@@ -17,16 +17,19 @@ module EnumType
|
|
17
17
|
# @overload enum_type(field, ..., options={})
|
18
18
|
# @param [Symbol] field An enumerated field.
|
19
19
|
# @param [Hash] options A hash of options.
|
20
|
-
# @option options [true, false] :allow_nil (false) If
|
21
|
-
#
|
20
|
+
# @option options [true, false] :allow_nil (false) If `true`, a `nil` value
|
21
|
+
# is allowed.
|
22
22
|
# @option options [Array<String>] :values If given, restricts valid values
|
23
|
-
#
|
23
|
+
# to those in the given array.
|
24
|
+
# @option options [String] :register_type If `true`, registers the column's
|
25
|
+
# type with the PostgreSQL adapter, to suppress "unknown OID" warnings.
|
24
26
|
#
|
25
27
|
# @example Enumerated field with restricted types
|
26
28
|
# enum_type :color, values: %w( red orange yellow green blue purple )
|
27
29
|
|
28
30
|
def enum_type(*fields)
|
29
31
|
options = fields.extract_options!
|
32
|
+
|
30
33
|
fields.each do |field|
|
31
34
|
define_method field do
|
32
35
|
value = read_attribute(field)
|
@@ -39,6 +42,19 @@ module EnumType
|
|
39
42
|
|
40
43
|
validates_presence_of(field) unless options[:allow_nil]
|
41
44
|
validates_inclusion_of(field, in: options[:values].map(&:to_sym), allow_nil: options[:allow_nil]) if options[:values]
|
45
|
+
|
46
|
+
if options[:register_type]
|
47
|
+
#ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID.register_type field.to_s,
|
48
|
+
# ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Identity.new
|
49
|
+
begin
|
50
|
+
result = connection.select_one("SELECT atttypid FROM pg_catalog.pg_attribute WHERE attrelid = #{connection.quote table_name}::regclass AND attname = #{connection.quote field.to_s}")
|
51
|
+
type_oid = Integer(result['atttypid'])
|
52
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::TYPE_MAP[type_oid] =
|
53
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Identity.new
|
54
|
+
rescue => err
|
55
|
+
Rails.logger.warn "Couldn't register type #{field}: #{err}"
|
56
|
+
end
|
57
|
+
end
|
42
58
|
end
|
43
59
|
end
|
44
60
|
end
|
data/lib/enum_type/extensions.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'active_support/core_ext/module/aliasing'
|
2
2
|
require 'active_record/connection_adapters/postgresql_adapter'
|
3
3
|
|
4
|
-
# Patch the PostgreSQL adapter to recognize defaults on ENUM columns.
|
4
|
+
# Patch the PostgreSQL adapter to recognize defaults on `ENUM` columns.
|
5
5
|
|
6
|
+
# @private
|
6
7
|
class ActiveRecord::ConnectionAdapters::PostgreSQLColumn
|
7
8
|
|
8
9
|
def initialize(name, default, oid_type, sql_type = nil, null = true)
|
@@ -36,6 +37,7 @@ class ActiveRecord::ConnectionAdapters::PostgreSQLColumn
|
|
36
37
|
end
|
37
38
|
end if ActiveRecord::ConnectionAdapters::PostgreSQLColumn.methods.include?(:extract_value_from_default)
|
38
39
|
|
40
|
+
# @private
|
39
41
|
class ActiveRecord::ConnectionAdapters::JdbcColumn
|
40
42
|
def initialize(config, name, default, *args)
|
41
43
|
call_discovered_column_callbacks(config)
|
data/spec/enum_type_spec.rb
CHANGED
@@ -4,7 +4,7 @@ module SpecSupport
|
|
4
4
|
class EnumTypeTester
|
5
5
|
include ActiveModel::Validations
|
6
6
|
extend EnumType
|
7
|
-
|
7
|
+
|
8
8
|
def self.set_field(field)
|
9
9
|
@field = field
|
10
10
|
reset_callbacks :validate
|
@@ -37,31 +37,31 @@ describe EnumType do
|
|
37
37
|
context "[getter]" do
|
38
38
|
it "should return a symbol" do
|
39
39
|
Model.connection.execute "INSERT INTO models (state) VALUES ('completed')"
|
40
|
-
Model.last.state.
|
40
|
+
expect(Model.last.state).to eql(:completed)
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should return nil if the value is nil" do
|
44
44
|
Model.connection.execute "INSERT INTO models (state) VALUES (NULL)"
|
45
|
-
Model.last.state.
|
45
|
+
expect(Model.last.state).to be_nil
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
context "[setter]" do
|
50
50
|
it "should typecast the value to a string" do
|
51
|
-
m
|
51
|
+
m = Model.new
|
52
52
|
m.state = :failed
|
53
|
-
m.state.
|
53
|
+
expect(m.state).to eql(:failed)
|
54
54
|
m.save!
|
55
|
-
m.reload.state.
|
56
|
-
m.state_before_type_cast.
|
55
|
+
expect(m.reload.state).to eql(:failed)
|
56
|
+
expect(m.state_before_type_cast).to eql('failed')
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
it "should leave nil as nil" do
|
60
|
-
m
|
60
|
+
m = Model.new
|
61
61
|
m.state = nil
|
62
|
-
m.state.
|
62
|
+
expect(m.state).to eql(nil)
|
63
63
|
m.save!
|
64
|
-
m.reload.state.
|
64
|
+
expect(m.reload.state).to be_nil
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -71,38 +71,52 @@ describe EnumType do
|
|
71
71
|
SpecSupport::EnumTypeTester.set_field(@field)
|
72
72
|
@model = SpecSupport::EnumTypeTester.new
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
it "should validate inclusion if :values option is given" do
|
76
|
-
SpecSupport::EnumTypeTester.enum_type @field, values: [
|
76
|
+
SpecSupport::EnumTypeTester.enum_type @field, values: [:a, :b]
|
77
77
|
@model.send :"#{@field}=", :a
|
78
|
-
@model.get.
|
79
|
-
@model.
|
78
|
+
expect(@model.get).to eql('a')
|
79
|
+
expect(@model).to be_valid
|
80
80
|
@model.send :"#{@field}=", :c
|
81
|
-
@model.
|
81
|
+
expect(@model).not_to be_valid
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should not validate presence if :allow_nil is true" do
|
85
85
|
pending "Doesn't work"
|
86
86
|
SpecSupport::EnumTypeTester.enum_type @field, allow_nil: true
|
87
87
|
@model.send :"#{@field}=", nil
|
88
|
-
@model.
|
88
|
+
expect(@model).to be_valid
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
it "should validate presence if :allow_nil is not given" do
|
92
92
|
SpecSupport::EnumTypeTester.enum_type @field
|
93
93
|
@model.send :"#{@field}=", nil
|
94
|
-
@model.
|
94
|
+
expect(@model).not_to be_valid
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
it "should validate presence if :allow_nil is false" do
|
98
98
|
SpecSupport::EnumTypeTester.enum_type @field, allow_nil: false
|
99
99
|
@model.send :"#{@field}=", nil
|
100
|
-
@model.
|
100
|
+
expect(@model).not_to be_valid
|
101
101
|
end
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
|
+
context '[:register_type option]' do
|
105
|
+
before(:each) { @field = FactoryGirl.generate(:enum_field) }
|
106
|
+
|
107
|
+
it "should register each new PostgreSQL type with ActiveRecord when set" do
|
108
|
+
expect(Model.connection).
|
109
|
+
to receive(:select_one).once.
|
110
|
+
with(/SELECT atttypid FROM pg_catalog.pg_attribute WHERE attrelid = 'models'::regclass AND attname = '#{@field}'/).
|
111
|
+
and_return('atttypid' => '12345')
|
112
|
+
Model.enum_type @field, register_type: true
|
113
|
+
expect(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::TYPE_MAP[12345]).
|
114
|
+
to be_kind_of(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Identity)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
104
118
|
it "should determine the correct column default" do
|
105
|
-
Model.columns.detect { |c| c.name == 'state' }.default.
|
119
|
+
expect(Model.columns.detect { |c| c.name == 'state' }.default).to eql('pending')
|
106
120
|
end
|
107
121
|
end
|
108
122
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,153 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enum_type
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Morgan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: jeweler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: yard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: redcarpet
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: factory_girl
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
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
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: pg
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: activerecord-jdbcpostgresql-adapter
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: activerecord
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - '>='
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - '>='
|
136
|
+
- - ">="
|
151
137
|
- !ruby/object:Gem::Version
|
152
138
|
version: '0'
|
153
139
|
description: Allows ActiveRecord to better use PostgreSQL's ENUM types.
|
@@ -156,16 +142,16 @@ executables: []
|
|
156
142
|
extensions: []
|
157
143
|
extra_rdoc_files:
|
158
144
|
- LICENSE
|
159
|
-
- README.
|
145
|
+
- README.md
|
160
146
|
files:
|
161
|
-
- .document
|
162
|
-
- .rspec
|
163
|
-
- .ruby-gemset
|
164
|
-
- .ruby-version
|
147
|
+
- ".document"
|
148
|
+
- ".rspec"
|
149
|
+
- ".ruby-gemset"
|
150
|
+
- ".ruby-version"
|
165
151
|
- Gemfile
|
166
152
|
- Gemfile.lock
|
167
153
|
- LICENSE
|
168
|
-
- README.
|
154
|
+
- README.md
|
169
155
|
- Rakefile
|
170
156
|
- VERSION
|
171
157
|
- enum_type.gemspec
|
@@ -183,18 +169,19 @@ require_paths:
|
|
183
169
|
- lib
|
184
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
185
171
|
requirements:
|
186
|
-
- -
|
172
|
+
- - ">="
|
187
173
|
- !ruby/object:Gem::Version
|
188
174
|
version: '1.9'
|
189
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
176
|
requirements:
|
191
|
-
- -
|
177
|
+
- - ">="
|
192
178
|
- !ruby/object:Gem::Version
|
193
179
|
version: '0'
|
194
180
|
requirements: []
|
195
181
|
rubyforge_project:
|
196
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.2.0
|
197
183
|
signing_key:
|
198
184
|
specification_version: 4
|
199
185
|
summary: PostgreSQL enumerated types in ActiveRecord
|
200
186
|
test_files: []
|
187
|
+
has_rdoc:
|
data/README.textile
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
h1. enum_type -- Enumerated Types in ActiveRecord
|
2
|
-
|
3
|
-
| *Author* | Tim Morgan |
|
4
|
-
| *Version* | 2.1.2 (Nov 10, 2013) |
|
5
|
-
| *License* | Released under the MIT license. |
|
6
|
-
|
7
|
-
h2. About
|
8
|
-
|
9
|
-
@enum_type@ allows you to effectively use the PostgreSQL @ENUM@ data type in
|
10
|
-
your ActiveRecord models. It's a really simple gem that just adds a convenience
|
11
|
-
method to take care of the usual "witch chant" that accompanies building an
|
12
|
-
enumerated type in Rails.
|
13
|
-
|
14
|
-
h2. Installation
|
15
|
-
|
16
|
-
*Important Note:* This gem requires Ruby 1.9. Ruby 1.8 is not supported, and
|
17
|
-
will never be.
|
18
|
-
|
19
|
-
First, add the @enum_type@ gem to your @Gemfile@:
|
20
|
-
|
21
|
-
<pre><code>
|
22
|
-
gem 'enum_type'
|
23
|
-
</code></pre>
|
24
|
-
|
25
|
-
Then, extend your model with the @EnumType@ module:
|
26
|
-
|
27
|
-
<pre><code>
|
28
|
-
class MyModel < ActiveRecord::Base
|
29
|
-
extend EnumType
|
30
|
-
end
|
31
|
-
</code></pre>
|
32
|
-
|
33
|
-
h2. Usage
|
34
|
-
|
35
|
-
In your model, call the @enum_type@ method, providing one or more enumerated
|
36
|
-
fields, and any additional options:
|
37
|
-
|
38
|
-
<pre><code>
|
39
|
-
class MyModel < ActiveRecord::Base
|
40
|
-
extend EnumType
|
41
|
-
enum_type :status, %w( active pending admin superadmin banned )
|
42
|
-
end
|
43
|
-
</code></pre>
|
44
|
-
|
45
|
-
See the {EnumType#enum_type} method documentation for more information.
|