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 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