class Genebrand::New

Public Class Methods

addfilters(data) click to toggle source
# File lib/genebrand/commands/new.rb, line 99
def addfilters(data)
  puts

  data[:filters] = {} if data[:filters].nil?

  catch :filter_done do
    loop do
      puts
      choose do |menu|
        menu.prompt = 'Choose filters for this words'.yellow

        check_filter_conflict(data)

        if data[:filters][:minlen].nil?
          menu.choice('Minimum length') do
            data[:filters][:minlen] = ask('Enter minimum word length (between 1 and 10)', Integer) do |q|
              q.in = 1..10
            end
          end
        end

        if data[:filters][:maxlen].nil?
          menu.choice('Maximum length') do
            data[:filters][:maxlen] = ask('Enter maximum word length (between 1 and 10)', Integer) do |q|
              q.in = 1..10
            end
          end
        end

        if data[:filters][:starts].nil?
          menu.choice('Starts with') do
            data[:filters][:starts] = ask('Enter symbols word should start with')
          end
        end

        if data[:filters][:ends].nil?
          menu.choice('Ends with') do
            data[:filters][:ends] = ask('Enter symbols word should end with')
          end
        end

        if data[:filters][:contains].nil?
          menu.choice('Contains') do
            data[:filters][:contains] = ask('Enter symbols word should contain')
          end
        end

        menu.choice('Enough filters, next') { throw :filter_done if check_filter_conflict(data) }
      end
    end
  end

  data
end
check_filter_conflict(data) click to toggle source
# File lib/genebrand/commands/new.rb, line 86
def check_filter_conflict(data)
  filters = data[:filters]
  if !filters[:minlen].nil? && !filters[:maxlen].nil?
    if filters[:minlen] > filters[:maxlen]
      filters[:minlen] = nil
      filters[:maxlen] = nil
      Genebrand::Logger.error 'Minimum length should be lesser than maximum, min and max filters was reset'
      return false
    end
  end
  true
end
load_command(p) click to toggle source
# File lib/genebrand/commands/new.rb, line 6
def load_command(p)
  p.command(:new) do |c|
    c.syntax 'new'
    c.description 'Generates new brand name'
    c.alias(:brand)

    c.action do |args, options|
      process(args, options)
    end
  end

  p.default_command(:new)
end
pickpart() click to toggle source
# File lib/genebrand/commands/new.rb, line 64
def pickpart
  puts

  data = { type: :part }
  part = ''

  choose do |menu|
    menu.prompt = 'What part of speech should we add?'.yellow

    menu.choice("Noun (#{@gen.words['noun'].count} in db)") { part = 'noun' }
    menu.choice("Plural (#{@gen.words['plur'].count} in db)") { part = 'plur' }
    menu.choice("Verb participle (#{@gen.words['verb_part'].count} in db)") { part = 'verb_part' }
    menu.choice("Verb transitive (#{@gen.words['verb_trans'].count} in db)") { part = 'verb_trans' }
    menu.choice("Verb intransitive (#{@gen.words['verb_intrans'].count} in db)") { part = 'verb_intrans' }
    menu.choice("Adjective (#{@gen.words['adj'].count} in db)") { part = 'adj' }
  end

  data[:part] = part

  addfilters(data)
end
process(_args, _options) click to toggle source
# File lib/genebrand/commands/new.rb, line 20
def process(_args, _options)
  puts "Hello! Let's generate some brands!".cyan
  puts

  choose do |menu|
    menu.prompt = 'Which word DB should i use?'.yellow

    menu.choice('Full (lots of words, but not high quality)') { @gen = Genebrand::Generator.new('posinfo.json') }
    menu.choice('100k (based on top 100k English words, better quality)') { @gen = Genebrand::Generator.new('pos100k.json') }
    menu.choice('10k (based on top 10k English words, best quality)') { @gen = Genebrand::Generator.new('pos10k.json') }
  end

  brand = []

  catch :parts_done do
    loop do
      choose do |menu|
        menu.prompt = 'What should we add?'.yellow

        menu.choice('String') do
          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/ } }
          brand.push(str)
          puts
        end

        menu.choice('Specific part of speech') { brand.push(pickpart) }

        if brand.length > 0
          menu.choice('Enough, show me some brands!') { throw :parts_done }
        end
      end
    end
  end

  choose do |menu|
    menu.prompt = 'Check domain availability?'.yellow

    menu.choice('Yes')
    menu.choice('No') { @gen.nowhois = true }
  end

  @gen.generate(brand)
end