markov_uuid 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MarkovUuid
2
-
2
+ # based on the Python version by Gary Burd: http://gary.burd.info/2003/11/markov-chain-generator.html
3
+ # Released into the public domain, please keep this notice intact
4
+ # (c) InVisible GmbH
5
+ # http://www.invisible.ch
6
+ #
3
7
  TODO: Write a gem description
4
8
 
5
9
  ## Installation
@@ -0,0 +1,53 @@
1
+ module MarkovUuid
2
+ class Chain < Hash
3
+ SEPARATOR = "#-#-"
4
+ attr_reader :words
5
+
6
+ class << self
7
+ def from_file(f)
8
+ new(strip_punctuation File.read(f))
9
+ end
10
+
11
+ def strip_punctuation l
12
+ l.gsub(/[[:punct:]]/," ").gsub!(' ', ' ').split " "
13
+ end
14
+ end
15
+
16
+ def initialize words
17
+ @words = words
18
+ end
19
+
20
+ def new_key(key, word)
21
+ return SEPARATOR if word == "\n"
22
+
23
+ word or key
24
+ end
25
+
26
+ def add
27
+ key = SEPARATOR
28
+
29
+ words.each do |word|
30
+ (self[key] ||= []) << word
31
+
32
+ key = new_key(key, word)
33
+ end
34
+ end
35
+
36
+ def to_words length = 100
37
+ key = keys.sample
38
+ word = ""
39
+
40
+ result = length.times.map do
41
+ word = self[key].sample rescue nil
42
+ key = new_key key, word
43
+ word
44
+ end.compact
45
+
46
+ format result
47
+ end
48
+
49
+ def format words, i=32
50
+ words.join("-")[0..i.to_i].gsub(/\A\w+-/,'').gsub(/-$/,"").gsub(/-\w+$/,"")
51
+ end
52
+ end
53
+ end
@@ -2,36 +2,17 @@ require "yaml"
2
2
  require "fileutils"
3
3
  module MarkovUuid
4
4
  class Storage
5
- include KeySelector
6
- attr_accessor :data
7
-
8
- def initialize(data = nil )
9
- @data = data if data.class == Hash
10
- @data ||= Hash.new
11
- end
12
-
13
- def add words
14
- words.add_to @data
5
+ def initialize filename
6
+ @filename = filename
15
7
  end
16
8
 
17
- def to_words length = 100
18
- key = Markov::SEPARATOR
19
- word = ""
20
-
21
- result = length.times.map do
22
- word = @data[key].sample rescue nil
23
- key = new_key key, word
24
- word
25
- end.compact
26
-
27
- Markov.new result
28
- end
9
+ attr_accessor :data, :filename
29
10
 
30
- def save filename
11
+ def save
31
12
  File.open(filename, "w"){|f| YAML.dump(@data, f) }
32
13
  end
33
14
 
34
- def load filename
15
+ def load
35
16
  FileUtils.touch filename
36
17
  File.open(filename) do |f|
37
18
  @data = YAML.load f
data/lib/markov_uuid.rb CHANGED
@@ -1,8 +1,6 @@
1
- require_relative './markov_uuid/key_selector'
1
+ require_relative './markov_uuid/chain'
2
2
  require_relative './markov_uuid/storage'
3
- require_relative './markov_uuid/markov'
4
-
5
3
 
6
4
  module MarkovUuid
7
- VERSION = "0.0.3"
5
+ VERSION = "0.0.5"
8
6
  end
data/markov_uuid.gemspec CHANGED
@@ -13,6 +13,9 @@ Gem::Specification.new do |gem|
13
13
  that are more natural to convey to other people. E.g. over the phone, etc.}
14
14
  gem.homepage = "http://github.com/markburns/markov_uuid"
15
15
 
16
+ gem.add_development_dependency 'rspec'
17
+ gem.add_development_dependency 'debugger'
18
+
16
19
  gem.files = `git ls-files`.split($/)
17
20
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
21
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
@@ -0,0 +1,52 @@
1
+ #encoding: utf-8
2
+ require File.expand_path('spec/spec_helper')
3
+ require './lib/markov_uuid'
4
+
5
+ describe MarkovUuid::Chain do
6
+ let(:file) do
7
+ <<-CONTENTS.gsub(/^\s*/, "")
8
+ CHAPTER I. Down the Rabbit-Hole
9
+
10
+ Alice was beginning to get very tired of sitting by her sister on the
11
+ bank, and of having nothing to do: once or twice she had peeped into the
12
+ book her sister was reading, but it had no pictures or conversations in
13
+ it, 'and what is the use of a book,' thought Alice 'without pictures or
14
+ conversation?'
15
+ CONTENTS
16
+ end
17
+
18
+
19
+ specify do
20
+ s = "これは Some text with, random -?! Punctuation in"
21
+ MarkovUuid::Chain.strip_punctuation(s).should == %w(これは Some text with random Punctuation in)
22
+ end
23
+
24
+ let(:words) do
25
+ ["CHAPTER", "I", "Down", "the", "Rabbit", "Hole", "Alice", "was",
26
+ "beginning", "to", "get", "very", "tired", "of", "sitting", "by", "her",
27
+ "sister", "on", "the", "bank", "and", "of", "having", "nothing", "to",
28
+ "do", "once", "or", "twice", "she", "had", "peeped", "into", "the",
29
+ "book", "her", "sister", "was", "reading", "but", "it", "had", "no",
30
+ "pictures", "or", "conversations", "in", "it", "and", "what", "is",
31
+ "the", "use", "of", "a", "book", "thought", "Alice", "without",
32
+ "pictures", "or", "conversation"]
33
+ end
34
+
35
+ specify do
36
+ MarkovUuid::Chain.strip_punctuation(file).should == words
37
+ end
38
+
39
+ context 'from file' do
40
+ before do
41
+ File.stub(:read).and_return file
42
+ end
43
+
44
+ specify do
45
+ chain = MarkovUuid::Chain.from_file ''
46
+ chain.to_words.split("-").each do |word|
47
+ words.should include word
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ 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.3
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,39 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-10-02 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: debugger
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
14
46
  description: People friendly readable UUIDs
15
47
  email:
16
48
  - markthedeveloper@gmail.com
@@ -20,6 +52,7 @@ extensions: []
20
52
  extra_rdoc_files: []
21
53
  files:
22
54
  - .gitignore
55
+ - .rspec
23
56
  - Gemfile
24
57
  - LICENSE.txt
25
58
  - README.md
@@ -30,11 +63,12 @@ files:
30
63
  - data/pride_and_prejudice_small.txt
31
64
  - data/shakespeare_short.txt
32
65
  - lib/markov_uuid.rb
33
- - lib/markov_uuid/key_selector.rb
34
- - lib/markov_uuid/markov.rb
66
+ - lib/markov_uuid/chain.rb
35
67
  - lib/markov_uuid/storage.rb
36
68
  - markov.yaml
37
69
  - markov_uuid.gemspec
70
+ - spec/markov_spec.rb
71
+ - spec/spec_helper.rb
38
72
  - storage.rb
39
73
  homepage: http://github.com/markburns/markov_uuid
40
74
  licenses: []
@@ -61,5 +95,7 @@ signing_key:
61
95
  specification_version: 3
62
96
  summary: Easily generate random English-like UUIDs (or any other language) that are
63
97
  more natural to convey to other people. E.g. over the phone, etc.
64
- test_files: []
98
+ test_files:
99
+ - spec/markov_spec.rb
100
+ - spec/spec_helper.rb
65
101
  has_rdoc:
@@ -1,9 +0,0 @@
1
- module KeySelector
2
- SEPARATOR = "#-#-"
3
-
4
- def new_key(key, word)
5
- return SEPARATOR if word == "\n"
6
-
7
- word or key
8
- end
9
- end
@@ -1,45 +0,0 @@
1
- module MarkovUuid
2
- class Markov
3
- include KeySelector
4
- SEPARATOR = "#-#-"
5
-
6
- def to_s i=32
7
- @words.join("-")[0..i.to_i].gsub(/\A\w+-/,'').gsub(/-$/,"").gsub(/-\w+$/,"")
8
- end
9
-
10
- def initialize words
11
- @words = words
12
- end
13
-
14
- def add_to markov_data
15
- key = SEPARATOR
16
-
17
- @words.each do |word|
18
- (markov_data[key] ||= []) << word
19
-
20
- key = new_key(key, word)
21
- end
22
- end
23
-
24
- private
25
-
26
- class << self
27
- def from_file( f )
28
- new lines(f).map { |l| from_string l }.flatten
29
- end
30
-
31
- private
32
-
33
- def from_string l
34
- l.gsub(/[^a-z ]/i,'').split " "
35
- end
36
-
37
- def lines f
38
- content = File.read f
39
- c = content.length
40
- r = rand c
41
- content[r-c .. r+c].gsub(/\A\s\w+/,"").gsub(/\w+\s\z/,"").downcase.split "\n"
42
- end
43
- end
44
- end
45
- end