factis 0.0.6 → 0.0.7
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.
- data/README.md +20 -1
- data/lib/factis.rb +4 -0
- data/lib/factis/memory.rb +6 -1
- data/lib/factis/version.rb +1 -1
- data/spec/factis/memory_spec.rb +25 -2
- data/spec/factis_spec.rb +32 -3
- metadata +2 -2
data/README.md
CHANGED
@@ -49,8 +49,25 @@ That being the case, I'm going to use terminology from that side of the
|
|
49
49
|
experience. Here's everything that World gets when you use Factis.
|
50
50
|
|
51
51
|
```ruby
|
52
|
-
# Let's memorize that my brother, Joe, just loves
|
52
|
+
# Let's memorize that my brother, Joe, just loves cake.
|
53
|
+
memorize_fact("What does Joe love?", "Joe loves cake.")
|
54
|
+
=> "Joe loves cake."
|
55
|
+
|
56
|
+
# Wait, I had that wrong. Joe loves pie.
|
57
|
+
|
53
58
|
memorize_fact("What does Joe love?", "Joe loves pie.")
|
59
|
+
=> Cannot memorize a fact more than once: 'What does Joe love?' (RuntimeError)
|
60
|
+
|
61
|
+
# Why does that happen?
|
62
|
+
# Er, because we're trying to track state safely, and overwriting states
|
63
|
+
# all willy-nilly is kinda unsafe.
|
64
|
+
# So, how do I overwrite a known fact?
|
65
|
+
# If you want to unsafely track state, you should probably just use global
|
66
|
+
# variables. Shooting from the hip never did anybody wrong, after all. Or, you
|
67
|
+
# can use indifferently_memorize_fact, which is a bad thing to do.
|
68
|
+
|
69
|
+
indifferently_memorize_fact("What does Joe love?", "Joe loves pie.")
|
70
|
+
=> "Joe loves pie."
|
54
71
|
|
55
72
|
# Hey Factis, what does Joe love?
|
56
73
|
recall_fact("What does Joe love?")
|
@@ -58,6 +75,7 @@ recall_fact("What does Joe love?")
|
|
58
75
|
|
59
76
|
# That's not very interesting. Let's forget about it.
|
60
77
|
forget_fact("What does Joe love?")
|
78
|
+
=> "Joe loves pie."
|
61
79
|
|
62
80
|
# Wait, what does Joe love again?
|
63
81
|
recall_fact("What does Joe love?")
|
@@ -79,6 +97,7 @@ end
|
|
79
97
|
|
80
98
|
# The content can be pretty much anything.
|
81
99
|
memorize_fact(:some_foo, Foo.new)
|
100
|
+
=> #<Foo:0x007ffd84394728>
|
82
101
|
|
83
102
|
# What's a foo?
|
84
103
|
recall_fact(:some_foo)
|
data/lib/factis.rb
CHANGED
data/lib/factis/memory.rb
CHANGED
@@ -10,8 +10,13 @@ module Factis
|
|
10
10
|
@facts
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.memorize(fact, content)
|
13
|
+
def self.memorize(fact, content, options = {})
|
14
14
|
init_memory! if @facts.nil?
|
15
|
+
if known_fact?(fact)
|
16
|
+
unless options[:overwrite] == true
|
17
|
+
raise %{Cannot memorize a fact more than once: '#{fact}'}
|
18
|
+
end
|
19
|
+
end
|
15
20
|
@facts[fact] = content
|
16
21
|
end
|
17
22
|
|
data/lib/factis/version.rb
CHANGED
data/spec/factis/memory_spec.rb
CHANGED
@@ -7,6 +7,10 @@ describe Factis::Memory do
|
|
7
7
|
let(:fact) {"Joe"}
|
8
8
|
let(:content) {"Likes pie"}
|
9
9
|
|
10
|
+
before(:each) do
|
11
|
+
Factis::Memory.reset!
|
12
|
+
end
|
13
|
+
|
10
14
|
describe '.all_facts' do
|
11
15
|
it 'is a Hash' do
|
12
16
|
memory.all_facts.should be_a(Hash)
|
@@ -14,11 +18,28 @@ describe Factis::Memory do
|
|
14
18
|
end
|
15
19
|
|
16
20
|
describe %{.memorize} do
|
21
|
+
let(:new_content) {'Something else'}
|
17
22
|
it %{records a fact when given a name and some content} do
|
18
23
|
memory.memorize(fact, content)
|
19
24
|
memory.all_facts.keys.include?(fact).should be_true
|
20
25
|
memory.all_facts[fact].should == content
|
21
26
|
end
|
27
|
+
|
28
|
+
it %{returns the content of the fact} do
|
29
|
+
memory.memorize(fact, content).should == content
|
30
|
+
end
|
31
|
+
|
32
|
+
it %{raises an error when given a known fact} do
|
33
|
+
memory.memorize(fact, content)
|
34
|
+
lambda {memory.memorize(fact, new_content)}.should raise_error
|
35
|
+
end
|
36
|
+
|
37
|
+
it %{allows a fact to be explicitly over-written} do
|
38
|
+
memory.memorize(fact, content)
|
39
|
+
lambda {memory.memorize(fact, new_content, overwrite: true)}.should_not raise_error
|
40
|
+
memory.recall(fact).should == new_content
|
41
|
+
|
42
|
+
end
|
22
43
|
end
|
23
44
|
|
24
45
|
describe %{.known_fact?} do
|
@@ -40,13 +61,15 @@ describe Factis::Memory do
|
|
40
61
|
memory.memorize(fact, content)
|
41
62
|
end
|
42
63
|
|
43
|
-
|
44
|
-
|
45
64
|
it %{removes a known fact from memory} do
|
46
65
|
memory.forget(fact)
|
47
66
|
memory.known_fact?(fact).should be_false
|
48
67
|
end
|
49
68
|
|
69
|
+
it %{returns the content of the fact} do
|
70
|
+
memory.forget(fact).should == content
|
71
|
+
end
|
72
|
+
|
50
73
|
it %{raises an error when given an unknown fact} do
|
51
74
|
lambda {memory.forget("unknown fact")}.should raise_error
|
52
75
|
end
|
data/spec/factis_spec.rb
CHANGED
@@ -7,6 +7,10 @@ describe Factis do
|
|
7
7
|
let(:fact) {"Joe"}
|
8
8
|
let(:content) {"likes pie"}
|
9
9
|
|
10
|
+
before(:each) do
|
11
|
+
Factis::Memory.reset!
|
12
|
+
end
|
13
|
+
|
10
14
|
describe %{#clear_all_facts!} do
|
11
15
|
it %{resets the Factis memory core} do
|
12
16
|
Factis::Memory.should_receive(:reset!)
|
@@ -15,10 +19,13 @@ describe Factis do
|
|
15
19
|
end
|
16
20
|
|
17
21
|
describe %{#all_facts} do
|
18
|
-
it %{returns the
|
22
|
+
it %{returns the entire fact hash} do
|
19
23
|
facts = {fact => content}
|
20
24
|
Factis::Memory.should_receive(:all_facts).and_return(facts)
|
21
|
-
factis.all_facts.
|
25
|
+
factis.all_facts.tap do |all_facts|
|
26
|
+
all_facts.should be_a(Hash)
|
27
|
+
all_facts.should == facts
|
28
|
+
end
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
@@ -27,12 +34,30 @@ describe Factis do
|
|
27
34
|
Factis::Memory.should_receive(:memorize).with(fact, content).and_call_original
|
28
35
|
factis.memorize_fact(fact, content)
|
29
36
|
end
|
37
|
+
|
38
|
+
it %{returns the content of the provided fact} do
|
39
|
+
factis.memorize_fact(fact, content).should == content
|
40
|
+
end
|
41
|
+
|
42
|
+
it %{raises an error if the fact is already known} do
|
43
|
+
factis.memorize_fact(fact, content)
|
44
|
+
lambda {factis.memorize_fact(fact, 'Something else')}.should raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe %{#indifferently_memorize_fact} do
|
49
|
+
it %{stores the provided fact, even if it's already known} do
|
50
|
+
new_content = 'Something else'
|
51
|
+
factis.memorize_fact(fact, content)
|
52
|
+
lambda {factis.indifferently_memorize_fact(fact, new_content)}.should_not raise_error
|
53
|
+
factis.recall_fact(fact).should == new_content
|
54
|
+
end
|
30
55
|
end
|
31
56
|
|
32
57
|
describe %{#recall_fact} do
|
33
58
|
before(:each) {factis.memorize_fact(fact, content)}
|
34
59
|
|
35
|
-
it %{
|
60
|
+
it %{returns the fact content if known} do
|
36
61
|
Factis::Memory.should_receive(:recall).with(fact).and_call_original
|
37
62
|
factis.recall_fact(fact).should == content
|
38
63
|
end
|
@@ -51,6 +76,10 @@ describe Factis do
|
|
51
76
|
factis.all_facts.keys.include?(fact).should_not be_true
|
52
77
|
end
|
53
78
|
|
79
|
+
it %{returns the content of the fact} do
|
80
|
+
factis.forget_fact(fact).should == content
|
81
|
+
end
|
82
|
+
|
54
83
|
it %{raises an error if the fact is not known} do
|
55
84
|
lambda {factis.forget_fact(:unknown)}.should raise_error
|
56
85
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|