zl程序教程

您现在的位置是:首页 >  后端

当前栏目

创建自己的ruby Gems

ruby 创建 自己
2023-09-11 14:16:03 时间
RubyGems是一个库和程序的标准化打包以及安装框架,它使定位、安装、升级和卸载Ruby包变的很容易。rails以及它的大部分插件都是以gem形式发布的。本文描述一个自己创建ruby Gems的过程。
    假设你今天用ruby实现了一个stack结构,你想发布到网上让别人可以共享,OK,工作开始了。首先你的程序当然要先写好了:
#stacklike.rb
module Stacklike
 attr_reader:stack
 def initialize
    @stack=Array.new
 end
 def add_to_stack(obj)
    @stack.push(obj)
 end 
 def take_from_stack
    @stack.pop
 end
 def size
    @stack.length
 end
 alias length size
 
 def clear
   @stack.clear
 end
end       然后就是我们的Stack类,引入这个Module,请注意,我们这里只是特意这样做,增加点复杂度:
#stack.rb
require stacklike
class Stack
 include Stacklike
end

作为一个要被大众使用的小程序,一定要有完备的测试代码,OK,ruby内置了单元测试库,我们来写个单元测试来测试Stack:
require stack
require test/unit
class TestStack  Test::Unit::TestCase
  def testStack
    stack=Stack.new
    assert_equal(0,stack.size)
    assert_equal(stack.length,stack.size) 
    stack.add_to_stack(1)
    assert_equal(1,stack.length)
    assert_equal(1,stack.take_from_stack)
    
    stack.clear
    assert_equal(0,stack.length)
    assert_nil(stack.take_from_stack)
    
    10.times{|i| stack.add_to_stack(i)}
    assert_equal(10,stack.size)
    assert_equal(stack.length,stack.size)
    9.downto(4){|i| assert_equal(i,stack.take_from_stack)} 
    
    assert_equal(4,stack.length)
    assert_equal(3,stack.take_from_stack)
    assert_equal(3,stack.length)
    
    stack.clear
    assert_equal(0,stack.length)
    assert_nil(stack.take_from_stack)
  end
end
如果你使用radrails或者RDT运行这段代码,你将看到让人舒服的greenbar,一切正常。程序写好了,接下来就是关键步骤了,怎么发布成ruby Gems呢?

第一步,写Gems规范文件
   gemspec是ruby或者YAML形式的元数据集,用来提供这个gem的关键信息,我们创建一个文件夹就叫stack,然后在下面建立2个目录两个文件:
lib目录:用于存放库的源代码,比如这个例子中的stack.rb,stacklike.rb
test目录:用于存放单元测试代码。
README文件:描述你的库的基本信息和版权许可证等
stack.gemspec:gems规范文件,用以生成gem
当然,也可以有docs目录用以存放rdoc文档和ext目录用以存放ruby扩展,我们这个简单例子就免了。
看看我们的规范文件:
#stack.spec
require rubygems
SPEC=Gem::Specification.new do |s|
  s.name="Stack"
  s.version=0.01
  s.author=dennis zane
  s.email="killme2008@gmail.com"
  s.homepage="http://www.rubyeye.net"
  s.platform=Gem::Platform::RUBY
  s.summary="ruby实现的Stack"
  condidates =Dir.glob("{bin,lib,docs,test}/**/*")
  s.files=condidates.delete_if do |item|
    item.include?("CVS")|| item.include?("rdoc")
  end
  s.require_path="lib"
  s.autorequire=stack,stacklike
  s.test_file="test/ts_stack.rb"
  s.has_rdoc=false
  s.extra_rdoc_files=["README"]
end  
很明显,规范文件也是ruby程序(也可以用YAML描述),设置了这个gem的主要关键信息:名称、作者信息、平台,需要注意的就是files数组过滤掉了cvs和rdoc文件,require_path和auto_require让你指定了require_gem装入gem时会被添加到$LOAS_PATH(ruby查找库的路径)中的目录(也就是我们源代码存放的lib),auto_require指定了装载的文件名,我们没有rdoc,所有设置has_rdoc为false,附带文档就是README。

第二步 修改单元测试文件引用路径
过去我们假设ts_stack.rb与stack.rb、stacklike.rb在同一个目录下,可是我们现在将它们分别放在lib和test目录,TestStack 怎么引用测试的类呢?答案是在ts_stack.rb开头加上一行:
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
最后一步 构建gem
在stack目录执行下列命令:
ruby stack.gemspec  
或者:
gem build stack.gemspec 将生成一个文件,你可以将这个文件共享给朋友们咯。你的朋友只要下载这个文件,执行:
gem install Stack.0.01.gem

将在他们的ruby环境中安装你写的stack,比较遗憾的是,你这个stack确实太简陋了,哈哈。

文章转自庄周梦蝶  ,原文发布时间5.17


别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境 在每个开发者心里,都会有一门“最好”的语言,在这个世界的某个深处,在一些矫矫不群的人们心中,这门语言的名字叫做Ruby,它今年二十八岁了,历史和Java一样的悠久,但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源,甚至于它每年都要被“死亡”一次,相比于有太阳计算机系统、甲骨文、IBM 这些大公司支持的 Java,它是那么的一无所有,但是,它又拥有全世界最虔诚的“信徒”,拥有最活跃的开发者社区,这一切,又让它是那么的应有尽有。是的,这就是Rubyist的理念:有的时候,你想证明给一万个人看,到后来,你发现只得到了一个明白的人,那就够了。
基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境 2023年,“非著名Web框架”--Ruby on Rails已经18岁了。在今年,Rails 6.0趋于完善,除了拿掉讨厌的Jquery,Webpacker 也成为默认前端打包方案,Sprockets 开始软着陆,未来很可能会和Jquery一样被彻底废弃,这就是历史的进程。
【Ruby on Rails全栈课程】5.3 项目上线--git部署项目 1、git分布式版本控制系统是什么? 现在本地电脑1有一套data_system的代码,如果想把这套代码放到云服务器上,应该怎么做呢? 最简单的做法是直接将本地电脑1上的代码拷贝到服务器上。 但是我们拷贝完成后发现了一个bug1,在本地电脑1的代码中修复了之后。需要与云服务器上的代码同步,还是要将本地电脑1的代码拷贝到服务器上吗? 团队的另一个人修改了bug2,没有修改bug1,他如果将自己本地电脑2的代码拷贝到服务器上,就会将你刚刚修改的bug1代码覆盖掉。 所以我们现在需要一个第三方先将代码处理整合一下,将我们自己的代码与团队其他人的代码整合起来,再通过git pull操作将整合后