Class: Genebrand::Generator
- Inherits:
-
Object
- Object
- Genebrand::Generator
- Defined in:
- lib/genebrand/generator.rb
Instance Attribute Summary collapse
-
#nowhois ⇒ Object
Returns the value of attribute nowhois.
-
#words ⇒ Object
readonly
Returns the value of attribute words.
Instance Method Summary collapse
- #applyfilters(item) ⇒ Object
- #countvariants(gener) ⇒ Object
- #filter(parts, filter, value) ⇒ Object
- #generate(info) ⇒ Object
- #generateone(gener) ⇒ Object
- #getinfo(info) ⇒ Object
-
#initialize(filename) ⇒ Generator
constructor
A new instance of Generator.
- #is_available?(domain, zone) ⇒ Boolean
- #prepareparts(info) ⇒ Object
- #prettyoutput(domain) ⇒ Object
- #proceedgen(gener) ⇒ Object
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
#nowhois ⇒ Object
Returns the value of attribute nowhois.
6 7 8 |
# File 'lib/genebrand/generator.rb', line 6 def nowhois @nowhois end |
#words ⇒ Object (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
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 |