yinum 2.0.2 → 2.1.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: df8ede855dacae3d39136e39fb7e2655a9250581
4
- data.tar.gz: 5a6df32c4d26a9be9b395adc52455fc348b19208
3
+ metadata.gz: 8c450598a4dcf89038e0691a37b91587dc5fe9cf
4
+ data.tar.gz: 6fff7a2b55d125bd61fa1bae626fb58f9792edaf
5
5
  SHA512:
6
- metadata.gz: 671e06737cdb207fd2fb6216a00a2cf0472d3b81e56fe86e79ce4a8c76182fbd852463e0e57599d4c1e40e9bf8ddad0f206bef89369a4d11f1f1ddeef16f2914
7
- data.tar.gz: f73919ef6fc65ba2839288a2990da531845cdf564f98d619b091d03fa526f5493aada44eeb881ad3d1e1f450e8eff44702661348d4c5220854303fca7ec11b4b
6
+ metadata.gz: 0dd0e387e139a4a0b14ad32ac2fe60a171620ff7a56c0e2c65bdd8a5a5b11586dfa691c4cfda9c2cc020360e9c7ea5034cb57a1ad193e5a07739b144ac10659a
7
+ data.tar.gz: 8066897d9d060b68c3b10ab3e9b4a52f9965b5a8e5c954cbacae5828fbede143aca8c7eb3465d7dc8c15eb9d81781ed5ae27e2cdee9f7ab94ab42b0c64bbc4c9
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  *.sassc
4
4
  .sass-cache
5
5
  capybara-*.html
6
- .rspec
7
6
  /.bundle
8
7
  /vendor/bundle
9
8
  /log/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ **2.1.0**
2
+ * Use generate_method in attr_enum. This is backward incompatible for using
3
+ attr_enum on accessors defined on the class level. Use modules.
4
+
1
5
  **2.0.0**
2
6
  * Use `#alias_attr` instead of calling super in `Enum::Helpers::EnumAttribute`.
3
7
  * Allow valueless enums (given with `Array` instead of `Hash`), that map to the
data/Gemfile.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yinum (2.0.2)
4
+ yinum (2.1.0)
5
+ generate_method (~> 1.0)
5
6
 
6
7
  GEM
7
8
  remote: http://rubygems.org/
8
9
  specs:
9
10
  diff-lcs (1.2.5)
11
+ generate_method (1.0.0)
10
12
  nil_or (2.0.0)
11
13
  rspec (2.14.1)
12
14
  rspec-core (~> 2.14.0)
data/README.md CHANGED
@@ -104,7 +104,11 @@ Generating enum attribute methods for your class:
104
104
 
105
105
  ```ruby
106
106
  class Car
107
- attr_accessor :color
107
+ module Colorful
108
+ attr_accessor :color # using attr_accessor on Car will create methods with higher priority than attr_enum.
109
+ end
110
+ include Colorful
111
+
108
112
  attr_enum :color, :COLORS, :red => 1, :black => 2
109
113
  end
110
114
  car = Car.new
@@ -124,7 +128,11 @@ If this is a defining attribute for the class, add `:qualifier => true` to gener
124
128
 
125
129
  ```ruby
126
130
  class Car
127
- attr_accessor :color
131
+ module Colorful
132
+ attr_accessor :color # using attr_accessor on Car will create methods with higher priority than attr_enum.
133
+ end
134
+ include Colorful
135
+
128
136
  attr_enum :color, :COLORS, { :qualifier => true }, :red => 1, :black => 2
129
137
  end
130
138
  car = Car.new
@@ -1,4 +1,5 @@
1
1
  require 'enum/helpers/enum_generator'
2
+ require 'generate_method'
2
3
 
3
4
  module Enum::Helpers::EnumAttribute
4
5
  include Enum::Helpers::EnumGenerator
@@ -18,38 +19,30 @@ module Enum::Helpers::EnumAttribute
18
19
  yinum name_or_enum, hash if hash.any?
19
20
  e = const_get(name_or_enum)
20
21
  end
21
- # attribute reader
22
- reader, reader_without_enum = attr, :"#{attr}_without_enum"
23
- begin
24
- alias_method reader_without_enum, reader
25
- rescue NameError # reader does not exist
26
- no_reader = true
27
- end
28
- define_method(reader) do
29
- v = no_reader ? super() : send(reader_without_enum)
30
- (ev = e.get(v)).nil? ? Enum::EnumValue.new(e, v) : ev
31
- end
32
- # attribute writer
33
- writer, writer_without_enum = :"#{attr}=", :"#{attr}_without_enum="
34
- begin
35
- alias_method writer_without_enum, writer
36
- rescue NameError # writer does not exist
37
- no_writer = true
38
- end
39
- define_method(writer) do |v|
40
- v = case
41
- when v.enum_value? then v.value
42
- # might be received from forms
43
- when v.nil?, v == "" then v
44
- else e[v].value
45
- end
46
- no_writer ? super(v) : send(writer_without_enum, v)
47
- end
22
+ generate_methods overrider: :enum do
23
+ # attribute reader
24
+ reader, reader_without_enum = attr, :"#{attr}_without_enum"
25
+ define_method(reader) do
26
+ v = respond_to?(reader_without_enum) ? send(reader_without_enum) : super()
27
+ (ev = e.get(v)).nil? ? Enum::EnumValue.new(e, v) : ev
28
+ end
29
+ # attribute writer
30
+ writer, writer_without_enum = :"#{attr}=", :"#{attr}_without_enum="
31
+ define_method(writer) do |v|
32
+ v = case
33
+ when v.enum_value? then v.value
34
+ # might be received from forms
35
+ when v.nil?, v == "" then v
36
+ else e[v].value
37
+ end
38
+ respond_to?(writer_without_enum) ? send(writer_without_enum, v) : super(v)
39
+ end
48
40
 
49
- if options[:qualifier]
50
- # generating scopes and questioning methods
51
- e.by_name.each do |n, ev|
52
- define_method("#{n}?") { send(attr) == ev }
41
+ if options[:qualifier]
42
+ # generating scopes and questioning methods
43
+ e.by_name.each do |n, ev|
44
+ define_method("#{n}?") { send(attr) == ev }
45
+ end
53
46
  end
54
47
  end
55
48
 
data/lib/enum/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Enum
2
- VERSION = '2.0.2'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  class I18n
4
2
  def self.t(path, scope: nil, default: nil)
5
3
  "#{scope}.#{path}"
@@ -18,51 +18,51 @@ shared_examples_for Enum::Helpers::EnumGenerator do
18
18
  its(:by_name) { should == { :red => 1, :blue => 2 } }
19
19
  end
20
20
 
21
- shared_examples_for Enum::Helpers::EnumAttribute do
21
+ shared_examples_for Enum::Helpers::EnumAttribute do |attribute = :color|
22
22
  subject(:record) { klass.new }
23
- before { record.instance_eval { @color = :unknown } }
23
+ before { record.instance_variable_set("@#{attribute}", :unknown) }
24
24
 
25
25
  describe "setter" do
26
26
  context "nil" do
27
- before { record.color = nil }
28
- specify { record.instance_eval { @color }.should be_nil }
29
- specify { record.instance_eval { @color }.should_not be_enum_value }
27
+ before { record.send(:"#{attribute}=", nil) }
28
+ specify { record.instance_variable_get("@#{attribute}").should be_nil }
29
+ specify { record.instance_variable_get("@#{attribute}").should_not be_enum_value }
30
30
  end
31
31
 
32
32
  context "name" do
33
- before { record.color = :red }
34
- specify { record.instance_eval { @color }.should == 1 }
35
- specify { record.instance_eval { @color }.should_not be_enum_value }
33
+ before { record.send(:"#{attribute}=", :red) }
34
+ specify { record.instance_variable_get("@#{attribute}").should == 1 }
35
+ specify { record.instance_variable_get("@#{attribute}").should_not be_enum_value }
36
36
  end
37
37
 
38
38
  context "value" do
39
- before { record.color = 2 }
40
- specify { record.instance_eval { @color }.should == 2 }
41
- specify { record.instance_eval { @color }.should_not be_enum_value }
39
+ before { record.send(:"#{attribute}=", 2) }
40
+ specify { record.instance_variable_get("@#{attribute}").should == 2 }
41
+ specify { record.instance_variable_get("@#{attribute}").should_not be_enum_value }
42
42
  end
43
43
 
44
44
  specify "invalid" do
45
- expect { @record.color = 3 }.to raise_error(StandardError)
45
+ expect { record.send(:"#{attribute}=", 3) }.to raise_error(StandardError, /does not know/)
46
46
  end
47
47
  end
48
48
 
49
49
  describe "getter" do
50
50
  context "nil" do
51
- before { record.instance_eval { @color = nil } }
52
- specify { record.color.should be_nil }
53
- specify { record.color.should be_enum_value }
51
+ before { record.instance_variable_set("@#{attribute}", nil) }
52
+ specify { record.send(attribute).should be_nil }
53
+ specify { record.send(attribute).should be_enum_value }
54
54
  end
55
55
 
56
56
  context "value" do
57
- before { record.instance_eval { @color = 2 } }
58
- specify { record.color.should be_blue }
59
- specify { record.color.should be_enum_value }
57
+ before { record.instance_variable_set("@#{attribute}", 2) }
58
+ specify { record.send(attribute).should be_blue }
59
+ specify { record.send(attribute).should be_enum_value }
60
60
  end
61
61
 
62
62
  context "invalid" do
63
- before { record.instance_eval { @color = 3 } }
64
- specify { record.color.should == 3 }
65
- specify { record.color.should be_enum_value }
63
+ before { record.instance_variable_set("@#{attribute}", 3) }
64
+ specify { record.send(attribute).should == 3 }
65
+ specify { record.send(attribute).should be_enum_value }
66
66
  end
67
67
  end
68
68
  end
@@ -1,43 +1,55 @@
1
- require 'spec_helper'
2
1
  require 'lib/enum/helpers/common_specs'
3
2
 
4
3
  class EnumAttributeUser < EnumUserBase
5
4
  extend Enum::Helpers::EnumAttribute
5
+
6
+ def method_missing(method_name, *attributes, &block)
7
+ case method_name
8
+ when :color2 then @color2
9
+ when :color2= then @color2 = attributes.first
10
+ else super
11
+ end
12
+ end
6
13
  end
7
14
 
8
15
  describe Enum::Helpers::EnumAttribute do
9
16
  subject(:klass) { EnumAttributeUser.create_class }
10
17
 
11
- context "not qualifier" do
12
- before { klass.attr_enum(:color, :COLORS, :red => 1, :blue => 2) }
18
+ shared_examples_for "attr_enum" do |attribute|
19
+ context "not qualifier" do
20
+ before { klass.attr_enum(attribute, :COLORS, :red => 1, :blue => 2) }
13
21
 
14
- it_behaves_like Enum::Helpers::EnumGenerator
15
- it_behaves_like Enum::Helpers::EnumAttribute
16
- end
22
+ it_behaves_like Enum::Helpers::EnumGenerator
23
+ it_behaves_like Enum::Helpers::EnumAttribute, attribute
24
+ end
17
25
 
18
- context "qualifier" do
19
- before { klass.attr_enum(:color, :COLORS, { :qualifier => true }, :red => 1, :blue => 2) }
26
+ context "qualifier" do
27
+ before { klass.attr_enum(attribute, :COLORS, { :qualifier => true }, :red => 1, :blue => 2) }
20
28
 
21
- it_behaves_like Enum::Helpers::EnumGenerator
22
- it_behaves_like Enum::Helpers::EnumAttribute
29
+ it_behaves_like Enum::Helpers::EnumGenerator
30
+ it_behaves_like Enum::Helpers::EnumAttribute, attribute
23
31
 
24
- context "questions" do
25
- subject(:record) { klass.new }
26
- before { record.color = :red }
32
+ context "questions" do
33
+ subject(:record) { klass.new }
34
+ before { record.send(:"#{attribute}=", :red) }
27
35
 
28
- it { should be_red }
29
- it { should_not be_blue }
36
+ it { should be_red }
37
+ it { should_not be_blue }
38
+ end
30
39
  end
31
- end
32
40
 
33
- context "use another enum" do
34
- before do
35
- klass.attr_enum(:color, :COLORS, { :qualifier => true }, :red => 1, :blue => 2)
36
- another_klass = EnumAttributeUser.create_class(:AnotherEnumAttributeUser)
37
- another_klass.attr_enum(:color, klass::COLORS)
38
- end
41
+ context "use another enum" do
42
+ before do
43
+ klass.attr_enum(attribute, :COLORS, { :qualifier => true }, :red => 1, :blue => 2)
44
+ another_klass = EnumAttributeUser.create_class(:AnotherEnumAttributeUser)
45
+ another_klass.attr_enum(attribute, klass::COLORS)
46
+ end
39
47
 
40
- it_behaves_like Enum::Helpers::EnumGenerator
41
- it_behaves_like Enum::Helpers::EnumAttribute
48
+ it_behaves_like Enum::Helpers::EnumGenerator
49
+ it_behaves_like Enum::Helpers::EnumAttribute, attribute
50
+ end
42
51
  end
52
+
53
+ it_behaves_like "attr_enum", :color
54
+ it_behaves_like "attr_enum", :color2
43
55
  end
@@ -1,4 +1,3 @@
1
- require 'spec_helper'
2
1
  require 'lib/enum/helpers/common_specs'
3
2
 
4
3
  class EnumColumnUser < EnumUserBase
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  describe Enum::Helpers::EnumGenerator do
4
2
  let(:klass) { EnumUserBase.create_class }
5
3
  before { klass.enum(:COLORS, :red => 1, :blue => 2) }
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  describe Enum do
4
2
  describe "accessors" do
5
3
  subject(:enum) { Enum.new(:MY_COLORS, :red => 1, :blue => 2) }
data/yinum.gemspec CHANGED
@@ -1,24 +1,25 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
4
  require "enum/version"
4
5
 
5
- Gem::Specification.new do |s|
6
- s.name = "yinum"
7
- s.version = Enum::VERSION
8
- s.authors = ["Oded Niv"]
9
- s.email = ["oded.niv@gmail.com"]
10
- s.homepage = "https://github.com/odedniv/enum"
11
- s.summary = %q{Enum implementation}
12
- s.description = %q{Yummy implementation of enum that gives integer values with a special wrapping.}
13
- s.license = 'UNLICENSE'
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "yinum"
8
+ spec.version = Enum::VERSION
9
+ spec.authors = ["Oded Niv"]
10
+ spec.email = ["oded.niv@gmail.com"]
11
+ spec.summary = %q{Enum implementation}
12
+ spec.description = %q{Yummy implementation of enum that gives integer values with a special wrapping.}
13
+ spec.homepage = "https://github.com/odedniv/enum"
14
+ spec.license = "UNLICENSE"
14
15
 
15
- s.rubyforge_project = "yinum"
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
16
20
 
17
- s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- s.require_paths = ["lib"]
21
+ spec.add_runtime_dependency "generate_method", "~> 1.0"
21
22
 
22
- s.add_development_dependency 'rspec', '~> 2.0'
23
- s.add_development_dependency 'nil_or', '~> 2.0'
23
+ spec.add_development_dependency "rspec", "~> 2.0"
24
+ spec.add_development_dependency "nil_or", "~> 2.0"
24
25
  end
metadata CHANGED
@@ -1,41 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yinum
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oded Niv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2014-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: generate_method
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ~>
18
32
  - !ruby/object:Gem::Version
19
33
  version: '2.0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ~>
25
39
  - !ruby/object:Gem::Version
26
40
  version: '2.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: nil_or
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ~>
32
46
  - !ruby/object:Gem::Version
33
47
  version: '2.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ~>
39
53
  - !ruby/object:Gem::Version
40
54
  version: '2.0'
41
55
  description: Yummy implementation of enum that gives integer values with a special
@@ -46,7 +60,8 @@ executables: []
46
60
  extensions: []
47
61
  extra_rdoc_files: []
48
62
  files:
49
- - ".gitignore"
63
+ - .gitignore
64
+ - .rspec
50
65
  - CHANGELOG.md
51
66
  - Gemfile
52
67
  - Gemfile.lock
@@ -79,17 +94,17 @@ require_paths:
79
94
  - lib
80
95
  required_ruby_version: !ruby/object:Gem::Requirement
81
96
  requirements:
82
- - - ">="
97
+ - - '>='
83
98
  - !ruby/object:Gem::Version
84
99
  version: '0'
85
100
  required_rubygems_version: !ruby/object:Gem::Requirement
86
101
  requirements:
87
- - - ">="
102
+ - - '>='
88
103
  - !ruby/object:Gem::Version
89
104
  version: '0'
90
105
  requirements: []
91
- rubyforge_project: yinum
92
- rubygems_version: 2.2.0
106
+ rubyforge_project:
107
+ rubygems_version: 2.2.2
93
108
  signing_key:
94
109
  specification_version: 4
95
110
  summary: Enum implementation