Class: Genebrand::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/genebrand/generator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ Generator

Returns a new instance of Generator.



8
9
10
11
12
13
14
15
16
17
# File 'lib/genebrand/generator.rb', line 8

def initialize(filename)
  @words = JSON.parse(File.read(File.join(Gem::Specification.find_by_name('genebrand').gem_dir, "lib/data/#{filename}")))
  @filtername = {
    minlen: 'Minimum length:',
    maxlen: 'Maximum length:',
    starts: 'Starts with:',
    ends: 'Ends with:',
    contains: 'Contains:'
  }
end

Instance Attribute Details

#nowhoisObject

Returns the value of attribute nowhois.



6
7
8
# File 'lib/genebrand/generator.rb', line 6

def nowhois
  @nowhois
end

#wordsObject (readonly)

Returns the value of attribute words.



5
6
7
# File 'lib/genebrand/generator.rb', line 5

def words
  @words
end

Instance Method Details

#applyfilters(item) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/genebrand/generator.rb', line 74

def applyfilters(item)
  parts = @words[item[:part]]
  item[:filters].each do |filter, value|
    parts = filter(parts, filter, value)
  end

  parts
end

#countvariants(gener) ⇒ Object



133
134
135
136
137
138
139
140
141
142
# File 'lib/genebrand/generator.rb', line 133

def countvariants(gener)
  approx = 1

  gener.each do |item|
    approx *= item.count if item.is_a? Array
  end

  puts 'Available variants: '.yellow + approx.to_s.bold
  puts
end

#filter(parts, filter, value) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/genebrand/generator.rb', line 58

def filter(parts, filter, value)
  case filter
  when :minlen
    parts = parts.select { |i| i[/^.{#{value},}$/] }
  when :maxlen
    parts = parts.select { |i| i[/^.{,#{value}}$/] }
  when :starts
    parts = parts.select { |i| i[/^#{value}.*$/i] }
  when :ends
    parts = parts.select { |i| i[/^.*#{value}$/i] }
  when :contains
    parts = parts.select { |i| i[/^.*(#{value}).*$/i] }
  end
  parts
end

#generate(info) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/genebrand/generator.rb', line 144

def generate(info)
  getinfo(info)

  gener = prepareparts(info)

  countvariants(gener)

  if @nowhois
    puts 'Brand'
  else
    puts "Whois info\tBrand"
  end

  proceedgen(gener)
end

#generateone(gener) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/genebrand/generator.rb', line 102

def generateone(gener)
  itemd = ''

  gener.each_with_index do |item, index|
    if item.is_a? Array
      ind = rand(gener[index].count)
      itemd << gener[index][ind].capitalize
    else
      itemd << gener[index].capitalize
    end
  end

  itemd
end

#getinfo(info) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/genebrand/generator.rb', line 39

def getinfo(info)
  puts
  puts 'Generating brands with these parameters:'.cyan
  puts
  i = 0

  info.each do |item|
    if item[:type] == :word
      puts "#{i += 1}. Word: #{item[:word]}".green
    elsif item[:type] == :part
      puts "#{i += 1}. Part of speech: #{item[:part]}".green
      puts 'Filters:'
      item[:filters].each do |filter, _value|
        puts "#{@filtername[filter]} #{_value}"
      end
    end
  end
end

#is_available?(domain, zone) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
# File 'lib/genebrand/generator.rb', line 19

def is_available?(domain, zone)
  resolv = Resolv::DNS.open
  resolv.getresources("#{domain}.#{zone}", Resolv::DNS::Resource::IN::NS).count == 0
end

#prepareparts(info) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/genebrand/generator.rb', line 83

def prepareparts(info)
  gener = []
  puts 'Fetching variants...'
  info.each do |item|
    if item[:type] == :word
      gener.push(item[:word])
    elsif item[:type] == :part
      parts = applyfilters(item)
      if parts.count > 0
        gener.push(parts)
      else
        Genebrand::Logger.warning '0 variants for that part, will be skipped'
      end
    end
  end

  gener
end

#prettyoutput(domain) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/genebrand/generator.rb', line 24

def prettyoutput(domain)
  data = ''
  unless @nowhois
    # A bit hacky, but pretty fast method to guess domain available or not
    resolv = Resolv::DNS.open
    com = is_available?(domain, 'com') ? 'com'.green : 'com'.red
    net = is_available?(domain, 'net') ? 'net'.green : 'net'.red
    org = is_available?(domain, 'org') ? 'org'.green : 'org'.red
    data = "[#{com} #{net} #{org}]\t"
  end
  data << domain.bold

  data
end

#proceedgen(gener) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/genebrand/generator.rb', line 117

def proceedgen(gener)
  i = 0
  loop do
    itemd = generateone(gener)
    puts prettyoutput(itemd)

    i += 1

    if i % 15 == 0
      puts
      puts 'Press any key to see next variants'.cyan
      gets
    end
  end
end