rekkyo 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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