class Kimurai::CLI::Generator

Public Class Methods

source_root() click to toggle source
# File lib/kimurai/cli/generator.rb, line 6
def self.source_root
  File.dirname(File.expand_path('..', __FILE__))
end

Public Instance Methods

generate_project(project_name) click to toggle source
# File lib/kimurai/cli/generator.rb, line 10
def generate_project(project_name)
  directory "template", project_name
  inside(project_name) do
    run "bundle install"
    run "git init"
  end
end
generate_schedule() click to toggle source
# File lib/kimurai/cli/generator.rb, line 43
def generate_schedule
  copy_file "template/config/schedule.rb", "./schedule.rb"
end
generate_spider(spider_name, in_project:) click to toggle source
# File lib/kimurai/cli/generator.rb, line 18
      def generate_spider(spider_name, in_project:)
        spider_path = in_project ? "spiders/#{spider_name}.rb" : "./#{spider_name}.rb"
        raise "Spider #{spider_path} already exists" if File.exists? spider_path

        spider_class = to_spider_class(spider_name)
        create_file spider_path do
          <<~RUBY
            class #{spider_class} < #{in_project ? 'ApplicationSpider' : 'Kimurai::Base'}
              @name = "#{spider_name}"
              @start_urls = []
              @config = {}

              def parse(response, url:, data: {})
              end
            end
          RUBY
        end

        unless in_project
          insert_into_file spider_path, "  @engine = :mechanize\n", after: "@name = \"#{spider_name}\"\n"
          prepend_to_file spider_path, "require 'kimurai'\n\n"
          append_to_file spider_path, "\n#{spider_class}.crawl!"
        end
      end

Private Instance Methods

to_spider_class(string) click to toggle source
# File lib/kimurai/cli/generator.rb, line 49
def to_spider_class(string)
  string.sub(/^./) { $&.capitalize }
    .gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
    .gsub(/(?:-|(\/))([a-z\d]*)/) { "Dash#{$2.capitalize}" }
    .gsub(/(?:\.|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
end