一、开发 Ruby
库
- 安装
bundle
gem install bundle
复制代码
cd
到桌面
cd /Users/mac/Desktop
复制代码
1、创建 想要开发的 Ruby
库的框架
- 格式
bundle gem 名称
复制代码
- 示例
bundle gem bwgem
复制代码
- 桌面生成
bwgem
文件夹, 里面自动生成了一些文件
cd
到bwgem
文件夹
cd bwgem
复制代码
- 可以使用
tree
工具查看目录结构
MACdeiMac:bwgem mac$ tree
.
├── CODE_OF_CONDUCT.md
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│ ├── console
│ └── setup
├── bwgem.gemspec
└── lib
├── bwgem
│ └── version.rb
└── bwgem.rb
3 directories, 10 files
复制代码
tree
工具可以使用homebrew
安装, 执行brew install tree
- 使用
Rubymine
打开bwgem
文件夹
2、查看Gemfile
文件
Gemfile
文件内容如下
# frozen_string_literal: true
source "https://rubygems.org"
# Specify your gem's dependencies in bwgem.gemspec
gemspec
gem "rake", "~> 13.0"
gem "rubocop", "~> 1.7"
复制代码
- 可以看到, 在
Gemfile
中会加载gemspec
, 就是生成的bwgem.gemspec
文件 - 也就是说, 通过
bundle install
安装的内容, 就在bwgem.gemspec
文件中配置
3、实现自定义功能
- 查看
lib
文件夹中的bwgem.rb
文件, 可以看到自动生成了模块Bwgem
# frozen_string_literal: true
require_relative "bwgem/version"
module Bwgem
class Error < StandardError; end
# Your code goes here...
end
复制代码
- 在
lib
文件夹中创建文件write_file.rb
文件, 并编写如下代码
module Bwgem
class Writer
def initialize(write_file_path, content)
# 将 content, 写到 write_file_path 文件中
File.open(write_file_path, "w+") { |f| f.write(content) }
end
end
end
复制代码
- 然后在
bwgem.rb
文件中导入write_file.rb
文件
# frozen_string_literal: true
require_relative "bwgem/version"
module Bwgem
class Error < StandardError; end
# Your code goes here...
require 'write_file'
end
复制代码
4、在 bin
文件夹中 创建属于自己的工具
- 将
bin
文件夹中自动生成的两个文件console
和setup
删除
rm -rf console
rm -rf setup
复制代码
- 在
bin
文件夹中创建属于自己的工具文件, 我这里取名为bwtest
5、编写 gemspec
文件
- 查看
bwgem.gemspec
文件内容
# frozen_string_literal: true
require_relative "lib/bwgem/version"
Gem::Specification.new do |spec|
spec.name = "bwgem"
spec.version = Bwgem::VERSION
spec.authors = ["TODO: Write your name"]
spec.email = ["TODO: Write your email address"]
spec.summary = "TODO: Write a short summary, because RubyGems requires one."
spec.description = "TODO: Write a longer description or delete this line."
spec.homepage = "TODO: Put your gem's website or public repo URL here."
spec.license = "MIT"
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
spec.files = Dir.chdir(File.expand_path(__dir__)) do
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
# Uncomment to register a new dependency of your gem
# spec.add_dependency "example-gem", "~> 1.0"
# For more information and examples about making a new gem, checkout our
# guide at: https://bundler.io/guides/creating_gem.html
end
复制代码
- 可以根据
cocopods
的 cocoapods.gemspec 文件编写
# frozen_string_literal: true
require_relative "lib/bwgem/version"
Gem::Specification.new do |spec|
spec.name = "bwgem"
spec.version = Bwgem::VERSION
spec.authors = ["伯文"] # 作者昵称
spec.email = ["邮箱"] # 作者邮箱
spec.summary = "描述"
spec.description = "详细描述" # 详细描述
spec.homepage = "https://www.baidu.com" # 主页
spec.license = "MIT"
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0") # 支持的最低版本
spec.files = Dir["lib/**/*.rb"] + %w{ bin/bwtest README.md LICENSE.txt } # 自定义Ruby库中的文件
spec.executables = %w{ bwtest } # 可执行文件
spec.require_paths = %w{ lib } # 使用绝对路径加载文件: require '文件路径'
end
复制代码
6、在自定义工具中编写自定义功能
- 找到
bin
文件家中的bwtest
文件, 编写自定义功能
#!/usr/bin/env ruby
# 因为 bwgem.gemspec 文件中的 spec.require_paths = %w{ lib }, 所以可以使用 `require` 直接加载 `lib` 文件夹中的文件
require 'bwgem'
puts "这是一个简单的 Ruby 库"
# ARGV: 执行本文件时, 传入的参数数组
# ARGV[0]: 文件路径
# ARGV[1]: 写入文件中的内容
Bwgem::Writer.new(ARGV[0], ARGV[1])
复制代码
bwtest
中的功能是: 在调用时, 传入两个参数, 第一个参数是文件路径, 第二个参数是需要写入文件中的内容
7、执行自定义工具
- 终端执行
# cd /Users/mac/Desktop/bwgem
bundle install
复制代码
- 执行
bwgem
文件
# 在桌面的txt文件中, 写入 hello world!
bundle exec bwtest /Users/mac/Desktop/txt 'hello world!'
复制代码
- 终端打印
这是一个简单的 Ruby 库
复制代码
- 同时桌面生成
txt
文件, 内容是hello world!
二、将开发的 Ruby
库上传至 RubyGems
1、将开发的工具
推送到远程git
仓库
- 在 码云 上创建一个
git
仓库
- 在执行
bundle gem bwgem
时, 就自动生成了本地的git
仓库
- 修改
bwgem.gemspec
文件
# frozen_string_literal: true
require_relative "lib/bwgem/version"
Gem::Specification.new do |spec|
spec.name = "bwgem"
spec.version = Bwgem::VERSION
spec.authors = ["bwwen"] # 作者昵称
spec.email = ["963527512@qq.com"] # 作者邮箱
spec.summary = "描述"
spec.description = "详细描述" # 详细描述
spec.homepage = "https://gitee.com/lingtian.com/bwgem.git" # 主页: git仓库地址
spec.license = "MIT"
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0") # 支持的最低版本
spec.files = Dir["lib/**/*.rb"] + %w{ bin/bwtest README.md LICENSE.txt } # 自定义Ruby库中的文件
spec.executables = %w{ bwtest } # 可执行文件
spec.require_paths = %w{ lib } # 使用绝对路径加载文件: require '文件路径'
end
复制代码
- 修改发布的版本号
- 关联创建的远程
git
仓库, 并将本地代码推到远程仓库
git remote add origin https://gitee.com/lingtian.com/bwgem.git
git add .
git commit -m '初始化'
git push --set-upstream origin master
复制代码
- 打上tag
git tag 1.0.0
git push --tags
复制代码
2、注册RubyGems
账号
- 在网站 rubygems.org/sign_up 中注册
RubyGems
账号
3、本地安装开发的Ruby
工具
- 终端执行
# cd /Users/mac/Desktop/bwgem
gem build bwgem.gemspec
复制代码
- 成功打印
Successfully built RubyGem
Name: bwgem
Version: 1.0.0
File: bwgem-1.0.0.gem
复制代码
- 会生成
bwgem-1.0.0.gem
文件
- 本地
gem
安装
gem install ./bwgem-1.0.0.gem
复制代码
- 可以查看本地安装的Ruby工具:
bwgem-1.0.0
- 调用命令卸载
gem uninstall bwgem
复制代码
4、将工具上传至RubyGems
- 执行命令, 过程需要输入在
RubyGems
注册时的密码
# curl -u RubyGems注册账号 https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
curl -u bwgem https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
复制代码
chmod 0600 ~/.gem/credentials
复制代码
- 执行命令, 将生成的
bwgem-1.0.0.gem
文件推送到RubyGems
gem push bwgem-1.0.0.gem
复制代码
- 当
bwgem-1.0.0.gem
被推送到RubyGems
之后, 打开 RubyGems, 登录账号可以看到下图
- 此时, 就可以让别人使用自己开发的
Ruby
库了 - 使用gem安装
gem install bwgem
复制代码
5、执行开发的Ruby工具
- 使用
gem
安装工具
gem install bwgem
复制代码
- 执行开发的Ruby工具
bwtest /Users/mac/Desktop/say.txt 'Hello World!'
复制代码
- 可以看到终端打印
这是一个简单的 Ruby 库
复制代码
- 同时桌面生成
say.txt
文件, 内容是Hello World!
三、升级自己开发的Ruby库
- 根据自己的需要, 修改代码
- 我这里修改了
bin
文件夹中bwtest
文件的实现
#!/usr/bin/env ruby
# 因为 bwgem.gemspec 文件中的 spec.require_paths = %w{ lib }, 所以可以使用 `require` 直接加载 `lib` 文件夹中的文件
require 'bwgem'
require 'pathname'
puts "#{ARGV[0]} 中写入 #{ARGV[1]}"
# ARGV: 执行本文件时, 传入的参数数组
# ARGV[0]: 文件路径
# ARGV[1]: 写入文件中的内容
Bwgem::Writer.new(ARGV[0], ARGV[1])
复制代码
- 接着修改版本号
- 将代码推送到远程
Git
仓库, 并打上tag
git add .
git commit -m '3.0.0'
git push origin master
git tag 3.0.0
git push --tags
复制代码
- 接着通过
bwgem.gemset
生成bwgem-3.0.0.gem
gem build bwgem.gemspec
复制代码
- 成功后终端打印
Successfully built RubyGem
Name: bwgem
Version: 3.0.0
File: bwgem-3.0.0.gem
复制代码
- 然后将
bwgem-3.0.0.gem
推送到RubyGems
gen push bwgem-3.0.0.gem
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END