nameit 0.1.0

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,58 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require "nameit/version"
4
+ require "securerandom"
5
+
6
+ class Nameit
7
+
8
+ class Random
9
+
10
+ def rand(n = 0)
11
+ SecureRandom.random_number(n)
12
+ end
13
+ end
14
+
15
+ def initialize(options = {})
16
+ @random = options.fetch(:random, ::Nameit::Random.new)
17
+ @number = options.fetch(:number, false)
18
+ @max_number = [options.fetch(:max_number, 999), 1].max
19
+ end
20
+
21
+ def generate
22
+ name = "#{random_adjective}-#{random_noun}"
23
+ name += "-#{random_number}" if number
24
+ name
25
+ end
26
+
27
+ def self.generate(options = {})
28
+ new(options).generate
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :max_number, :number, :random
34
+
35
+ def adjectives
36
+ @adjectives ||= IO.readlines(data_file("nameit-adjectives.txt"))
37
+ end
38
+
39
+ def data_file(name)
40
+ File.join(File.dirname(__FILE__), "..", "data", name)
41
+ end
42
+
43
+ def nouns
44
+ @nouns ||= IO.readlines(data_file("nameit-nouns.txt"))
45
+ end
46
+
47
+ def random_adjective
48
+ adjectives[random.rand(adjectives.size)].chomp
49
+ end
50
+
51
+ def random_noun
52
+ nouns[random.rand(nouns.size)].chomp
53
+ end
54
+
55
+ def random_number
56
+ "%0#{(Math.log10(max_number) + 1).to_i}d" % random.rand(max_number)
57
+ end
58
+ end
@@ -0,0 +1,6 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ class Nameit
4
+
5
+ VERSION = "0.1.0"
6
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nameit/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nameit"
8
+ spec.version = Nameit::VERSION
9
+ spec.authors = ["Fletcher Nichol"]
10
+ spec.email = ["fnichol@nichol.ca"]
11
+ spec.description = %q{Nameit is a small zero-dependency library and tool that helps you generate a random name for a project, database, session--you decide. You get glorious - style names such as "pushy-clock" and "lovely-ducks" or ask for a random number on the end to give you names like "numberless-cactus-123" and "superb-shoes-915".}
12
+ spec.summary = %q{Give it a name, why dont'cha?}
13
+ spec.homepage = "http://fnichol.github.com/nameit"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "simplecov"
25
+ end
@@ -0,0 +1,89 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ if ENV['SIMPLECOV']
4
+ require 'simplecov'
5
+ SimpleCov.adapters.define 'gem' do
6
+ command_name 'Specs'
7
+
8
+ add_filter '.gem/'
9
+ add_filter '/spec/'
10
+
11
+ add_group 'Binaries', '/bin/'
12
+ add_group 'Libraries', '/lib/'
13
+ end
14
+ SimpleCov.start 'gem'
15
+ end
16
+
17
+ require 'minitest/autorun'
18
+ require 'nameit'
19
+
20
+ class UnRandom
21
+
22
+ def self.rand(x = 0)
23
+ @values.nil? ? 2 : @values.next
24
+ end
25
+
26
+ def self.values=(array)
27
+ @values = Array(array).cycle
28
+ end
29
+ end
30
+
31
+ describe Nameit do
32
+
33
+ describe "#generate" do
34
+
35
+ before { UnRandom.values = [55, 55, 105, 105] }
36
+
37
+ it "returns random <adjective>-<noun> names" do
38
+ nameit = Nameit.new(:random => UnRandom)
39
+ nameit.generate.must_equal "ambiguous-ball"
40
+ nameit.generate.must_equal "blue-book"
41
+ end
42
+
43
+ it "returns random name with random number" do
44
+ nameit = Nameit.new(:random => UnRandom, :number => true)
45
+ nameit.stub(:rand, 67) do
46
+ nameit.generate.must_equal "ambiguous-ball-105"
47
+ end
48
+ end
49
+
50
+ it "return random name with a smaller zero-padded number" do
51
+ UnRandom.values = [55, 55, 2]
52
+ nameit = Nameit.new(
53
+ :random => UnRandom, :number => true, :max_number => 99)
54
+ nameit.generate.must_equal "ambiguous-ball-02"
55
+ end
56
+
57
+ it "uses SecureRandom.random_number by default" do
58
+ SecureRandom.stub :random_number, 0 do
59
+ Nameit.new.generate.must_equal "aback-able"
60
+ end
61
+ end
62
+ end
63
+
64
+ describe ".generate" do
65
+
66
+ before { UnRandom.values = [2, 2, 3, 3] }
67
+
68
+ it "returns random <adjective>-<noun> names" do
69
+ Nameit.generate(:random => UnRandom).must_equal "abandoned-achieve"
70
+ Nameit.generate(:random => UnRandom).must_equal "abashed-achiever"
71
+ end
72
+
73
+ it "returns random name with random number" do
74
+ Nameit.generate(:random => UnRandom, :number => true).
75
+ must_equal "abandoned-achieve-003"
76
+ end
77
+
78
+ it "return random name with a smaller zero-padded number" do
79
+ Nameit.generate(:random => UnRandom, :number => true, :max_number => 99).
80
+ must_equal "abandoned-achieve-03"
81
+ end
82
+
83
+ it "uses SecureRandom.random_number by default" do
84
+ SecureRandom.stub :random_number, 0 do
85
+ Nameit.generate.must_equal "aback-able"
86
+ end
87
+ end
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nameit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Fletcher Nichol
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Nameit is a small zero-dependency library and tool that helps you generate
70
+ a random name for a project, database, session--you decide. You get glorious - style
71
+ names such as "pushy-clock" and "lovely-ducks" or ask for a random number on the
72
+ end to give you names like "numberless-cactus-123" and "superb-shoes-915".
73
+ email:
74
+ - fnichol@nichol.ca
75
+ executables:
76
+ - nameit
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - .gitignore
81
+ - .travis.yml
82
+ - CHANGELOG.md
83
+ - Gemfile
84
+ - Guardfile
85
+ - LICENSE.txt
86
+ - README.md
87
+ - Rakefile
88
+ - bin/nameit
89
+ - data/nameit-adjectives.txt
90
+ - data/nameit-nouns.txt
91
+ - lib/nameit.rb
92
+ - lib/nameit/version.rb
93
+ - nameit.gemspec
94
+ - spec/nameit_spec.rb
95
+ homepage: http://fnichol.github.com/nameit
96
+ licenses:
97
+ - MIT
98
+ metadata: {}
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubyforge_project:
115
+ rubygems_version: 2.0.14
116
+ signing_key:
117
+ specification_version: 4
118
+ summary: Give it a name, why dont'cha?
119
+ test_files:
120
+ - spec/nameit_spec.rb