如何在多个脚本

时间:2015-06-24 04:46:56

标签: ruby

我有很多脚本需要包含相同的标题。

将它们包含在每个脚本中的更好方法是什么

    # -*- encoding : utf-8 -*-
    #!/usr/bin/ruby
    require 'yaml'
    require "json"
    require 'pry'
    require "selenium-webdriver"
    require 'nokogiri'
    require 'active_support/all'
    require 'yaml'
    require 'date'
    require 'awesome_print'
    require 'mongo'
    require File.expand_path('./form_action.rb', File.dirname(__FILE__))
    require File.expand_path('./schedule_manager.rb', File.dirname(__FILE__))
    require File.expand_path('../common_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../mongodb_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../webdriver_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/db_manager.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/app_util.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/schedule_manager_base.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/class_template.rb', File.dirname(__FILE__))
    include Mongo
    include MongodbHelper
    include AppUtil

项目文件夹结构

我会将common_includes添加到client1.rb

但是SIBLINGS不起作用。

├── common_helper.rb
├── common_includes.rb
├── config
│   ├── database.yml
│   └── schedule.rb
├── client1
│   ├── config.yml
│   ├── client1.rb
│   └── schedule_manager.rb
└── webdriver_helper.rb
├── lib
│   ├── app_util.rb
│   ├── class_template.rb
│   ├── db_manager.rb
│   └── schedule_manager_base.rb

2 个答案:

答案 0 :(得分:2)

如下所示:

REQUIRES = %w(yaml json pry selenium-webdriver nokogiri active_support/all yaml date awesome_print mongo)
SIBLINGS = %w(form_action schedule_manager)
COMMON = %w(common_helper mongodb_helper webdriver_helper db_manager.rb lib/app_util lib/schedule_manager_base lib/class_template.rb)
INCLUDES = %i(Mongo MongodbHelper AppUtil)

REQUIRES.each &method :require
SIBLINGS.each do |f|
  File.expand_path("./#{f}.rb", File.dirname(__FILE__))
end
COMMON.each do |f|
  File.expand_path("../#{f}.rb", File.dirname(__FILE__))
end
module CommonIncludes
  def self.included base
    INCLUDES.each { |inc| base.include Kernel.const_get(inc) }
  end 
end

进入一个非常文件common_includes.rb,无论您需要它,请致电:

require 'common_includes'
include CommonIncludes

这是或许不太常见的require / include方法,以防您需要逐个明确指定文件列表。

NB 要管理外部依赖项,每个人都希望使用捆绑器,如Mike Slutsky所说。

UPD 不要犹豫,使用Dir["./*.rb"]收集所有给定目录的文件。

答案 1 :(得分:0)

如果我正确理解您的问题,您正在寻找一种方法,您可以包含所有这些标题,而无需将它们复制并粘贴到整个地方。

您可以实现此目的的一种方法是将所有这些标头放入一个文件中,并在脚本中包含该文件:

例如,在headers.rb中:

   # -*- encoding : utf-8 -*-
    #!/usr/bin/ruby
    require 'yaml'
    require "json"
    require 'pry'
    require "selenium-webdriver"
    require 'nokogiri'
    require 'active_support/all'
    require 'yaml'
    require 'date'
    require 'awesome_print'
    require 'mongo'
    require File.expand_path('./form_action.rb', File.dirname(__FILE__))
    require File.expand_path('./schedule_manager.rb', File.dirname(__FILE__))
    require File.expand_path('../common_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../mongodb_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../webdriver_helper.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/db_manager.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/app_util.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/schedule_manager_base.rb', File.dirname(__FILE__))
    require File.expand_path('../lib/class_template.rb', File.dirname(__FILE__))
    include Mongo
    include MongodbHelper
    include AppUtil

然后你的脚本:

require 'path/to/headers'