inum 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|