rstructural 0.1.2 → 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: fc8f95857064c7ea8117d34867bf68c59162e2e6315b3961fdc7f7ec62aeba03
4
- data.tar.gz: 794a7abee762cdf543bc05782185ac81e7664355f74113a47525f8ea6e459216
3
+ metadata.gz: 2127165f6a372306fb6f9e518457b57705636560c187ff59aa85418d41c4c725
4
+ data.tar.gz: cfc374a5b5a5694719ffb3a9142d2d5990bb8c21df3c48a47168e253e0a3bd2a
5
5
  SHA512:
6
- metadata.gz: 627653a650eb6431832554f1dba31535bbeeb7fa9dea2c8d3f71d8e02e838a50a52c199f3e6239ad2da86c5f29e2c8fd39428f003b68ba2b100091ecb30d1bdd
7
- data.tar.gz: 78a6133b2a328d78375eaf1eb84f2502049dcf9f2b2408a49cff6647aafd4d1ae1512cba26730c959c565f096be5fd395448b3b0bed91497c126a9f4ad602f50
6
+ metadata.gz: 85a86e425fc24176d3019c2694cf9ea942b806292b8a61a86e106c5adcb4200722199d95e6ba2bf0ba0b79f29c723176953e7de8e3a44e2d9e8b1a5914826e77
7
+ data.tar.gz: 27efa42db6472c158a3c28df59ae3ab80863bbcb20b4e8f824aa6a539524ad5711aec5b495ba659273de25488adeb7b04aee9574940f341678be88ff3e860986
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rstructural (0.1.1)
4
+ rstructural (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -129,12 +129,24 @@ module AdtSample
129
129
  end
130
130
  end
131
131
 
132
+ # define common interface
133
+ interface do
134
+ def is_circle?
135
+ case self
136
+ in Circle
137
+ true
138
+ else
139
+ false
140
+ end
141
+ end
142
+ end
132
143
  end
133
144
 
134
145
  puts Shape::Point #=> AdtSample::Shape::Point
135
146
  puts Shape::Rectangle.new(3, 4) #=> AdtSample::Shape::Rectangle(width: 3, height: 4)
136
147
  puts Shape::Rectangle.new(3, 4).area #=> 12
137
148
  puts Shape::Circle.new(5).scale(2).area #=> 314.0
149
+ puts Shape::Circle.is_circle? #=> true
138
150
 
139
151
  case Shape::Rectangle.new(1, 2)
140
152
  in Shape::Rectangle[Integer => i, Integer => j] if j % 2 == 0
@@ -4,7 +4,7 @@ require_relative './struct'
4
4
 
5
5
  module Rstructural::ADT
6
6
  def self.extended(klass)
7
- @@adt_types ||= []
7
+ klass.class_variable_set(:@@adt_types, [])
8
8
  end
9
9
 
10
10
  def const(value = nil, &block)
@@ -13,7 +13,7 @@ module Rstructural::ADT
13
13
  else
14
14
  Rstructural::Struct.new(__caller: caller, &block).new
15
15
  end.tap do |k|
16
- @@adt_types << k
16
+ self.class_variable_get(:@@adt_types) << k
17
17
  def k.name
18
18
  self.class.name
19
19
  end
@@ -21,6 +21,17 @@ module Rstructural::ADT
21
21
  end
22
22
 
23
23
  def data(*fields, &block)
24
- Rstructural::Struct.new(*fields, __caller: caller, &block).tap { |k| @@adt_types << k.name }
24
+ Rstructural::Struct.new(*fields, __caller: caller, &block).tap { |k| self.class_variable_get(:@@adt_types) << k }
25
+ end
26
+
27
+ def interface(&block)
28
+ self.class_variable_get(:@@adt_types).each do |t|
29
+ case t
30
+ in Class
31
+ t.class_eval(&block)
32
+ else
33
+ t.class.class_eval(&block)
34
+ end
35
+ end
25
36
  end
26
37
  end
@@ -3,8 +3,8 @@
3
3
  require_relative './struct'
4
4
 
5
5
  module Rstructural::Enum
6
- def self.extended(mod)
7
- @@enum_values ||= []
6
+ def self.extended(klass)
7
+ klass.class_variable_set(:@@enum_values, [])
8
8
  end
9
9
 
10
10
  def enum(value, &block)
@@ -12,7 +12,7 @@ module Rstructural::Enum
12
12
  raise ArgumentError, "Enum '#{value}' already defined in #{type.name}"
13
13
  end
14
14
  Rstructural::Struct.new(:value, __caller: caller, &block).new(value).tap do |k|
15
- @@enum_values << k
15
+ self.class_variable_get(:@@enum_values) << k
16
16
  def k.name
17
17
  self.class.name
18
18
  end
@@ -20,7 +20,13 @@ module Rstructural::Enum
20
20
  end
21
21
 
22
22
  def of(value)
23
- @@enum_values.find { |v| v.value == value }
23
+ self.class_variable_get(:@@enum_values).find { |v| v.value == value }
24
+ end
25
+
26
+ def interface(&block)
27
+ self.class_variable_get(:@@enum_values).each do |t|
28
+ t.class.class_eval(&block)
29
+ end
24
30
  end
25
31
  end
26
32
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "rstructural"
3
- spec.version = "0.1.2"
3
+ spec.version = "0.2.0"
4
4
  spec.authors = ["petitviolet"]
5
5
  spec.email = ["violethero0820@gmail.com"]
6
6
 
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.description = %q{Structural types, Struct, Enum and ADT for Ruby implemented with Ruby}
9
9
  spec.homepage = "https://github.com/petitviolet/rstructural"
10
10
  spec.license = "MIT"
11
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
11
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0") # using pattern match
12
12
 
13
13
  spec.metadata["homepage_uri"] = spec.homepage
14
14
  spec.metadata["source_code_uri"] = spec.homepage
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rstructural
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - petitviolet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-13 00:00:00.000000000 Z
11
+ date: 2020-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -61,7 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 2.3.0
64
+ version: 2.7.0
65
65
  required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="