class Genebrand::Generator
Attributes
nowhois[RW]
words[R]
Public Class Methods
new(filename)
click to toggle source
# 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
Public Instance Methods
applyfilters(item)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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