- 浏览: 332693 次
- 来自: 西安
文章分类
- 全部博客 (106)
- ruby 插件 (3)
- ruby on rails (33)
- google adsense (0)
- RedCloth (1)
- 情感 (5)
- 编程语言 (1)
- 新闻 (1)
- rails 环境 (1)
- ruby 编辑器 (1)
- python (1)
- linux (20)
- linux,gvim (2)
- mysql (4)
- oracle (4)
- ruby gem (2)
- Windows (2)
- http web 服务器 (1)
- c# (4)
- script (1)
- Microsoft (5)
- domain (1)
- php (4)
- 软件开发方法 (2)
- 设计模式 (0)
- powershell (4)
- android (2)
- Hyper-v (1)
- web (1)
- winserver 2012 R2 (1)
- delphi (1)
- sqlite (0)
- Git (1)
- redis (1)
- vpn (0)
最新评论
-
di1984HIT:
学习了~~
ROR rails正常启动,但是http://127.0.0.1:3000不能访问的解决办法 -
0372:
应该有吧!我自己认为!
ITeye还有人维护吗? -
shuaigelingfei:
cywhoyi 写道应该是放弃了吧记得2、3年前,weibo上 ...
ITeye还有人维护吗? -
cywhoyi:
应该是放弃了吧记得2、3年前,weibo上私信问过Robin, ...
ITeye还有人维护吗? -
catroll:
现在可以使用:service php7.0-fpm start ...
php使用php-fpm重启、停止操作命令
Rails支持多种方式的扩展,包括plugin,gem, 或者放到lib文件下等多种方式。 但是随着bundler的出现, Rails3时代我们还是写gem比较好, 方便管理。
所以下面只介绍如何制作属于自己的gem。开始之前先确保你机器了安装了git。
在我们的项目里面, 我看到在config/initializers/下有一个hash.rb文件, 是使用了一个monkey patch的方式来对Hash进行了一个扩展:
class Hash
def # my_reverse
hash_new = Hash.new
self.each {|key,value|
if not hash_new.has_key?(key) then hash_new[value] = key end
}
return hash_new
end
end
像这种扩展方式不是很好, 我想把它修改为一个gem, 如果以后有其他的扩展,比如对Array,Hash等其他方法扩展,我们可以升级gem,这样就方便管理了,不至于那么混乱。
我们开始吧:
1. 安装bundler, 因为我要用bundler来生成一个基础gem结构。
gem install bundler
2. 使用bundler来生成一个基础gem结构:
bundle gem ruby_extendsions
命令执行以后会看到生成下面这些文件:
create ruby_extendsions/Gemfile
create ruby_extendsions/Rakefile
create ruby_extendsions/.gitignore
create ruby_extendsions/ruby_extendsions.gemspec
create ruby_extendsions/lib/ruby_extendsions.rb
create ruby_extendsions/lib/ruby_extendsions/version.rb
Initializating git repo in /Users/alex/work/mygems/test/ruby_extendsions
说明一下:
1). ruby_extendsions.gemspec , 类似于这样的.gemspec文件,就相当于gem的说明书, 将来你打gem包的时候, 就靠这个文件了。
2). lib下放我们的代码实现
3). 整个项目至于git版本控制下。方便我们push到rubygem.org.
3. 使用Rspec进行TDD方式开发我们的代码:
确保我们能用rspec, 在ruby_extendsions.gemspec里添加:
s.add_development_dependency "rspec"
然后,执行:
bundle install
这下我们就可以使用rspec了。
在根目录下增加一个spec文件夹, 考虑到我们要实现的功能, 是对ruby的一些扩展, 所以我暂时就命名为了ruby_extendsions, 而此次只是针对Hash类的扩展, 所以我们需要在spec目录下建立一个测试文件hash_spec.rb和spec_helper.rb来测试我们对Hash扩展功能是否正确:
#spec/hash_spec.rb
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
describe "RubyExtend::HashExtendsions" do
before(:each) do
@hash1 = {:a => 1, :b => 2}
end
it "A hash data should not be reversed if havn't use ruby_extend " do
#当没有使用我们的扩展的时候, Hash类是不应该包含hash_reverse这个方法的, 这个测试也保证了我们在扩展一个Ruby内部类的时候不会和其内部方法名冲突。
@hash1.respond_to?("hash_reverse").should eql false
end
it "A hash data should be reversed" do
require 'ruby_extendsions'
@hash1.hash_reverse.should eql({1=>:a, 2=>:b} )
end
end
上面的代码:spec_helper.rb文件为将来准备,如果扩展其他方法, 会用到一些公用的配置。
测试由一 个正例和一个反例组成。
4. 运行测试:
bundle exec rspec spec, bundle exec确保rspec是使用我们在.gemspec文件里声明的版本。
当然,测试结果是会失败,因为我们还没有扩展hash_reverse方法呢。
5. 实现代码:
打开lib/ruby_extendsions.rb:
require 'ruby_extendsions/hash_extendsions' #我们今天要实现的Hash扩展
require 'ruby_extendsions/array_extendsions' #以后有可能用到对Array方法的扩展,我们就放这个文件里。
然后在lib下建立hash_extendsions.rb文件:module RubyExtendsions
module HashExtendsions #注意模块的命名要和文件名和路径保持一致。
def self.included(base) #hook, 当这个module在被include的时候触发
base.send :include, InstanceMethods #引入实例方法
base.send :extend, ClassMethods # 引入类方法
end
module InstanceMethods
def hash_reverse #我们的hash_reverse是实例方法
hash_new = {}
self.each {|key,value|
if not hash_new.has_key?(key) then hash_new[value] = key end
}
return hash_new
end
end#InstanceMethods
module ClassMethods
#TODO
end#ClassMethods
end #HashExtendsions
end #RubyExtendsions
#真正的扩展
class Hash
include RubyExtendsions::HashExtendsions
end
上面的代码都带注释了。
然后我们运行测试, oK, 都通过了。大功告成了。
6. 发布我们的gem:
我们修改一下.gemspec文件, 把项目相关信息都写里面去:
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = "ruby_extendsions"
s.version = "0.1"
s.platform = Gem::Platform::RUBY
s.authors = ["blackanger"]
s.email = ["blackanger.z@gmail.com"]
s.homepage = "http://rubygems.org/gems/ruby_extendsions"
s.summary = "Ruby Extendsions For Hash"
s.description = "Ruby Extendsions"
s.required_rubygems_version = ">= 1.3.6"
s.rubyforge_project = "ruby_extendsions"
s.add_development_dependency "bundler", ">= 1.0.0"
s.add_development_dependency "rspec"
s.files = `git ls-files`.split("\n")
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
s.require_path = 'lib'
end
然后, 我们在根目录下执行命令: rake install
这个命令会生成pkg/ruby_extendsions-0.1.gem. 到此为止,我们的gem包就打好了。你可以把你的gem项目上传到github。 但是github从去年开始就停止了自动打包服务。所以你如果想使用gem install ruby_extendsions命令来安装你的gem, 需要把它上传到rubygems.org里。 首先,你需要在rubygems.org里注册一个帐号。 其次, gem install gemcutter然后你就push吧。 gem push ruby_extendsions-0.1.gem如果碰到权限的错误,那说明在rubygems里面已经有了和你一样名字的gem包,换个名字就oK了。
所以下面只介绍如何制作属于自己的gem。开始之前先确保你机器了安装了git。
在我们的项目里面, 我看到在config/initializers/下有一个hash.rb文件, 是使用了一个monkey patch的方式来对Hash进行了一个扩展:
class Hash
def # my_reverse
hash_new = Hash.new
self.each {|key,value|
if not hash_new.has_key?(key) then hash_new[value] = key end
}
return hash_new
end
end
像这种扩展方式不是很好, 我想把它修改为一个gem, 如果以后有其他的扩展,比如对Array,Hash等其他方法扩展,我们可以升级gem,这样就方便管理了,不至于那么混乱。
我们开始吧:
1. 安装bundler, 因为我要用bundler来生成一个基础gem结构。
gem install bundler
2. 使用bundler来生成一个基础gem结构:
bundle gem ruby_extendsions
命令执行以后会看到生成下面这些文件:
create ruby_extendsions/Gemfile
create ruby_extendsions/Rakefile
create ruby_extendsions/.gitignore
create ruby_extendsions/ruby_extendsions.gemspec
create ruby_extendsions/lib/ruby_extendsions.rb
create ruby_extendsions/lib/ruby_extendsions/version.rb
Initializating git repo in /Users/alex/work/mygems/test/ruby_extendsions
说明一下:
1). ruby_extendsions.gemspec , 类似于这样的.gemspec文件,就相当于gem的说明书, 将来你打gem包的时候, 就靠这个文件了。
2). lib下放我们的代码实现
3). 整个项目至于git版本控制下。方便我们push到rubygem.org.
3. 使用Rspec进行TDD方式开发我们的代码:
确保我们能用rspec, 在ruby_extendsions.gemspec里添加:
s.add_development_dependency "rspec"
然后,执行:
bundle install
这下我们就可以使用rspec了。
在根目录下增加一个spec文件夹, 考虑到我们要实现的功能, 是对ruby的一些扩展, 所以我暂时就命名为了ruby_extendsions, 而此次只是针对Hash类的扩展, 所以我们需要在spec目录下建立一个测试文件hash_spec.rb和spec_helper.rb来测试我们对Hash扩展功能是否正确:
#spec/hash_spec.rb
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
describe "RubyExtend::HashExtendsions" do
before(:each) do
@hash1 = {:a => 1, :b => 2}
end
it "A hash data should not be reversed if havn't use ruby_extend " do
#当没有使用我们的扩展的时候, Hash类是不应该包含hash_reverse这个方法的, 这个测试也保证了我们在扩展一个Ruby内部类的时候不会和其内部方法名冲突。
@hash1.respond_to?("hash_reverse").should eql false
end
it "A hash data should be reversed" do
require 'ruby_extendsions'
@hash1.hash_reverse.should eql({1=>:a, 2=>:b} )
end
end
上面的代码:spec_helper.rb文件为将来准备,如果扩展其他方法, 会用到一些公用的配置。
测试由一 个正例和一个反例组成。
4. 运行测试:
bundle exec rspec spec, bundle exec确保rspec是使用我们在.gemspec文件里声明的版本。
当然,测试结果是会失败,因为我们还没有扩展hash_reverse方法呢。
5. 实现代码:
打开lib/ruby_extendsions.rb:
require 'ruby_extendsions/hash_extendsions' #我们今天要实现的Hash扩展
require 'ruby_extendsions/array_extendsions' #以后有可能用到对Array方法的扩展,我们就放这个文件里。
然后在lib下建立hash_extendsions.rb文件:module RubyExtendsions
module HashExtendsions #注意模块的命名要和文件名和路径保持一致。
def self.included(base) #hook, 当这个module在被include的时候触发
base.send :include, InstanceMethods #引入实例方法
base.send :extend, ClassMethods # 引入类方法
end
module InstanceMethods
def hash_reverse #我们的hash_reverse是实例方法
hash_new = {}
self.each {|key,value|
if not hash_new.has_key?(key) then hash_new[value] = key end
}
return hash_new
end
end#InstanceMethods
module ClassMethods
#TODO
end#ClassMethods
end #HashExtendsions
end #RubyExtendsions
#真正的扩展
class Hash
include RubyExtendsions::HashExtendsions
end
上面的代码都带注释了。
然后我们运行测试, oK, 都通过了。大功告成了。
6. 发布我们的gem:
我们修改一下.gemspec文件, 把项目相关信息都写里面去:
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = "ruby_extendsions"
s.version = "0.1"
s.platform = Gem::Platform::RUBY
s.authors = ["blackanger"]
s.email = ["blackanger.z@gmail.com"]
s.homepage = "http://rubygems.org/gems/ruby_extendsions"
s.summary = "Ruby Extendsions For Hash"
s.description = "Ruby Extendsions"
s.required_rubygems_version = ">= 1.3.6"
s.rubyforge_project = "ruby_extendsions"
s.add_development_dependency "bundler", ">= 1.0.0"
s.add_development_dependency "rspec"
s.files = `git ls-files`.split("\n")
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
s.require_path = 'lib'
end
然后, 我们在根目录下执行命令: rake install
这个命令会生成pkg/ruby_extendsions-0.1.gem. 到此为止,我们的gem包就打好了。你可以把你的gem项目上传到github。 但是github从去年开始就停止了自动打包服务。所以你如果想使用gem install ruby_extendsions命令来安装你的gem, 需要把它上传到rubygems.org里。 首先,你需要在rubygems.org里注册一个帐号。 其次, gem install gemcutter然后你就push吧。 gem push ruby_extendsions-0.1.gem如果碰到权限的错误,那说明在rubygems里面已经有了和你一样名字的gem包,换个名字就oK了。
发表评论
-
ROR windows 开发环境配置
2017-02-17 20:06 0今天来了兴致想弄下ROR了,本人用的windows8.1 ... -
ROR rails正常启动,但是http://127.0.0.1:3000不能访问的解决办法
2014-10-14 16:25 5443D:\aaa>rails s => Booti ... -
Problem installing RMagick rubygem on Centos 6.3
2014-04-18 23:20 2533gem install rmagick出现错误: Bu ... -
centos yum install nokogiri 1.5.8 不成功的解决方案
2014-04-18 23:03 4298centos下安装nokogiri不成功,提示如下: ge ... -
Scope- ruby中变量的作用范围
2013-06-01 22:54 2389ruby中变量的作用范围有3种 1. Class d ... -
ruby-1.8.7中truncate方法重写
2013-04-29 23:49 1393在ruby-1.8.7中的运用方法truncate会存在问题 ... -
Linux 环境passenger多ruby版本共存部署
2013-04-25 21:53 36481.安装rvm Ruby代码 mk ... -
快速正确的安装 Ruby, Rails 运行环境
2013-04-22 10:50 1249系统需求 首先确定操作系统环境,不建议在 Windows ... -
Nginx+mongrel部署Rails应用
2013-04-21 22:12 1335安装nginx 下载地址 http://nginx.o ... -
从Rails2到Rails3
2013-04-19 15:25 1296我们来看下rails3相比rails2, 进步在哪里, 优势 ... -
用 Ruby scrAPI 做数据采集
2013-02-28 21:59 1469前天在 Railscasts 上 ... -
Ruby 在 Windows 下播放声音
2013-02-07 00:12 1338[代码] ruby代码 -
Ruby读取键盘输入 windows
2013-02-07 00:11 1700[代码] ruby代码 -
rails查看工程的版本兼容问题
2013-02-03 22:37 2128很初学Rails不久,感到Rails的版本不兼容是一个让人 ... -
Ruby 构建支持多线程的 Web 服务器
2013-02-01 22:59 1457[代码] ruby代码 -
Ruby on Rails 使用 Cookie 的方法
2013-02-01 22:55 1306代码] oschina_hello.rb -
蒙娜丽莎的微笑 Ruby实现
2013-01-31 22:27 7279这个挺有意思:Ruby 的 UI 库向来不怎么样,所以这 ... -
Ruby多进程并行抓取网页
2013-01-30 21:42 2032想研究一下各大网站首页有多少个链接,于是用Ruby写 ... -
ruby 163 发送 邮件
2013-01-30 21:01 1543最近学习ruby 写了个 mail 发送 邮件 16 ... -
sitemap_generator 生成 Sitemap
2013-01-27 21:00 1723安装 编辑Gemfile 1 ...
相关推荐
- **鼓励共享精神**:文档中明确表示鼓励用户分享自己的研究成果和经验,共同推动gem5的发展。 - **持续的更新与维护**:gem5项目组致力于保持项目的活跃度,定期发布新版本,并对已知问题进行修复。 总之,gem5...
制作一个简单的gem。
- **导出和报告**:可能提供数据导出功能,便于进一步分析或报告制作。 如果你在使用DerivaGem过程中遇到任何问题,或者需要深入理解二叉树模型及其应用,可以与其他用户或专家联系,共享知识和经验。这个软件是...
通过阅读《GPU Gem1》,读者不仅可以学习到GPU编程的基本概念,还能了解到当前图形学领域的前沿技术,这对于从事视觉艺术、游戏开发、虚拟现实、动画制作等相关工作的专业人士来说,是一份宝贵的参考资料。
"Gem Shader.unitypackage"的导入,将为开发者提供一个现成的工具,他们可以直接应用到自己的项目中,或者作为学习Shader编程的起点。在实践中,你可以通过调整Shader中的参数,观察它们如何影响最终的渲染结果,...
这种自张紧工艺制作的探测器具备无死区、组装便捷、气流均匀等优点,且已成功制造出50cm×100cm的大面积GEM探测器。读出电子学系统由探测器阳极读出板、前端电子学板和数据获取板构成,每个读出单元为1cm²,总有效...
设计中采用了一种名为自张紧工艺的创新方法来制作双层GEM探测器。此工艺已成功应用于制造3-2-2-2结构的50cm×100cm和3-1-1结构的30cm×30cm GEM探测器。自张紧工艺的优势在于能确保大面积GEM探测器的均匀性和稳定性...
宝石 具有简单但可自定义设计的现代...Gem是一个开源项目,它是用JavaFX制作的。 如果您愿意帮助改进Gem并想为该项目做出贡献,请单击以获取更多信息。 执照 版权所有:copyright:2020 Adel Senhadji 该项目已获得许可。
con t con t interface gpon-olt_1/ 2 / 5 interface gpon-olt_...gemport 1 name gemport-1 unicast tcont 1 gemport 1 name gemport-1 unicast tcont 1 gemport 1 traffic-limit upstream gem-10M downstream gem-10M
制作Ruby宝石 想要制作Ruby宝石的人的教程。 为什么是宝石? 在开发Ruby或Rails应用程序时,您希望将代码公开给具有相同功能的开发人员。 因此,您使代码像libarary。 是的,这是一颗宝石。 环境 Ruby2.2.3 栏杆...
制作 卷曲 tar、sed、make(无论如何都应该存在) 安装 gem 安装 openbabel 它下载 OpenBabel 源代码。 如果尚未安装,它会编译并安装 OpenBabel 库。 它安装 OpenBabel ruby 绑定。 如果 OpenBabel 尚未...
注意: ... 如果我错过了一些东西,或者新浪添加了一些东西,请随意将其添加并自己添加。 我会尽力使宝石保持最新状态。 这个宝石是在创建的过程中制作的,请花点时间去检查该项目。 我认为这是与新浪
标题中的“gem:直接使用Web服务制作原型网站”指的是利用Web服务工具来快速构建Flask网站的原型。在Web开发中,原型设计是先于实际开发的重要步骤,它帮助开发者和设计师快速创建出一个功能简单但能展示核心概念的...
目前,这个 gem 仅涵盖授权标头 HMAC SHA 256 签名,并且只返回 JSON 以供您制作。 未来的版本可能会在 Structs 中构造数据。 安装 将此行添加到应用程序的 Gemfile 中: gem 'companies_nz' 然后执行: $ ...
我还想尝试自己制作一个 Ruby gem(我的第一个!),所以我决定制作一个从我的代码中删除所有binding.pry实例的宝石。 就这样,Prybaby 诞生了。安装只需运行gem install prybaby即可gem install prybaby它。使用它...
除了上述提到的关键技术外,文献还提到了在制作GEM专用PCB时会涉及到的材料特性、电路设计要求以及特殊设备的使用。例如,为了获得高精度的同心环,对所用的CCL(Copper Clad Laminate,覆铜层压板)和PCB基材的品质...
rom-fmp 用于rom-rb数据映射和持久性gem的文件制作适配器。 有关Ruby Object Mapper的更多信息,请参见github上的或 。安装将此行添加到您的应用程序的Gemfile中: gem 'rom-fmp'然后执行: $ bundle或将其自己安装...
我发现很多时候,当我制作一些种子数据或在IRB中测试一些呼叫时,我正在输入某些数据,例如电子邮件,URL,或者可能需要指定图像。 我浪费了无数的按键! 因此,我创建了这个小宝石来帮助简化事情,希望它也能对您...
阅读 的制作。 安装 将此行添加到您的应用程序的Gemfile中: gem 'coffee_routes' 然后执行: $ bundle 或者自己安装: $ gem install coffee_routes 用法 在您的应用程序中包含coffee_routes.coffeee # =...
或者自己安装: $ gem install aws_upload 用法 制作初始化脚本来配置上传参数。 在 config/initializers/aws_uplaod.rb AwsUpload . configure do | config | config . aws_access_key_id = ENV [ 'AWS_...