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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43c12110a7a3b05da0003a83490ba9a28e38117331ded44d254ed6850bd59eb8
4
- data.tar.gz: 39b797a2e7859ae7d10e3257ba327128a3ed581621423bd3d3a4d87435a33cb7
3
+ metadata.gz: 41af7d9946794aff31ba6b65d79a9992f3e162445b28c83f05cbca47d37c0171
4
+ data.tar.gz: cac1e626bf8c4edcd328b5909c14e2d674ceda913b8452883136dfced221e793
5
5
  SHA512:
6
- metadata.gz: 2bf129aaa32a96d1835d7bf9c63b319bf281266f006105ff5b81b05115103918bdf02bf4a3e685453fdd6a24ec9128d510d7771c584dec0a3cec25e89bd3014e
7
- data.tar.gz: 977c624bd77a82f3e5359cdc30f85ff47f70dcdacada4e4e99fe0a024fc613da88c0c48d63fbd3510c9b87df8684f8d172da699d17ac0b9cfe1d603f262cb6a7
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
+ [![Gem Version](https://badge.fury.io/rb/rekkyo.svg)](https://badge.fury.io/rb/rekkyo)
3
4
  [![Build Status](https://travis-ci.org/yujideveloper/rekkyo.svg?branch=master)](https://travis-ci.org/yujideveloper/rekkyo)
4
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/37d6334cedf5b04af831/maintainability)](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
- raise DuplicateMemberError if self.const_defined?(key, false) ||
44
- @members.any? { |m| m.match? value }
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
- m = self::Member.new(key, value).freeze
47
- @members << m
48
- self.const_set(key, m)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rekkyo
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
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", "~> 10.0"
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.1.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-07 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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