strategy_bag 0.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +132 -0
- data/Rakefile +7 -0
- data/lib/strategy_bag.rb +108 -0
- data/lib/strategy_bag/version.rb +3 -0
- data/spec/calc.rb +40 -0
- data/spec/calc_spec.rb +8 -0
- data/spec/shared_examples_for_calc.rb +985 -0
- data/spec/strategic_calc.rb +68 -0
- data/spec/strategic_calc_spec.rb +9 -0
- data/strategy_bag.gemspec +24 -0
- metadata +106 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'strategy_bag'
|
2
|
+
|
3
|
+
module StrategicCalc
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def calc(a, b, c)
|
7
|
+
Solver.new(a, b, c).run
|
8
|
+
end
|
9
|
+
|
10
|
+
class Solver < StrategyBag
|
11
|
+
params :a, :b, :c
|
12
|
+
|
13
|
+
condition(:a_high?, :a_low?) { a > 10 }
|
14
|
+
condition(:b_high?, :b_low?) { b > 10 }
|
15
|
+
condition(:c_high?, :c_low?) { c > 10 }
|
16
|
+
condition(:c_max?, :c_not_max?) { c > 20 }
|
17
|
+
condition(:bc_high?, :bc_low?) { b + c > 10 }
|
18
|
+
|
19
|
+
strategy do
|
20
|
+
condition :a_high?
|
21
|
+
condition :b_high?
|
22
|
+
condition :c_high?
|
23
|
+
action do
|
24
|
+
a + b - 2 * c
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
strategy do
|
29
|
+
condition :a_high?
|
30
|
+
condition :b_high?
|
31
|
+
condition :c_low?
|
32
|
+
action do
|
33
|
+
a + b + c
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
strategy do
|
38
|
+
condition :a_high?
|
39
|
+
condition :b_low?
|
40
|
+
condition :c_max?
|
41
|
+
action do
|
42
|
+
a + b - c
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
strategy do
|
47
|
+
condition :a_high?
|
48
|
+
condition :b_low?
|
49
|
+
condition :c_not_max?
|
50
|
+
action do
|
51
|
+
a + b + c
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
strategy do
|
56
|
+
condition :a_low?
|
57
|
+
condition :bc_high?
|
58
|
+
action do
|
59
|
+
b + c - a
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
default do
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'strategy_bag/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "strategy_bag"
|
8
|
+
spec.version = StrategyBag::VERSION
|
9
|
+
spec.authors = ["Levente Bagi"]
|
10
|
+
spec.email = ["bagilevi@gmail.com"]
|
11
|
+
spec.summary = %q{Ruby DSL for making conditionals more readable}
|
12
|
+
spec.description = %q{Ruby DSL for making conditionals more readable by defining a set of strategies. Each strategy has a set of conditions and an action. The runner will select a strategy that meets the conditions and executes it.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: strategy_bag
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Levente Bagi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Ruby DSL for making conditionals more readable by defining a set of strategies.
|
56
|
+
Each strategy has a set of conditions and an action. The runner will select a strategy
|
57
|
+
that meets the conditions and executes it.
|
58
|
+
email:
|
59
|
+
- bagilevi@gmail.com
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- ".gitignore"
|
65
|
+
- Gemfile
|
66
|
+
- LICENSE.txt
|
67
|
+
- README.md
|
68
|
+
- Rakefile
|
69
|
+
- lib/strategy_bag.rb
|
70
|
+
- lib/strategy_bag/version.rb
|
71
|
+
- spec/calc.rb
|
72
|
+
- spec/calc_spec.rb
|
73
|
+
- spec/shared_examples_for_calc.rb
|
74
|
+
- spec/strategic_calc.rb
|
75
|
+
- spec/strategic_calc_spec.rb
|
76
|
+
- strategy_bag.gemspec
|
77
|
+
homepage: ''
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.2.1
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Ruby DSL for making conditionals more readable
|
101
|
+
test_files:
|
102
|
+
- spec/calc.rb
|
103
|
+
- spec/calc_spec.rb
|
104
|
+
- spec/shared_examples_for_calc.rb
|
105
|
+
- spec/strategic_calc.rb
|
106
|
+
- spec/strategic_calc_spec.rb
|