fact_checker 0.0.3 → 0.1.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/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/README.md +102 -17
- data/fact_checker.gemspec +5 -4
- data/lib/fact_checker/mixin.rb +32 -0
- data/lib/fact_checker/result.rb +18 -0
- data/lib/fact_checker/version.rb +1 -1
- data/lib/fact_checker.rb +2 -2
- data/spec/mixin_spec.rb +238 -0
- data/spec/result_spec.rb +29 -0
- data/spec/spec_helper.rb +3 -3
- data/spec/version_spec.rb +9 -0
- metadata +59 -39
- data/.rvmrc +0 -1
- data/examples/README.md +0 -72
- data/examples/basic.rb +0 -60
- data/lib/fact_checker/base.rb +0 -79
- data/lib/fact_checker/boot.rb +0 -31
- data/spec/fact_checker/base_spec.rb +0 -272
- data/spec/fact_checker/version_spec.rb +0 -7
- data/spec/fact_checker_inheritance_spec.rb +0 -63
- data/spec/fact_checker_spec.rb +0 -87
- data/spec/support/classes_with_facts.rb +0 -29
- data/spec/support/shared_facts_behaviour.rb +0 -17
data/spec/result_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe FactChecker::Result do
|
6
|
+
context "initialized with (dependency_result, requirement_result)" do
|
7
|
+
|
8
|
+
context "when dependency_result = true" do
|
9
|
+
context "when requirement_result = true" do
|
10
|
+
subject { described_class.new(true, true) }
|
11
|
+
its(:valid?) { should == true }
|
12
|
+
its(:available?) { should == true }
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when requirement_result = false" do
|
16
|
+
subject { described_class.new(true, false) }
|
17
|
+
its(:valid?) { should == false }
|
18
|
+
its(:available?) { should == true }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when dependency_result = false" do
|
23
|
+
subject { described_class.new(false, true) }
|
24
|
+
its(:valid?) { should == false }
|
25
|
+
its(:available?) { should == false }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
-
|
5
3
|
require 'simplecov'
|
6
|
-
SimpleCov.start
|
4
|
+
SimpleCov.start { add_filter '/spec/' }
|
7
5
|
|
6
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
8
7
|
require 'fact_checker'
|
9
8
|
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
10
9
|
|
11
10
|
RSpec.configure do |conf|
|
11
|
+
conf.order = 'random'
|
12
12
|
conf.formatter = :documentation
|
13
13
|
conf.color_enabled = true
|
14
14
|
conf.treat_symbols_as_metadata_keys_with_true_values = true
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fact_checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alexey Smolianinov
|
@@ -10,52 +9,78 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2013-09-02 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rake
|
17
|
-
requirement:
|
18
|
-
none: false
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
|
-
version_requirements:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
26
28
|
- !ruby/object:Gem::Dependency
|
27
29
|
name: bundler
|
28
|
-
requirement:
|
29
|
-
none: false
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- -
|
32
|
+
- - '>='
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '0'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
37
42
|
- !ruby/object:Gem::Dependency
|
38
43
|
name: rspec
|
39
|
-
requirement:
|
40
|
-
none: false
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
41
45
|
requirements:
|
42
46
|
- - ~>
|
43
47
|
- !ruby/object:Gem::Version
|
44
|
-
version: 2.
|
48
|
+
version: '2.14'
|
45
49
|
type: :development
|
46
50
|
prerelease: false
|
47
|
-
version_requirements:
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '2.14'
|
48
56
|
- !ruby/object:Gem::Dependency
|
49
57
|
name: simplecov
|
50
|
-
requirement:
|
51
|
-
none: false
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
52
59
|
requirements:
|
53
|
-
- -
|
60
|
+
- - '>='
|
54
61
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0
|
62
|
+
version: '0'
|
56
63
|
type: :development
|
57
64
|
prerelease: false
|
58
|
-
version_requirements:
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: debugger
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
59
84
|
description: Simple gem to check hierarchically dependent "facts" about objects
|
60
85
|
email:
|
61
86
|
- alexisowl+fact_checker@gmail.com
|
@@ -64,48 +89,43 @@ extensions: []
|
|
64
89
|
extra_rdoc_files: []
|
65
90
|
files:
|
66
91
|
- .gitignore
|
67
|
-
- .
|
92
|
+
- .ruby-gemset
|
93
|
+
- .ruby-version
|
94
|
+
- .travis.yml
|
68
95
|
- Gemfile
|
69
96
|
- README.md
|
70
97
|
- Rakefile
|
71
|
-
- examples/README.md
|
72
|
-
- examples/basic.rb
|
73
98
|
- fact_checker.gemspec
|
74
99
|
- lib/fact_checker.rb
|
75
|
-
- lib/fact_checker/
|
76
|
-
- lib/fact_checker/
|
100
|
+
- lib/fact_checker/mixin.rb
|
101
|
+
- lib/fact_checker/result.rb
|
77
102
|
- lib/fact_checker/version.rb
|
78
|
-
- spec/
|
79
|
-
- spec/
|
80
|
-
- spec/fact_checker_inheritance_spec.rb
|
81
|
-
- spec/fact_checker_spec.rb
|
103
|
+
- spec/mixin_spec.rb
|
104
|
+
- spec/result_spec.rb
|
82
105
|
- spec/spec.rake
|
83
106
|
- spec/spec_helper.rb
|
84
|
-
- spec/
|
85
|
-
- spec/support/shared_facts_behaviour.rb
|
107
|
+
- spec/version_spec.rb
|
86
108
|
homepage: https://github.com/alexis/fact_checker
|
87
109
|
licenses: []
|
110
|
+
metadata: {}
|
88
111
|
post_install_message:
|
89
112
|
rdoc_options: []
|
90
113
|
require_paths:
|
91
114
|
- lib
|
92
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
116
|
requirements:
|
95
|
-
- -
|
117
|
+
- - '>='
|
96
118
|
- !ruby/object:Gem::Version
|
97
|
-
version: 1.
|
119
|
+
version: 1.9.2
|
98
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
121
|
requirements:
|
101
|
-
- -
|
122
|
+
- - '>='
|
102
123
|
- !ruby/object:Gem::Version
|
103
124
|
version: 1.3.5
|
104
125
|
requirements: []
|
105
126
|
rubyforge_project: fact_checker
|
106
|
-
rubygems_version:
|
127
|
+
rubygems_version: 2.0.3
|
107
128
|
signing_key:
|
108
|
-
specification_version:
|
129
|
+
specification_version: 4
|
109
130
|
summary: Checks facts which may depend on other facts
|
110
131
|
test_files: []
|
111
|
-
has_rdoc:
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use 1.9.3 2>/dev/null
|
data/examples/README.md
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# FactChecker / Examples
|
2
|
-
|
3
|
-
## How to run
|
4
|
-
|
5
|
-
``` ruby
|
6
|
-
bundle exec ruby -rubygems examples/basic.rb
|
7
|
-
```
|
8
|
-
|
9
|
-
## BasicExample
|
10
|
-
|
11
|
-
``` ruby
|
12
|
-
# encoding: utf-8
|
13
|
-
|
14
|
-
require 'fact_checker'
|
15
|
-
|
16
|
-
class BasicExample
|
17
|
-
include FactChecker
|
18
|
-
|
19
|
-
def_fact :be
|
20
|
-
def_fact :be_or => :be
|
21
|
-
def_fact :be_or_not => :be, :if => :my_requirement?
|
22
|
-
def_fact :be_or_not_to => [:be, :be_or_not], :if => :my_requirement?
|
23
|
-
def_fact :be_or_not_to_be => :be, :if => lambda { |context| !context.my_requirement? }
|
24
|
-
end
|
25
|
-
|
26
|
-
target = BasicExample.new
|
27
|
-
|
28
|
-
def target.my_requirement?; false end
|
29
|
-
|
30
|
-
p target.fact_possible? :be
|
31
|
-
# => true
|
32
|
-
p target.fact_accomplished? :be
|
33
|
-
# => true
|
34
|
-
p target.be?
|
35
|
-
# => true
|
36
|
-
|
37
|
-
puts
|
38
|
-
|
39
|
-
p target.fact_possible? :be_or
|
40
|
-
# => true
|
41
|
-
p target.fact_accomplished? :be_or
|
42
|
-
# => true
|
43
|
-
p target.be_or?
|
44
|
-
# => true
|
45
|
-
|
46
|
-
puts
|
47
|
-
|
48
|
-
p target.fact_possible? :be_or_not
|
49
|
-
# => true
|
50
|
-
p target.fact_accomplished? :be_or_not
|
51
|
-
# => false
|
52
|
-
p target.be_or_not?
|
53
|
-
# => false
|
54
|
-
|
55
|
-
puts
|
56
|
-
|
57
|
-
p target.fact_possible? :be_or_not_to
|
58
|
-
# => false
|
59
|
-
p target.fact_accomplished? :be_or_not_to
|
60
|
-
# => false
|
61
|
-
p target.be_or_not_to?
|
62
|
-
# => false
|
63
|
-
|
64
|
-
puts
|
65
|
-
|
66
|
-
p target.fact_possible? :be_or_not_to_be
|
67
|
-
# => true
|
68
|
-
p target.fact_accomplished? :be_or_not_to_be
|
69
|
-
# => true
|
70
|
-
p target.be_or_not_to_be?
|
71
|
-
# => true
|
72
|
-
```
|
data/examples/basic.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'fact_checker'
|
4
|
-
|
5
|
-
class BasicExample
|
6
|
-
include FactChecker
|
7
|
-
|
8
|
-
def_fact :be
|
9
|
-
def_fact :be_or => :be
|
10
|
-
def_fact :be_or_not => :be, :if => :my_requirement?
|
11
|
-
def_fact :be_or_not_to => [:be, :be_or_not], :if => :my_requirement?
|
12
|
-
def_fact :be_or_not_to_be => :be, :if => lambda { |context| !context.my_requirement? }
|
13
|
-
end
|
14
|
-
|
15
|
-
target = BasicExample.new
|
16
|
-
|
17
|
-
def target.my_requirement?; false; end
|
18
|
-
|
19
|
-
p target.fact_possible? :be
|
20
|
-
# => true
|
21
|
-
p target.fact_accomplished? :be
|
22
|
-
# => true
|
23
|
-
p target.be?
|
24
|
-
# => true
|
25
|
-
|
26
|
-
puts
|
27
|
-
|
28
|
-
p target.fact_possible? :be_or
|
29
|
-
# => true
|
30
|
-
p target.fact_accomplished? :be_or
|
31
|
-
# => true
|
32
|
-
p target.be_or?
|
33
|
-
# => true
|
34
|
-
|
35
|
-
puts
|
36
|
-
|
37
|
-
p target.fact_possible? :be_or_not
|
38
|
-
# => true
|
39
|
-
p target.fact_accomplished? :be_or_not
|
40
|
-
# => false
|
41
|
-
p target.be_or_not?
|
42
|
-
# => false
|
43
|
-
|
44
|
-
puts
|
45
|
-
|
46
|
-
p target.fact_possible? :be_or_not_to
|
47
|
-
# => false
|
48
|
-
p target.fact_accomplished? :be_or_not_to
|
49
|
-
# => false
|
50
|
-
p target.be_or_not_to?
|
51
|
-
# => false
|
52
|
-
|
53
|
-
puts
|
54
|
-
|
55
|
-
p target.fact_possible? :be_or_not_to_be
|
56
|
-
# => true
|
57
|
-
p target.fact_accomplished? :be_or_not_to_be
|
58
|
-
# => true
|
59
|
-
p target.be_or_not_to_be?
|
60
|
-
# => true
|
data/lib/fact_checker/base.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module FactChecker
|
4
|
-
class Base
|
5
|
-
attr_accessor :facts, :dependencies, :requirements
|
6
|
-
|
7
|
-
def initialize(facts = nil, deps = nil, reqs = nil)
|
8
|
-
@facts = facts || []
|
9
|
-
@dependencies = deps || {}
|
10
|
-
@requirements = reqs || {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize_copy(orig)
|
14
|
-
super
|
15
|
-
@facts = orig.facts.dup
|
16
|
-
@dependencies = orig.dependencies.dup
|
17
|
-
@requirements = orig.requirements.dup
|
18
|
-
end
|
19
|
-
|
20
|
-
def accomplished_facts(context)
|
21
|
-
facts.select{ |fact| fact_accomplished?(context, fact) }
|
22
|
-
end
|
23
|
-
|
24
|
-
def possible_facts(context)
|
25
|
-
facts.select{ |fact| fact_possible?(context, fact) }
|
26
|
-
end
|
27
|
-
|
28
|
-
# Checks if requirement and dependency for the fact are satisfied
|
29
|
-
def fact_accomplished?(context, fact)
|
30
|
-
fact_possible?(context, fact) && requirement_satisfied_for?(context, fact)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Checks if dependency for the fact is satisfied
|
34
|
-
def fact_possible?(context, fact)
|
35
|
-
[* @dependencies[fact] || []].all?{ |dep| fact_accomplished?(context, dep) }
|
36
|
-
end
|
37
|
-
|
38
|
-
# Checks if requirement for the fact is satisfied (no dependency checks here)
|
39
|
-
def requirement_satisfied_for?(context, fact)
|
40
|
-
return false unless @facts.include?(fact)
|
41
|
-
|
42
|
-
case req = @requirements[fact]
|
43
|
-
when Symbol then context.send(req)
|
44
|
-
when Proc then req.arity < 1 ? req.call : req.call(context)
|
45
|
-
when NilClass then true
|
46
|
-
else raise RuntimeError, "can't check this fact - wrong requirement"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Syntactic sugar, adds fact with its requirement and dependency. Examples:
|
51
|
-
# - def_fact(:fact)
|
52
|
-
# - def_fact(:fact, :if => :requirement)
|
53
|
-
# - def_fact(:fact => :dependency)
|
54
|
-
# - def_fact(:fact => :dependency, :if => :requirement)
|
55
|
-
def def_fact(*opt)
|
56
|
-
raise ArgumentError, "wrong number of arguments (#{opt.size} for 2)" if opt.size > 2
|
57
|
-
raise ArgumentError, "wrong number of arguments (0 for 1)" if opt.size == 0
|
58
|
-
|
59
|
-
if opt[0].is_a?(Hash)
|
60
|
-
raise ArgumentError, "wrong arguments (hash argument can only be the last one)" if opt.size > 1
|
61
|
-
hash = opt[0]
|
62
|
-
else
|
63
|
-
raise ArgumentError, "wrong arguments (second argument must be a hash)" if opt[1] && ! opt[1].is_a?(Hash)
|
64
|
-
hash = (opt[1] || {}).merge(opt[0] => nil)
|
65
|
-
end
|
66
|
-
|
67
|
-
req = hash.delete(:if)
|
68
|
-
fact = hash.keys.first
|
69
|
-
dep = hash.delete(fact)
|
70
|
-
|
71
|
-
raise ArgumentError, "wrong arguments: #{hash.keys.join(', ')}" if hash.size > 0
|
72
|
-
|
73
|
-
@requirements[fact] = req
|
74
|
-
@dependencies[fact] = dep
|
75
|
-
@facts |= [fact]
|
76
|
-
fact
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|