nice_enum 0.1.4 → 0.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 +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
|