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.
@@ -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