galetahub-enum_field 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.rdoc +11 -3
- data/lib/enum_field.rb +2 -3
- data/lib/enum_field/builder.rb +15 -1
- data/lib/enum_field/define_enum.rb +5 -11
- data/lib/enum_field/enumerated_attribute.rb +4 -0
- data/lib/enum_field/version.rb +1 -1
- metadata +4 -5
- data/lib/enum_field/railtie.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f48cb1f03e5efc4c877bc640e80d1014b3ed95f3
|
4
|
+
data.tar.gz: 961be9b9cca8ca6c1ded7040fdb2523fb1e24825
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e613425fc98812bdf5e90845f90d41320e6601743805326aca4eeacdd26bcd2f9fe4c2f1614449befd42308930f5c37e58f3e6eaa6a83df752f84b368034710c
|
7
|
+
data.tar.gz: 8bb7032ee05e016e534b309a02525adf3c6a7b54fada56f0058615d3944cc13d633db6b46e3cd40d99fd7406e09cd96863f9824776aa5786ba40defab9a4d0cf
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -42,6 +42,8 @@ If you are not confortable with any of this options, maybe +enum_field+ is an an
|
|
42
42
|
end
|
43
43
|
|
44
44
|
class User < ActiveRecord::Base
|
45
|
+
extend EnumField::EnumeratedAttribute
|
46
|
+
|
45
47
|
# in the database table there is a role_id integer column
|
46
48
|
enumerated_attribute :role
|
47
49
|
end
|
@@ -65,9 +67,9 @@ Your enum classes can have all the methods you need:
|
|
65
67
|
attr_reader :name
|
66
68
|
|
67
69
|
define_enum do |b|
|
68
|
-
b.member :home, :object =>
|
69
|
-
b.member :commercial, :object =>
|
70
|
-
b.member :mobile, :object =>
|
70
|
+
b.member :home, :object => new('home')
|
71
|
+
b.member :commercial, :object => new('commercial')
|
72
|
+
b.member :mobile, :object => new('mobile')
|
71
73
|
end
|
72
74
|
end
|
73
75
|
|
@@ -84,6 +86,8 @@ You have some +AR+ like methods in enum classes
|
|
84
86
|
PhoneType.find(2) == PhoneType.commercial
|
85
87
|
PhoneType.find(123456) # will raise
|
86
88
|
|
89
|
+
PhoneType.find([1, 2]) == [PhoneType.home, PhoneType.commercial]
|
90
|
+
|
87
91
|
The library also mimics has_many :through behavior, for cases such as:
|
88
92
|
|
89
93
|
class Role
|
@@ -97,10 +101,14 @@ The library also mimics has_many :through behavior, for cases such as:
|
|
97
101
|
end
|
98
102
|
|
99
103
|
class User
|
104
|
+
extend EnumField::EnumeratedAttribute
|
105
|
+
|
100
106
|
has_many_enumerated_attributes :roles, :through => UserRole
|
101
107
|
end
|
102
108
|
|
103
109
|
class UserRole < ActiveRecord::Base
|
110
|
+
extend EnumField::EnumeratedAttribute
|
111
|
+
|
104
112
|
belongs_to :user
|
105
113
|
enumerated_attribute :role
|
106
114
|
end
|
data/lib/enum_field.rb
CHANGED
@@ -6,10 +6,11 @@ module EnumField
|
|
6
6
|
autoload :Version, 'enum_field/version'
|
7
7
|
|
8
8
|
class BadId < StandardError
|
9
|
+
attr_reader :repeated_id
|
10
|
+
|
9
11
|
def initialize(repeated_id)
|
10
12
|
@repeated_id = repeated_id
|
11
13
|
end
|
12
|
-
attr_reader :repeated_id
|
13
14
|
end
|
14
15
|
|
15
16
|
class RepeatedId < StandardError; end
|
@@ -17,5 +18,3 @@ module EnumField
|
|
17
18
|
class InvalidOptions < StandardError; end
|
18
19
|
class ObjectNotFound < StandardError; end
|
19
20
|
end
|
20
|
-
|
21
|
-
require 'enum_field/railtie' if defined?(Rails)
|
data/lib/enum_field/builder.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module EnumField
|
3
3
|
class Builder
|
4
|
+
|
5
|
+
METHODS = [:all, :names, :find_by_id, :find, :first, :last]
|
6
|
+
|
4
7
|
def initialize(target)
|
5
8
|
@target = target
|
6
9
|
@next_id = 0
|
@@ -30,7 +33,18 @@ module EnumField
|
|
30
33
|
end
|
31
34
|
|
32
35
|
def find_by_id(id)
|
33
|
-
|
36
|
+
case id
|
37
|
+
when Integer, String, Float, Fixnum then
|
38
|
+
@id2obj[id.to_i]
|
39
|
+
when Array then
|
40
|
+
id.inject([]) do |items, value|
|
41
|
+
if value && value.respond_to?(:to_i)
|
42
|
+
items << @id2obj[value.to_i]
|
43
|
+
end
|
44
|
+
|
45
|
+
items
|
46
|
+
end
|
47
|
+
end
|
34
48
|
end
|
35
49
|
|
36
50
|
def first; @sorted.first; end
|
@@ -2,8 +2,7 @@
|
|
2
2
|
module EnumField
|
3
3
|
module DefineEnum
|
4
4
|
def self.included(base)
|
5
|
-
base.send :
|
6
|
-
base.send :extend, ClassMethods
|
5
|
+
base.send :extend, ClassMethods
|
7
6
|
end
|
8
7
|
|
9
8
|
module ClassMethods
|
@@ -17,17 +16,12 @@ module EnumField
|
|
17
16
|
@enum_builder ||= EnumField::Builder.new(self)
|
18
17
|
yield @enum_builder
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
END
|
19
|
+
EnumField::Builder::METHODS.each do |method|
|
20
|
+
define_singleton_method method do |*args, &block|
|
21
|
+
@enum_builder.send(method, *args, &block)
|
22
|
+
end
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
29
|
-
|
30
|
-
module InstanceMethods
|
31
|
-
end
|
32
26
|
end
|
33
27
|
end
|
@@ -17,10 +17,14 @@ module EnumField
|
|
17
17
|
# For instance:
|
18
18
|
# <tt>
|
19
19
|
# class User
|
20
|
+
# extend EnumField::EnumeratedAttribute
|
21
|
+
#
|
20
22
|
# has_many_enumerated_attributes :roles, :through => UserRole
|
21
23
|
# end
|
22
24
|
#
|
23
25
|
# class UserRole < ActiveRecord::Base
|
26
|
+
# extend EnumField::EnumeratedAttribute
|
27
|
+
#
|
24
28
|
# belongs_to :user
|
25
29
|
# enumerated_attribute :role
|
26
30
|
# end
|
data/lib/enum_field/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: galetahub-enum_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Galeta
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Enables Active Record attributes to point to enum like objects, by saving
|
15
15
|
in your database only an integer ID
|
@@ -22,7 +22,6 @@ files:
|
|
22
22
|
- lib/enum_field/builder.rb
|
23
23
|
- lib/enum_field/define_enum.rb
|
24
24
|
- lib/enum_field/enumerated_attribute.rb
|
25
|
-
- lib/enum_field/railtie.rb
|
26
25
|
- lib/enum_field/version.rb
|
27
26
|
- lib/enum_field.rb
|
28
27
|
- MIT-LICENSE
|
@@ -37,12 +36,12 @@ require_paths:
|
|
37
36
|
- lib
|
38
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
39
38
|
requirements:
|
40
|
-
- -
|
39
|
+
- - ">="
|
41
40
|
- !ruby/object:Gem::Version
|
42
41
|
version: '0'
|
43
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
|
-
- -
|
44
|
+
- - ">="
|
46
45
|
- !ruby/object:Gem::Version
|
47
46
|
version: '0'
|
48
47
|
requirements: []
|
data/lib/enum_field/railtie.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'rails'
|
3
|
-
require 'enum_field'
|
4
|
-
|
5
|
-
module EnumField
|
6
|
-
class Railtie < ::Rails::Railtie
|
7
|
-
config.before_initialize do
|
8
|
-
ActiveSupport.on_load :active_record do
|
9
|
-
ActiveRecord::Base.send(:extend, EnumField::EnumeratedAttribute)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|