genebrand 0.2.0 → 0.2.1

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: df886dded27853f7233c3e615615ae61b24b4409
4
- data.tar.gz: d27b850978b442777f453213b6e9126982d4d001
3
+ metadata.gz: 46d12688311439cc6f87889a4de0fd957a88c0e2
4
+ data.tar.gz: ec085f97ad2dae418f50c73969cd12f18bd083c7
5
5
  SHA512:
6
- metadata.gz: 8751baa6020403a0dfc32677ed3d913f58befc55589989018880265ee307917084a4ae9d42fcca3226596ccdeac15d2bc8d0e755fdea638311232055d9be230b
7
- data.tar.gz: 211b885c81cfbeaabaa7a85bc326d1d256f412ab7a751b96c55723e1e4c8ac332e1dd24bc93b9856a96e5b22265e2e399e66ad86d67802c6be66281d6529e428
6
+ metadata.gz: 9ca1f24cbc8157fd7ba8e0fc0e2f1167eddacebea69ac007ac1bf6f5ce0a4048aee3d9fe1292e84d9386b6ed79bc25fd5d22bde8bc7c6fb36ef609c1d11a7f99
7
+ data.tar.gz: 7ba12960fbc7becf1683314fd90e0855a378aad0abe868df369d882d27db5fc067d904efd7a894663383459224affaeeb8aff789214b20f64f73cbaed72950d1
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
- # Genebrand
2
-
3
1
  [![Code Climate](https://codeclimate.com/github/andreyviktorov/genebrand/badges/gpa.svg)](https://codeclimate.com/github/andreyviktorov/genebrand)
2
+ [![Inline docs](http://inch-ci.org/github/andreyviktorov/genebrand.png)](http://inch-ci.org/github/andreyviktorov/genebrand)
3
+
4
+ # Genebrand
4
5
 
5
- CLI brand names generator
6
+ CLI brand names generator with auto domain availability check
6
7
 
7
8
  ## Installation
8
9
 
@@ -24,21 +25,28 @@ And then execute:
24
25
 
25
26
  And follow instructions
26
27
 
27
- ## Contributing
28
+ ## Features
28
29
 
29
- Bug reports and pull requests are welcome on GitHub at https://github.com/andreyviktorov/genebrand. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
30
+ * Whois
31
+ * Easy to use filters
32
+ * Several word packs
30
33
 
34
+ ## Donate
31
35
 
32
- ## License
36
+ Support further development with donation
33
37
 
34
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
38
+ Bitcoin:
35
39
 
36
- ## TODO
40
+ **1EoaB8uSnXEfgE3XUZafNs8aETEqdRppku**
37
41
 
38
- * Whois
42
+ Yandex.Money:
43
+
44
+ **410013115721646**
45
+
46
+ ## Contributing
39
47
 
40
- * Using word tops for seeding
48
+ Bug reports and pull requests are welcome on GitHub at https://github.com/andreyviktorov/genebrand. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
41
49
 
42
- * Write tests
50
+ ## License
43
51
 
44
- * Refactor `generator.rb`
52
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -17,14 +17,14 @@ end
17
17
 
18
18
  task :seed do
19
19
  require './lib/genebrand/posparser.rb'
20
- puts "May (and will) take a while"
21
- puts "Parsing all data"
20
+ puts 'May (and will) take a while'
21
+ puts 'Parsing all data'
22
22
  parser = Genebrand::PosParser.new
23
23
  parser.parseandsave('seed/preseed.txt', 'lib/data/posinfo.json')
24
24
 
25
- puts "Parsing with top 100k"
25
+ puts 'Parsing with top 100k'
26
26
  parser.parseandsave_top('seed/preseed.txt', 'seed/100k.txt', 'lib/data/pos100k.json')
27
27
 
28
- puts "Parsing with top 10k"
28
+ puts 'Parsing with top 10k'
29
29
  parser.parseandsave_top('seed/preseed.txt', 'seed/10k.txt', 'lib/data/pos10k.json')
30
30
  end
@@ -3,7 +3,7 @@ STDOUT.sync = true
3
3
 
4
4
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w(.. lib))
5
5
 
6
- trap("SIGINT") { exit! }
6
+ trap('SIGINT') { exit! }
7
7
 
8
8
  require 'genebrand'
9
9
  require 'mercenary'
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = 'Genebrand is a small brands generator'
13
13
  spec.description = 'CLI brand names generator'
14
- spec.homepage = 'https://github.com/andreyviktorov/genebrand'
14
+ spec.homepage = 'https://github.com/4ndv/genebrand'
15
15
  spec.license = 'MIT'
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
@@ -37,22 +37,27 @@ module Genebrand
37
37
  menu.prompt = 'What should we add?'.yellow
38
38
 
39
39
  menu.choice('String') do
40
- brand.push(type: :word,
41
- word: ask('Enter word (English, no spaces and punctiation, 1-10 symbols)')) do |q|
42
- q.validate = /\A[a-zA-Z\d]{1,10}\z/
43
- end
40
+ str = { type: :word, word: ask('Enter word (English, no spaces and punctiation, 1-10 symbols)') { |q| q.validate = /\A[a-zA-Z\d]{1,10}\z/ } }
41
+ brand.push(str)
44
42
  puts
45
43
  end
46
44
 
47
45
  menu.choice('Specific part of speech') { brand.push(pickpart) }
48
46
 
49
- if brand.length > 1
47
+ if brand.length > 0
50
48
  menu.choice('Enough, show me some brands!') { throw :parts_done }
51
49
  end
52
50
  end
53
51
  end
54
52
  end
55
53
 
54
+ choose do |menu|
55
+ menu.prompt = 'Check domain availability?'.yellow
56
+
57
+ menu.choice('Yes')
58
+ menu.choice('No') { @gen.nowhois = true }
59
+ end
60
+
56
61
  @gen.generate(brand)
57
62
  end
58
63
 
@@ -3,133 +3,158 @@ module Genebrand
3
3
  require 'resolv'
4
4
 
5
5
  attr_reader :words
6
+ attr_accessor :nowhois
6
7
 
7
8
  def initialize(filename)
8
9
  @words = JSON.parse(File.read(File.join(Gem::Specification.find_by_name('genebrand').gem_dir, "lib/data/#{filename}")))
10
+ @filtername = {
11
+ minlen: 'Minimum length:',
12
+ maxlen: 'Maximum length:',
13
+ starts: 'Starts with:',
14
+ ends: 'Ends with:',
15
+ contains: 'Contains:'
16
+ }
9
17
  end
10
18
 
11
- def prettyoutput(domain)
12
- data = '['
13
-
14
- # A bit hacky, but pretty fast method to guess domain available or not
19
+ def is_available?(domain, zone)
15
20
  resolv = Resolv::DNS.open
16
- data << (resolv.getresources("#{domain}.com", Resolv::DNS::Resource::IN::NS).count == 0 ? "com".green : "com".red)
17
- data << ' '
18
- data << (resolv.getresources("#{domain}.net", Resolv::DNS::Resource::IN::NS).count == 0 ? "net".green : "net".red)
19
- data << ' '
20
- data << (resolv.getresources("#{domain}.org", Resolv::DNS::Resource::IN::NS).count == 0 ? "org".green : "org".red)
21
- data << "]\t"
21
+ resolv.getresources("#{domain}.#{zone}", Resolv::DNS::Resource::IN::NS).count == 0
22
+ end
23
+
24
+ def prettyoutput(domain)
25
+ data = ''
26
+ unless @nowhois
27
+ # A bit hacky, but pretty fast method to guess domain available or not
28
+ resolv = Resolv::DNS.open
29
+ com = is_available?(domain, 'com') ? 'com'.green : 'com'.red
30
+ net = is_available?(domain, 'net') ? 'net'.green : 'net'.red
31
+ org = is_available?(domain, 'org') ? 'org'.green : 'org'.red
32
+ data = "[#{com} #{net} #{org}]\t"
33
+ end
22
34
  data << domain.bold
23
35
 
24
- return data
36
+ data
25
37
  end
26
38
 
27
- def generate(info)
28
- out = []
29
-
39
+ def getinfo(info)
30
40
  puts
31
41
  puts 'Generating brands with these parameters:'.cyan
32
42
  puts
33
- i = 1
43
+ i = 0
34
44
 
35
45
  info.each do |item|
36
46
  if item[:type] == :word
37
- puts "#{i}. Word: #{item[:word]}".green
47
+ puts "#{i += 1}. Word: #{item[:word]}".green
38
48
  elsif item[:type] == :part
39
- puts "#{i}. Part of speech: #{item[:part]}".green
49
+ puts "#{i += 1}. Part of speech: #{item[:part]}".green
40
50
  puts 'Filters:'
41
- item[:filters].each do |filter, value|
42
- if filter == :minlen
43
- puts "Minimum length: #{value}"
44
- elsif filter == :maxlen
45
- puts "Maximum length: #{value}"
46
- elsif filter == :starts
47
- puts "Starts with: #{value}"
48
- elsif filter == :ends
49
- puts "Ends with: #{value}"
50
- elsif filter == :contains
51
- puts "Contains: #{value}"
52
- end
51
+ item[:filters].each do |filter, _value|
52
+ puts "#{@filtername[filter]} #{_value}"
53
53
  end
54
54
  end
55
+ end
56
+ end
55
57
 
56
- i += 1
58
+ def filter(parts, filter, value)
59
+ case filter
60
+ when :minlen
61
+ parts = parts.select { |i| i[/^.{#{value},}$/] }
62
+ when :maxlen
63
+ parts = parts.select { |i| i[/^.{,#{value}}$/] }
64
+ when :starts
65
+ parts = parts.select { |i| i[/^#{value}.*$/i] }
66
+ when :ends
67
+ parts = parts.select { |i| i[/^.*#{value}$/i] }
68
+ when :contains
69
+ parts = parts.select { |i| i[/^.*(#{value}).*$/i] }
57
70
  end
71
+ parts
72
+ end
58
73
 
59
- puts
60
- puts 'Press any key to continue'.cyan
61
- puts
74
+ def applyfilters(item)
75
+ parts = @words[item[:part]]
76
+ item[:filters].each do |filter, value|
77
+ parts = filter(parts, filter, value)
78
+ end
62
79
 
63
- puts 'Fetching variants...'
80
+ parts
81
+ end
82
+
83
+ def prepareparts(info)
64
84
  gener = []
65
- wordscount = 0
85
+ puts 'Fetching variants...'
66
86
  info.each do |item|
67
87
  if item[:type] == :word
68
- wordscount += 1
69
88
  gener.push(item[:word])
70
89
  elsif item[:type] == :part
71
- parts = @words[item[:part]]
72
- item[:filters].each do |filter, value|
73
- if filter == :minlen
74
- parts = parts.select { |i| i[/^.{#{value},}$/] }
75
- elsif filter == :maxlen
76
- parts = parts.select { |i| i[/^.{,#{value}}$/] }
77
- elsif filter == :starts
78
- parts = parts.select { |i| i[/^#{value}.*$/i] }
79
- elsif filter == :ends
80
- parts = parts.select { |i| i[/^.*#{value}$/i] }
81
- elsif filter == :contains
82
- parts = parts.select { |i| i[/^.*(#{value}).*$/i] }
83
- end
84
- end
85
-
90
+ parts = applyfilters(item)
86
91
  if parts.count > 0
87
92
  gener.push(parts)
88
93
  else
89
- Genebrand::Logger.warning "0 variants for that part, will be skipped"
94
+ Genebrand::Logger.warning '0 variants for that part, will be skipped'
90
95
  end
91
96
  end
92
97
  end
93
98
 
94
- approx = 1
99
+ gener
100
+ end
95
101
 
96
- gener.each do |item|
102
+ def generateone(gener)
103
+ itemd = ''
104
+
105
+ gener.each_with_index do |item, index|
97
106
  if item.is_a? Array
98
- approx *= item.count
107
+ ind = rand(gener[index].count)
108
+ itemd << gener[index][ind].capitalize
109
+ else
110
+ itemd << gener[index].capitalize
99
111
  end
100
112
  end
101
113
 
102
- #arrdata.reverse!
103
-
104
- puts 'Available variants: '.yellow + approx.to_s.bold
105
- puts
106
-
107
- puts "Whois info\tBrand"
114
+ itemd
115
+ end
108
116
 
109
- finish = false
117
+ def proceedgen(gener)
110
118
  i = 0
111
- while not finish
112
- itemd = ''
113
-
114
- gener.each_with_index do |item, index|
115
- if item.is_a? Array
116
- ind = rand(gener[index].count)
117
- itemd << gener[index][ind].capitalize
118
- else
119
- itemd << gener[index].capitalize
120
- end
121
- end
122
-
119
+ loop do
120
+ itemd = generateone(gener)
123
121
  puts prettyoutput(itemd)
124
122
 
125
123
  i += 1
126
124
 
127
- if i%15 == 0
125
+ if i % 15 == 0
128
126
  puts
129
- puts "Press any key to see next variants".cyan
127
+ puts 'Press any key to see next variants'.cyan
130
128
  gets
131
129
  end
132
130
  end
133
131
  end
132
+
133
+ def countvariants(gener)
134
+ approx = 1
135
+
136
+ gener.each do |item|
137
+ approx *= item.count if item.is_a? Array
138
+ end
139
+
140
+ puts 'Available variants: '.yellow + approx.to_s.bold
141
+ puts
142
+ end
143
+
144
+ def generate(info)
145
+ getinfo(info)
146
+
147
+ gener = prepareparts(info)
148
+
149
+ countvariants(gener)
150
+
151
+ if @nowhois
152
+ puts 'Brand'
153
+ else
154
+ puts "Whois info\tBrand"
155
+ end
156
+
157
+ proceedgen(gener)
158
+ end
134
159
  end
135
160
  end
@@ -3,11 +3,8 @@ module Genebrand
3
3
  require 'json'
4
4
  require 'fileutils'
5
5
 
6
+ # Fills parts of speech table
6
7
  def initialize
7
- init
8
- end
9
-
10
- def init
11
8
  @parsed = {}
12
9
  @table = {}
13
10
  # Сущ
@@ -22,6 +19,10 @@ module Genebrand
22
19
  @table['A'] = @parsed['adj'] = []
23
20
  end
24
21
 
22
+ # Parses file of word\tpartofspeech
23
+ #
24
+ # @param [String] filename that should be parsed
25
+ # @return [Hash] of partofspeech => words
25
26
  def parse(filename)
26
27
  init
27
28
 
@@ -30,18 +31,22 @@ module Genebrand
30
31
  return
31
32
  end
32
33
 
33
- puts "Seeding"
34
+ puts 'Seeding'
34
35
  File.open(filename, 'r').each_line do |line|
35
36
  data = line.split("\t")
36
37
 
37
- data[1].split('').each do |partofsp|
38
- @table[partofsp].push(data[0].downcase) if @table.key?(partofsp)
39
- end
38
+ getparts(data)
40
39
  end
41
40
 
42
41
  @parsed
43
42
  end
44
43
 
44
+ def getparts(data)
45
+ data[1].split('').each do |partofsp|
46
+ @table[partofsp].push(data[0].downcase) if @table.key?(partofsp)
47
+ end
48
+ end
49
+
45
50
  def parse_top(filename, top)
46
51
  init
47
52
 
@@ -50,27 +55,21 @@ module Genebrand
50
55
  return
51
56
  end
52
57
 
53
- puts "Load top"
58
+ puts 'Load top'
54
59
  toparr = []
55
60
  File.open(top, 'r').each_line do |line|
56
61
  toparr << line.strip.downcase
57
62
  end
58
63
  puts toparr.count
59
64
 
60
- puts "Seeding"
65
+ puts 'Seeding'
61
66
  it = 0
62
67
  File.open(filename, 'r').each_line do |line|
63
68
  data = line.split("\t")
64
69
 
65
- if toparr.include?(data[0])
66
- data[1].split('').each do |partofsp|
67
- @table[partofsp].push(data[0].downcase) if @table.key?(partofsp)
68
- end
69
- end
70
- it+=1
71
- if it % 10000 == 0
72
- puts it
73
- end
70
+ getparts(data) if toparr.include?(data[0])
71
+ it += 1
72
+ puts it if it % 10_000 == 0
74
73
  end
75
74
 
76
75
  @parsed
@@ -86,7 +85,7 @@ module Genebrand
86
85
  return
87
86
  end
88
87
 
89
- puts "Preseed"
88
+ puts 'Preseed'
90
89
  File.open(filename, 'r').each_line do |line|
91
90
  data = line.split("\t")
92
91
 
@@ -1,3 +1,3 @@
1
1
  module Genebrand
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genebrand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Viktorov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-04 00:00:00.000000000 Z
11
+ date: 2015-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorator
@@ -109,7 +109,7 @@ files:
109
109
  - lib/genebrand/logger.rb
110
110
  - lib/genebrand/posparser.rb
111
111
  - lib/genebrand/version.rb
112
- homepage: https://github.com/andreyviktorov/genebrand
112
+ homepage: https://github.com/4ndv/genebrand
113
113
  licenses:
114
114
  - MIT
115
115
  metadata: