trip_phrase 0.0.1

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,10 @@
1
+ require 'trip_phrase/word_type'
2
+ require 'trip_phrase/phrase_generator'
3
+
4
+ module TripPhrase
5
+
6
+ def self.generate(salt, password)
7
+ TripPhrase::PhraseGenerator.new(salt, password).phrase
8
+ end
9
+
10
+ end
@@ -0,0 +1,43 @@
1
+ require 'digest/md5'
2
+
3
+ module TripPhrase
4
+
5
+ class PhraseGenerator
6
+ attr_reader :salt, :password
7
+
8
+ TEMPLATES = [
9
+ %w(verb article adj noun),
10
+ %w(article adj adj noun),
11
+ %w(article adv adj noun),
12
+ %w(adv verb article noun)
13
+ ]
14
+
15
+ def initialize(salt, password)
16
+ @salt = salt
17
+ @password = password
18
+ end
19
+
20
+ def next_key
21
+ @key ||= Digest::MD5.hexdigest(salt + password)
22
+ @key = @key[-1] + @key[0..-2]
23
+ @key.hex
24
+ end
25
+
26
+ def template
27
+ TEMPLATES[next_key % 4]
28
+ end
29
+
30
+ def phrase
31
+ template.map { |type|
32
+ send(type)[next_key]
33
+ }.join(' ')
34
+ end
35
+
36
+ [:adj, :adv, :article, :verb, :noun].each do |type|
37
+ define_method(type) do
38
+ instance_variable_set("@#{type}", WordType.new(type))
39
+ end
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,3 @@
1
+ module TripPhrase
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,41 @@
1
+ module TripPhrase
2
+
3
+ class WordType
4
+ attr_reader :type
5
+
6
+ def initialize(type)
7
+ @type = type
8
+ end
9
+
10
+ def words
11
+ @words ||= words_from_file
12
+ end
13
+
14
+ def length
15
+ @length ||= words.length
16
+ end
17
+
18
+ def [](index)
19
+ words[index % length]
20
+ end
21
+
22
+ protected
23
+
24
+ def words_from_file
25
+ words = []
26
+ IO.foreach(file_path) do |word|
27
+ word.strip!
28
+ if word =~ /^[a-z]+$/ and word.length > 1
29
+ words << word
30
+ end
31
+ end
32
+ words
33
+ end
34
+
35
+ def file_path
36
+ File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'data', "#{type}.txt")
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/trip_phrase/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Norbert Wojtowicz"]
6
+ gem.email = ["wojtowicz.norbert@gmail.com"]
7
+ gem.description = "A more memorable, fun, and useful variant of the tripcode."
8
+ gem.summary = gem.description
9
+ gem.homepage = "https://github.com/pithyless/trip_phrase"
10
+ gem.license = "UNLICENSE"
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = "trip_phrase"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = TripPhrase::VERSION
18
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trip_phrase
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Norbert Wojtowicz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-24 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A more memorable, fun, and useful variant of the tripcode.
15
+ email:
16
+ - wojtowicz.norbert@gmail.com
17
+ executables:
18
+ - trip_phrase
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - README.md
25
+ - Rakefile
26
+ - UNLICENSE
27
+ - bin/trip_phrase
28
+ - data/adj.txt
29
+ - data/adv.txt
30
+ - data/article.txt
31
+ - data/noun.txt
32
+ - data/verb.txt
33
+ - lib/trip_phrase.rb
34
+ - lib/trip_phrase/phrase_generator.rb
35
+ - lib/trip_phrase/version.rb
36
+ - lib/trip_phrase/word_type.rb
37
+ - trip_phrase.gemspec
38
+ homepage: https://github.com/pithyless/trip_phrase
39
+ licenses:
40
+ - UNLICENSE
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 1.8.19
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: A more memorable, fun, and useful variant of the tripcode.
63
+ test_files: []