spicy-proton 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49b487f3156db9335ce1f187af57d5e8877455a3
4
- data.tar.gz: c25cc5744f2b6e8c985fe28001299d7452d7ddcd
3
+ metadata.gz: 28481edad03c822b978caa8f1555f6a7ecb93083
4
+ data.tar.gz: 50ee9d4827eb08a40798078fb36940b7ba567995
5
5
  SHA512:
6
- metadata.gz: 5959e524ba6b0ab94cf5abff8b73770c4b6ea11730593c6fbf7443a658e846f6bc7d8bb8e2403596207f40852b8c7122415e469e223c5ce495417936403b2cc1
7
- data.tar.gz: 44431d50963f269729df64554a208b1ab147c58f4f98d8aeb29a42243629237af3c0fcf8649f0d5a66a964240ac1c6f751beebaeaaaa63a10e684d76c9399b4c
6
+ metadata.gz: fdb6e19b9b443858792846853693f1d7ab3e3b2bd3a43e8d131e92857d640cceddd01121393e4cc00f1aef75e24b5f242a51938a33f4605261ca5270c466e447
7
+ data.tar.gz: 491b27d08194a110a0bd1840cc51533f3fabf3c0f0037ab5ba70d006d64ba7a019579319cd6c986940bc7f91003ce776afeb85ff5cdaeb7111bc72c51ad0e281
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Spicy::Proton
2
+
2
3
  Generate a random English adjective-noun word pair. Works with Ruby 1.9.x and newer.
3
4
 
4
5
  [![Gem Version](https://badge.fury.io/rb/spicy-proton.svg)](http://rubygems.org/gems/spicy-proton)
@@ -26,13 +27,18 @@ Spicy::Proton.adjective # => "extreme"
26
27
  Spicy::Proton.noun # => "loan"
27
28
  Spicy::Proton.pair # => "opportune-spacesuit"
28
29
  Spicy::Proton.pair(':') # => "hip:squash"
30
+ Spicy::Proton.adverb # => "energetically"
31
+ Spicy::Proton.verb # => "refrained"
29
32
  Spicy::Proton.format('%a/%a/%n') # => "dapper/festive/fedora"
33
+ Spicy::Proton.format('%b %v') # => "artfully stained"
30
34
 
31
35
  # With length constraints.
32
36
  Spicy::Proton.adjective(max: 5) # => "dank"
33
37
  Spicy::Proton.noun(min: 10) # => "interpolation"
34
38
  Spicy::Proton.adjective(length: 8) # => "medieval"
35
39
  Spicy::Proton.noun(min: 5, max: 7) # => "dolphin"
40
+ Spicy::Proton.adverb(min: 0) # => "prophetically"
41
+ Spicy::Proton.verb(max: 100) # => "sparkles"
36
42
  ```
37
43
 
38
44
  When generating multiple specimens, instance methods are faster. The instance keeps the word corpus in memory. The instance methods are the same as their class method counterparts.
@@ -40,23 +46,31 @@ When generating multiple specimens, instance methods are faster. The instance ke
40
46
  ```ruby
41
47
  require 'spicy-proton'
42
48
 
43
- generator = Spicy::Proton.new
49
+ gen = Spicy::Proton.new
44
50
  1000.times do
45
- generator.adjective
46
- generator.noun(min: 7)
47
- generator.pair
48
- generator.pair('.')
49
- generator.format('%a-%n')
51
+ gen.adjective
52
+ gen.noun(min: 7)
53
+ gen.pair
54
+ gen.pair('.')
55
+ gen.adverb(length: 6)
56
+ gen.verb(max: 5)
57
+ gen.format('The %a %n %b %v the %n.')
50
58
  end
51
59
  ```
52
60
 
53
- Instances give you access to the raw word lists as well:
61
+ Instances also provide raw word lists in length order:
54
62
 
55
63
  ```ruby
56
- generator.adjectives # => ["dreadful", "methodist", "necessary", "tough", ...]
57
- generator.nouns # => ["rustling", "fiance", "infield", "chatter", ...]
64
+ gen.adjectives # => ["aft", "apt", "bad", "big", ...]
65
+ gen.nouns # => ["ad", "ax, "ox", "pi", ...]
66
+ gen.adverbs # => ["no", "aft", "ago", "all", ...]
67
+ gen.verbs # => ["am", "be", "do", "go", ...]
58
68
  ```
59
69
 
70
+ ## Credits
71
+
72
+ Inspired by [btford/adj-noun](https://github.com/btford/adj-noun). Thanks to [NLTK](http://www.nltk.org/) for the word corpus.
73
+
60
74
  ## License
61
75
 
62
76
  Copyright © 2017 Chris Schmich
@@ -0,0 +1,40 @@
1
+ module Spicy
2
+ module Corpus
3
+ def adjective(*args)
4
+ generate(:adjectives, *args)
5
+ end
6
+
7
+ def noun(*args)
8
+ generate(:nouns, *args)
9
+ end
10
+
11
+ def verb(*args)
12
+ generate(:verbs, *args)
13
+ end
14
+
15
+ def adverb(*args)
16
+ generate(:adverbs, *args)
17
+ end
18
+
19
+ def pair(separator = '-')
20
+ "#{adjective}#{separator}#{noun}"
21
+ end
22
+
23
+ def format(format)
24
+ format.gsub(/%([anbv%])/) do
25
+ case $1
26
+ when 'a'
27
+ adjective
28
+ when 'n'
29
+ noun
30
+ when 'b'
31
+ adverb
32
+ when 'v'
33
+ verb
34
+ when '%'
35
+ '%'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
Binary file
Binary file
@@ -1,22 +1,20 @@
1
- require 'yaml'
2
1
  require 'seek'
3
2
  require 'header'
3
+ require 'corpus'
4
4
 
5
5
  module Spicy
6
6
  end
7
7
 
8
8
  module Spicy::Disk
9
9
  module Files
10
+ @@files = {}
11
+
10
12
  def self.dir
11
13
  @@dir ||= File.join(File.dirname(__FILE__), 'corpus')
12
14
  end
13
15
 
14
- def self.adjectives
15
- @@adjectives ||= File.join(dir, 'adjectives-fixed.bin')
16
- end
17
-
18
- def self.nouns
19
- @@nouns ||= File.join(dir, 'nouns-fixed.bin')
16
+ def self.corpus(type)
17
+ @@files[type] ||= File.join(dir, "#{type}-fixed.bin")
20
18
  end
21
19
  end
22
20
 
@@ -25,11 +23,9 @@ module Spicy::Disk
25
23
 
26
24
  def initialize(file_name)
27
25
  @file = File.open(file_name, 'rb')
28
-
29
26
  @cumulative = Spicy::Header.cumulative(@file)
30
27
  @min = @cumulative.keys.min
31
28
  @max = @cumulative.keys.max
32
-
33
29
  @origin = @file.pos
34
30
  end
35
31
 
@@ -46,6 +42,8 @@ module Spicy::Disk
46
42
  end
47
43
 
48
44
  class Corpus
45
+ include Spicy::Corpus
46
+
49
47
  private_class_method :new
50
48
 
51
49
  def self.use
@@ -65,19 +63,11 @@ module Spicy::Disk
65
63
  @lists.values.each(&:close)
66
64
  end
67
65
 
68
- def adjective(*args)
69
- generate(:adjectives, *args)
70
- end
71
-
72
- def noun(*args)
73
- generate(:nouns, *args)
74
- end
75
-
76
66
  private
77
67
 
78
68
  def generate(type, *args)
79
69
  @lists[type] ||= begin
80
- WordList.new(Files.send(type))
70
+ WordList.new(Files.corpus(type))
81
71
  end
82
72
  @lists[type].word(*args)
83
73
  end
@@ -1,22 +1,20 @@
1
- require 'yaml'
2
1
  require 'seek'
3
2
  require 'header'
3
+ require 'corpus'
4
4
 
5
5
  module Spicy
6
6
  end
7
7
 
8
8
  module Spicy::Memory
9
9
  module Files
10
+ @@files = {}
11
+
10
12
  def self.dir
11
13
  @@dir ||= File.join(File.dirname(__FILE__), 'corpus')
12
14
  end
13
15
 
14
- def self.adjectives
15
- @@adjectives ||= File.join(dir, 'adjectives.bin')
16
- end
17
-
18
- def self.nouns
19
- @@nouns ||= File.join(dir, 'nouns.bin')
16
+ def self.corpus(type)
17
+ @@files[type] ||= File.join(dir, "#{type}.bin")
20
18
  end
21
19
  end
22
20
 
@@ -37,25 +35,45 @@ module Spicy::Memory
37
35
  @words[index]
38
36
  end
39
37
  end
38
+
39
+ def words
40
+ @words
41
+ end
40
42
  end
41
43
 
42
44
  class Corpus
45
+ include Spicy::Corpus
46
+
43
47
  def initialize
44
- dir = File.dirname(__FILE__)
45
- @adjectives = WordList.new(Files.adjectives)
46
- @nouns = WordList.new(Files.nouns)
48
+ @lists = {}
49
+ end
50
+
51
+ def adjectives
52
+ list(:adjectives).words
53
+ end
54
+
55
+ def nouns
56
+ list(:nouns).words
47
57
  end
48
58
 
49
- def adjective(*args)
50
- @adjectives.word(*args)
59
+ def adverbs
60
+ list(:adverbs).words
51
61
  end
52
62
 
53
- def noun(*args)
54
- @nouns.word(*args)
63
+ def verbs
64
+ list(:verbs).words
55
65
  end
56
66
 
57
- def pair(separator = '-')
58
- "#{self.adjective}#{separator}#{self.noun}"
67
+ private
68
+
69
+ def generate(type, *args)
70
+ list(type).word(*args)
71
+ end
72
+
73
+ def list(type)
74
+ @lists[type] ||= begin
75
+ WordList.new(Files.corpus(type))
76
+ end
59
77
  end
60
78
  end
61
79
  end
@@ -6,53 +6,20 @@ module Spicy
6
6
  class Proton
7
7
  extend Forwardable
8
8
 
9
- def initialize
10
- @corpus = Memory::Corpus.new
11
- end
12
-
13
- def self.adjective(*args)
14
- Disk::Corpus.use do |c|
15
- c.adjective(*args)
16
- end
17
- end
18
-
19
- def self.noun(*args)
20
- Disk::Corpus.use do |c|
21
- c.noun(*args)
22
- end
23
- end
24
-
25
- def self.pair(separator = '-')
26
- Disk::Corpus.use do |c|
27
- "#{c.adjective}#{separator}#{c.noun}"
28
- end
29
- end
30
-
31
- def self.format(format)
32
- Disk::Corpus.use do |c|
33
- self.format_with(c, format)
9
+ class << self
10
+ [:adjective, :noun, :adverb, :verb, :pair, :format].each do |method|
11
+ define_method(method) do |*args, &block|
12
+ Disk::Corpus.use do |c|
13
+ c.send(method, *args, &block)
14
+ end
15
+ end
34
16
  end
35
17
  end
36
18
 
37
- def format(format)
38
- self.class.format_with(self, format)
19
+ def initialize
20
+ @corpus = Memory::Corpus.new
39
21
  end
40
22
 
41
- def_delegators :@corpus, :adjective, :noun, :pair, :adjectives, :nouns
42
-
43
- private
44
-
45
- def self.format_with(source, format)
46
- format.gsub(/%([an%])/) do
47
- case $1
48
- when 'a'
49
- source.adjective
50
- when 'n'
51
- source.noun
52
- when '%'
53
- '%'
54
- end
55
- end
56
- end
23
+ def_delegators :@corpus, :adjective, :noun, :adverb, :verb, :adjectives, :nouns, :adverbs, :verbs, :pair, :format
57
24
  end
58
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spicy-proton
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Schmich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -46,10 +46,15 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - LICENSE
48
48
  - README.md
49
+ - lib/corpus.rb
49
50
  - lib/corpus/adjectives-fixed.bin
50
51
  - lib/corpus/adjectives.bin
52
+ - lib/corpus/adverbs-fixed.bin
53
+ - lib/corpus/adverbs.bin
51
54
  - lib/corpus/nouns-fixed.bin
52
55
  - lib/corpus/nouns.bin
56
+ - lib/corpus/verbs-fixed.bin
57
+ - lib/corpus/verbs.bin
53
58
  - lib/disk-corpus.rb
54
59
  - lib/header.rb
55
60
  - lib/memory-corpus.rb
@@ -75,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
80
  version: '0'
76
81
  requirements: []
77
82
  rubyforge_project:
78
- rubygems_version: 2.5.2
83
+ rubygems_version: 2.6.8
79
84
  signing_key:
80
85
  specification_version: 4
81
86
  summary: Generate a random English adjective-noun word pair.