Class: Kimurai::CLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/kimurai/cli.rb,
lib/kimurai/cli/generator.rb

Defined Under Namespace

Classes: Generator

Instance Method Summary collapse

Instance Method Details

#__print_versionObject



120
121
122
# File 'lib/kimurai/cli.rb', line 120

def __print_version
  puts VERSION
end

#console(spider_name = nil) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/kimurai/cli.rb', line 68

def console(spider_name = nil)
  require 'pry'
  require './config/boot' if inside_project?

  if spider_name
    raise "Can't find Kimurai project" unless inside_project?

    unless (klass = Kimurai.find_by_name(spider_name))
      raise "Can't find spider with name `#{spider_name}` in the project. " \
        'To list all available spiders, run: `$ bundle exec kimurai list`'
    end
  else
    klass = inside_project? ? ApplicationSpider : ::Kimurai::Base
  end

  engine = options['engine']&.delete(':')&.to_sym
  if options['url']
    klass.new(engine).request_to(:console, url: options['url'])
  else
    klass.new(engine).public_send(:console)
  end
end

#crawl(spider_name) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/kimurai/cli.rb', line 32

def crawl(spider_name)
  raise "Can't find Kimurai project" unless inside_project?

  require './config/boot'

  unless (klass = Kimurai.find_by_name(spider_name))
    raise "Can't find spider with name `#{spider_name}` in the project. " \
      'To list all available spiders, run: `$ bundle exec kimurai list`'
  end

  # Set time_zone if exists
  if (time_zone = Kimurai.configuration.time_zone)
    Kimurai.time_zone = time_zone
  end

  klass.crawl!
end

#dashboardObject



125
126
127
128
129
130
131
132
133
# File 'lib/kimurai/cli.rb', line 125

def dashboard
  raise "Can't find Kimurai project" unless inside_project?

  require './config/boot'
  raise 'Kimurai::Dashboard is not defined' unless Object.const_defined?('Kimurai::Dashboard')

  require 'kimurai/dashboard/app'
  Kimurai::Dashboard::App.run!
end

#generate(generator_type, *args) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/kimurai/cli.rb', line 15

def generate(generator_type, *args)
  case generator_type
  when 'spider'
    spider_name = args.shift
    raise 'Provide spider name to generate a spider' unless spider_name.present?

    Generator.new.generate_spider(spider_name, in_project: inside_project?)
  when 'schedule'
    Generator.new.generate_schedule
  else
    raise "Don't know this generator type: #{generator_type}"
  end
end

#listObject



92
93
94
95
96
97
98
# File 'lib/kimurai/cli.rb', line 92

def list
  raise "Can't find Kimurai project" unless inside_project?

  require './config/boot'

  Kimurai.list.keys.sort.each { |name| puts name }
end

#new(project_name) ⇒ Object



8
9
10
11
12
# File 'lib/kimurai/cli.rb', line 8

def new(project_name)
  raise 'Provide project name to generate a new project' unless project_name.present?

  Generator.new.generate_project(project_name)
end

#parse(spider_name, method_name) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/kimurai/cli.rb', line 52

def parse(spider_name, method_name)
  raise "Can't find Kimurai project" unless inside_project?

  require './config/boot'

  unless (klass = Kimurai.find_by_name(spider_name))
    raise "Can't find spider with name `#{spider_name}` in the project. " \
      'To list all available spiders, run: `$ bundle exec kimurai list`'
  end

  klass.parse!(method_name, url: options['url'])
end

#runnerObject



104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/kimurai/cli.rb', line 104

def runner
  raise "Can't find Kimurai project" unless inside_project?

  jobs = options['jobs']
  raise "Jobs count can't be 0" if jobs.zero?

  require './config/boot'
  require 'kimurai/runner'

  spiders = options['include'].presence || Kimurai.list.keys
  spiders -= options['exclude']

  Runner.new(spiders, jobs).run!
end