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.
@@ -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
@@ -0,0 +1,5 @@
1
+ require "minsc/rules_engine"
2
+ require "minsc/rule"
3
+
4
+ module Minsc
5
+ end
@@ -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: []