galetahub-enum_field 0.2.2 → 0.3.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/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
|