galetahub-enum_field 0.5.2 → 0.5.3

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
- SHA256:
3
- metadata.gz: bca2cd26a65aed9da78b857dfa411cb9fadb58f4a81b9d1210e647415b54888e
4
- data.tar.gz: cb795d43547eaed7c63f8a876aa72ebcfa3630cbb13c42fc60357853f853f762
2
+ SHA1:
3
+ metadata.gz: 2be661f299492be0519d65da4c1058d38799ff3e
4
+ data.tar.gz: a06ff5abf876efbfb0d9318aac939566e7daad83
5
5
  SHA512:
6
- metadata.gz: 8440864257d9c15d30b7098eaaf731ddac95c820c3e98e6fc3a9d4aedcd24e6267ff169b399e6c7d5f8a927713afea380b3b084e1a5aa381bfaed0153bca28a4
7
- data.tar.gz: dd780b0a27aff83db43819b5f5f9922277428c07eab20824eebdec295d84d79500a284deb30abbf43965b701596fcb14f075302771cc7e54e1ab19943fbe3ade
6
+ metadata.gz: 243473028ff13052255159cdb793122763ab4e568a7289fa6db1a825dace9edcf7345a6767f8b66f357ee780173e70f50617adcbef293211a35e354225724c45
7
+ data.tar.gz: e1f248f5232d6aa901081579fba8faddbe86a0a71853b984c76c4fe464f1cc73699ee0f400de0df4866dfde17c13fecd4ecf2b6f7bbd3b078e0dedcd50307f8c
data/lib/enum_field.rb CHANGED
@@ -15,6 +15,7 @@
15
15
  module EnumField
16
16
  autoload :DefineEnum, 'enum_field/define_enum'
17
17
  autoload :Builder, 'enum_field/builder'
18
+ autoload :AttributeValueResolver, 'enum_field/attribute_value_resolver'
18
19
  autoload :EnumeratedAttribute, 'enum_field/enumerated_attribute'
19
20
  autoload :Version, 'enum_field/version'
20
21
 
@@ -0,0 +1,31 @@
1
+ module EnumField
2
+ class AttributeValueResolver
3
+ attr_reader :value, :klass
4
+
5
+ def initialize(value, klass)
6
+ @value = value
7
+ @klass = klass
8
+ end
9
+
10
+ def resolve
11
+ if value_is_member?
12
+ value.id
13
+ elsif value_is_member_name?
14
+ klass.send(value).id
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def value_is_member?
21
+ value && value.respond_to?(:id)
22
+ end
23
+
24
+ def value_is_member_name?
25
+ return false unless value.is_a?(Symbol)
26
+ return true if klass.respond_to?(value)
27
+
28
+ raise EnumField::ObjectNotFound, value
29
+ end
30
+ end
31
+ end
@@ -54,7 +54,7 @@ module EnumField
54
54
  end
55
55
 
56
56
  define_method("#{name_attribute}=") do |value|
57
- raw = value ? value.id : nil
57
+ raw = EnumField::AttributeValueResolver.new(value, klass).resolve
58
58
  send("#{id_attribute}=", raw)
59
59
  end
60
60
  end
@@ -1,3 +1,3 @@
1
1
  module EnumField
2
- VERSION = '0.5.2'.freeze
2
+ VERSION = '0.5.3'.freeze
3
3
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe EnumField::AttributeValueResolver do
4
+ # Sample ruby class
5
+ class Role
6
+ include EnumField::DefineEnum
7
+
8
+ define_enum do
9
+ member :admin
10
+ member :manager
11
+ member :employee
12
+ end
13
+ end
14
+
15
+ it 'should find object by member name and return id' do
16
+ expect(described_class.new(:admin, Role).resolve).to eq 1
17
+ expect(described_class.new(:manager, Role).resolve).to eq 2
18
+ expect(described_class.new(:employee, Role).resolve).to eq 3
19
+ end
20
+
21
+ it 'should raise error on invalid member name' do
22
+ expect { described_class.new(:invalid_member_name, Role).resolve }
23
+ .to raise_error(EnumField::ObjectNotFound)
24
+ end
25
+
26
+ it 'should return member id' do
27
+ expect(described_class.new(Role.admin, Role).resolve).to eq 1
28
+ expect(described_class.new(Role.manager, Role).resolve).to eq 2
29
+ expect(described_class.new(Role.employee, Role).resolve).to eq 3
30
+ end
31
+ 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.5.2
4
+ version: 0.5.3
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: 2018-07-13 00:00:00.000000000 Z
12
+ date: 2019-04-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -79,10 +79,12 @@ files:
79
79
  - README.md
80
80
  - Rakefile
81
81
  - lib/enum_field.rb
82
+ - lib/enum_field/attribute_value_resolver.rb
82
83
  - lib/enum_field/builder.rb
83
84
  - lib/enum_field/define_enum.rb
84
85
  - lib/enum_field/enumerated_attribute.rb
85
86
  - lib/enum_field/version.rb
87
+ - spec/enum_field/attribute_value_resolver_spec.rb
86
88
  - spec/enum_field/define_enum_spec.rb
87
89
  - spec/enum_field/enumerated_attribute_spec.rb
88
90
  - spec/enum_field_spec.rb
@@ -106,11 +108,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
108
  version: '0'
107
109
  requirements: []
108
110
  rubyforge_project:
109
- rubygems_version: 2.7.6
111
+ rubygems_version: 2.5.2.3
110
112
  signing_key:
111
113
  specification_version: 4
112
114
  summary: Enumerated attributes for any ruby class aka Active Record
113
115
  test_files:
116
+ - spec/enum_field/attribute_value_resolver_spec.rb
114
117
  - spec/enum_field/define_enum_spec.rb
115
118
  - spec/enum_field/enumerated_attribute_spec.rb
116
119
  - spec/enum_field_spec.rb