rekkyo 0.1.0 → 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 +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +4 -0
- data/lib/rekkyo/type.rb +19 -25
- data/lib/rekkyo/type/member.rb +47 -0
- data/lib/rekkyo/version.rb +1 -1
- data/rekkyo.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41af7d9946794aff31ba6b65d79a9992f3e162445b28c83f05cbca47d37c0171
|
4
|
+
data.tar.gz: cac1e626bf8c4edcd328b5909c14e2d674ceda913b8452883136dfced221e793
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f022c17ffa5cea25af10a7ccd012b1f7213ca4ec1490d7c2b353f971567c49d612f297d675bc69df5d99210a923360e4da39b2b78758ee252ee02449e598a198
|
7
|
+
data.tar.gz: 5f8dd97e5fc58987b94e4c5273d862cab1a0cdafcc26af8fca13fe19326c12a46bbd57212e60cd3ff94c6d41cc57fdf6992446a611091912654759e1a83781df
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
3
|
|
4
|
+
## 0.2.0 (2018-12-12)
|
5
|
+
|
6
|
+
### Changes
|
7
|
+
|
8
|
+
* Add `Rekkyo::Type::Member#===` as an alias of `Rekkyo::Type::Member#match?`
|
9
|
+
* [PR#1](https://github.com/yujideveloper/rekkyo/pull/1)
|
10
|
+
* Change predicate methods for `Rekkyo::Type::Member` to auto-define
|
11
|
+
* [PR#2](https://github.com/yujideveloper/rekkyo/pull/2)
|
12
|
+
* Improve matching with String/Symbol
|
13
|
+
* [PR#3](https://github.com/yujideveloper/rekkyo/pull/3)
|
14
|
+
* Re-implement `Rekkyo::Type::Member` using PORO
|
15
|
+
* [PR#4](https://github.com/yujideveloper/rekkyo/pull/4)
|
16
|
+
|
17
|
+
### Misc
|
18
|
+
|
19
|
+
* Change required rake version in development
|
20
|
+
|
21
|
+
|
4
22
|
## 0.1.0 (2018-12-07)
|
5
23
|
|
6
24
|
Initial release
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Rekkyo
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/rekkyo)
|
3
4
|
[](https://travis-ci.org/yujideveloper/rekkyo)
|
4
5
|
[](https://codeclimate.com/github/yujideveloper/rekkyo/maintainability)
|
5
6
|
|
@@ -37,6 +38,9 @@ class Color
|
|
37
38
|
end
|
38
39
|
|
39
40
|
{ color: Color::RED }.to_json # => "{\"color\":\"RED\"}
|
41
|
+
|
42
|
+
Color::RED.red? # => true
|
43
|
+
Color::BLUE.blue? # => false
|
40
44
|
```
|
41
45
|
|
42
46
|
### Custom value
|
data/lib/rekkyo/type.rb
CHANGED
@@ -4,26 +4,6 @@ require "set"
|
|
4
4
|
|
5
5
|
module Rekkyo
|
6
6
|
module Type
|
7
|
-
Member = Struct.new(:key, :value) do
|
8
|
-
def match?(value)
|
9
|
-
if value.is_a? self.class
|
10
|
-
self == value
|
11
|
-
else
|
12
|
-
self.value == value
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
self.value.to_s
|
18
|
-
end
|
19
|
-
|
20
|
-
if defined? ActiveSupport
|
21
|
-
def as_json(options = nil)
|
22
|
-
self.to_s.as_json(options)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
7
|
class << self
|
28
8
|
def included(klass)
|
29
9
|
klass.const_set(:Member, Class.new(Member))
|
@@ -40,12 +20,17 @@ module Rekkyo
|
|
40
20
|
value = key if value == UNSPECIFIED
|
41
21
|
key = key.upcase.to_sym
|
42
22
|
|
43
|
-
|
44
|
-
|
23
|
+
validate_member(key, value)
|
24
|
+
|
25
|
+
self::Member.new(key, value).freeze.tap do |m|
|
26
|
+
@members << m
|
27
|
+
|
28
|
+
self.const_set(key, m)
|
45
29
|
|
46
|
-
|
47
|
-
|
48
|
-
|
30
|
+
self::Member.class_exec do
|
31
|
+
define_method(:"#{key.downcase}?") { self.match?(m) }
|
32
|
+
end
|
33
|
+
end
|
49
34
|
end
|
50
35
|
|
51
36
|
def all
|
@@ -53,6 +38,15 @@ module Rekkyo
|
|
53
38
|
end
|
54
39
|
|
55
40
|
alias members all
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def validate_member(key, value)
|
45
|
+
raise DuplicateMemberError if self.const_defined?(key, false) ||
|
46
|
+
@members.any? { |m| m.match? value }
|
47
|
+
end
|
56
48
|
end
|
57
49
|
end
|
58
50
|
end
|
51
|
+
|
52
|
+
require "rekkyo/type/member"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rekkyo
|
4
|
+
module Type
|
5
|
+
class Member
|
6
|
+
attr_reader :key, :value
|
7
|
+
|
8
|
+
def initialize(key, value)
|
9
|
+
@key = key
|
10
|
+
@value = value
|
11
|
+
end
|
12
|
+
|
13
|
+
def ==(other)
|
14
|
+
self.class == other.class &&
|
15
|
+
self.key == other.key &&
|
16
|
+
self.value == other.value
|
17
|
+
end
|
18
|
+
|
19
|
+
def match?(value)
|
20
|
+
case value
|
21
|
+
when self.class
|
22
|
+
self == value
|
23
|
+
when String, Symbol
|
24
|
+
self.value.to_s == value.to_s
|
25
|
+
else
|
26
|
+
self.value == value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
alias === match?
|
31
|
+
|
32
|
+
def inspect
|
33
|
+
"#{self.class.name || ''}::#{key}(#{value.inspect})"
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_s
|
37
|
+
self.value.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
if defined? ActiveSupport
|
41
|
+
def as_json(options = nil)
|
42
|
+
self.to_s.as_json(options)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/rekkyo/version.rb
CHANGED
data/rekkyo.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.17"
|
32
32
|
spec.add_development_dependency "pry", ">= 0.12.2"
|
33
33
|
spec.add_development_dependency "pry-doc", ">= 0.13.5"
|
34
|
-
spec.add_development_dependency "rake", "~>
|
34
|
+
spec.add_development_dependency "rake", "~> 12.3"
|
35
35
|
spec.add_development_dependency "rspec", "~> 3.8"
|
36
36
|
spec.add_development_dependency "rubocop", ">= 0.61.1"
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rekkyo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuji Hanamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '12.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '12.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- gemfiles/activesupport_5.2.gemfile
|
117
117
|
- lib/rekkyo.rb
|
118
118
|
- lib/rekkyo/type.rb
|
119
|
+
- lib/rekkyo/type/member.rb
|
119
120
|
- lib/rekkyo/version.rb
|
120
121
|
- rekkyo.gemspec
|
121
122
|
homepage: https://github.com/yujideveloper/rekkyo
|