minsc 0.0.0
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/lib/minsc.rb +5 -0
- data/lib/minsc/rule.rb +33 -0
- data/lib/minsc/rules_engine.rb +31 -0
- metadata +87 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 29d97f9dd74075db79af12925abd390a29cbcc40
|
|
4
|
+
data.tar.gz: a4160184a4b44da2a7e02fdd1e414951c162e21f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e7073b97a78a0c2ef5d4ce483600af16b7cddc2f4cce2db31bccbba507b88e4326bab642ee7db79ff2974fddfc241377d145f74987a77f96ac7e1908c3f32d70
|
|
7
|
+
data.tar.gz: bf7b8b29f512636a41e83af9e7db2c439f192cf3bc4e5f7b29ebade50b7d685a8242e9c00db55f2e80930a4f87030de971471a1e6da4547b92bd654ebeb29d3c
|
data/lib/minsc.rb
ADDED
data/lib/minsc/rule.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Minsc
|
|
2
|
+
module Rule
|
|
3
|
+
@registry = {}
|
|
4
|
+
|
|
5
|
+
def self.add_rule(klass, method)
|
|
6
|
+
@registry[klass] ||= []
|
|
7
|
+
@registry[klass] << method
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.registry
|
|
11
|
+
@registry
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module ClassMethods
|
|
15
|
+
def condition(method)
|
|
16
|
+
Rule.add_rule(self, method)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module InstanceMethods
|
|
21
|
+
def applicable?
|
|
22
|
+
Rule.registry[self.class]
|
|
23
|
+
.map { |method| send(method) }
|
|
24
|
+
.uniq == [true]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.included(base)
|
|
29
|
+
base.extend(ClassMethods)
|
|
30
|
+
base.include(InstanceMethods)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Minsc
|
|
2
|
+
module RulesEngine
|
|
3
|
+
@registry = {}
|
|
4
|
+
|
|
5
|
+
def self.add_rule(klass, rule)
|
|
6
|
+
@registry[klass] ||= []
|
|
7
|
+
@registry[klass] << rule
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.registry
|
|
11
|
+
@registry
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module ClassMethods
|
|
15
|
+
def execute(*args)
|
|
16
|
+
RulesEngine.registry[self]
|
|
17
|
+
.map { |rule_class| rule_class.new(*args) }
|
|
18
|
+
.select(&:applicable?)
|
|
19
|
+
.map(&:execute)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def rule(rule_class)
|
|
23
|
+
RulesEngine.add_rule(self, rule_class)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.included(base)
|
|
28
|
+
base.extend(ClassMethods)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: minsc
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Patrick Arthur Brown
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2016-04-23 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: minitest
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '5.8'
|
|
20
|
+
- - ">="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 5.8.4
|
|
23
|
+
type: :development
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - "~>"
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '5.8'
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 5.8.4
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: rake
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '11.1'
|
|
40
|
+
- - ">="
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: 11.1.2
|
|
43
|
+
type: :development
|
|
44
|
+
prerelease: false
|
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - "~>"
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: '11.1'
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: 11.1.2
|
|
53
|
+
description: A gem for implementing the Rules Engine pattern
|
|
54
|
+
email: pab@hivemind.us.org
|
|
55
|
+
executables: []
|
|
56
|
+
extensions: []
|
|
57
|
+
extra_rdoc_files: []
|
|
58
|
+
files:
|
|
59
|
+
- lib/minsc.rb
|
|
60
|
+
- lib/minsc/rule.rb
|
|
61
|
+
- lib/minsc/rules_engine.rb
|
|
62
|
+
homepage: https://github.com/ptrckbrwn/minsc
|
|
63
|
+
licenses:
|
|
64
|
+
- MIT
|
|
65
|
+
metadata: {}
|
|
66
|
+
post_install_message:
|
|
67
|
+
rdoc_options: []
|
|
68
|
+
require_paths:
|
|
69
|
+
- lib
|
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
|
+
requirements:
|
|
77
|
+
- - ">="
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: '0'
|
|
80
|
+
requirements: []
|
|
81
|
+
rubyforge_project:
|
|
82
|
+
rubygems_version: 2.5.1
|
|
83
|
+
signing_key:
|
|
84
|
+
specification_version: 4
|
|
85
|
+
summary: You have curried the favor of Boo, the only miniature giant space hamster
|
|
86
|
+
in the Realm!
|
|
87
|
+
test_files: []
|