class-enum 0.0.1
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/README.md +88 -0
- data/lib/class/enum.rb +103 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e435a5446138814a1233b79b3ab4274983358e5e
|
4
|
+
data.tar.gz: e06a6fa83ce1c54f5f8cd42ae0ad9f8e679fc3b5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 07890f28d6bcc883775e66d801ca54f8ceb7a5526e79fabee7a6a58f3405487e9b35def7f5e1a3422ddef8401d69b7b312e9b6f30dda0bc0c9ba05d2596a4365
|
7
|
+
data.tar.gz: d432e0f6924edf5dc9c6aec1fd209b59d9cf98dcf41236d07e83020fe91d0223ab2f63710ac03a2ead33da221ab84921d00c2210e2c34934042266d8dad55109
|
data/README.md
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# Class::Enum
|
2
|
+
|
3
|
+
java-like class enum for Ruby
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
class Animal
|
7
|
+
include Class::Enum
|
8
|
+
|
9
|
+
attr_reader :sound
|
10
|
+
|
11
|
+
def initialize(sound)
|
12
|
+
@sound = sound
|
13
|
+
end
|
14
|
+
|
15
|
+
field :CAT, "meow"
|
16
|
+
field :DOG, "bark"
|
17
|
+
field :BIRD, "tweet"
|
18
|
+
end
|
19
|
+
|
20
|
+
puts Animal::CAT.sound # meow
|
21
|
+
|
22
|
+
case Animal::CAT
|
23
|
+
when Animal
|
24
|
+
puts "An animal"
|
25
|
+
else
|
26
|
+
puts "X"
|
27
|
+
end
|
28
|
+
# An animal
|
29
|
+
|
30
|
+
Animal::CAT.instance_of?(Animal) # => true
|
31
|
+
Animal::CAT.class # => Animal
|
32
|
+
```
|
33
|
+
|
34
|
+
## Requirements
|
35
|
+
- No (Ruby 1.9+?)
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
See [documentation](http://www.rubydoc.info/gems/class-enum)
|
39
|
+
|
40
|
+
## Examples
|
41
|
+
|
42
|
+
### Using block
|
43
|
+
```ruby
|
44
|
+
class Animal
|
45
|
+
include Class::Enum
|
46
|
+
|
47
|
+
attr_reader :block
|
48
|
+
|
49
|
+
def initialize(&block)
|
50
|
+
@block = block
|
51
|
+
end
|
52
|
+
|
53
|
+
field :CAT do
|
54
|
+
puts "meow"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
Animal::CAT.block.call # meow
|
59
|
+
```
|
60
|
+
|
61
|
+
### Using keyword arguments
|
62
|
+
You can keyword arguments only if ruby 2.0+.
|
63
|
+
If not ruby 2.0+, this gem doesn't use keyword arguments
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
class Animal
|
67
|
+
include Class::Enum
|
68
|
+
|
69
|
+
attr_reader :sound
|
70
|
+
|
71
|
+
def initialize(sound:)
|
72
|
+
@sound = sound
|
73
|
+
end
|
74
|
+
|
75
|
+
field :CAT, sound: "meow"
|
76
|
+
end
|
77
|
+
|
78
|
+
puts Animal::CAT.sound # meow
|
79
|
+
```
|
80
|
+
|
81
|
+
## Author
|
82
|
+
Sputnik Gugja (sputnikgugja@gmail.com)
|
83
|
+
|
84
|
+
## License
|
85
|
+
This is free software released into the public domain (CC0 license).
|
86
|
+
|
87
|
+
See `LICENSE` file.
|
88
|
+
|
data/lib/class/enum.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
class Class
|
2
|
+
# Utility for defining java-like enum type
|
3
|
+
module Enum
|
4
|
+
VERSION = '0.0.1'.freeze
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.send :extend, ClassMethods
|
8
|
+
base.private_class_method :new
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
# @!method field(name, *args, **kwargs, &block)
|
13
|
+
# @param [#to_sym] name
|
14
|
+
# @param args Arguments for constructor
|
15
|
+
# @param kwargs Keyword arguments for constructor
|
16
|
+
# **This argument exists only if ruby 2.0+**
|
17
|
+
# @param block A block for constructor
|
18
|
+
# @return A created object
|
19
|
+
if RUBY_VERSION >= '2.0'
|
20
|
+
eval <<-RUBY
|
21
|
+
# @param [#to_sym] name
|
22
|
+
# @param args Arguments for constructor
|
23
|
+
# @param kwargs Keyword arguments for constructor
|
24
|
+
# @param block A block for constructor
|
25
|
+
# @return A created object
|
26
|
+
def field(name, *args, **kwargs, &block)
|
27
|
+
if kwargs.empty?
|
28
|
+
obj = self.send(:new, *args, &block)
|
29
|
+
else
|
30
|
+
obj = self.send(:new, *args, **kwargs, &block)
|
31
|
+
end
|
32
|
+
name = name.to_sym
|
33
|
+
const_set(name, obj)
|
34
|
+
@enum_fields ||= {}
|
35
|
+
@enum_fields[name] = obj
|
36
|
+
obj
|
37
|
+
end
|
38
|
+
RUBY
|
39
|
+
else
|
40
|
+
eval <<-RUBY
|
41
|
+
# @param [#to_sym] name
|
42
|
+
# @param args Arguments for constructor
|
43
|
+
# @param block A block for constructor
|
44
|
+
# @return A created object
|
45
|
+
def field(name, *args, &block)
|
46
|
+
obj = self.send(:new, *args, &block)
|
47
|
+
name = name.to_sym
|
48
|
+
const_set(name, obj)
|
49
|
+
@enum_fields ||= {}
|
50
|
+
@enum_fields[name] = obj
|
51
|
+
obj
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
|
56
|
+
# Checks a field of given name exists
|
57
|
+
# You can also do like `Animal::DOG.instance_of?(Animal)`
|
58
|
+
#
|
59
|
+
# @param [#to_sym] name
|
60
|
+
# @return [Boolean]
|
61
|
+
def key?(name)
|
62
|
+
name = name.to_sym
|
63
|
+
@enum_fields.key?(name)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Checks given value is a field of this enum
|
67
|
+
#
|
68
|
+
# @param obj
|
69
|
+
# @return [Boolean]
|
70
|
+
def value?(obj)
|
71
|
+
@enum_fields.value?(obj)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Gets a field by given name
|
75
|
+
# You can also do like `Animal::DOG`
|
76
|
+
#
|
77
|
+
# @param [#to_sym] name
|
78
|
+
# @return A enum field with given name. If not exists, nil
|
79
|
+
def value(name)
|
80
|
+
@enum_fields[name.to_sym]
|
81
|
+
end
|
82
|
+
|
83
|
+
# Gets an array of enum fields
|
84
|
+
# @return [Array] (copied) An array of enum fields
|
85
|
+
def values
|
86
|
+
@enum_fields.values
|
87
|
+
end
|
88
|
+
alias_method :to_a, :values
|
89
|
+
|
90
|
+
# Gets an array of enum field names
|
91
|
+
# @return [Array<Symbol>] (copied) An array of enum field names
|
92
|
+
def keys
|
93
|
+
@enum_fields.keys
|
94
|
+
end
|
95
|
+
|
96
|
+
# Gets an hash of enum fields
|
97
|
+
# @return [Hash{Symbol, Object}] (copied) An hash of enum fields
|
98
|
+
def to_h
|
99
|
+
@enum_fields.dup
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: class-enum
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sputnik Gugja
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-10 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: java-like class enum for Ruby
|
14
|
+
email:
|
15
|
+
- sputnikgugja@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- lib/class/enum.rb
|
22
|
+
homepage: https://github.com/sputnikgugja/rb_event
|
23
|
+
licenses:
|
24
|
+
- CC0-1.0
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.6.3
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: java-like class enum for Ruby
|
46
|
+
test_files: []
|
47
|
+
has_rdoc:
|