overloaded_methods 3.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +10 -0
- data/Gemfile +2 -0
- data/License.txt +21 -0
- data/README.md +102 -0
- data/lib/overloaded_methods/version.rb +3 -0
- data/lib/overloaded_methods.rb +58 -0
- data/overloaded_methods.gemspec +74 -0
- data/spec/overloaded_methods_spec.rb +171 -0
- metadata +111 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 671cad9d817d844cf7c28ece267263b222f3f631
|
4
|
+
data.tar.gz: 0287d2812363eeedcf6beffc4168ed244e9df11d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 130b0edff2ffe7cba60cbd2509c7ade7be273ed6a453ade0f1bbc363e11037baa30767456fd45cf49cb80e9f5f7b55d5637b6001e5480c4a958fcb56d746891f
|
7
|
+
data.tar.gz: 255506194bc28e2b822b0dae67daef641e16ec5c7cb5e725383f90c9369d28838b46ee52a28a03d1dfe7c2c5d93b382af6280cf36e3a06c0ead15c5d97a4f00c
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/License.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Corey Haines
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
# Overloaded Methods
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/coreyhaines/overloaded_methods.svg?branch=master)](https://travis-ci.org/coreyhaines/overloaded_methods)
|
4
|
+
|
5
|
+
[http://github.com/coreyhaines/overloaded_methods](http://github.com/coreyhaines/overloaded_methods)
|
6
|
+
|
7
|
+
## DESCRIPTION:
|
8
|
+
|
9
|
+
overloaded_methods was inspired by erlang pattern matching. Basically, the idea is that you can specify a method and several code blocks based on aspects of the parameters. Here's an example:
|
10
|
+
|
11
|
+
```
|
12
|
+
overload_method :even_odd do |m|
|
13
|
+
m.when {|number| number % 2 == 0 }.do { :even }
|
14
|
+
m.when {|number| number % 2 == 1 }.do { :odd }
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
18
|
+
You can then call even_odd(2) and get :even, even_odd(3) gives you :odd.
|
19
|
+
|
20
|
+
the specs have more examples.
|
21
|
+
|
22
|
+
Special thanks to Jim Weirich for suggesting some great improvements in the syntax.
|
23
|
+
|
24
|
+
There is an alternate syntax with pattern/does
|
25
|
+
```
|
26
|
+
overload_method :even_odd do |m|
|
27
|
+
m.pattern {|number| number % 2 == 0 }.does { :even }
|
28
|
+
m.pattern {|number| number % 2 == 1 }.does { :odd }
|
29
|
+
end
|
30
|
+
```
|
31
|
+
However, this syntax may or may not be deprecated in favor of the when/do syntax.
|
32
|
+
|
33
|
+
Here's an example of Fibonacci calculation:
|
34
|
+
```
|
35
|
+
class CalculatesFibonacci
|
36
|
+
|
37
|
+
class << self
|
38
|
+
include OverloadedMethods
|
39
|
+
overload_method :entry do |m|
|
40
|
+
m.when{|which| which <= 1}.do{|which| which}
|
41
|
+
m.default{|which|
|
42
|
+
CalculatesFibonacci.entry(which-1) + CalculatesFibonacci.entry(which-2)
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
## SYNOPSIS:
|
51
|
+
|
52
|
+
The following is from the specs, just some examples of how to use it.
|
53
|
+
|
54
|
+
```
|
55
|
+
class WithWhenDo
|
56
|
+
include OverloadedMethods
|
57
|
+
|
58
|
+
overload_method :even_odd do |m|
|
59
|
+
m.when {|number| number % 2 == 0 }.do { :even }
|
60
|
+
m.when {|number| number % 2 == 1 }.do { :odd }
|
61
|
+
end
|
62
|
+
|
63
|
+
overload_method :hello_world do |m|
|
64
|
+
m.when { true }.do {'hello, world'}
|
65
|
+
end
|
66
|
+
|
67
|
+
overload_method :return_params do |m|
|
68
|
+
m.when { |param1, param2| true}.do {|param1, param2| [param1, param2]}
|
69
|
+
end
|
70
|
+
|
71
|
+
overload_method :two_params_collected do |m|
|
72
|
+
m.default { |param1, *params| [param1, params] }
|
73
|
+
end
|
74
|
+
|
75
|
+
overload_method :number_of_digits do |m|
|
76
|
+
m.when {|number| number < 10}.do {1}
|
77
|
+
m.when {|number| number< 100}.do {2}
|
78
|
+
m.default { 'more than two digits is crazy talk'}
|
79
|
+
end
|
80
|
+
|
81
|
+
overload_method :default_returns_parameters do |m|
|
82
|
+
m.default { |*params| params}
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
```
|
87
|
+
|
88
|
+
## REQUIREMENTS:
|
89
|
+
|
90
|
+
Ruby
|
91
|
+
|
92
|
+
## INSTALL:
|
93
|
+
|
94
|
+
```gem install overloaded_methods```
|
95
|
+
|
96
|
+
or, if using Bundler,
|
97
|
+
|
98
|
+
```gem 'overloaded_methods'```
|
99
|
+
|
100
|
+
## LICENSE:
|
101
|
+
|
102
|
+
See [License.txt](License.txt)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "overloaded_methods/version"
|
2
|
+
|
3
|
+
module OverloadedMethods
|
4
|
+
|
5
|
+
def overload_method name
|
6
|
+
collector = FunctionDefinition.new
|
7
|
+
yield collector
|
8
|
+
define_method name do |*params|
|
9
|
+
collector.execute params
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Clause
|
14
|
+
def self.match_all
|
15
|
+
new ->*{true}
|
16
|
+
end
|
17
|
+
def self.with_predicate(predicate)
|
18
|
+
new predicate
|
19
|
+
end
|
20
|
+
attr_reader :predicate
|
21
|
+
def initialize(predicate)
|
22
|
+
@predicate = predicate
|
23
|
+
end
|
24
|
+
def match?(*params)
|
25
|
+
@predicate.call(*params)
|
26
|
+
end
|
27
|
+
def do &block
|
28
|
+
@block = block
|
29
|
+
self
|
30
|
+
end
|
31
|
+
def return value
|
32
|
+
self.do {|*|value}
|
33
|
+
end
|
34
|
+
alias :does :do
|
35
|
+
def call *params
|
36
|
+
@block.call *params
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class FunctionDefinition
|
41
|
+
def initialize
|
42
|
+
@clauses = []
|
43
|
+
@default = Clause.match_all.return(nil)
|
44
|
+
end
|
45
|
+
def when &predicate
|
46
|
+
Clause.with_predicate(predicate).tap { |clause| @clauses << clause }
|
47
|
+
end
|
48
|
+
alias :pattern :when
|
49
|
+
def execute params
|
50
|
+
[*@clauses, @default]
|
51
|
+
.find { |clause| clause.match? *params }
|
52
|
+
.call(*params)
|
53
|
+
end
|
54
|
+
def default &block
|
55
|
+
@default = Clause.match_all.do(&block)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "overloaded_methods/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "overloaded_methods"
|
7
|
+
s.version = OverloadedMethods::VERSION
|
8
|
+
s.authors = ["Corey Haines", "Josh Cheek"]
|
9
|
+
s.email = ["coreyhaines@gmail.com", "josh.cheek@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/coreyhaines/overloaded_methods"
|
11
|
+
s.summary = %q{Bringing the power of predicate-based method dispatch to Ruby, where it belongs!}
|
12
|
+
s.description = %q{Single clause, branching method definitions are so 2007. Get with SRP and party! With overloaded_methods, you can separate out any conditional branching in your method to where it belongs: predicates! Feel the power of the chain-of-responsibility pattern in your own code!!!!!!}
|
13
|
+
s.license = "MIT"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_development_dependency "rspec", "~> 3.0"
|
21
|
+
|
22
|
+
s.post_install_message = <<'Omg, frogs <3'.gsub(/(gg+)/) { |capture| "\e[32m#{capture.gsub 'g', '.'}\e[0m" }.gsub("brown", "\e[33m").gsub("off", "\e[0m")
|
23
|
+
.7
|
24
|
+
. .M
|
25
|
+
. . .N
|
26
|
+
M. ..O
|
27
|
+
=. .. .M
|
28
|
+
N . . .N
|
29
|
+
O.. . . O
|
30
|
+
MN:. . M
|
31
|
+
OM...N
|
32
|
+
N .OM brown.NM8MMMMMMoff
|
33
|
+
O ..N brown...MM=:Z7?Z7??MMMMIMMOM8Noff
|
34
|
+
M...O brown,MMMMMMMMMM$$:=ZZ$~:$?7ZMMMMM8?Moff
|
35
|
+
.N . M brownMMI$7:==?:77MMMM7$O~+~ZO~~I=7ZMMMMoff
|
36
|
+
O$...N brownM=$ZZI=MMM7ZZI=?MMZ+:$I?8Z~?ZO~=ZIMMoff
|
37
|
+
.MN ...O brownM~?Z==ZZZ=MM$$=$ZZMMO=~~?$=$Z~~OO+=MMoff
|
38
|
+
OM ...,M DAAAAAAAAAAAAAAAAAAAAAAAMbrown=Z=+OOI=+ZO$O+MMoff
|
39
|
+
NOM.. . N DAAAAAAAAAAAAM?:DAAAAAAAAAAAAMbrown$ZZ?$+IZ7+8?M8off
|
40
|
+
NOM.....O DAAAAAAAAM:ggggDAAAAAAAAAAAAAAMbrown78OI+D=78=$MMoff
|
41
|
+
NO.. ...MN DAAAAAAAMgggggggDAAAAAAAAAAAAAM,MMbrownMO7?I8Z7OMoff
|
42
|
+
MN.... ..O DAAAAAMgggggggggDAAAAAAAAAAAAMgg~MMbrown?NMM7O8MMoff
|
43
|
+
NOM.. ..MN DAAMggggggggggggDAAAAAAAAAAMgggggggMMbrown7.MMMoff
|
44
|
+
NOM.. .. .OM MggggggggggggggggDAAAAAAAMgggggggggggMM:M
|
45
|
+
NOM. .. ..NO Mggggggggggggggggggg~DAAMggggggggggggggI,,M
|
46
|
+
NOM.. .. .MN MMgggbrownZMMMMMMoffggggggggggggggggggggggggggggg=MM
|
47
|
+
NOM. . ... O MggbrownMMMNMMMMMMMMZoffgggggggggggggggggggggggggg$MI
|
48
|
+
NOM8.. .. .MM MZbrownMMMMMMMMMMMMMMMoffgggggggggM~gggggggggggggggMM
|
49
|
+
NOM .. . . NOM Mgggggggggggggggggggggggg8M$ggggggggggggggggMM
|
50
|
+
NOMO. . . . . M.MMMMMMMMMMMMNMMMMNMMMMMMggggggggggggggggggMM,
|
51
|
+
NOMM8. . M:MM MMggggggggggggggggggggggggggggggggggggggMM
|
52
|
+
. .MMMM brownMMMMgggggggggggggbrown7ZMMggggggggggggggggggMM
|
53
|
+
.MNOM brownMMMMMMMMMMMMMMMMMMMggggggggggggggggggggOMM
|
54
|
+
H brownMMMMMMMMMMMMMMMMMggggggg,ggggggggggggggMM
|
55
|
+
brownMMMMMMMMMMMM=gggggggggMMggggggggggggggMMN
|
56
|
+
brown:MMMMggggggggggggggggMgggggggMggggggMMM
|
57
|
+
MMMggggggggggggggMNggggg:7gggggggMMM .MMMMMM
|
58
|
+
MMMMgggggggggMgggMgggggMgggggggggMMMMggggggMM
|
59
|
+
MggMMMgggggggMgggMgggg=IggggggggMMgggggggggM
|
60
|
+
MggMMMMgggggMggggMggggMgggggMMM:ggggggggggMM
|
61
|
+
MMggM MMMgggMgggMMgggMggggMMMgggggggggggggM,
|
62
|
+
.MggMM MMMMMMgggMggggMgggggggggggggggggggMM
|
63
|
+
ggMMMMMMMMggM MggMMMgggMMgggOMggggggggggggggMNggMM
|
64
|
+
MgggggggggggggM MMMggMMgggMMMMMMMgggggggggggggMgg+MM
|
65
|
+
:MM7ggggMggIMM D ggM?MgggMM MgggggggggggMMggMM,
|
66
|
+
.MggMgg ggg gM+gggM NMggggggggMMMggMM
|
67
|
+
.MM+gZMMgggggM MMMMMMMMMMggggM
|
68
|
+
MIgg8MM,ggggMM .MMMggMggM
|
69
|
+
MMMgggMMMMggMI ggOMMMggOMMggMM
|
70
|
+
MgggMDggggM M MgggggNMMggMMggM
|
71
|
+
MMMMgggggM ggM .M:gggMggggMggggM
|
72
|
+
MM MMMMggggggMMMI
|
73
|
+
Omg, frogs <3
|
74
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'overloaded_methods'
|
2
|
+
|
3
|
+
RSpec.configure do |c|
|
4
|
+
c.disable_monkey_patching!
|
5
|
+
end
|
6
|
+
|
7
|
+
class CalculatesFibonacci
|
8
|
+
class << self
|
9
|
+
extend OverloadedMethods
|
10
|
+
overload_method :entry do |m|
|
11
|
+
m.when{|which| which <= 1}.do{|which| which}
|
12
|
+
m.default{|which|
|
13
|
+
CalculatesFibonacci.entry(which-1) + CalculatesFibonacci.entry(which-2)
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec.describe CalculatesFibonacci do
|
20
|
+
it "should return 0 for 0" do
|
21
|
+
expect(CalculatesFibonacci.entry(0)).to eq(0)
|
22
|
+
end
|
23
|
+
it "should return 1 for 1" do
|
24
|
+
expect(CalculatesFibonacci.entry(1)).to eq(1)
|
25
|
+
end
|
26
|
+
it "should return 1 for 2" do
|
27
|
+
expect(CalculatesFibonacci.entry(2)).to eq(1)
|
28
|
+
end
|
29
|
+
{3 => 2, 4 => 3, 5 => 5, 6 => 8}.each_pair {|which,value|
|
30
|
+
it "should return #{value} for #{which}" do
|
31
|
+
expect(CalculatesFibonacci.entry(which)).to eq(value)
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
class WithWhenDo
|
38
|
+
extend OverloadedMethods
|
39
|
+
|
40
|
+
overload_method :even_odd do |m|
|
41
|
+
m.when {|number| number % 2 == 0 }.do { :even }
|
42
|
+
m.when {|number| number % 2 == 1 }.do { :odd }
|
43
|
+
end
|
44
|
+
|
45
|
+
overload_method :hello_world do |m|
|
46
|
+
m.when { true }.do {'hello, world'}
|
47
|
+
end
|
48
|
+
|
49
|
+
overload_method :return_params do |m|
|
50
|
+
m.when { |param1, param2| true}.do {|param1, param2| [param1, param2]}
|
51
|
+
end
|
52
|
+
|
53
|
+
overload_method :two_params_collected do |m|
|
54
|
+
m.default { |param1, *params| [param1, params] }
|
55
|
+
end
|
56
|
+
|
57
|
+
overload_method :number_of_digits do |m|
|
58
|
+
m.when {|number| number < 10}.do {1}
|
59
|
+
m.when {|number| number< 100}.do {2}
|
60
|
+
m.default { 'more than two digits is crazy talk'}
|
61
|
+
end
|
62
|
+
|
63
|
+
overload_method :no_default do |m|
|
64
|
+
end
|
65
|
+
|
66
|
+
overload_method :default_returns_parameters do |m|
|
67
|
+
m.default { |*params| params}
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
class WithPatternDoes
|
73
|
+
extend OverloadedMethods
|
74
|
+
overload_method :hello_world do |m|
|
75
|
+
m.pattern { true }.does {'hello, world'}
|
76
|
+
end
|
77
|
+
|
78
|
+
overload_method :return_params do |m|
|
79
|
+
m.pattern { |param1, param2| true}.does {|param1, param2| [param1, param2]}
|
80
|
+
end
|
81
|
+
|
82
|
+
overload_method :even_odd do |m|
|
83
|
+
m.pattern {|number| number % 2 == 0 }.does { :even }
|
84
|
+
m.pattern {|number| number % 2 == 1 }.does { :odd }
|
85
|
+
end
|
86
|
+
|
87
|
+
overload_method :number_of_digits do |m|
|
88
|
+
m.pattern {|number| number < 10}.does {1}
|
89
|
+
m.pattern {|number| number< 100}.does {2}
|
90
|
+
m.default { 'more than two digits is crazy talk'}
|
91
|
+
end
|
92
|
+
|
93
|
+
overload_method :no_default do |m|
|
94
|
+
end
|
95
|
+
|
96
|
+
overload_method :default_returns_parameters do |m|
|
97
|
+
m.default { |*params| params}
|
98
|
+
end
|
99
|
+
|
100
|
+
overload_method :two_params_collected do |m|
|
101
|
+
m.default { |param1, *params| [param1, params] }
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
RSpec.describe OverloadedMethods do
|
111
|
+
[WithWhenDo, WithPatternDoes].each {|klass|
|
112
|
+
describe "#{klass.to_s}" do
|
113
|
+
it "should run the first method if the first pattern passes" do
|
114
|
+
expect(klass.new.even_odd(2)).to eq(:even)
|
115
|
+
end
|
116
|
+
it "should run the second method if the first pattern fails, second pattern passes" do
|
117
|
+
expect(klass.new.even_odd(3)).to eq(:odd)
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "when only a true pattern" do
|
121
|
+
it "should add the method that you define" do
|
122
|
+
expect(klass.new).to respond_to(:hello_world)
|
123
|
+
end
|
124
|
+
it "should call the block" do
|
125
|
+
expect(klass.new.hello_world).to eq('hello, world')
|
126
|
+
end
|
127
|
+
end
|
128
|
+
describe "when calling with parameters" do
|
129
|
+
it "should pass the parameters to the block" do
|
130
|
+
returns = klass.new.return_params 'corey', 'haines'
|
131
|
+
expect(returns).to include('corey')
|
132
|
+
expect(returns).to include('haines')
|
133
|
+
end
|
134
|
+
describe "when trying to collect different parts of the parameters into an array" do
|
135
|
+
it "should parse out the desired parameters and put the rest into an array" do
|
136
|
+
return1, others = klass.new.two_params_collected 1, 2, 3
|
137
|
+
expect(return1).to eq(1)
|
138
|
+
expect(others).to include(2)
|
139
|
+
expect(others).to include(3)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
describe "when calling with a pattern" do
|
145
|
+
it "should run the first method if the first pattern passes" do
|
146
|
+
expect(klass.new.even_odd(2)).to eq(:even)
|
147
|
+
end
|
148
|
+
it "should run the second method if the first pattern fails, second pattern passes" do
|
149
|
+
expect(klass.new.even_odd(3)).to eq(:odd)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "when using the default" do
|
154
|
+
it "should execute the default if no predicate passes" do
|
155
|
+
expect(klass.new.number_of_digits(176)).to eq('more than two digits is crazy talk')
|
156
|
+
end
|
157
|
+
it "should not crash if there is no default given" do
|
158
|
+
expect(klass.new.no_default).to be_nil
|
159
|
+
end
|
160
|
+
it "should pass the parameters to the default method, as well" do
|
161
|
+
returns = klass.new.default_returns_parameters 'Rachel', 'Davis'
|
162
|
+
expect(returns).to include('Rachel')
|
163
|
+
expect(returns).to include('Davis')
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
}
|
169
|
+
|
170
|
+
|
171
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: overloaded_methods
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.2.7
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Corey Haines
|
8
|
+
- Josh Cheek
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-01-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '3.0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '3.0'
|
28
|
+
description: 'Single clause, branching method definitions are so 2007. Get with SRP
|
29
|
+
and party! With overloaded_methods, you can separate out any conditional branching
|
30
|
+
in your method to where it belongs: predicates! Feel the power of the chain-of-responsibility
|
31
|
+
pattern in your own code!!!!!!'
|
32
|
+
email:
|
33
|
+
- coreyhaines@gmail.com
|
34
|
+
- josh.cheek@gmail.com
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files: []
|
38
|
+
files:
|
39
|
+
- ".travis.yml"
|
40
|
+
- Gemfile
|
41
|
+
- License.txt
|
42
|
+
- README.md
|
43
|
+
- lib/overloaded_methods.rb
|
44
|
+
- lib/overloaded_methods/version.rb
|
45
|
+
- overloaded_methods.gemspec
|
46
|
+
- spec/overloaded_methods_spec.rb
|
47
|
+
homepage: https://github.com/coreyhaines/overloaded_methods
|
48
|
+
licenses:
|
49
|
+
- MIT
|
50
|
+
metadata: {}
|
51
|
+
post_install_message: " .7\n . .M\n . . .N\n M. ..O\n
|
52
|
+
\ =. .. .M\n N . . .N\n O.. . . O\n MN:. . M\n OM...N\n
|
53
|
+
\ N .OM \e[33m.NM8MMMMMM\e[0m\n O ..N \e[33m...MM=:Z7?Z7??MMMMIMMOM8N\e[0m\n
|
54
|
+
\ M...O \e[33m,MMMMMMMMMM$$:=ZZ$~:$?7ZMMMMM8?M\e[0m\n .N
|
55
|
+
. M \e[33mMMI$7:==?:77MMMM7$O~+~ZO~~I=7ZMMMM\e[0m\n O$...N \e[33mM=$ZZI=MMM7ZZI=?MMZ+:$I?8Z~?ZO~=ZIMM\e[0m\n
|
56
|
+
\ .MN ...O \e[33mM~?Z==ZZZ=MM$$=$ZZMMO=~~?$=$Z~~OO+=MM\e[0m\n OM
|
57
|
+
...,M DAAAAAAAAAAAAAAAAAAAAAAAM\e[33m=Z=+OOI=+ZO$O+MM\e[0m\n NOM.. . N
|
58
|
+
\ DAAAAAAAAAAAAM?:DAAAAAAAAAAAAM\e[33m$ZZ?$+IZ7+8?M8\e[0m\n NOM.....O DAAAAAAAAM:\e[32m....\e[0mDAAAAAAAAAAAAAAM\e[33m78OI+D=78=$MM\e[0m\n
|
59
|
+
\ NO.. ...MN DAAAAAAAM\e[32m.......\e[0mDAAAAAAAAAAAAAM,MM\e[33mMO7?I8Z7OM\e[0m\n
|
60
|
+
\ MN.... ..O DAAAAAM\e[32m.........\e[0mDAAAAAAAAAAAAM\e[32m..\e[0m~MM\e[33m?NMM7O8MM\e[0m\n
|
61
|
+
\ NOM.. ..MN DAAM\e[32m............\e[0mDAAAAAAAAAAM\e[32m.......\e[0mMM\e[33m7.MMM\e[0m\n
|
62
|
+
NOM.. .. .OM M\e[32m................\e[0mDAAAAAAAM\e[32m...........\e[0mMM:M\n
|
63
|
+
NOM. .. ..NO M\e[32m...................\e[0m~DAAM\e[32m..............\e[0mI,,M\n
|
64
|
+
NOM.. .. .MN MM\e[32m...\e[0m\e[33mZMMMMMM\e[0m\e[32m.............................\e[0m=MM\n
|
65
|
+
NOM. . ... O M\e[32m..\e[0m\e[33mMMMNMMMMMMMMZ\e[0m\e[32m..........................\e[0m$MI\n
|
66
|
+
NOM8.. .. .MM MZ\e[33mMMMMMMMMMMMMMMM\e[0m\e[32m.........\e[0mM~\e[32m...............\e[0mMM\n
|
67
|
+
\ NOM .. . . NOM M\e[32m........................\e[0m8M$\e[32m................\e[0mMM\n
|
68
|
+
\ NOMO. . . . . M.MMMMMMMMMMMMNMMMMNMMMMMM\e[32m..................\e[0mMM,\n
|
69
|
+
\ NOMM8. . M:MM MM\e[32m......................................\e[0mMM\n
|
70
|
+
\ . .MMMM \e[33mMMMM\e[32m.............\e[0m\e[33m7ZMM\e[32m..................\e[0mMM\n
|
71
|
+
\ .MNOM \e[33mMMMMMMMMMMMMMMMMMMM\e[32m....................\e[0mOMM\n
|
72
|
+
\ H \e[33mMMMMMMMMMMMMMMMMM\e[32m.......\e[0m,\e[32m..............\e[0mMM\n
|
73
|
+
\ \e[33mMMMMMMMMMMMM=\e[32m.........\e[0mMM\e[32m..............\e[0mMMN\n
|
74
|
+
\ \e[33m:MMMM\e[32m................\e[0mM\e[32m.......\e[0mM\e[32m......\e[0mMMM\n
|
75
|
+
\ MMM\e[32m..............\e[0mMN\e[32m.....\e[0m:7\e[32m.......\e[0mMMM
|
76
|
+
.MMMMMM\n MMMM\e[32m.........\e[0mM\e[32m...\e[0mM\e[32m.....\e[0mM\e[32m.........\e[0mMMMM\e[32m......\e[0mMM\n
|
77
|
+
\ M\e[32m..\e[0mMMM\e[32m.......\e[0mM\e[32m...\e[0mM\e[32m....\e[0m=I\e[32m........\e[0mMM\e[32m.........\e[0mM\n
|
78
|
+
\ M\e[32m..\e[0mMMMM\e[32m.....\e[0mM\e[32m....\e[0mM\e[32m....\e[0mM\e[32m.....\e[0mMMM:\e[32m..........\e[0mMM\n
|
79
|
+
\ MM\e[32m..\e[0mM MMM\e[32m...\e[0mM\e[32m...\e[0mMM\e[32m...\e[0mM\e[32m....\e[0mMMM\e[32m.............\e[0mM,\n
|
80
|
+
\ .M\e[32m..\e[0mMM MMMMMM\e[32m...\e[0mM\e[32m....\e[0mM\e[32m...................\e[0mMM\n
|
81
|
+
\ \e[32m..\e[0mMMMMMMMM\e[32m..\e[0mM M\e[32m..\e[0mMMM\e[32m...\e[0mMM\e[32m...\e[0mOM\e[32m..............\e[0mMN\e[32m..\e[0mMM\n
|
82
|
+
\ M\e[32m.............\e[0mM MMM\e[32m..\e[0mMM\e[32m...\e[0mMMMMMMM\e[32m.............\e[0mM\e[32m..\e[0m+MM\n
|
83
|
+
\ :MM7\e[32m....\e[0mM\e[32m..\e[0mIMM D \e[32m..\e[0mM?M\e[32m...\e[0mMM
|
84
|
+
\ M\e[32m...........\e[0mMM\e[32m..\e[0mMM,\n .M\e[32m..\e[0mM\e[32m..\e[0m
|
85
|
+
\ \e[32m...\e[0m gM+\e[32m...\e[0mM NM\e[32m........\e[0mMMM\e[32m..\e[0mMM\n
|
86
|
+
\ .MM+gZMM\e[32m.....\e[0mM MMMMMMMMMM\e[32m....\e[0mM\n
|
87
|
+
\ MI\e[32m..\e[0m8MM,\e[32m....\e[0mMM .MMM\e[32m..\e[0mM\e[32m..\e[0mM\n
|
88
|
+
\ MMM\e[32m...\e[0mMMMM\e[32m..\e[0mMI \e[32m..\e[0mOMMM\e[32m..\e[0mOMM\e[32m..\e[0mMM\n
|
89
|
+
\ M\e[32m...\e[0mMD\e[32m....\e[0mM M M\e[32m.....\e[0mNMM\e[32m..\e[0mMM\e[32m..\e[0mM\n
|
90
|
+
\ MMMM\e[32m.....\e[0mM \e[32m..\e[0mM .M:\e[32m...\e[0mM\e[32m....\e[0mM\e[32m....\e[0mM\n
|
91
|
+
\ MM MMMM\e[32m......\e[0mMMMI\n"
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.2.2
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Bringing the power of predicate-based method dispatch to Ruby, where it belongs!
|
111
|
+
test_files: []
|