inum 1.1.0 → 1.2.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/lib/inum/base.rb +41 -31
- data/lib/inum/define_check_method.rb +3 -1
- data/lib/inum/utils.rb +22 -0
- data/lib/inum/version.rb +1 -1
- data/spec/inum/base_spec.rb +20 -5
- data/spec/inum/utils_spec.rb +17 -0
- data/spec/spec_helper.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 781689678af4d4332e501ba581e4fcb3ce02e238
|
4
|
+
data.tar.gz: c9d80cf8f71ac711992dc776f6d5d9db2dd462f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b90ff4e1a44db7c92ed86c758c93bea51241acd42e541fa2b7a42c10ca1188db30a4e223ac0089d679dc7cced45e5cf726a358f8bf33b3bd64b83865b7c1fac8
|
7
|
+
data.tar.gz: f8300442ef7814585669a34ce6bb85acacfede154c663ff5b686b5ded203c1d0e6fe83661ceb7abe672da1fa3bc598c10c227b11f425ba2b21b3e0f78de29c56
|
data/lib/inum/base.rb
CHANGED
@@ -10,17 +10,15 @@ module Inum
|
|
10
10
|
# end
|
11
11
|
class Base
|
12
12
|
|
13
|
-
attr_accessor :value
|
14
13
|
private_class_method :new
|
15
14
|
|
16
15
|
# initialize Inum::Base with value.
|
17
|
-
# @note
|
16
|
+
# @note The instance of Enum Member is singleton.
|
18
17
|
#
|
18
|
+
# @param label [Symbol] label of Enum.
|
19
19
|
# @param value [Integer] value of Enum.
|
20
|
-
def initialize(value)
|
21
|
-
|
22
|
-
raise ArgumentError, "unknown value #{value}!"
|
23
|
-
end
|
20
|
+
def initialize(label, value)
|
21
|
+
@label = label
|
24
22
|
@value = value
|
25
23
|
end
|
26
24
|
|
@@ -57,11 +55,18 @@ module Inum
|
|
57
55
|
|
58
56
|
# Enum to String.
|
59
57
|
#
|
60
|
-
# @return [String] string value of Enum.
|
58
|
+
# @return [String] string value(label) of Enum.
|
61
59
|
def to_s
|
62
|
-
|
60
|
+
@label.to_s
|
63
61
|
end
|
64
62
|
|
63
|
+
# get all labels of Enum.
|
64
|
+
#
|
65
|
+
# @return [Array<Symbol>] all labels of Enum.
|
66
|
+
def self.labels
|
67
|
+
defined_enums.keys
|
68
|
+
end
|
69
|
+
|
65
70
|
# get Enum length.
|
66
71
|
#
|
67
72
|
# @return [Integer] count of Enums.
|
@@ -71,14 +76,14 @@ module Inum
|
|
71
76
|
|
72
77
|
# return array of Enums.
|
73
78
|
#
|
74
|
-
# @return [Array<Array<
|
79
|
+
# @return [Array<Array<Symbol, Integer>>] sorted array of Enums.
|
75
80
|
def self.to_a
|
76
|
-
defined_enums.
|
81
|
+
defined_enums.flatten(0).sort{|a,b| a[1] <=> b[1] }
|
77
82
|
end
|
78
83
|
|
79
84
|
# return hash of Enums.
|
80
85
|
#
|
81
|
-
# @return [Hash] hash of Enums.
|
86
|
+
# @return [Hash<Symbol, Integer>] hash of Enums.
|
82
87
|
def self.to_h
|
83
88
|
defined_enums.dup
|
84
89
|
end
|
@@ -101,17 +106,26 @@ module Inum
|
|
101
106
|
raise ArgumentError, "#{object} is nani?"
|
102
107
|
end
|
103
108
|
end
|
109
|
+
|
110
|
+
# get all values of Enum.
|
111
|
+
#
|
112
|
+
# @return [Array<Integer>] all values of Enum.
|
113
|
+
def self.values
|
114
|
+
defined_enums.values
|
115
|
+
end
|
104
116
|
|
105
117
|
private
|
106
118
|
# Define Enum in called class.
|
107
119
|
#
|
108
|
-
# @param
|
109
|
-
# @param value [Integer
|
110
|
-
def self.define_enum(
|
111
|
-
|
120
|
+
# @param label [Symbol] label of Enum.
|
121
|
+
# @param value [Integer] value of Enum.(default:autoincrement for 0.)
|
122
|
+
def self.define_enum(label, value = defined_enums.size)
|
123
|
+
value = value.to_i
|
124
|
+
|
125
|
+
validate_enum_args!(label, value)
|
112
126
|
|
113
|
-
defined_enums[
|
114
|
-
self.const_set(
|
127
|
+
defined_enums[label] = value
|
128
|
+
self.const_set(label, new(label, value))
|
115
129
|
end
|
116
130
|
|
117
131
|
# get hash of :DEFINED_ENUMS.
|
@@ -127,27 +141,23 @@ module Inum
|
|
127
141
|
|
128
142
|
# Validate enum args, and raise exception.
|
129
143
|
#
|
130
|
-
# @param
|
131
|
-
# @param value [
|
132
|
-
def self.validate_enum_args!(
|
133
|
-
unless
|
134
|
-
raise ArgumentError, "#{
|
135
|
-
end
|
136
|
-
|
137
|
-
unless value.instance_of?(Integer) or value.instance_of?(Fixnum)
|
138
|
-
raise ArgumentError, "#{value}<#{value.class}> isn't Integer or Fixnum."
|
144
|
+
# @param label [Object] label of Enum.
|
145
|
+
# @param value [Integer] value of Enum.
|
146
|
+
def self.validate_enum_args!(label, value)
|
147
|
+
unless label.instance_of?(Symbol)
|
148
|
+
raise ArgumentError, "The label(#{label}!) isn't instance of Symbol."
|
139
149
|
end
|
140
150
|
|
141
|
-
if
|
142
|
-
raise ArgumentError, "#{
|
151
|
+
if label == :DEFINED_ENUMS
|
152
|
+
raise ArgumentError, "The label(#{label}!) is keyword."
|
143
153
|
end
|
144
154
|
|
145
|
-
if defined_enums.has_key?(
|
146
|
-
raise ArgumentError, "
|
155
|
+
if defined_enums.has_key?(label)
|
156
|
+
raise ArgumentError, "The label(#{label}!) already exists!!"
|
147
157
|
end
|
148
158
|
|
149
159
|
if defined_enums.has_value?(value)
|
150
|
-
raise ArgumentError, "value(#{value}!) already exists!!"
|
160
|
+
raise ArgumentError, "The value(#{value}!) already exists!!"
|
151
161
|
end
|
152
162
|
end
|
153
163
|
end
|
@@ -10,6 +10,8 @@ module Inum
|
|
10
10
|
# end
|
11
11
|
#
|
12
12
|
module DefineCheckMethod
|
13
|
+
require 'inum/utils'
|
14
|
+
|
13
15
|
# Define compare method in class.
|
14
16
|
#
|
15
17
|
# @param variable_name [String] name of variable.
|
@@ -17,7 +19,7 @@ module Inum
|
|
17
19
|
def define_check_method(variable_name, enum_class)
|
18
20
|
self.class_eval do
|
19
21
|
enum_class::DEFINED_ENUMS.each_key do |enum_name|
|
20
|
-
define_method("#{enum_name
|
22
|
+
define_method("#{Inum::Utils::underscore(enum_name)}?") do
|
21
23
|
enum_class::parse(enum_name).eql?(send(variable_name))
|
22
24
|
end
|
23
25
|
end
|
data/lib/inum/utils.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Inum
|
2
|
+
# Utils of Inum.
|
3
|
+
class Utils
|
4
|
+
|
5
|
+
# convert a camel cased word to a underscore word.
|
6
|
+
#
|
7
|
+
# @param camel_cased_word [String] camel cased word.
|
8
|
+
# @return [String, Symbol] underscore word.
|
9
|
+
def self.underscore(camel_cased_word)
|
10
|
+
word = camel_cased_word.to_s.dup
|
11
|
+
|
12
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
13
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
14
|
+
word.tr!('-', '_')
|
15
|
+
|
16
|
+
word.downcase!
|
17
|
+
|
18
|
+
word
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/inum/version.rb
CHANGED
data/spec/inum/base_spec.rb
CHANGED
@@ -6,8 +6,7 @@ describe Inum::Base do
|
|
6
6
|
it 'define_method validate correct' do
|
7
7
|
# correct.
|
8
8
|
expect{
|
9
|
-
Class.new(Inum::Base) { define_enum :REDBULL, 0 }
|
10
|
-
Class.new(Inum::Base) { define_enum 'REDBULL', 0 }
|
9
|
+
Class.new(Inum::Base) { define_enum :REDBULL, 0 }
|
11
10
|
Class.new(Inum::Base) { define_enum :REDBULL, 0.to_i }
|
12
11
|
Class.new(Inum::Base) {
|
13
12
|
define_enum :REDBULL, 0
|
@@ -101,14 +100,24 @@ describe Inum::Base do
|
|
101
100
|
expect( @enum::MONSTER.to_s ).to eq('MONSTER')
|
102
101
|
end
|
103
102
|
|
103
|
+
it 'labels return Array<Symbol>.' do
|
104
|
+
expect(@enum::labels.length).to eq(3)
|
105
|
+
expect(@enum::labels.instance_of?(Array)).to be_true
|
106
|
+
expect(@enum::labels[0].instance_of?(Symbol)).to be_true
|
107
|
+
end
|
108
|
+
|
104
109
|
it 'length return count of enum.' do
|
105
110
|
expect(@enum::length).to eq(3)
|
106
111
|
end
|
107
112
|
|
108
|
-
it 'to_a return Array' do
|
109
|
-
expect(@enum::to_a.instance_of?(Array)).to be_true
|
113
|
+
it 'to_a return Array<Array<Symbol,Integer>>.' do
|
110
114
|
expect(@enum::to_a.length).to eq(3)
|
111
|
-
expect(@enum::to_a
|
115
|
+
expect(@enum::to_a.instance_of?(Array)).to be_true
|
116
|
+
expect(@enum::to_a[0].instance_of?(Array)).to be_true
|
117
|
+
expect(@enum::to_a[0][0].instance_of?(Symbol)).to be_true
|
118
|
+
expect(@enum::to_a[0][1].integer?).to be_true
|
119
|
+
|
120
|
+
expect(@enum::to_a[0][0]).to eq(:REDBULL)
|
112
121
|
(0..2).each{|i| expect(@enum::to_a[i][1]).to eq(i) }
|
113
122
|
end
|
114
123
|
|
@@ -133,5 +142,11 @@ describe Inum::Base do
|
|
133
142
|
it 'parse return instance from self instance.' do
|
134
143
|
expect( @enum::parse(@enum::REDBULL) ).to eq( @enum::REDBULL )
|
135
144
|
end
|
145
|
+
|
146
|
+
it 'values return Array<Integer>.' do
|
147
|
+
expect(@enum::values.length).to eq(3)
|
148
|
+
expect(@enum::values.instance_of?(Array)).to be_true
|
149
|
+
expect(@enum::values[0].integer?).to be_true
|
150
|
+
end
|
136
151
|
end
|
137
152
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Inum::Utils do
|
5
|
+
|
6
|
+
it 'underscore can convert CamelCasedWord to underscore_word.' do
|
7
|
+
expect(Inum::Utils::underscore('camelcase')).to eq('camelcase')
|
8
|
+
expect(Inum::Utils::underscore('CamelCase')).to eq('camel_case')
|
9
|
+
expect(Inum::Utils::underscore('CamelCaseWord')).to eq('camel_case_word')
|
10
|
+
|
11
|
+
expect(Inum::Utils::underscore('Came1Case')).to eq('came1_case')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'underscore can convert Symbol to underscore_word.' do
|
15
|
+
expect(Inum::Utils::underscore(:CamelCase)).to eq('camel_case')
|
16
|
+
end
|
17
|
+
end
|
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.2.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-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,9 +82,11 @@ files:
|
|
82
82
|
- lib/inum.rb
|
83
83
|
- lib/inum/base.rb
|
84
84
|
- lib/inum/define_check_method.rb
|
85
|
+
- lib/inum/utils.rb
|
85
86
|
- lib/inum/version.rb
|
86
87
|
- spec/inum/base_spec.rb
|
87
88
|
- spec/inum/define_check_method_spec.rb
|
89
|
+
- spec/inum/utils_spec.rb
|
88
90
|
- spec/spec_helper.rb
|
89
91
|
homepage: https://github.com/alfa-jpn/inum
|
90
92
|
licenses:
|
@@ -113,5 +115,6 @@ summary: Inum(enumerated type of Integer) provide a java-Enum-like.
|
|
113
115
|
test_files:
|
114
116
|
- spec/inum/base_spec.rb
|
115
117
|
- spec/inum/define_check_method_spec.rb
|
118
|
+
- spec/inum/utils_spec.rb
|
116
119
|
- spec/spec_helper.rb
|
117
120
|
has_rdoc:
|