因为在写 ui 自动化脚本时,用到了 intlpublic 里面的方法,如创建账号和登录等。我们的调用方 式是把整个 intlpublic 代码 checkout 出来,放到我们自己的项目中再加以引用。我想如果可以通过 gem 包的方式来引用,可能会使代码更简洁。于是,
学习了下 gem 包的生成方式。下面是网上的一些资料 和自己实践的结合,先简单介绍下 gem 包的生成方式,供新同学参考。 本文描述一个自己创建 ruby Gems 的过程。gem 可以使用你现有的文件夹结构,也可以使用命令创 建一个标准的 gem 包结构。下面是用命令创建一个标准的 gem 包。 运行: gpgen mygem 运行完后,会自动生成一个标准的 gem 包结构: mygem │ COPYING │ LICENSE │ Rakefile │ README │ ├─lib │ └─mygem │ │ └─resources defaults.yaml init.rb
将自己的代码放在 lib/mygem 文件夹下,如果有测试 测试代码,则创建一个 test 目录,将单元测试 单元测试的 测试 单元测试 文件都放在这个文件夹下。 将你自己写的 rb 文件都放在 lib/mygem 文件夹下面,比如有 gemtest.rb,mtest.rb 一般的做法,会在 lib 的根目录下建立一个 mygem.rb 文件,这个文件用来引入你 lib/mygem 文 件夹下的所有 rb 文件。mygem.rb 文件的内容为: #mygem.rb $:.unshift"#{File.dirname(__FILE__)}/mygem" require 'gemtest' require 'mtest' 下面是 gemtest 和 mtest 的具体代码: gemtest.rb 文件内容如下:声明了一个类和方法
class Gemtest def initialize(name,address) @name=name @address=address end def speak puts "#{@name} speak me: i am address #{@address}" end end mtest.rb 内容如下:声明了一个模块和方法 module MTest
def speak puts "module test" end end 准备
工作完成了,下面可以开始打 gem 包。 在项目根目录下,即 mygem 目录下运行命令:gem build Rakefile,这时可以看到新生成了一 个名为 mygem-o.1.gem 的包 安装 gem 包,运行命令:gem install mygem-o.1.gem 安装成功后,可以试验一下是否可以运行 gem 包中定义的方法。 在 netbeans 中创建一个 rb 文件,调用 gem 中的方法,代码如下: #将 gem 包引用进来 require "mygem" #调用类的方法 a=Gemtest.new("aa", "bb") a.speak #调用模块的方法 include MTest speak
运行结果: aa speak me: i am address bb method test
需要注意的是: 调用类的方法和调用模块的方法是不一样的, 调用类的方法时需要先创建类 的实例,上述类中的 initialize 方法相当于 java 中的构造函数。然后通过类的实例调用方法。 调用模块中的方法只需要将模块 include 进来,直接通过方法名调用。 用上面的方法将 IntlPulic 打成 gem 包,将 intlpublic 里面的文件 copy 到 lib 目录下,在 lib 目 录的同级创建一个 intlpublic.rb 文件,需要注意的是,intlpublic 里面有个总控文件
intllib,所 以 intlpublic.rb 文件内容如下: $:.unshift"#{File.dirname(__FILE__)}/IntlPublic" require 'intllib' rakefile 里面的内容需要修改一下,改成该项目相关的信息,这里不详细说明。 ,打包后我们只需要在在项目中 include 该包,调用包里面常用的方法,例如: IntlTestData.get_randemail IntlTextField.set(@ie, "kw", "mp3", "n", nil) 等方法。 调用这些方法时不会有什么
问题, 但是在 调用我们经
常用到的创建账号和登录的方法时,会遇到几个错误。即 IntlAccountCenter.insert_account("cgs") MAPublic.intl_main_login("hufucgs1","hello1234") 在调用创建账号的方法时,错误提示为找不到项目路径下 IntlPublic\sql\insert_account.sql 文 件。错误提示如下: c:/ruby/lib/ruby/gems/1.8/gems/IntlPublic-20110729/lib/commons/DataBaseOp.rb:96: in `initialize': No such file or directory - D:/rubyworkspace/AutoDev/AAA/BBB/..
/IntlPublic/sql/