fact_checker 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'FactChecker::VERSION' do
6
+ it "is valid" do
7
+ expect(FactChecker::VERSION).to match(/\A\d+\.\d+\.\d+\Z/)
8
+ end
9
+ end
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.3
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: 2012-05-03 00:00:00.000000000Z
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: &84289010 !ruby/object:Gem::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: *84289010
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: &84288670 !ruby/object:Gem::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: *84288670
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: &84288420 !ruby/object:Gem::Requirement
40
- none: false
44
+ requirement: !ruby/object:Gem::Requirement
41
45
  requirements:
42
46
  - - ~>
43
47
  - !ruby/object:Gem::Version
44
- version: 2.9.0
48
+ version: '2.14'
45
49
  type: :development
46
50
  prerelease: false
47
- version_requirements: *84288420
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: &84288090 !ruby/object:Gem::Requirement
51
- none: false
58
+ requirement: !ruby/object:Gem::Requirement
52
59
  requirements:
53
- - - ~>
60
+ - - '>='
54
61
  - !ruby/object:Gem::Version
55
- version: 0.6.1
62
+ version: '0'
56
63
  type: :development
57
64
  prerelease: false
58
- version_requirements: *84288090
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
- - .rvmrc
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/base.rb
76
- - lib/fact_checker/boot.rb
100
+ - lib/fact_checker/mixin.rb
101
+ - lib/fact_checker/result.rb
77
102
  - lib/fact_checker/version.rb
78
- - spec/fact_checker/base_spec.rb
79
- - spec/fact_checker/version_spec.rb
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/support/classes_with_facts.rb
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.8.7
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: 1.8.10
127
+ rubygems_version: 2.0.3
107
128
  signing_key:
108
- specification_version: 3
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
@@ -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