markov_uuid 0.0.5 → 0.0.6
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/lib/markov_uuid.rb +1 -1
- data/lib/markov_uuid/chain.rb +25 -15
- data/lib/markov_uuid/storage.rb +39 -7
- data/spec/markov_spec.rb +10 -10
- data/spec/storage_spec.rb +48 -0
- metadata +4 -2
data/lib/markov_uuid.rb
CHANGED
data/lib/markov_uuid/chain.rb
CHANGED
@@ -4,26 +4,24 @@ module MarkovUuid
|
|
4
4
|
attr_reader :words
|
5
5
|
|
6
6
|
class << self
|
7
|
-
def
|
8
|
-
|
7
|
+
def from_string string
|
8
|
+
from_word_list(strip_punctuation string)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def from_word_list words
|
12
|
+
new.tap { |i| i.add words }
|
13
13
|
end
|
14
|
-
end
|
15
14
|
|
16
|
-
|
17
|
-
|
15
|
+
def strip_punctuation l
|
16
|
+
l.gsub(/[[:punct:]]/," ").gsub(' ', ' ').split " "
|
17
|
+
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
word or key
|
20
|
+
def initialize h={}
|
21
|
+
replace h
|
24
22
|
end
|
25
23
|
|
26
|
-
def add
|
24
|
+
def add words
|
27
25
|
key = SEPARATOR
|
28
26
|
|
29
27
|
words.each do |word|
|
@@ -33,7 +31,16 @@ module MarkovUuid
|
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
|
-
def
|
34
|
+
def new_key(key, word)
|
35
|
+
return SEPARATOR if word == "\n"
|
36
|
+
|
37
|
+
word or key
|
38
|
+
end
|
39
|
+
|
40
|
+
#note these are not by any means guaranteed to be unique
|
41
|
+
#dependent on uuid length and corpus size
|
42
|
+
#maybe maintain uniqueness elsewhere by regenerating unless unique
|
43
|
+
def uuid length = 100
|
37
44
|
key = keys.sample
|
38
45
|
word = ""
|
39
46
|
|
@@ -46,8 +53,11 @@ module MarkovUuid
|
|
46
53
|
format result
|
47
54
|
end
|
48
55
|
|
49
|
-
def format
|
50
|
-
|
56
|
+
def format result, i=32
|
57
|
+
result.join("-")[0..i.to_i].
|
58
|
+
gsub(/\A\w+-/ , "").
|
59
|
+
gsub(/-$/ , "").
|
60
|
+
gsub(/-\w+$/ , "")
|
51
61
|
end
|
52
62
|
end
|
53
63
|
end
|
data/lib/markov_uuid/storage.rb
CHANGED
@@ -2,21 +2,53 @@ require "yaml"
|
|
2
2
|
require "fileutils"
|
3
3
|
module MarkovUuid
|
4
4
|
class Storage
|
5
|
-
|
6
|
-
|
5
|
+
attr_accessor :data, :cache_file, :input_file
|
6
|
+
|
7
|
+
#note these are not by any means guaranteed to be unique
|
8
|
+
#dependent on uuid length and corpus size
|
9
|
+
#maybe maintain uniqueness elsewhere by regenerating unless unique
|
10
|
+
def uuid
|
11
|
+
chain.uuid
|
12
|
+
end
|
13
|
+
|
14
|
+
def chain
|
15
|
+
@chain ||= MarkovUuid::Chain.new data
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize input_file, cache_file
|
19
|
+
@input_file, @cache_file = input_file, cache_file
|
20
|
+
|
21
|
+
preload_data
|
22
|
+
end
|
23
|
+
|
24
|
+
#for testing
|
25
|
+
def file_klass
|
26
|
+
File
|
7
27
|
end
|
8
28
|
|
9
|
-
|
29
|
+
private
|
10
30
|
|
11
31
|
def save
|
12
|
-
|
32
|
+
file_klass.open(cache_file, "w"){|f| YAML.dump(@data, f) }
|
13
33
|
end
|
14
34
|
|
15
|
-
def
|
16
|
-
|
17
|
-
File.open(filename) do |f|
|
35
|
+
def open
|
36
|
+
file_klass.open(cache_file) do |f|
|
18
37
|
@data = YAML.load f
|
19
38
|
end
|
39
|
+
|
40
|
+
@data
|
41
|
+
end
|
42
|
+
|
43
|
+
def data
|
44
|
+
@data ||= MarkovUuid::Chain.from_string file_klass.read(input_file)
|
45
|
+
end
|
46
|
+
|
47
|
+
def preload_data
|
48
|
+
unless open
|
49
|
+
data
|
50
|
+
save
|
51
|
+
end
|
20
52
|
end
|
21
53
|
end
|
22
54
|
end
|
data/spec/markov_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('spec/spec_helper')
|
|
3
3
|
require './lib/markov_uuid'
|
4
4
|
|
5
5
|
describe MarkovUuid::Chain do
|
6
|
-
let(:
|
6
|
+
let(:string) do
|
7
7
|
<<-CONTENTS.gsub(/^\s*/, "")
|
8
8
|
CHAPTER I. Down the Rabbit-Hole
|
9
9
|
|
@@ -18,7 +18,8 @@ describe MarkovUuid::Chain do
|
|
18
18
|
|
19
19
|
specify do
|
20
20
|
s = "これは Some text with, random -?! Punctuation in"
|
21
|
-
MarkovUuid::Chain.strip_punctuation(s).should ==
|
21
|
+
MarkovUuid::Chain.strip_punctuation(s).should ==
|
22
|
+
%w(これは Some text with random Punctuation in)
|
22
23
|
end
|
23
24
|
|
24
25
|
let(:words) do
|
@@ -33,20 +34,19 @@ describe MarkovUuid::Chain do
|
|
33
34
|
end
|
34
35
|
|
35
36
|
specify do
|
36
|
-
MarkovUuid::Chain.strip_punctuation(
|
37
|
+
MarkovUuid::Chain.strip_punctuation(string).should == words
|
37
38
|
end
|
38
39
|
|
39
40
|
context 'from file' do
|
40
|
-
before do
|
41
|
-
File.stub(:read).and_return file
|
42
|
-
end
|
43
|
-
|
44
41
|
specify do
|
45
|
-
chain = MarkovUuid::Chain.
|
46
|
-
|
42
|
+
chain = MarkovUuid::Chain.from_string string
|
43
|
+
#not sure how to test the randomness right now
|
44
|
+
#so we can just check it's generating a list of words joined by '-'
|
45
|
+
chain.uuid.should =~ /\A(\w+\-)+\w+\z/
|
46
|
+
|
47
|
+
chain.uuid.split("-").each do |word|
|
47
48
|
words.should include word
|
48
49
|
end
|
49
|
-
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path('spec/spec_helper')
|
2
|
+
|
3
|
+
describe MarkovUuid::Storage do
|
4
|
+
let(:file_klass) { mock 'File Class mock', read: file_contents }
|
5
|
+
|
6
|
+
let(:file_contents) { "Down the rabbit hole" }
|
7
|
+
|
8
|
+
before do
|
9
|
+
MarkovUuid::Storage.any_instance.stub(:file_klass).and_return file_klass
|
10
|
+
end
|
11
|
+
|
12
|
+
context "empty cache file" do
|
13
|
+
before do
|
14
|
+
file_klass.stub(:open).and_yield ''
|
15
|
+
YAML.stub(:dump).and_return true
|
16
|
+
end
|
17
|
+
|
18
|
+
specify do
|
19
|
+
storage = MarkovUuid::Storage.new 'input_filename.txt', 'cache_filename.txt'
|
20
|
+
|
21
|
+
storage.chain.should == {
|
22
|
+
MarkovUuid::Chain::SEPARATOR => ["Down"],
|
23
|
+
"Down" => ["the"],
|
24
|
+
"rabbit" => ["hole"],
|
25
|
+
"the" => ["rabbit"]
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context "cached file" do
|
32
|
+
before do
|
33
|
+
yaml = <<-YAML.gsub(/^\s{6}/, "")
|
34
|
+
---
|
35
|
+
a:
|
36
|
+
- b
|
37
|
+
- c
|
38
|
+
YAML
|
39
|
+
|
40
|
+
file_klass.stub(:open).and_yield yaml
|
41
|
+
end
|
42
|
+
|
43
|
+
specify do
|
44
|
+
storage = MarkovUuid::Storage.new 'input_filename', 'cache_filename'
|
45
|
+
storage.chain.should == {"a" => ["b", "c"]}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markov_uuid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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: 2012-10-
|
12
|
+
date: 2012-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- markov_uuid.gemspec
|
70
70
|
- spec/markov_spec.rb
|
71
71
|
- spec/spec_helper.rb
|
72
|
+
- spec/storage_spec.rb
|
72
73
|
- storage.rb
|
73
74
|
homepage: http://github.com/markburns/markov_uuid
|
74
75
|
licenses: []
|
@@ -98,4 +99,5 @@ summary: Easily generate random English-like UUIDs (or any other language) that
|
|
98
99
|
test_files:
|
99
100
|
- spec/markov_spec.rb
|
100
101
|
- spec/spec_helper.rb
|
102
|
+
- spec/storage_spec.rb
|
101
103
|
has_rdoc:
|