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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15aaf18aef53f29039a854952b1b5e44f0e4aa33
4
- data.tar.gz: 4cb0b621ef38b6a5ba0ace8e8259e3b56b2872d8
3
+ metadata.gz: f48cb1f03e5efc4c877bc640e80d1014b3ed95f3
4
+ data.tar.gz: 961be9b9cca8ca6c1ded7040fdb2523fb1e24825
5
5
  SHA512:
6
- metadata.gz: 759ab41e758a0a38e3186d1508a3b875a65044b3a5297ce89112231c3b7d93e80ebf7bc6072c40baaab773600460a179a0be68ccc1e1955521738c4de683bb39
7
- data.tar.gz: 139d8b0a1dd4c9866d962c699ec3b3bdf47ec31b40b4637d97a98d39fbf902657107eab33aa217278c4adf444675c1506fdd16d24d58cf63b1b4d46791a6833a
6
+ metadata.gz: e613425fc98812bdf5e90845f90d41320e6601743805326aca4eeacdd26bcd2f9fe4c2f1614449befd42308930f5c37e58f3e6eaa6a83df752f84b368034710c
7
+ data.tar.gz: 8bb7032ee05e016e534b309a02525adf3c6a7b54fada56f0058615d3944cc13d633db6b46e3cd40d99fd7406e09cd96863f9824776aa5786ba40defab9a4d0cf
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2012 Aimbulance
1
+ Copyright 2012 Fodojo LLC
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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 => PhoneType.new('home')
69
- b.member :commercial, :object => PhoneType.new('commercial')
70
- b.member :mobile, :object => PhoneType.new('mobile')
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)
@@ -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
- @id2obj[id.to_i]
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 :include, InstanceMethods
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
- [:all, :names, :find_by_id, :find, :first, :last].each do |method|
21
- instance_eval <<-END
22
- def #{method}(*args, &block)
23
- @enum_builder.send(:#{method}, *args, &block)
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
@@ -1,3 +1,3 @@
1
1
  module EnumField
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
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.2.2
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: 2014-06-17 00:00:00.000000000 Z
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: []
@@ -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