ataulfo 1.0.0 → 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c8c268635bc6dd13739c0be60f885f02c4a619c2
4
+ data.tar.gz: 163fc9e5dcb168721be19f05211b1853bca14be7
5
+ SHA512:
6
+ metadata.gz: ee6e8b448026e2a3a570010bd31caa9ad3e6e085931930f6b3b4b445948bf6fe241388045c6e2cbcb11b1d1ca5c435f084effb10cc38b38e11b1ea47591d03b5
7
+ data.tar.gz: 6a3912c3aeb245f740341fccd5d0bd2021b8940e5767d64fa5f96bc5135d162271df07f842f11ad6bf3b9d6be9150a6c6a068b868d277d78e8a7f32ddc74a2be
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .idea/
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
@@ -0,0 +1 @@
1
+ inherit_from: .rubocop_todo.yml
@@ -0,0 +1,120 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-09-28 12:01:20 -0300 using RuboCop version 0.43.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Metrics/AbcSize:
11
+ Max: 20
12
+
13
+ # Offense count: 7
14
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
15
+ # URISchemes: http, https
16
+ Metrics/LineLength:
17
+ Max: 138
18
+
19
+ # Offense count: 4
20
+ Style/Documentation:
21
+ Exclude:
22
+ - 'spec/**/*'
23
+ - 'test/**/*'
24
+ - 'lib/ataulfo/kernel_extension.rb'
25
+ - 'lib/ataulfo/pattern_matching.rb'
26
+
27
+ # Offense count: 8
28
+ # Cop supports --auto-correct.
29
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
30
+ # SupportedStyles: when_needed, always
31
+ Style/FrozenStringLiteralComment:
32
+ Exclude:
33
+ - 'Gemfile'
34
+ - 'Guardfile'
35
+ - 'Rakefile'
36
+ - 'ataulfo.gemspec'
37
+ - 'lib/ataulfo.rb'
38
+ - 'lib/ataulfo/kernel_extension.rb'
39
+ - 'lib/ataulfo/pattern_matching.rb'
40
+ - 'lib/ataulfo/version.rb'
41
+
42
+ # Offense count: 2
43
+ Style/MethodMissing:
44
+ Exclude:
45
+ - 'lib/ataulfo/pattern_matching.rb'
46
+
47
+ # Offense count: 1
48
+ # Cop supports --auto-correct.
49
+ Style/MutableConstant:
50
+ Exclude:
51
+ - 'lib/ataulfo/version.rb'
52
+
53
+ # Offense count: 2
54
+ # Cop supports --auto-correct.
55
+ # Configuration parameters: PreferredDelimiters.
56
+ Style/PercentLiteralDelimiters:
57
+ Exclude:
58
+ - 'ataulfo.gemspec'
59
+
60
+ # Offense count: 1
61
+ # Cop supports --auto-correct.
62
+ # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
63
+ # SupportedStyles: slashes, percent_r, mixed
64
+ Style/RegexpLiteral:
65
+ Exclude:
66
+ - 'Guardfile'
67
+
68
+ # Offense count: 1
69
+ # Cop supports --auto-correct.
70
+ # Configuration parameters: AllowAsExpressionSeparator.
71
+ Style/Semicolon:
72
+ Exclude:
73
+ - 'lib/ataulfo/pattern_matching.rb'
74
+
75
+ # Offense count: 1
76
+ # Cop supports --auto-correct.
77
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
78
+ # SupportedStyles: space, no_space
79
+ Style/SpaceBeforeBlockBraces:
80
+ Exclude:
81
+ - 'ataulfo.gemspec'
82
+
83
+ # Offense count: 4
84
+ # Cop supports --auto-correct.
85
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
86
+ # SupportedStyles: space, no_space, compact
87
+ Style/SpaceInsideHashLiteralBraces:
88
+ Exclude:
89
+ - 'Guardfile'
90
+ - 'lib/ataulfo/pattern_matching.rb'
91
+
92
+ # Offense count: 1
93
+ # Cop supports --auto-correct.
94
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
95
+ # SupportedStyles: use_perl_names, use_english_names
96
+ Style/SpecialGlobalVars:
97
+ Exclude:
98
+ - 'ataulfo.gemspec'
99
+
100
+ # Offense count: 4
101
+ # Cop supports --auto-correct.
102
+ # Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
103
+ # SupportedStyles: single_quotes, double_quotes
104
+ Style/StringLiterals:
105
+ Exclude:
106
+ - 'Rakefile'
107
+ - 'ataulfo.gemspec'
108
+ - 'lib/ataulfo/kernel_extension.rb'
109
+ - 'lib/ataulfo/version.rb'
110
+
111
+ # Offense count: 1
112
+ Style/StructInheritance:
113
+ Exclude:
114
+ - 'lib/ataulfo/pattern_matching.rb'
115
+
116
+ # Offense count: 2
117
+ # Cop supports --auto-correct.
118
+ Style/UnneededPercentQ:
119
+ Exclude:
120
+ - 'ataulfo.gemspec'
@@ -0,0 +1 @@
1
+ ataulfo
@@ -0,0 +1 @@
1
+ ruby-2.3.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ataulfo.gemspec
4
+ gemspec
@@ -0,0 +1,17 @@
1
+ group :tdd, halt_on_fail: true do
2
+ guard :rspec,
3
+ cmd: 'bundle exec rspec -f documentation --color',
4
+ run_all: {cmd: 'bundle exec rspec -f documentation --color'},
5
+ keep: true,
6
+ all_on_start: true,
7
+ all_after_pass: true do
8
+
9
+ watch(%r{^spec/.+_spec\.rb$})
10
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
11
+ watch('lib/mcgee.rb') { 'spec' }
12
+ end
13
+ guard :rubocop, cmd: 'bundle exec rubocop', cli: '-fs -c./.rubocop.yml' do
14
+ watch(%r{.+\.rb$})
15
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,77 @@
1
+ # Ataulfo
2
+
3
+ A DSL for **pattern matching** over object in Ruby.
4
+
5
+ What does it do? It's a conditional clause based on the object interface. It also allows you do make "multi-assignment".
6
+
7
+ Example:
8
+
9
+ object = Struct.new(:method1, :method2).new
10
+ object.method1 = 'something'
11
+ object.method2 = 'something else'
12
+
13
+ with object do
14
+ like method1: m1, method2: m2 do
15
+ puts m1 # 'something'
16
+ puts m2 # 'something else'
17
+ end
18
+ end
19
+
20
+ Another example:
21
+
22
+ object = Struct.new(:a_method).new
23
+ object.a_method = 'something'
24
+
25
+ with object do
26
+ like this_method_does_not_exist: x do
27
+ fail 'it will not reach here'
28
+ end
29
+ like a_method: x do
30
+ puts x # 'something'
31
+ end
32
+ end
33
+
34
+ ## Installation
35
+
36
+ Add this line to your application's Gemfile:
37
+
38
+ gem 'ataulfo'
39
+
40
+ And then execute:
41
+
42
+ $ bundle
43
+
44
+ Or install it yourself as:
45
+
46
+ $ gem install ataulfo
47
+
48
+ ## Contributing
49
+
50
+ If you want to play around, clone the project, run the specs and have fun.
51
+
52
+ Since this is really tiny and more a "Proof of Concept" than something I would use in production code, I'm not planning
53
+ to actively work on it. But if you need some help, send me an e-mail: ronie.uliana at gmail. I'll be happy to help you.
54
+
55
+ ## Licensing
56
+
57
+ (MIT License)
58
+
59
+ Copyright (c) 2012 Ronie Uliana
60
+
61
+ Permission is hereby granted, free of charge, to any person obtaining a copy
62
+ of this software and associated documentation files (the "Software"), to deal
63
+ in the Software without restriction, including without limitation the rights
64
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
65
+ copies of the Software, and to permit persons to whom the Software is
66
+ furnished to do so, subject to the following conditions:
67
+
68
+ The above copyright notice and this permission notice shall be included in
69
+ all copies or substantial portions of the Software.
70
+
71
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
72
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
73
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
74
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
75
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
76
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
77
+ THE SOFTWARE.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ataulfo/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "ataulfo"
8
+ gem.version = Ataulfo::VERSION
9
+ gem.authors = ['Ronie Uliana']
10
+ gem.email = ['ronie.uliana@gmail.com']
11
+ gem.description = %q{Pattern Matching for Ruby (objects only)}
12
+ gem.summary = %q{A DSL for pattern matching over object in Ruby.}
13
+ gem.homepage = 'https://github.com/ruliana/ataulfo'
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = %w[lib]
19
+
20
+ gem.add_development_dependency 'rspec'
21
+ gem.add_development_dependency 'guard-rspec'
22
+ gem.add_development_dependency 'guard-rubocop'
23
+ end
@@ -0,0 +1,3 @@
1
+ require 'ataulfo/version'
2
+ require 'ataulfo/pattern_matching'
3
+ require 'ataulfo/kernel_extension'
@@ -0,0 +1,7 @@
1
+ module Kernel
2
+ def with(object, &block)
3
+ other_self = eval "self", block.binding
4
+ to_match = Ataulfo::PatternMatching.new(object, other_self)
5
+ to_match.instance_eval(&block)
6
+ end
7
+ end
@@ -0,0 +1,64 @@
1
+ module Ataulfo
2
+ class PatternMatching
3
+ class Var < Struct.new(:value);
4
+ end
5
+
6
+ class Body
7
+ def initialize(vars, other_self)
8
+ @other_self = other_self
9
+ vars.each do |k, v|
10
+ define_singleton_method(k) { v.value }
11
+ end
12
+ end
13
+
14
+ def method_missing(method_name, *args, &block)
15
+ @other_self.send method_name, *args, &block
16
+ end
17
+ end
18
+
19
+ class Matcher
20
+ def initialize(object, pattern)
21
+ @object = object
22
+ @pattern_vars = pattern.select { |_, v| v.is_a? Var }
23
+ inner_matches = pattern.select { |_, v| v.is_a? Hash }
24
+ fixed_values = pattern.select { |_, v| !v.is_a?(Var) && !v.is_a?(Hash) }
25
+ @object_respond_to_methods = pattern.keys.all? { |k| @object.respond_to? k }
26
+ @object_answers_right_values = fixed_values.all? { |k, v| @object.send(k) == v }
27
+
28
+ @matchers = inner_matches.map { |k, v| Matcher.new(object.send(k), v) }
29
+ end
30
+
31
+ def matches?
32
+ @matchers.all?(&:matches?) if @object_respond_to_methods && @object_answers_right_values
33
+ end
34
+
35
+ def fill_vars
36
+ @pattern_vars.each { |k, v| v.value = @object.send k }
37
+ @matchers.each(&:fill_vars)
38
+ end
39
+ end
40
+
41
+ def initialize(object, other_self)
42
+ @object = object
43
+ @other_self = other_self
44
+ @context_vars = { }
45
+ end
46
+
47
+ def like(pattern, &block)
48
+ matcher = Matcher.new(@object, pattern)
49
+ return unless matcher.matches?
50
+
51
+ matcher.fill_vars
52
+
53
+ Body.new(@context_vars, @other_self).instance_eval(&block)
54
+ @context_vars = { }
55
+ end
56
+
57
+ def method_missing(method_name, *_)
58
+ # The line below also returns the "Var" to the
59
+ # pattern. That makes it a collector parameter
60
+ # already distributed where it belongs to.
61
+ @context_vars[method_name] = Var.new
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module Ataulfo
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ describe Ataulfo::PatternMatching do
5
+ it 'matches a single method' do
6
+ passed_through_match = false
7
+
8
+ object = Struct.new(:a_method).new('something')
9
+
10
+ with object do
11
+ like a_method: some_var do
12
+ expect(some_var).to eq('something')
13
+ passed_through_match = true
14
+ end
15
+ end
16
+
17
+ expect(passed_through_match).to be_truthy
18
+ end
19
+
20
+ it 'matches two methods' do
21
+ passed_through_match = false
22
+
23
+ object = Struct.new(:method1, :method2).new('something', 'something else')
24
+
25
+ with object do
26
+ like method2: m2, method1: m1 do
27
+ expect(m1).to eq('something')
28
+ expect(m2).to eq('something else')
29
+ passed_through_match = true
30
+ end
31
+ end
32
+
33
+ expect(passed_through_match).to be_truthy
34
+ end
35
+
36
+ it 'two bodies, one execution' do
37
+ passed_through_match = false
38
+
39
+ object = Struct.new(:a_method).new('something')
40
+
41
+ with object do
42
+ like this_does_not_exist: x do
43
+ raise 'should not match a method that does not exist'
44
+ end
45
+ like a_method: x do
46
+ expect(x).to eq('something')
47
+ passed_through_match = true
48
+ end
49
+ end
50
+
51
+ expect(passed_through_match).to be_truthy
52
+ end
53
+
54
+ it 'matches fixed values' do
55
+ passed_through_match = false
56
+
57
+ object = Struct.new(:a_method).new('something')
58
+
59
+ with object do
60
+ like a_method: 'other_thing' do
61
+ raise 'should not match a method with wrong value'
62
+ end
63
+ like a_method: 'something' do
64
+ passed_through_match = true
65
+ end
66
+ end
67
+
68
+ expect(passed_through_match).to be_truthy
69
+ end
70
+
71
+ it 'matches fixed values in variables' do
72
+ passed_through_match = false
73
+
74
+ object = Struct.new(:a_method).new('something')
75
+ other_thing = 'other_thing'
76
+ something = 'something'
77
+
78
+ with object do
79
+ like a_method: other_thing do
80
+ raise 'should not match a method with wrong value'
81
+ end
82
+ like a_method: something do
83
+ passed_through_match = true
84
+ end
85
+ end
86
+
87
+ expect(passed_through_match).to be_truthy
88
+ end
89
+
90
+ it 'matches fixed and var values mixed' do
91
+ passed_through_match = false
92
+
93
+ object = Struct.new(:a_method, :another_method).new('something', 'other value')
94
+
95
+ with object do
96
+ like a_method: 'does not match', another_method: my_var do
97
+ raise 'should not match a method with wrong value'
98
+ end
99
+ like a_method: 'something', another_method: my_var do
100
+ expect(my_var).to eq('other value')
101
+ passed_through_match = true
102
+ end
103
+ end
104
+
105
+ expect(passed_through_match).to be_truthy
106
+ end
107
+
108
+ it 'matches a simple nested object' do
109
+ passed_through_match = false
110
+
111
+ object = Struct.new(:a_method).new(Struct.new(:inner).new('something'))
112
+
113
+ with object do
114
+ like a_method: { inner: my_var } do
115
+ expect(my_var).to eq('something')
116
+ passed_through_match = true
117
+ end
118
+ end
119
+
120
+ expect(passed_through_match).to be_truthy
121
+ end
122
+
123
+ it 'matches complex nested expression' do
124
+ passed_through_match = false
125
+
126
+ num = Struct.new(:value)
127
+ add = Struct.new(:augend, :addend)
128
+ prod = Struct.new(:multiplicand, :multiplier)
129
+
130
+ object = prod[add[num[1], num[2]], add[num[3], num[4]]]
131
+
132
+ with object do
133
+ like multiplicand: { augend: { value: 99 }, addend: { value: x2 } }, multiplier: { augend: { value: x3 }, addend: { value: x4 } } do
134
+ raise 'should not match a method with wrong value'
135
+ end
136
+ like multiplicand: { augend: { value: 1 }, addend: n2 }, multiplier: { augend: { value: x3 }, addend: { value: x4 } } do
137
+ expect(n2).to eq(num[2])
138
+ expect(x3).to eq(3)
139
+ expect(x4).to eq(4)
140
+ passed_through_match = true
141
+ end
142
+ end
143
+
144
+ expect(passed_through_match).to be_truthy
145
+ end
146
+
147
+ it 'matches hashes'
148
+ it 'matches arrays'
149
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+ require 'rspec'
3
+ require 'ataulfo'
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ataulfo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ronie Uliana
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000 Z
11
+ date: 2016-09-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: guard-rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: rb-inotify
42
+ name: guard-rubocop
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Pattern Matching for Ruby (objects only)
@@ -65,29 +58,47 @@ email:
65
58
  executables: []
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
- files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rubocop.yml"
64
+ - ".rubocop_todo.yml"
65
+ - ".ruby-gemset"
66
+ - ".ruby-version"
67
+ - Gemfile
68
+ - Guardfile
69
+ - LICENSE.txt
70
+ - README.md
71
+ - Rakefile
72
+ - ataulfo.gemspec
73
+ - lib/ataulfo.rb
74
+ - lib/ataulfo/kernel_extension.rb
75
+ - lib/ataulfo/pattern_matching.rb
76
+ - lib/ataulfo/version.rb
77
+ - spec/lib/ataulfo/pattern_matching_spec.rb
78
+ - spec/spec_helper.rb
69
79
  homepage: https://github.com/ruliana/ataulfo
70
80
  licenses: []
81
+ metadata: {}
71
82
  post_install_message:
72
83
  rdoc_options: []
73
84
  require_paths:
74
85
  - lib
75
86
  required_ruby_version: !ruby/object:Gem::Requirement
76
- none: false
77
87
  requirements:
78
- - - ! '>='
88
+ - - ">="
79
89
  - !ruby/object:Gem::Version
80
90
  version: '0'
81
91
  required_rubygems_version: !ruby/object:Gem::Requirement
82
- none: false
83
92
  requirements:
84
- - - ! '>='
93
+ - - ">="
85
94
  - !ruby/object:Gem::Version
86
95
  version: '0'
87
96
  requirements: []
88
97
  rubyforge_project:
89
- rubygems_version: 1.8.24
98
+ rubygems_version: 2.5.1
90
99
  signing_key:
91
- specification_version: 3
100
+ specification_version: 4
92
101
  summary: A DSL for pattern matching over object in Ruby.
93
- test_files: []
102
+ test_files:
103
+ - spec/lib/ataulfo/pattern_matching_spec.rb
104
+ - spec/spec_helper.rb