enumeration 1.3.1 → 1.3.2
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.
- data/.gitignore +18 -3
- data/Gemfile +3 -2
- data/LICENSE.txt +22 -0
- data/README.md +79 -0
- data/Rakefile +1 -7
- data/enumeration.gemspec +17 -16
- data/lib/enumeration.rb +1 -1
- data/lib/enumeration/assert_macros.rb +40 -37
- data/lib/enumeration/collection.rb +39 -36
- data/lib/enumeration/version.rb +1 -1
- data/test/helper.rb +7 -4
- data/test/support/factory.rb +6 -0
- data/test/{assert_macros_test.rb → unit/assert_macros_tests.rb} +16 -14
- data/test/unit/collection_tests.rb +100 -0
- data/test/unit/enumeration_tests.rb +117 -0
- metadata +30 -49
- data/Gemfile.lock +0 -25
- data/README.rdoc +0 -86
- data/test/api_test.rb +0 -15
- data/test/collection_test.rb +0 -84
- data/test/irb.rb +0 -10
- data/test/list_enum_test.rb +0 -51
- data/test/map_enum_test.rb +0 -65
- data/test/thing.rb +0 -3
data/.gitignore
CHANGED
@@ -1,4 +1,19 @@
|
|
1
|
-
pkg/*
|
2
|
-
.bundle
|
3
1
|
*.gem
|
4
|
-
*.log
|
2
|
+
*.log
|
3
|
+
*.rbc
|
4
|
+
.rbx/
|
5
|
+
.bundle
|
6
|
+
.config
|
7
|
+
.yardoc
|
8
|
+
Gemfile.lock
|
9
|
+
InstalledFiles
|
10
|
+
_yardoc
|
11
|
+
coverage
|
12
|
+
doc/
|
13
|
+
lib/bundler/man
|
14
|
+
pkg
|
15
|
+
rdoc
|
16
|
+
spec/reports
|
17
|
+
test/tmp
|
18
|
+
test/version_tmp
|
19
|
+
tmp
|
data/Gemfile
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2011-Present Kelly Redding and Collin Redding
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Enumeration
|
2
|
+
|
3
|
+
Add enumerated value attributes to your ruby classes.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
require 'enumeration'
|
9
|
+
|
10
|
+
class Thing
|
11
|
+
include Enumeration
|
12
|
+
|
13
|
+
# list enumeration
|
14
|
+
enum :word, %w{aye bee see}
|
15
|
+
|
16
|
+
# map enumeration
|
17
|
+
enum :stuff, {
|
18
|
+
:a => "aye",
|
19
|
+
:b => "bee",
|
20
|
+
:c => "see"
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
# get the enum sets
|
25
|
+
Thing.word_set # => ['aye', 'bee', 'see']
|
26
|
+
Thing.stuff_set # => [:a, :b, :c]
|
27
|
+
|
28
|
+
# lookup mapped enum values
|
29
|
+
Thing.stuff(:a) # => "aye"
|
30
|
+
|
31
|
+
|
32
|
+
t = Thing.new
|
33
|
+
|
34
|
+
# write list enum values
|
35
|
+
t.word # => nil
|
36
|
+
t.word = "aye"
|
37
|
+
t.word # => "aye"
|
38
|
+
t.word_key # => "aye" (a list's 'keys' are it's values, vice-versa)
|
39
|
+
t.word = "dee"
|
40
|
+
t.word # => nil (won't write non enum values)
|
41
|
+
t.word_key # => nil
|
42
|
+
|
43
|
+
# write mapped enum value
|
44
|
+
t.stuff # => nil
|
45
|
+
t.stuff = :b # (write using key)
|
46
|
+
t.stuff # => "bee"
|
47
|
+
t.stuff_key # => :b
|
48
|
+
t.stuff = "see" # (write using value)
|
49
|
+
t.stuff # => "see"
|
50
|
+
t.stuff_key # => :c
|
51
|
+
t.stuff = :d
|
52
|
+
t.stuff # => nil (won't write non enum keys)
|
53
|
+
t.stuff_key # => nil
|
54
|
+
t.stuff = "dee"
|
55
|
+
t.stuff # => nil (won't write non enum values)
|
56
|
+
t.stuff_key # => nil
|
57
|
+
```
|
58
|
+
|
59
|
+
## Installation
|
60
|
+
|
61
|
+
Add this line to your application's Gemfile:
|
62
|
+
|
63
|
+
gem 'enumeration'
|
64
|
+
|
65
|
+
And then execute:
|
66
|
+
|
67
|
+
$ bundle
|
68
|
+
|
69
|
+
Or install it yourself as:
|
70
|
+
|
71
|
+
$ gem install enumeration
|
72
|
+
|
73
|
+
## Contributing
|
74
|
+
|
75
|
+
1. Fork it
|
76
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
77
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
78
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
79
|
+
5. Create new Pull Request
|
data/Rakefile
CHANGED
data/enumeration.gemspec
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
4
|
require "enumeration/version"
|
4
5
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "enumeration"
|
8
|
+
gem.version = Enumeration::VERSION
|
9
|
+
gem.authors = ["Kelly Redding", "Collin Redding"]
|
10
|
+
gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
|
11
|
+
gem.description = %q{Add enumerated value attributes to your ruby classes.}
|
12
|
+
gem.summary = %q{Add enumerated value attributes to your ruby classes.}
|
13
|
+
gem.homepage = "http://github.com/redding/enumeration"
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
|
21
|
+
gem.add_development_dependency("assert", ["~> 2.13"])
|
19
22
|
|
20
|
-
s.add_development_dependency("bundler", ["~> 1.0"])
|
21
|
-
s.add_development_dependency("assert", ["~> 0.7"])
|
22
23
|
end
|
data/lib/enumeration.rb
CHANGED
@@ -1,55 +1,58 @@
|
|
1
|
-
module Enumeration
|
2
|
-
module Enumeration::AssertMacros
|
1
|
+
module Enumeration
|
3
2
|
|
4
|
-
|
5
|
-
# regression tests in Assert (https://github.com/teaminsight/assert)
|
3
|
+
module AssertMacros
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
extend MacroMethods
|
10
|
-
end
|
11
|
-
end
|
5
|
+
# a set of Assert macros to help write enum definition and
|
6
|
+
# regression tests in Assert (https://github.com/teaminsight/assert)
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
values = [*args].flatten
|
17
|
-
type = nil
|
18
|
-
if values.first.kind_of?(::Hash)
|
19
|
-
values = values.first
|
20
|
-
type = 'map'
|
21
|
-
elsif !values.empty?
|
22
|
-
type = 'list'
|
8
|
+
def self.included(receiver)
|
9
|
+
receiver.class_eval do
|
10
|
+
extend MacroMethods
|
23
11
|
end
|
12
|
+
end
|
24
13
|
|
25
|
-
|
26
|
-
macro_name = "have the"
|
27
|
-
macro_name += " #{type}" if type
|
28
|
-
macro_name += " enum '#{name}'"
|
29
|
-
macro_name += " with #{values.inspect} values" if !values.empty?
|
14
|
+
module MacroMethods
|
30
15
|
|
31
|
-
|
32
|
-
|
16
|
+
def have_enum(name, *args)
|
17
|
+
values = [*args].flatten
|
18
|
+
type = nil
|
19
|
+
if values.first.kind_of?(::Hash)
|
20
|
+
values = values.first
|
21
|
+
type = 'map'
|
22
|
+
elsif !values.empty?
|
23
|
+
type = 'list'
|
24
|
+
end
|
33
25
|
|
34
|
-
|
26
|
+
called_from = caller.first
|
27
|
+
macro_name = "have the"
|
28
|
+
macro_name += " #{type}" if type
|
29
|
+
macro_name += " enum '#{name}'"
|
30
|
+
macro_name += " with #{values.inspect} values" if !values.empty?
|
35
31
|
|
36
|
-
|
37
|
-
should
|
38
|
-
end
|
32
|
+
Assert::Macro.new(macro_name) do
|
33
|
+
should have_accessor name, [called_from]
|
39
34
|
|
40
|
-
|
41
|
-
should "know its '#{name}' enum values", called_from do
|
42
|
-
assert_equal values, subject.class.send("#{name}_collection")
|
43
|
-
end
|
35
|
+
should have_class_method "#{name}_collection", [called_from]
|
44
36
|
|
45
37
|
if type == 'map'
|
46
|
-
should
|
47
|
-
|
38
|
+
should have_class_method name, [called_from]
|
39
|
+
end
|
40
|
+
|
41
|
+
if !values.empty?
|
42
|
+
should "know its '#{name}' enum values", called_from do
|
43
|
+
assert_equal values, subject.class.send("#{name}_collection")
|
44
|
+
end
|
45
|
+
|
46
|
+
if type == 'map'
|
47
|
+
should "map the '#{name}' enum values at the class level", called_from do
|
48
|
+
values.each {|k,v| assert_equal v, subject.class.send(name, k)}
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
50
|
-
end
|
51
52
|
|
53
|
+
end
|
52
54
|
end
|
55
|
+
|
53
56
|
end
|
54
57
|
|
55
58
|
end
|
@@ -1,49 +1,52 @@
|
|
1
|
-
module Enumeration
|
2
|
-
class Enumeration::Collection
|
1
|
+
module Enumeration
|
3
2
|
|
4
|
-
|
3
|
+
class Collection
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
attr_reader :data
|
6
|
+
|
7
|
+
def initialize(map_or_list)
|
8
|
+
unless map_or_list.kind_of?(::Hash) || map_or_list.kind_of?(::Array)
|
9
|
+
raise ArgumentError, "please specify the enum collection as a Hash or Array"
|
10
|
+
end
|
11
|
+
@data = map_or_list
|
9
12
|
end
|
10
|
-
@data = map_or_list
|
11
|
-
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
# lookup collection value by a key
|
15
|
+
def [](key)
|
16
|
+
if self.map? && @data.has_key?(key)
|
17
|
+
@data[key]
|
18
|
+
elsif (self.map? && @data.has_value?(key)) ||
|
19
|
+
(self.list? && @data.include?(key))
|
20
|
+
key
|
21
|
+
else
|
22
|
+
nil
|
23
|
+
end
|
22
24
|
end
|
23
|
-
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
# lookup collection key by a value
|
27
|
+
def key(value)
|
28
|
+
if self.map? && @data.has_value?(value)
|
29
|
+
@data.invert[value]
|
30
|
+
elsif (self.map? && @data.has_key?(value)) ||
|
31
|
+
(self.list? && @data.include?(value))
|
32
|
+
value
|
33
|
+
else
|
34
|
+
nil
|
35
|
+
end
|
34
36
|
end
|
35
|
-
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
def list?
|
39
|
+
@data.kind_of?(::Array)
|
40
|
+
end
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
def map?
|
43
|
+
@data.kind_of?(::Hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
def set
|
47
|
+
self.map? ? @data.keys : @data
|
48
|
+
end
|
44
49
|
|
45
|
-
def set
|
46
|
-
self.map? ? @data.keys : @data
|
47
50
|
end
|
48
51
|
|
49
52
|
end
|
data/lib/enumeration/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
# this file is automatically required
|
2
|
-
# put test helpers here
|
1
|
+
# this file is automatically required when you run `assert`
|
2
|
+
# put any test helpers here
|
3
3
|
|
4
|
-
# add root dir to the load path
|
4
|
+
# add the root dir to the load path
|
5
5
|
$LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
|
6
6
|
|
7
|
-
require
|
7
|
+
# require pry for debugging (`binding.pry`)
|
8
|
+
require 'pry'
|
9
|
+
|
10
|
+
require 'test/support/factory'
|
@@ -1,25 +1,27 @@
|
|
1
1
|
require 'assert'
|
2
|
-
|
3
|
-
require 'enumeration'
|
4
2
|
require 'enumeration/assert_macros'
|
5
3
|
|
6
4
|
module Enumeration::AssertMacros
|
7
5
|
|
8
|
-
class
|
9
|
-
desc "Enumeration::AssertMacros"
|
6
|
+
class UnitTests < Assert::Context
|
10
7
|
include Enumeration::AssertMacros
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
:
|
18
|
-
|
19
|
-
|
20
|
-
|
9
|
+
desc "Enumeration::AssertMacros"
|
10
|
+
setup do
|
11
|
+
@enum_class = Class.new do
|
12
|
+
include Enumeration
|
13
|
+
|
14
|
+
enum :list, %w{aye bee see}
|
15
|
+
|
16
|
+
enum :map, {
|
17
|
+
:a => "aye",
|
18
|
+
:b => "bee",
|
19
|
+
:c => "see"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
@enum = @enum_class.new
|
21
23
|
end
|
22
|
-
subject
|
24
|
+
subject{ @enum }
|
23
25
|
|
24
26
|
should have_enum :list
|
25
27
|
should have_enum :list, ['aye', 'bee', 'see']
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require "assert"
|
2
|
+
require "enumeration/collection"
|
3
|
+
|
4
|
+
class Enumeration::Collection
|
5
|
+
|
6
|
+
class UnitTests < Assert::Context
|
7
|
+
desc "Enumeration::Collection"
|
8
|
+
setup do
|
9
|
+
@collection = Enumeration::Collection.new([])
|
10
|
+
end
|
11
|
+
subject{ @collection }
|
12
|
+
|
13
|
+
should have_readers :data
|
14
|
+
should have_imeths :[], :key, :list?, :map?, :set
|
15
|
+
|
16
|
+
should "only be created from Arrays or Hashes" do
|
17
|
+
assert_raises ArgumentError do
|
18
|
+
Enumeration::Collection.new(Factory.string)
|
19
|
+
end
|
20
|
+
assert_nothing_raised do
|
21
|
+
Enumeration::Collection.new([])
|
22
|
+
Enumeration::Collection.new({})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
class ListCollectionTests < UnitTests
|
29
|
+
desc "for a list"
|
30
|
+
setup do
|
31
|
+
@list = ['one', 'two', 'three']
|
32
|
+
@collection = Enumeration::Collection.new(@list)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "be a list" do
|
36
|
+
assert_true subject.list?
|
37
|
+
assert_false subject.map?
|
38
|
+
end
|
39
|
+
|
40
|
+
should "know its data" do
|
41
|
+
assert_equal @list, subject.data
|
42
|
+
end
|
43
|
+
|
44
|
+
should "know its set" do
|
45
|
+
assert_equal @list, subject.set
|
46
|
+
end
|
47
|
+
|
48
|
+
should "lookup value by key" do
|
49
|
+
assert_equal 'two', subject['two']
|
50
|
+
end
|
51
|
+
|
52
|
+
should "lookup key by value" do
|
53
|
+
assert_equal 'three', subject.key('three')
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class MapCollectionTests < UnitTests
|
59
|
+
desc "for a map"
|
60
|
+
setup do
|
61
|
+
@map = {
|
62
|
+
:one => 1,
|
63
|
+
:two => 2,
|
64
|
+
:three => 3
|
65
|
+
}
|
66
|
+
@collection = Enumeration::Collection.new(@map)
|
67
|
+
end
|
68
|
+
|
69
|
+
should "be a map" do
|
70
|
+
assert_true subject.map?
|
71
|
+
assert_false subject.list?
|
72
|
+
end
|
73
|
+
|
74
|
+
should "know its data" do
|
75
|
+
assert_equal(@map, subject.data)
|
76
|
+
end
|
77
|
+
|
78
|
+
should "know it's set" do
|
79
|
+
@map.keys.each{ |k| assert subject.set.include?(k) }
|
80
|
+
end
|
81
|
+
|
82
|
+
should "lookup value by key" do
|
83
|
+
assert_equal 2, subject[:two]
|
84
|
+
end
|
85
|
+
|
86
|
+
should "lookup value by value" do
|
87
|
+
assert_equal 2, subject[2]
|
88
|
+
end
|
89
|
+
|
90
|
+
should "lookup key by value" do
|
91
|
+
assert_equal :two, subject.key(2)
|
92
|
+
end
|
93
|
+
|
94
|
+
should "lookup key by key" do
|
95
|
+
assert_equal :two, subject.key(:two)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require "assert"
|
2
|
+
require 'enumeration'
|
3
|
+
|
4
|
+
module Enumeration
|
5
|
+
|
6
|
+
class UnitTests < Assert::Context
|
7
|
+
desc "Enumeration"
|
8
|
+
setup do
|
9
|
+
@enum_class = Class.new{ include Enumeration }
|
10
|
+
@enum = @enum_class.new
|
11
|
+
end
|
12
|
+
subject{ @enum }
|
13
|
+
|
14
|
+
should have_class_method :enum
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class ListEnumTests < UnitTests
|
19
|
+
desc "for a list"
|
20
|
+
setup do
|
21
|
+
@enum_class.send(:enum, :word, %w{aye bee see})
|
22
|
+
end
|
23
|
+
|
24
|
+
should have_cmeths :word_set, :word_collection
|
25
|
+
should have_accessor :word
|
26
|
+
|
27
|
+
should "not have a class level lookup method" do
|
28
|
+
assert_raises NoMethodError do
|
29
|
+
@enum_class.word
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
should "provide class level access to the enum list" do
|
34
|
+
words = @enum_class.word_set
|
35
|
+
assert_kind_of ::Array, words
|
36
|
+
assert_equal 3, words.size
|
37
|
+
assert_equal ['aye', 'bee', 'see'], words
|
38
|
+
assert_equal words, @enum_class.word_collection
|
39
|
+
end
|
40
|
+
|
41
|
+
should "write a value and read the value" do
|
42
|
+
subject.word = "see"
|
43
|
+
assert_equal "see", subject.word
|
44
|
+
assert_equal "see", subject.word_key
|
45
|
+
end
|
46
|
+
|
47
|
+
should "write nil for values that aren't in the enum" do
|
48
|
+
subject.word = Factory.string
|
49
|
+
assert_equal nil, subject.word
|
50
|
+
assert_equal nil, subject.word_key
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class MapEnumTests < UnitTests
|
56
|
+
desc "for a map"
|
57
|
+
setup do
|
58
|
+
@enum_class.send(:enum, :stuff, {
|
59
|
+
:a => "aye",
|
60
|
+
:b => "bee",
|
61
|
+
:c => "see"
|
62
|
+
})
|
63
|
+
end
|
64
|
+
|
65
|
+
should have_cmeths :stuff, :stuff_set, :stuff_collection
|
66
|
+
should have_accessor :stuff
|
67
|
+
|
68
|
+
should "provide class level lookup of the enum" do
|
69
|
+
assert_equal "aye", @enum_class.stuff(:a)
|
70
|
+
end
|
71
|
+
|
72
|
+
should "provide class level access to the enum set" do
|
73
|
+
stuffs = @enum_class.stuff_set
|
74
|
+
assert_kind_of ::Array, stuffs
|
75
|
+
assert_equal 3, stuffs.size
|
76
|
+
[:a, :b, :c].each{ |s| assert @enum_class.stuff_set.include?(s) }
|
77
|
+
|
78
|
+
exp = {
|
79
|
+
:a => 'aye',
|
80
|
+
:b => 'bee',
|
81
|
+
:c => 'see'
|
82
|
+
}
|
83
|
+
assert_equal exp, @enum_class.stuff_collection
|
84
|
+
end
|
85
|
+
|
86
|
+
should "write a key and read the value and key" do
|
87
|
+
subject.stuff = :b
|
88
|
+
assert_equal "bee", subject.stuff
|
89
|
+
assert_equal :b, subject.stuff_key
|
90
|
+
end
|
91
|
+
|
92
|
+
should "write a value and read the value" do
|
93
|
+
subject.stuff = "see"
|
94
|
+
assert_equal "see", subject.stuff
|
95
|
+
assert_equal :c, subject.stuff_key
|
96
|
+
end
|
97
|
+
|
98
|
+
should "not read keys like you would values" do
|
99
|
+
subject.stuff = :c
|
100
|
+
assert_not_equal :c, subject.stuff
|
101
|
+
end
|
102
|
+
|
103
|
+
should "write nil for keys that aren't in the enum" do
|
104
|
+
subject.stuff = Factory.string.to_sym
|
105
|
+
assert_equal nil, subject.stuff
|
106
|
+
assert_equal nil, subject.stuff_key
|
107
|
+
end
|
108
|
+
|
109
|
+
should "write nil for values that aren't in the enum" do
|
110
|
+
subject.stuff = Factory.string
|
111
|
+
assert_equal nil, subject.stuff
|
112
|
+
assert_equal nil, subject.stuff_key
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
metadata
CHANGED
@@ -1,55 +1,42 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumeration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 2
|
10
|
+
version: 1.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
- Kelly
|
13
|
+
- Kelly Redding
|
14
|
+
- Collin Redding
|
14
15
|
autorequire:
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date:
|
19
|
+
date: 2015-02-28 00:00:00 Z
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
|
-
type: :development
|
22
|
-
prerelease: false
|
23
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
25
24
|
requirements:
|
26
25
|
- - ~>
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
27
|
+
hash: 25
|
29
28
|
segments:
|
30
|
-
-
|
31
|
-
-
|
32
|
-
version: "
|
33
|
-
version_requirements: *id001
|
34
|
-
name: bundler
|
35
|
-
- !ruby/object:Gem::Dependency
|
29
|
+
- 2
|
30
|
+
- 13
|
31
|
+
version: "2.13"
|
36
32
|
type: :development
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
hash: 5
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
- 7
|
47
|
-
version: "0.7"
|
48
|
-
version_requirements: *id002
|
49
33
|
name: assert
|
50
|
-
|
34
|
+
version_requirements: *id001
|
35
|
+
prerelease: false
|
36
|
+
description: Add enumerated value attributes to your ruby classes.
|
51
37
|
email:
|
52
|
-
- kelly@
|
38
|
+
- kelly@kellyredding.com
|
39
|
+
- collin.redding@me.com
|
53
40
|
executables: []
|
54
41
|
|
55
42
|
extensions: []
|
@@ -59,25 +46,22 @@ extra_rdoc_files: []
|
|
59
46
|
files:
|
60
47
|
- .gitignore
|
61
48
|
- Gemfile
|
62
|
-
-
|
63
|
-
- README.
|
49
|
+
- LICENSE.txt
|
50
|
+
- README.md
|
64
51
|
- Rakefile
|
65
52
|
- enumeration.gemspec
|
66
53
|
- lib/enumeration.rb
|
67
54
|
- lib/enumeration/assert_macros.rb
|
68
55
|
- lib/enumeration/collection.rb
|
69
56
|
- lib/enumeration/version.rb
|
70
|
-
- test/api_test.rb
|
71
|
-
- test/assert_macros_test.rb
|
72
|
-
- test/collection_test.rb
|
73
57
|
- test/helper.rb
|
74
|
-
- test/
|
75
|
-
- test/
|
76
|
-
- test/
|
77
|
-
- test/
|
78
|
-
homepage: http://github.com/
|
79
|
-
licenses:
|
80
|
-
|
58
|
+
- test/support/factory.rb
|
59
|
+
- test/unit/assert_macros_tests.rb
|
60
|
+
- test/unit/collection_tests.rb
|
61
|
+
- test/unit/enumeration_tests.rb
|
62
|
+
homepage: http://github.com/redding/enumeration
|
63
|
+
licenses:
|
64
|
+
- MIT
|
81
65
|
post_install_message:
|
82
66
|
rdoc_options: []
|
83
67
|
|
@@ -104,16 +88,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
88
|
requirements: []
|
105
89
|
|
106
90
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.8.
|
91
|
+
rubygems_version: 1.8.29
|
108
92
|
signing_key:
|
109
93
|
specification_version: 3
|
110
|
-
summary:
|
94
|
+
summary: Add enumerated value attributes to your ruby classes.
|
111
95
|
test_files:
|
112
|
-
- test/api_test.rb
|
113
|
-
- test/assert_macros_test.rb
|
114
|
-
- test/collection_test.rb
|
115
96
|
- test/helper.rb
|
116
|
-
- test/
|
117
|
-
- test/
|
118
|
-
- test/
|
119
|
-
- test/
|
97
|
+
- test/support/factory.rb
|
98
|
+
- test/unit/assert_macros_tests.rb
|
99
|
+
- test/unit/collection_tests.rb
|
100
|
+
- test/unit/enumeration_tests.rb
|
data/Gemfile.lock
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
enumeration (1.3.1)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: http://rubygems.org/
|
8
|
-
specs:
|
9
|
-
ansi (1.4.1)
|
10
|
-
assert (0.7.3)
|
11
|
-
assert-view (~> 0.5)
|
12
|
-
assert-view (0.5.0)
|
13
|
-
ansi (~> 1.3)
|
14
|
-
undies (~> 2.0)
|
15
|
-
rake (0.9.2)
|
16
|
-
undies (2.0.0)
|
17
|
-
|
18
|
-
PLATFORMS
|
19
|
-
ruby
|
20
|
-
|
21
|
-
DEPENDENCIES
|
22
|
-
assert (~> 0.7)
|
23
|
-
bundler (~> 1.0)
|
24
|
-
enumeration!
|
25
|
-
rake (~> 0.9.2)
|
data/README.rdoc
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
= Enumeration
|
2
|
-
|
3
|
-
== Description
|
4
|
-
|
5
|
-
add enumerated value attributes to your ruby classes
|
6
|
-
|
7
|
-
== Installation
|
8
|
-
|
9
|
-
gem install enumeration
|
10
|
-
|
11
|
-
== Basic Example and Usage
|
12
|
-
|
13
|
-
require 'enumeration'
|
14
|
-
|
15
|
-
class Thing
|
16
|
-
include Enumeration
|
17
|
-
|
18
|
-
# list enumeration
|
19
|
-
enum :word, %w{aye bee see}
|
20
|
-
|
21
|
-
# map enumeration
|
22
|
-
enum :stuff, {
|
23
|
-
:a => "aye",
|
24
|
-
:b => "bee",
|
25
|
-
:c => "see"
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
# get the enum sets
|
30
|
-
Thing.word_set # => ['aye', 'bee', 'see']
|
31
|
-
Thing.stuff_set # => [:a, :b, :c]
|
32
|
-
|
33
|
-
# lookup mapped enum values
|
34
|
-
Thing.stuff(:a) # => "aye"
|
35
|
-
|
36
|
-
|
37
|
-
t = Thing.new
|
38
|
-
|
39
|
-
# write list enum values
|
40
|
-
t.word # => nil
|
41
|
-
t.word = "aye"
|
42
|
-
t.word # => "aye"
|
43
|
-
t.word_key # => "aye" (a list's 'keys' are it's values, vice-versa)
|
44
|
-
t.word = "dee"
|
45
|
-
t.word # => nil (won't write non enum values)
|
46
|
-
t.word_key # => nil
|
47
|
-
|
48
|
-
# write mapped enum value
|
49
|
-
t.stuff # => nil
|
50
|
-
t.stuff = :b # (write using key)
|
51
|
-
t.stuff # => "bee"
|
52
|
-
t.stuff_key # => :b
|
53
|
-
t.stuff = "see" # (write using value)
|
54
|
-
t.stuff # => "see"
|
55
|
-
t.stuff_key # => :c
|
56
|
-
t.stuff = :d
|
57
|
-
t.stuff # => nil (won't write non enum keys)
|
58
|
-
t.stuff_key # => nil
|
59
|
-
t.stuff = "dee"
|
60
|
-
t.stuff # => nil (won't write non enum values)
|
61
|
-
t.stuff_key # => nil
|
62
|
-
|
63
|
-
== License
|
64
|
-
|
65
|
-
Copyright (c) 2011 Kelly D. Redding
|
66
|
-
|
67
|
-
Permission is hereby granted, free of charge, to any person
|
68
|
-
obtaining a copy of this software and associated documentation
|
69
|
-
files (the "Software"), to deal in the Software without
|
70
|
-
restriction, including without limitation the rights to use,
|
71
|
-
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
72
|
-
copies of the Software, and to permit persons to whom the
|
73
|
-
Software is furnished to do so, subject to the following
|
74
|
-
conditions:
|
75
|
-
|
76
|
-
The above copyright notice and this permission notice shall be
|
77
|
-
included in all copies or substantial portions of the Software.
|
78
|
-
|
79
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
80
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
81
|
-
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
82
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
83
|
-
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
84
|
-
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
85
|
-
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
86
|
-
OTHER DEALINGS IN THE SOFTWARE.
|
data/test/api_test.rb
DELETED
data/test/collection_test.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
|
3
|
-
require "enumeration/collection"
|
4
|
-
|
5
|
-
class CollectionAPITest < Assert::Context
|
6
|
-
desc "Enumeration collection"
|
7
|
-
subject { Enumeration::Collection.new([]) }
|
8
|
-
|
9
|
-
should have_reader :data
|
10
|
-
should have_instance_methods :set, :map?, :list?, :[]
|
11
|
-
|
12
|
-
should "only be created from Arrays or Hashes" do
|
13
|
-
assert_raises ArgumentError do
|
14
|
-
Enumeration::Collection.new('stuff')
|
15
|
-
end
|
16
|
-
assert_nothing_raised do
|
17
|
-
Enumeration::Collection.new([])
|
18
|
-
Enumeration::Collection.new({})
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
class ListCollectionTest < Assert::Context
|
25
|
-
desc "List collection"
|
26
|
-
subject { Enumeration::Collection.new(['one', 'two', 'three']) }
|
27
|
-
|
28
|
-
should "be a list" do
|
29
|
-
assert_equal true, subject.list?
|
30
|
-
assert_equal false, subject.map?
|
31
|
-
end
|
32
|
-
|
33
|
-
should "know it's data" do
|
34
|
-
assert_equal ['one', 'two', 'three'], subject.data
|
35
|
-
end
|
36
|
-
|
37
|
-
should "know it's set" do
|
38
|
-
assert_equal ['one', 'two', 'three'], subject.set
|
39
|
-
end
|
40
|
-
|
41
|
-
should "lookup value by key" do
|
42
|
-
assert_equal 'two', subject['two']
|
43
|
-
end
|
44
|
-
|
45
|
-
should "lookup key by value" do
|
46
|
-
assert_equal 'three', subject.key('three')
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
class MapCollectionTest < Assert::Context
|
52
|
-
desc "Map collection"
|
53
|
-
subject { Enumeration::Collection.new({ :one => 1, :two => 2, :three => 3}) }
|
54
|
-
|
55
|
-
should "be a map" do
|
56
|
-
assert_equal true, subject.map?
|
57
|
-
assert_equal false, subject.list?
|
58
|
-
end
|
59
|
-
|
60
|
-
should "know it's data" do
|
61
|
-
assert_equal({:one=>1,:two=>2,:three=>3}, subject.data)
|
62
|
-
end
|
63
|
-
|
64
|
-
should "know it's set" do
|
65
|
-
[:one, :two, :three].each{|n| assert subject.set.include?(n)}
|
66
|
-
end
|
67
|
-
|
68
|
-
should "lookup value by key" do
|
69
|
-
assert_equal 2, subject[:two]
|
70
|
-
end
|
71
|
-
|
72
|
-
should "lookup value by value" do
|
73
|
-
assert_equal 2, subject[2]
|
74
|
-
end
|
75
|
-
|
76
|
-
should "lookup key by value" do
|
77
|
-
assert_equal :two, subject.key(2)
|
78
|
-
end
|
79
|
-
|
80
|
-
should "lookup key by key" do
|
81
|
-
assert_equal :two, subject.key(:two)
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
data/test/irb.rb
DELETED
data/test/list_enum_test.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
|
3
|
-
require 'enumeration'
|
4
|
-
|
5
|
-
class ListEnumTest < Assert::Context
|
6
|
-
desc "instance"
|
7
|
-
|
8
|
-
subject { @a_thing }
|
9
|
-
before do
|
10
|
-
Thing.send :include, Enumeration
|
11
|
-
Thing.send(:enum, :word, %w{aye bee see})
|
12
|
-
@a_thing = Thing.new
|
13
|
-
end
|
14
|
-
|
15
|
-
should have_class_methods :word_set, :word_collection
|
16
|
-
should have_accessor :word
|
17
|
-
|
18
|
-
should "not have a class level lookup method" do
|
19
|
-
assert_raises NoMethodError do
|
20
|
-
Thing.word
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
should "provide class level access to the enum set" do
|
25
|
-
words = Thing.word_set
|
26
|
-
assert words
|
27
|
-
assert_kind_of ::Array, words
|
28
|
-
assert !words.empty?
|
29
|
-
assert_equal 3, words.size
|
30
|
-
assert_equal ['aye', 'bee', 'see'], Thing.word_set
|
31
|
-
assert_equal Thing.word_set, Thing.word_collection
|
32
|
-
end
|
33
|
-
|
34
|
-
should "write a value and read the value" do
|
35
|
-
subject.word = "see"
|
36
|
-
assert_equal "see", subject.word
|
37
|
-
end
|
38
|
-
|
39
|
-
should "write a value and read the key" do
|
40
|
-
subject.word = "see"
|
41
|
-
assert_equal "see", subject.word_key
|
42
|
-
end
|
43
|
-
|
44
|
-
should "write nil for values that aren't in the enum" do
|
45
|
-
subject.word = "bady-bad"
|
46
|
-
assert_equal nil, subject.word
|
47
|
-
assert_equal nil, subject.word_key
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
data/test/map_enum_test.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
|
3
|
-
require 'enumeration'
|
4
|
-
|
5
|
-
class MapEnumTest < Assert::Context
|
6
|
-
desc "instance"
|
7
|
-
|
8
|
-
subject { @a_thing }
|
9
|
-
before do
|
10
|
-
Thing.send :include, Enumeration
|
11
|
-
Thing.send(:enum, :stuff, {
|
12
|
-
:a => "aye",
|
13
|
-
:b => "bee",
|
14
|
-
:c => "see"
|
15
|
-
})
|
16
|
-
@a_thing = Thing.new
|
17
|
-
end
|
18
|
-
|
19
|
-
should have_class_methods :stuff, :stuff_set, :stuff_collection
|
20
|
-
should have_accessor :stuff
|
21
|
-
|
22
|
-
should "provide class level access to the enum set" do
|
23
|
-
stuffs = Thing.stuff_set
|
24
|
-
assert stuffs
|
25
|
-
assert_kind_of ::Array, stuffs
|
26
|
-
assert !stuffs.empty?
|
27
|
-
assert_equal 3, stuffs.size
|
28
|
-
[:a, :b, :c].each{|t| assert Thing.stuff_set.include?(t)}
|
29
|
-
assert_equal({:a=>'aye',:b=>'bee',:c=>'see'}, Thing.stuff_collection)
|
30
|
-
end
|
31
|
-
|
32
|
-
should "provide class level lookup of the enum" do
|
33
|
-
assert_equal "aye", Thing.stuff(:a)
|
34
|
-
end
|
35
|
-
|
36
|
-
should "write a key and read the value and key" do
|
37
|
-
subject.stuff = :b
|
38
|
-
assert_equal "bee", subject.stuff
|
39
|
-
assert_equal :b, subject.stuff_key
|
40
|
-
end
|
41
|
-
|
42
|
-
should "write a value and read the value" do
|
43
|
-
subject.stuff = "see"
|
44
|
-
assert_equal "see", subject.stuff
|
45
|
-
assert_equal :c, subject.stuff_key
|
46
|
-
end
|
47
|
-
|
48
|
-
should "not read keys like you would values" do
|
49
|
-
subject.stuff = :c
|
50
|
-
assert_not_equal :c, subject.stuff
|
51
|
-
end
|
52
|
-
|
53
|
-
should "write nil for keys that aren't in the enum" do
|
54
|
-
subject.stuff = :bad
|
55
|
-
assert_equal nil, subject.stuff
|
56
|
-
assert_equal nil, subject.stuff_key
|
57
|
-
end
|
58
|
-
|
59
|
-
should "write nil for values that aren't in the enum" do
|
60
|
-
subject.stuff = "bady-bad"
|
61
|
-
assert_equal nil, subject.stuff
|
62
|
-
assert_equal nil, subject.stuff_key
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
data/test/thing.rb
DELETED