`

簡單的建立自己的 Gem Package

    博客分类:
  • gem
阅读更多
一不小心就跟 Godfat 寫的議題衝突,不過沒關係,我是走輕鬆簡單取向的。這次要講的就是如何將自己寫的程式包成 Ruby GEM,本文的參考自 JavaEye 上面的创建自己的ruby Gems,程式也是來自計算民國跟學年度的 Plugin的範例。



結構

要建立一個 GEM Package,首先要先搞清楚結構。因為我們是走極簡路線的,所以現在一開始連 unit-test 都不要 test。將你的 GEM Package 設定為下面的結構。

-----gem.spec
|
--README
|
--lib/

裡面 lib 就是放所有程式的所在。

結構檔

根目錄下面有 gem.spec,跟 README 兩個檔案。其中 gem.spec 是描述 GEM Package 的結構檔,也是最重要的檔案,裡面記載了這個 GEM Package 絕大多數的資訊。可以說學會了寫這個檔案,就學會了打包 GEM Package。這裡要講的是其實 gem.spec 檔名是我隨便取的,檔名不限定,而且他的格式可以使用 ruby 或是 YAML 語法的,這裡先使用 Ruby 語法。

require 'rubygems'
SPEC=Gem::Specification.new do |s|
s.name="Taiwan_Year"
s.version='0.01'
s.author='thegiive'
s.email="thegiive at gmail dot com"
s.homepage="http://lightyror.thegiive.net/"
s.platform=Gem::Platform::RUBY
s.summary="為台灣學年度跟民國所寫的Plugin"
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.has_rdoc=false
s.extra_rdoc_files=["README"]
end
裡面
  1. s.name 就是這個 gem 的名稱,也是他打包出來的檔名,也就是說這個 gem package 會叫做 Taiwan_Year-0.01.gem。
  2. s.version 部分 godfat 有解釋過,盡量從 0.0.1 而不是從 0.0.0 開始寫起。
  3. s.summary 就是當你打入 gem list 出現的簡單文字,安裝了本 gem ,按下 gem list 這裡會出現
    sources (0.0.1)
    This package provides download sources for remote gem installation

    Taiwan_Year (0.01)
    為台灣的學年度跟民國寫的 Plugin

    vim-ruby (2006.07.11)
    Ruby configuration files for Vim. Run 'vim-ruby-install.rb' to
    complete installation.
    這樣的情況。

再來就是 README ,就是打入一些information進去摟。

放入程式

最後把程式放入到 lib 底下,這裡是使用計算民國跟學年度的 Plugin的範例,把他放入 lib/year.rb 檔案裡面
class Time

def roc_year
self.year -
1911
end

def student_year
if self.month
< 7
self.roc_year -
1
else
self.roc_year
end
end

end
打包 gem

當程式都放好後,開始打包 gem 了。我們這裡使用 gem build 指令來打包
gem build gem.spec
這裡面的 gem.spec 就是你剛剛寫的結構檔的檔名。成功了之後,你就會發現我們已經產生了一個 Taiwan_Year-0.01.gem。

安裝 gem

要安裝這個剛打包好的 gem 就是直接打
gem i TaiwanYear-0.01.gem
即可。

使用 gem

要使用剛剛安裝好的 gem package ,首先要 require 'rubygems' ,告訴程式這個是使用 gem 的程式。

其次要搞清楚程式檔名,像我雖然 GEM Package 叫做 TaiwanYear ,但是我的程式其實是放在 lib/year.rb 底下的,所以使用上還是得必須 require 'year' 。

解決方式很簡單,當我們放入程式到 lib 裡面的時候,請將程式名稱取的跟 GEM Package 名字相同即可。像是當初在打包時,我們就將程式放在 lib/TaiwanYear.rb 底下,以後使用上就可以這樣使用。

require 'rubygems'
require 'TaiwanYear'
puts Time.now.roc_year
如此,我們已經學會如何打包 gem 了。
分享到:
评论

相关推荐

    Ruby包管理器gem常用命令

    此外,gem还支持创建自己的gem包,使用 `gem build package.gemspec` 命令可以构建gem包。对于大型项目,推荐使用bundler来管理多个版本的gem,确保项目依赖的一致性。 总的来说,gem为Ruby开发者提供了强大的包...

    Ruby环境下安装使用bundler来管理多版本的gem

    除了`bundle exec`,bundler还提供了一系列其他有用的命令,如`bundle update`用于更新所有或特定的gem,`bundle install --path vendor/bundle`可将gem安装到指定的本地路径,以及`bundle package`用于缓存gem,...

    data-viz:动态生成和可视化交互式数据模型方案的简单 gem

    "data-viz:动态生成和可视化交互式数据模型方案的简单 gem" 提供了一个基于 JavaScript 的解决方案,旨在简化数据可视化的开发流程。 这个 gem 可能是一个开源库,它封装了用于创建动态数据模型的工具和方法。在...

    furious:将宝石推入Gemfury的简单方法

    furious package -建立一个宝石包裹 furious tag -在Git存储库中标记版本 furious push -将gem推送到Gemfury(要求package已成功运行,需要将GEMFURY_TOKEN环境变量设置为您的令牌,并需要将GEMFURY_ACCOUNT环境变量...

    soju:[WIP]简单和最小的着陆页| 吉柯主题

    它原本是为通用而设计的,但随后,它的字体使它看起来像是一个用于code package的网站。 信息: 欢迎使用您的新Jekyll主题! 在此目录中,您将找到能够将主题打包成gem所需的文件。 把你的布局_layouts ,你包括_...

    软件包管理器fpm.zip

    `fpm`(Fast Package Manager)是一个开源项目,旨在简化跨多种平台创建软件包的过程。它的出现极大地减轻了开发者在Linux、Unix系统上构建deb、rpm以及其他类型软件包时所面临的困扰。 **1. FPM的核心功能** - **多...

    itamae:受Chef启发的配置管理工具,但更简单,更轻巧。 前身为Lightchef

    受Chef启发的简单轻巧的配置管理工具。 概念 类Chef DSL(但与Chef不兼容) 比厨师更简单,更轻 只有食谱 幂等 安装 $ gem install itamae 入门 创建一个配方文件作为recipe.rb : package 'nginx' do action :...

    rpm打包及企业YUM仓库构建

    - 编写脚本内容,这里以创建一个简单的 RPM 包为例: ```bash #!/bin/bash fpm -s dir -t rpm -n nginx-custom -v 1.8.0 -C /application/nginx-1.8.0 ``` - 运行脚本,生成 RPM 包: ```bash bash nginx_...

    aaaimx.github.io:由软件部提供支持的网站的源代码-Software website source code

    该项目建立在之上-简单,可博客的静态网站生成器。 Jekyll也恰好是GitHub Pages的引擎,这意味着您可以使用Jekyll从GitHub的服务器上免费托管您的网站。 。 模板由团队带来。 先决条件 :clipboard: Ruby和GEM ...

    Ruby-Torba是Sprockets的一个Bowerless资源管理器

    2. **自动集成**:Torba能够自动检测并集成通过npm或yarn安装的前端资源,无需手动配置或创建额外的Bower配置文件。 3. **智能打包**:Torba分析依赖关系,只打包实际应用到项目中的前端资源,从而减少不必要的文件...

    FPM定制RPM包实践1

    【FPM定制RPM包实践】是针对Linux系统中软件部署的一种高级技巧,它结合了编译安装和yum...通过这些参数,FPM使得创建和维护自定义RPM包变得更加简单,尤其对于中大型互联网企业的运维自动化来说,是不可或缺的技能。

    HTML-toast-alert

    目标是创建一个可以自定义和扩展的简单核心库。 BrowserStack提供的浏览器测试。 当前版本 2.1.4 演示版 演示可以在找到 CDN Toastr托管在cdnjs和jsdelivr 除错 缩小的 安装 NuGet图库 Install-Package toastr...

    位置:through通过代码配置macOS环境

    在macOS操作系统中,通过代码来配置环境是一种高效且灵活的方法,这可以帮助开发者或技术爱好者建立一个定制的工作环境,以满足特定的需求。本教程将详细讲解如何利用一系列工具来完成这个过程,包括`Homebrew`、`...

    sublime-rails-snippets:最新的Ruby和Rails版本的Sublime Text代码段

    安装"sublime-rails-snippets"插件非常简单,你可以通过Sublime Text的Package Control来实现。首先确保你已经安装了Package Control,然后在命令面板中选择"Package Control: Install Package",搜索"sublime-rails...

    tasmun:建立在Jekyll上的TASMUN网站

    这个过程无需数据库支持,只需简单的文本编辑和命令行操作,使得网站的维护变得更加简单和高效。对于TASMUN这样的项目,这种轻量级且易于部署的特性非常合适。 要开始构建TASMUN网站,你需要先确保你的系统已经安装...

    Mac 环境初始化 Python 写的自动打包ipa的系统 (超实用).zip

    - **Swift Package Manager**:苹果推出的包管理器,可用于管理Swift项目,也可以配合Python脚本使用。 - **PyObjC**:Python与Objective-C的桥梁,允许Python调用Cocoa框架,这在处理iOS特定任务时非常有用。 - *...

    PyPI 官网下载 | django_filter-1.0.0-py2.py3-none-any.whl

    在Python的世界里,PyPI(Python Package Index)是官方的第三方Python软件包仓库,开发者可以在这里发布和分享自己的Python库。`django_filter-1.0.0-py2.py3-none-any.whl`是我们在PyPI官网上找到的一个特定版本的...

    优点:一个简单的项目设置工具

    1. **Package Manager**:Prosit可能包含了包管理功能,允许用户安装、更新和管理项目所依赖的各种软件包或库,比如在编程中常用的npm、pip或gem等。这有助于保持项目的整洁和可维护性。 2. **Project Manager**:...

    PyPI 官网下载 | pyinfra-0.11.dev3-py3-none-any.whl

    例如,创建一个简单的部署脚本,并运行: ```python # my_deploy.py from pyinfra import host from pyinfra.modules import apt, files # 更新系统包 apt.update() # 安装Nginx apt.install('nginx') # 确保...

Global site tag (gtag.js) - Google Analytics