inum 1.2.0 → 1.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/README.md +18 -0
- data/inum.gemspec +2 -0
- data/lib/inum/base.rb +42 -2
- data/lib/inum/utils.rb +1 -0
- data/lib/inum/version.rb +1 -1
- data/spec/inum/base_spec.rb +46 -8
- data/spec/inum/utils_spec.rb +6 -0
- data/spec/spec_helper.rb +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a45543edcaeff37b2532ff978a90bd3eb773bc2
|
4
|
+
data.tar.gz: 357be60fffc7baec45c791aebd39c9da9990a2cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82e42a428ed15ef2f98b434c72fcaf56fe6a5431d23faa81e0f16632e39792ae26e029ce3d67ec9f381624b887f56f44f3067d5d39ceec6f915d3c6ef7721c58
|
7
|
+
data.tar.gz: 7e7301e5e39d9032efe85e7fd49e817d10ccea32ae2b8ff890aa366c8502ec809c36bf481c8fa81b2159fdc5e56bf3a59ea5a8abc94b6d2b568e6eba51742515
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Inum
|
2
2
|
|
3
3
|
Inum(enumerated type of Integer) provide a Java-enum-like Enum.
|
4
|
+
Inum has a function to localize by i18n.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -42,6 +43,7 @@ How to use Enum(Inum).
|
|
42
43
|
``` ruby
|
43
44
|
p AnimeType::EVANGELION # => EVANGELION
|
44
45
|
p AnimeType::EVANGELION.to_i # => 0
|
46
|
+
p AnimeType::EVANGELION.to_t # => エヴァンゲリオン (i18n find `anime_type.evangelion`.)
|
45
47
|
|
46
48
|
# parse object to instance of AnimeType.
|
47
49
|
# object can use class of Symbol or String or Integer or Self.
|
@@ -53,7 +55,11 @@ p AnimeType::HARUHI.eql?('HARUHI') # => true (eql? can compare all parsable ob
|
|
53
55
|
p AnimeType::HARUHI + 1 # => NYARUKO
|
54
56
|
p AnimeType::NYARUKO - 1 # => HARUHI
|
55
57
|
|
58
|
+
# can use each method.
|
59
|
+
AnimeType::each {|enum| p enum }
|
60
|
+
|
56
61
|
```
|
62
|
+
can use Enumerable and Comparable.
|
57
63
|
|
58
64
|
- more detail is [Class::Base](http://rubydoc.info/github/alfa-jpn/inum/Inum/Base)
|
59
65
|
|
@@ -87,6 +93,16 @@ p anime.haruhi? # => true
|
|
87
93
|
|
88
94
|
```
|
89
95
|
|
96
|
+
### Localize(i18n)
|
97
|
+
to_t methods localize enum by i18n.
|
98
|
+
default i18n key is name_space.class_name.enum_member_label.
|
99
|
+
If change default, Override i18n_key class method.
|
100
|
+
``` ruby
|
101
|
+
# default i18n_key.
|
102
|
+
def self.i18n_key(label)
|
103
|
+
Inum::Utils::underscore("#{self.class.name}::#{label}")
|
104
|
+
end
|
105
|
+
```
|
90
106
|
|
91
107
|
## API DOCUMENT
|
92
108
|
|
@@ -99,3 +115,5 @@ p anime.haruhi? # => true
|
|
99
115
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
100
116
|
4. Push to the branch (`git push origin my-new-feature`)
|
101
117
|
5. Create new Pull Request
|
118
|
+
|
119
|
+
# I have poor English. Please help meeeeeeeee!!!!
|
data/inum.gemspec
CHANGED
data/lib/inum/base.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
module Inum
|
2
|
+
require 'i18n'
|
3
|
+
require 'inum/utils'
|
4
|
+
|
2
5
|
# InumBase class.
|
3
6
|
#
|
4
7
|
# @abstract Inum class should be a inheritance of Inum::Base.
|
@@ -9,7 +12,9 @@ module Inum
|
|
9
12
|
# define_enum :ORANGE, 2
|
10
13
|
# end
|
11
14
|
class Base
|
12
|
-
|
15
|
+
extend Enumerable
|
16
|
+
include Comparable
|
17
|
+
|
13
18
|
private_class_method :new
|
14
19
|
|
15
20
|
# initialize Inum::Base with value.
|
@@ -20,8 +25,18 @@ module Inum
|
|
20
25
|
def initialize(label, value)
|
21
26
|
@label = label
|
22
27
|
@value = value
|
28
|
+
|
29
|
+
@localized_enum = I18n.t(self.class.i18n_key(label))
|
23
30
|
end
|
24
|
-
|
31
|
+
|
32
|
+
# Compare object.
|
33
|
+
#
|
34
|
+
# @param object [Object] parsable object.
|
35
|
+
# @return [Integer] same normal <=>.
|
36
|
+
def <=> (object)
|
37
|
+
@value <=> self.class.parse(object).to_i
|
38
|
+
end
|
39
|
+
|
25
40
|
# plus object.
|
26
41
|
#
|
27
42
|
# @param value [Integer] plus value.(call to_i in this method.)
|
@@ -60,6 +75,21 @@ module Inum
|
|
60
75
|
@label.to_s
|
61
76
|
end
|
62
77
|
|
78
|
+
# Translate Enum to localized string.(use i18n)
|
79
|
+
# @note find default `Namespace.Classname.EnumMember`
|
80
|
+
#
|
81
|
+
# @return [String] localized string of Enum.
|
82
|
+
def to_t
|
83
|
+
@localized_enum
|
84
|
+
end
|
85
|
+
|
86
|
+
# Execute the yield(block) with each member of enum.
|
87
|
+
#
|
88
|
+
# @yield [enum] instance of enum.
|
89
|
+
def self.each
|
90
|
+
defined_enums.each_key {|key| yield parse(key.to_s)}
|
91
|
+
end
|
92
|
+
|
63
93
|
# get all labels of Enum.
|
64
94
|
#
|
65
95
|
# @return [Array<Symbol>] all labels of Enum.
|
@@ -133,6 +163,16 @@ module Inum
|
|
133
163
|
self.const_get(:DEFINED_ENUMS)
|
134
164
|
end
|
135
165
|
|
166
|
+
# get key for I18n.t method.
|
167
|
+
# @note default: Namespace.Classname.Label(label of enum member.)
|
168
|
+
#
|
169
|
+
# @param label [Symbol] label of enum member.
|
170
|
+
# @return [String] key for I18n.t method.
|
171
|
+
# @abstract If change key from the default.
|
172
|
+
def self.i18n_key(label)
|
173
|
+
Inum::Utils::underscore("#{self.class.name}::#{label}")
|
174
|
+
end
|
175
|
+
|
136
176
|
# call after inherited.
|
137
177
|
# @note Define hash of :DEFINED_ENUMS in child.
|
138
178
|
def self.inherited(child)
|
data/lib/inum/utils.rb
CHANGED
data/lib/inum/version.rb
CHANGED
data/spec/inum/base_spec.rb
CHANGED
@@ -2,8 +2,8 @@ require 'rspec'
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Inum::Base do
|
5
|
-
|
6
|
-
it '
|
5
|
+
|
6
|
+
it 'define_enum validate correct' do
|
7
7
|
# correct.
|
8
8
|
expect{
|
9
9
|
Class.new(Inum::Base) { define_enum :REDBULL, 0 }
|
@@ -40,8 +40,8 @@ describe Inum::Base do
|
|
40
40
|
}
|
41
41
|
}.to raise_error
|
42
42
|
end
|
43
|
-
|
44
|
-
it '
|
43
|
+
|
44
|
+
it 'define_enum called without value, value is autoincrement.' do
|
45
45
|
enum = Class.new(Inum::Base) do
|
46
46
|
define_enum :REDBULL
|
47
47
|
define_enum :MONSTER
|
@@ -52,9 +52,18 @@ describe Inum::Base do
|
|
52
52
|
expect(enum::MONSTER.to_i).to eq(1)
|
53
53
|
expect(enum::BURN.to_i).to eq(2)
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
|
+
it 'i18n.t called when call define_enum.' do
|
57
|
+
I18n.should_receive(:t).with('class.redbull')
|
58
|
+
|
59
|
+
Class.new(Inum::Base) do
|
60
|
+
define_enum :REDBULL
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
56
64
|
context 'define class of extended Inum::Base,' do
|
57
65
|
before(:each) do
|
66
|
+
I18n.stub(:t).and_return('Good drink!')
|
58
67
|
@enum = Class.new(Inum::Base) do
|
59
68
|
define_enum :REDBULL, 0
|
60
69
|
define_enum :MONSTER, 1
|
@@ -76,7 +85,13 @@ describe Inum::Base do
|
|
76
85
|
it 'A enum instance is equal instance.' do
|
77
86
|
expect( @enum::BURN.equal?(@enum::BURN )).to be_true
|
78
87
|
end
|
79
|
-
|
88
|
+
|
89
|
+
it '<=> return a correct value.' do
|
90
|
+
expect( (@enum::REDBULL <=> 1) < 0 ).to be_true
|
91
|
+
expect( (@enum::REDBULL <=> 0) == 0 ).to be_true
|
92
|
+
expect( (@enum::MONSTER <=> 0) > 0 ).to be_true
|
93
|
+
end
|
94
|
+
|
80
95
|
it '+ return a correct Inum.' do
|
81
96
|
expect(@enum::REDBULL + 1).to eq(@enum::MONSTER)
|
82
97
|
expect(@enum::REDBULL + @enum::MONSTER).to eq(@enum::MONSTER)
|
@@ -86,7 +101,11 @@ describe Inum::Base do
|
|
86
101
|
expect(@enum::BURN - 1).to eq(@enum::MONSTER)
|
87
102
|
expect(@enum::BURN - @enum::MONSTER).to eq(@enum::MONSTER)
|
88
103
|
end
|
89
|
-
|
104
|
+
|
105
|
+
it 'Comparable module enable.' do
|
106
|
+
expect(@enum::REDBULL.between?(0,1)).to be_true
|
107
|
+
end
|
108
|
+
|
90
109
|
it 'eql? return a correct result.' do
|
91
110
|
expect( @enum::REDBULL.eql?(0) ).to be_true
|
92
111
|
expect( @enum::REDBULL.eql?(1) ).to be_false
|
@@ -99,7 +118,26 @@ describe Inum::Base do
|
|
99
118
|
it 'to_s return string.' do
|
100
119
|
expect( @enum::MONSTER.to_s ).to eq('MONSTER')
|
101
120
|
end
|
102
|
-
|
121
|
+
|
122
|
+
it 'to_t return localized string.' do
|
123
|
+
expect( @enum::REDBULL.to_t ).to eq('Good drink!')
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'each can execute block with enum' do
|
127
|
+
count = 0
|
128
|
+
expect{
|
129
|
+
@enum::each do |enum|
|
130
|
+
expect(enum.instance_of?(@enum)).to be_true
|
131
|
+
count += 1
|
132
|
+
end
|
133
|
+
}.to change{count}.by(3)
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'Enumerable module enable.' do
|
137
|
+
expect(@enum::count).to eq(3)
|
138
|
+
expect(@enum::include?(@enum::REDBULL)).to be_true
|
139
|
+
end
|
140
|
+
|
103
141
|
it 'labels return Array<Symbol>.' do
|
104
142
|
expect(@enum::labels.length).to eq(3)
|
105
143
|
expect(@enum::labels.instance_of?(Array)).to be_true
|
data/spec/inum/utils_spec.rb
CHANGED
@@ -9,6 +9,12 @@ describe Inum::Utils do
|
|
9
9
|
expect(Inum::Utils::underscore('CamelCaseWord')).to eq('camel_case_word')
|
10
10
|
|
11
11
|
expect(Inum::Utils::underscore('Came1Case')).to eq('came1_case')
|
12
|
+
|
13
|
+
expect(Inum::Utils::underscore('UNDER_SCORE')).to eq('under_score')
|
14
|
+
expect(Inum::Utils::underscore('under_score')).to eq('under_score')
|
15
|
+
|
16
|
+
expect(Inum::Utils::underscore('name::space')).to eq('name.space')
|
17
|
+
expect(Inum::Utils::underscore('Name::Space')).to eq('name.space')
|
12
18
|
end
|
13
19
|
|
14
20
|
it 'underscore can convert Symbol to underscore_word.' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alfa-jpn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: i18n
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.6.5
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.6.5
|
69
83
|
description: Inum(enumerated type of Integer) provide a java-Enum-like.
|
70
84
|
email:
|
71
85
|
- a.nkmr.ja@gmail.com
|