nice_enum 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +24 -24
- data/README.rdoc +199 -199
- data/lib/nice_enum.rb +173 -173
- data/lib/nice_enum_active_record_extension.rb +19 -0
- data/samples/deck.rb +59 -59
- data/samples/filemodes.rb +20 -20
- data/samples/squaring_numbers.rb +16 -16
- data/test/active_support_test.rb +39 -0
- data/test/attribute_test.rb +30 -30
- data/test/const_test.rb +47 -47
- data/test/default_attribute_test.rb +24 -24
- data/test/default_value_test.rb +22 -22
- data/test/flags_test.rb +38 -38
- data/test/hashcode_test.rb +20 -20
- metadata +33 -52
data/samples/filemodes.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
require "../lib/nice_enum"
|
2
|
-
|
3
|
-
class Permission < Flags
|
4
|
-
enum :None, 0
|
5
|
-
enum :Read, 4
|
6
|
-
enum :Write, 2
|
7
|
-
enum :Execute, 1
|
8
|
-
end
|
9
|
-
|
10
|
-
file = ARGV[0] || __FILE__
|
11
|
-
puts "Permissions on #{file}:"
|
12
|
-
|
13
|
-
mode = File.stat(file).mode
|
14
|
-
user = Permission.new((mode & 448) >> 6)
|
15
|
-
group = Permission.new((mode & 56) >> 3)
|
16
|
-
world = Permission.new(mode & 7)
|
17
|
-
|
18
|
-
puts "User: #{user}"
|
19
|
-
puts "Group: #{group}"
|
20
|
-
puts "World: #{world}"
|
1
|
+
require "../lib/nice_enum"
|
2
|
+
|
3
|
+
class Permission < Flags
|
4
|
+
enum :None, 0
|
5
|
+
enum :Read, 4
|
6
|
+
enum :Write, 2
|
7
|
+
enum :Execute, 1
|
8
|
+
end
|
9
|
+
|
10
|
+
file = ARGV[0] || __FILE__
|
11
|
+
puts "Permissions on #{file}:"
|
12
|
+
|
13
|
+
mode = File.stat(file).mode
|
14
|
+
user = Permission.new((mode & 448) >> 6)
|
15
|
+
group = Permission.new((mode & 56) >> 3)
|
16
|
+
world = Permission.new(mode & 7)
|
17
|
+
|
18
|
+
puts "User: #{user}"
|
19
|
+
puts "Group: #{group}"
|
20
|
+
puts "World: #{world}"
|
data/samples/squaring_numbers.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require "../lib/nice_enum"
|
2
|
-
|
3
|
-
class Number < Enum
|
4
|
-
enum :Zero, 0
|
5
|
-
enum :One, 1
|
6
|
-
enum :Two, 2
|
7
|
-
|
8
|
-
def square
|
9
|
-
value ** 2
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
numbers = Number.to_a
|
14
|
-
numbers << Number.new(3)
|
15
|
-
|
16
|
-
numbers.each { |number| puts "#{number} squared is #{number.square}." }
|
1
|
+
require "../lib/nice_enum"
|
2
|
+
|
3
|
+
class Number < Enum
|
4
|
+
enum :Zero, 0
|
5
|
+
enum :One, 1
|
6
|
+
enum :Two, 2
|
7
|
+
|
8
|
+
def square
|
9
|
+
value ** 2
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
numbers = Number.to_a
|
14
|
+
numbers << Number.new(3)
|
15
|
+
|
16
|
+
numbers.each { |number| puts "#{number} squared is #{number.square}." }
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'activerecord'
|
3
|
+
require 'active_record'
|
4
|
+
require "nice_enum"
|
5
|
+
require "nice_enum_active_record_extension"
|
6
|
+
require "test/unit"
|
7
|
+
|
8
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
9
|
+
|
10
|
+
silence_stream(STDOUT) do
|
11
|
+
ActiveRecord::Schema.define do
|
12
|
+
create_table :my_models do |t|
|
13
|
+
t.string :my_number
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ActiveSupportTest < Test::Unit::TestCase
|
19
|
+
|
20
|
+
ActiveRecord::Base.send :include, NiceEnumActiveRecordExtension
|
21
|
+
|
22
|
+
class Number < Enum
|
23
|
+
enum :One
|
24
|
+
enum :Two
|
25
|
+
end
|
26
|
+
|
27
|
+
class MyModel < ActiveRecord::Base
|
28
|
+
|
29
|
+
attr_accessible :my_number
|
30
|
+
|
31
|
+
map_enum :my_number, Number
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_respond_to_known_attribute
|
35
|
+
model = MyModel.new
|
36
|
+
model.my_number = Number::Two
|
37
|
+
assert model.my_number == Number::Two
|
38
|
+
end
|
39
|
+
end
|
data/test/attribute_test.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
require "nice_enum"
|
2
|
-
require "test/unit"
|
3
|
-
|
4
|
-
class AttributeTest < Test::Unit::TestCase
|
5
|
-
class Number < Enum
|
6
|
-
enum :Twenty, 20,
|
7
|
-
:note => "Exact value of e^pi - pi"
|
8
|
-
|
9
|
-
enum :Ninety, 90,
|
10
|
-
:note => "Square Root of -1"
|
11
|
-
|
12
|
-
enum :FourtyTwo, 42
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_respond_to_known_attribute
|
16
|
-
assert Number::Twenty.respond_to?(:note)
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_get_attribute_from_known_value
|
20
|
-
assert_equal "Exact value of e^pi - pi", Number::Twenty.note
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_get_attribute_from_unknown_value
|
24
|
-
assert_equal nil, Number.new(8).note
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_respond_to_unknown_attribute
|
28
|
-
assert !Number::Twenty.respond_to?(:color)
|
29
|
-
end
|
30
|
-
end
|
1
|
+
require "nice_enum"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
class AttributeTest < Test::Unit::TestCase
|
5
|
+
class Number < Enum
|
6
|
+
enum :Twenty, 20,
|
7
|
+
:note => "Exact value of e^pi - pi"
|
8
|
+
|
9
|
+
enum :Ninety, 90,
|
10
|
+
:note => "Square Root of -1"
|
11
|
+
|
12
|
+
enum :FourtyTwo, 42
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_respond_to_known_attribute
|
16
|
+
assert Number::Twenty.respond_to?(:note)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_get_attribute_from_known_value
|
20
|
+
assert_equal "Exact value of e^pi - pi", Number::Twenty.note
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_get_attribute_from_unknown_value
|
24
|
+
assert_equal nil, Number.new(8).note
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_respond_to_unknown_attribute
|
28
|
+
assert !Number::Twenty.respond_to?(:color)
|
29
|
+
end
|
30
|
+
end
|
data/test/const_test.rb
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
require "nice_enum"
|
2
|
-
require "test/unit"
|
3
|
-
|
4
|
-
class ConstTest < Test::Unit::TestCase
|
5
|
-
class Number < Enum
|
6
|
-
enum :Zero, 0
|
7
|
-
enum :One, 1
|
8
|
-
enum :Two, 2
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_to_s
|
12
|
-
assert_equal "Zero", Number::Zero.to_s
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_value_equality
|
16
|
-
assert_equal 2, Number::Two.value
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_enum_equality
|
20
|
-
assert_equal Number::Zero, Number::Zero
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_mixed_equality
|
24
|
-
assert_equal Number::Zero, 0
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_new_stays_same
|
28
|
-
assert_same Number::Zero, Number.new(0)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_new_on_undefined_enum_value
|
32
|
-
assert_equal -13, Number.new(-13)
|
33
|
-
assert_equal "-13", Number.new(-13).to_s
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_respond_to_mirroring
|
37
|
-
assert Number::One.respond_to? :abs
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_send_mirroring
|
41
|
-
assert_equal -1, -Number::One
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_enumerable
|
45
|
-
assert_equal [Number::Zero, Number::One, Number::Two], Number.to_a
|
46
|
-
end
|
47
|
-
end
|
1
|
+
require "nice_enum"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
class ConstTest < Test::Unit::TestCase
|
5
|
+
class Number < Enum
|
6
|
+
enum :Zero, 0
|
7
|
+
enum :One, 1
|
8
|
+
enum :Two, 2
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_to_s
|
12
|
+
assert_equal "Zero", Number::Zero.to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_value_equality
|
16
|
+
assert_equal 2, Number::Two.value
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_enum_equality
|
20
|
+
assert_equal Number::Zero, Number::Zero
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_mixed_equality
|
24
|
+
assert_equal Number::Zero, 0
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_new_stays_same
|
28
|
+
assert_same Number::Zero, Number.new(0)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_new_on_undefined_enum_value
|
32
|
+
assert_equal -13, Number.new(-13)
|
33
|
+
assert_equal "-13", Number.new(-13).to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_respond_to_mirroring
|
37
|
+
assert Number::One.respond_to? :abs
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_send_mirroring
|
41
|
+
assert_equal -1, -Number::One
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_enumerable
|
45
|
+
assert_equal [Number::Zero, Number::One, Number::Two], Number.to_a
|
46
|
+
end
|
47
|
+
end
|
@@ -1,24 +1,24 @@
|
|
1
|
-
require "nice_enum"
|
2
|
-
require "test/unit"
|
3
|
-
|
4
|
-
class DefaultAttributeTest < Test::Unit::TestCase
|
5
|
-
class Number < Enum
|
6
|
-
default :note => "A boring number"
|
7
|
-
|
8
|
-
enum :Twenty, 20,
|
9
|
-
:note => "Exact value of e^pi - pi"
|
10
|
-
|
11
|
-
enum :Ninety, 90,
|
12
|
-
:note => "Square Root of -1"
|
13
|
-
|
14
|
-
enum :FourtyTwo, 42
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_get_set_attribute
|
18
|
-
assert_equal "Exact value of e^pi - pi", Number::Twenty.note
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_get_unset_attribute
|
22
|
-
assert_equal "A boring number", Number::FourtyTwo.note
|
23
|
-
end
|
24
|
-
end
|
1
|
+
require "nice_enum"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
class DefaultAttributeTest < Test::Unit::TestCase
|
5
|
+
class Number < Enum
|
6
|
+
default :note => "A boring number"
|
7
|
+
|
8
|
+
enum :Twenty, 20,
|
9
|
+
:note => "Exact value of e^pi - pi"
|
10
|
+
|
11
|
+
enum :Ninety, 90,
|
12
|
+
:note => "Square Root of -1"
|
13
|
+
|
14
|
+
enum :FourtyTwo, 42
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_set_attribute
|
18
|
+
assert_equal "Exact value of e^pi - pi", Number::Twenty.note
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_get_unset_attribute
|
22
|
+
assert_equal "A boring number", Number::FourtyTwo.note
|
23
|
+
end
|
24
|
+
end
|
data/test/default_value_test.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "nice_enum"
|
3
|
-
|
4
|
-
class DefaultValueTest < Test::Unit::TestCase
|
5
|
-
class Suit < Enum
|
6
|
-
enum :Spades
|
7
|
-
enum :Hearts
|
8
|
-
enum :Green, 48
|
9
|
-
enum :Diamonds
|
10
|
-
enum :Clubs
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_enum_order
|
14
|
-
assert_equal [Suit::Spades, Suit::Hearts, Suit::Green, Suit::Diamonds, Suit::Clubs], Suit.to_a.sort
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_values
|
18
|
-
assert_equal 1, Suit::Hearts.value
|
19
|
-
assert_equal 48, Suit::Green.value
|
20
|
-
assert_equal 49, Suit::Diamonds.value
|
21
|
-
end
|
22
|
-
end
|
1
|
+
require "test/unit"
|
2
|
+
require "nice_enum"
|
3
|
+
|
4
|
+
class DefaultValueTest < Test::Unit::TestCase
|
5
|
+
class Suit < Enum
|
6
|
+
enum :Spades
|
7
|
+
enum :Hearts
|
8
|
+
enum :Green, 48
|
9
|
+
enum :Diamonds
|
10
|
+
enum :Clubs
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_enum_order
|
14
|
+
assert_equal [Suit::Spades, Suit::Hearts, Suit::Green, Suit::Diamonds, Suit::Clubs], Suit.to_a.sort
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_values
|
18
|
+
assert_equal 1, Suit::Hearts.value
|
19
|
+
assert_equal 48, Suit::Green.value
|
20
|
+
assert_equal 49, Suit::Diamonds.value
|
21
|
+
end
|
22
|
+
end
|
data/test/flags_test.rb
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "nice_enum"
|
3
|
-
|
4
|
-
class FlagsTest < Test::Unit::TestCase
|
5
|
-
class Permission < Flags
|
6
|
-
enum :Read, 4
|
7
|
-
enum :Write, 2
|
8
|
-
enum :Execute, 1
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_binary_operators_return_class
|
12
|
-
assert (Permission::Read | Permission::Write).is_a? Permission
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_or
|
16
|
-
assert_equal 6, Permission::Read | Permission::Write
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_and
|
20
|
-
assert_equal Permission::Write, 7 & Permission::Write
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_xor
|
24
|
-
assert_equal Permission::Read | Permission::Write, 7 ^ Permission::Execute
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_single_flag
|
28
|
-
assert_equal [Permission::Read], Permission::Read.flags
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_multi_flags
|
32
|
-
assert_equal [Permission::Write, Permission::Read], Permission.new(6).flags
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_to_s
|
36
|
-
assert_equal "Execute|Write", Permission.new(3).to_s.gsub(' ', '')
|
37
|
-
end
|
38
|
-
end
|
1
|
+
require "test/unit"
|
2
|
+
require "nice_enum"
|
3
|
+
|
4
|
+
class FlagsTest < Test::Unit::TestCase
|
5
|
+
class Permission < Flags
|
6
|
+
enum :Read, 4
|
7
|
+
enum :Write, 2
|
8
|
+
enum :Execute, 1
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_binary_operators_return_class
|
12
|
+
assert (Permission::Read | Permission::Write).is_a? Permission
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_or
|
16
|
+
assert_equal 6, Permission::Read | Permission::Write
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_and
|
20
|
+
assert_equal Permission::Write, 7 & Permission::Write
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_xor
|
24
|
+
assert_equal Permission::Read | Permission::Write, 7 ^ Permission::Execute
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_single_flag
|
28
|
+
assert_equal [Permission::Read], Permission::Read.flags
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_multi_flags
|
32
|
+
assert_equal [Permission::Write, Permission::Read], Permission.new(6).flags
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_to_s
|
36
|
+
assert_equal "Execute|Write", Permission.new(3).to_s.gsub(' ', '')
|
37
|
+
end
|
38
|
+
end
|
data/test/hashcode_test.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
require "nice_enum"
|
2
|
-
require "test/unit"
|
3
|
-
|
4
|
-
class HashcodeTest < Test::Unit::TestCase
|
5
|
-
VALUE = 18505
|
6
|
-
HASH = VALUE.hash
|
7
|
-
|
8
|
-
class Enumeration < Enum
|
9
|
-
enum :Value, VALUE
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_hashcode_is_underlying_hash
|
13
|
-
assert_equal HASH, Enumeration::Value.hash
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_hashcode_from_constructor
|
17
|
-
value = Enumeration.new(VALUE)
|
18
|
-
assert_equal HASH, value.hash
|
19
|
-
end
|
20
|
-
end
|
1
|
+
require "nice_enum"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
class HashcodeTest < Test::Unit::TestCase
|
5
|
+
VALUE = 18505
|
6
|
+
HASH = VALUE.hash
|
7
|
+
|
8
|
+
class Enumeration < Enum
|
9
|
+
enum :Value, VALUE
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_hashcode_is_underlying_hash
|
13
|
+
assert_equal HASH, Enumeration::Value.hash
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_hashcode_from_constructor
|
17
|
+
value = Enumeration.new(VALUE)
|
18
|
+
assert_equal HASH, value.hash
|
19
|
+
end
|
20
|
+
end
|