Tạo Gem bằng Bundler
Bài đăng này đã không được cập nhật trong 9 năm
I. Giới thiệu
Gem là một gói thư viện Ruby. Trong giới hạn bài viêt này, chúng tôi sẽ giới thiệu về cách thức xây dựng, biên dịch, cài đặt và công bố Gem.
II. Tạo Gem
Khởi tạo
Có nhiều công cụ để xây dựng và quản lý Gem được phát triển trong nhiều năm qua. Ví dụ như echoe gem, jewler. Trong bài viết này chúng tôi sẽ dùng bundler để xây dựng, quản lý gem
Dưới đây là câu lệnh tạo 1 gem với tên mixi
$ bundle gem mixi
create mixi/Gemfile
create mixi/Rakefile
create mixi/LICENSE
create mixi/README.md
create mixi/.gitignore
create mixi/mixi.gemspec
create mixi/lib/mixi.rb
create mixi/lib/mixi/version.rb
Initializating git repo in
/home/nghialv/project/gem/tmp/mixi
Khi chạy câu lệnh bundle gem, thư mục mixi với 1 số file sẽ được tạo ra. Đầu tiên chúng ta hay quan tâm đến file mixi.gemspec
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/mixi/version', __FILE__)
Gem::Specification.new do |gem|
gem.authors = ["levannghia"]
gem.email = ["nghialv.bk@gmail.com"]
gem.description = %q{TODO: Write a gem description}
gem.summary = %q{TODO: Write a gem summary}
gem.homepage = ""
gem.files = `git ls-files`.split($\)
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.name = "mixi"
gem.require_paths = ["lib"]
gem.version = Mixi::VERSION
end
Đây chính là file quan trọng nhất của gem. Nó chứa metadata về gem mà chúng ta đang tạo.
Gemfile
Trong Rails application, Gemfile quản lý những gói gem phụ thuộc được sử dụng trong ứng dung.
source 'https://rubygems.org'
Specify your gem's dependencies in
mixi.gemspec
gemspec
Ở đây sẽ sử dụng add_dependency để khai báo các gói gem phục thuộc trong gemspec, bundler sẽ nạp tự động thông qua Gemfile.
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/mixi/version', __FILE__)
Gem::Specification.new do |gem|
add_dependency “rspec”
end
Rồi dùng lệnh bundle install để cài đặt gem
$ bundle install
Using diff-lcs (1.1.3)
Using mixi (2.0.1) from source at .
Using rspec-core (2.11.1)
Using rspec-expectations (2.11.3)
Using rspec-mocks (2.11.2)
Using rspec (2.11.0)
Using bundler (1.1.4)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Rakefile
Rakefile khai báo helper task cho bundler
!/usr/bin/env rake
require "bundler/gem_tasks"
Dùng lệnh rake -T để xem 3 task mặc định khai báo trong Rakefile
$ rake -T
rake build # Build mixi-2.0.1.gem into the pkg directory
rake install # Build and install mixi-2.0.1.gem into system gems
rake release # Create tag v2.0.1 and build and push mixi-2.0.1.gem to Ruby...
Viết test
Khai báo thêm helper task trong Rakefile
require "rake/testtask"
Rake::TestTask.new do |t|
t.libs << 'test'
end
desc "Run tests"
task :default => :test
Tạo test file trong thư mục test
$ emacs test/test_mixi.rb
require 'test/unit'
require 'mixi'
class MixiTest < Test::Unit::TestCase
def test_something
assert_equal "hello world", "hello world"
end
end
Bây giờ có thể dùng lệnh rake test để chạy test
$ rake test
Run options:
# Running tests:
.
Finished tests in 0.000359s, 2787.7440 tests/s, 2787.7440 assertions/s.
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
III. Dịch, cài đặt, công khai gem trên rubygems
rake build : dịch
rake install : cài đặt
rake release: công khai gem trên rubygems
IV. Mixi gem (https://github.com/dainghiavotinh/mixi)
Cấu trúc gem
.
├── Gemfile
├── Gemfile.lock
├── lib
│ ├── mixi
│ │ ├── authentication.rb
│ │ ├── calendar.rb
│ │ ├── checkin.rb
│ │ ├── check.rb
│ │ ├── client.rb
│ │ ├── connection.rb
│ │ ├── diary.rb
│ │ ├── group.rb
│ │ ├── message.rb
│ │ ├── people.rb
│ │ ├── people_search.rb
│ │ ├── persistance.rb
│ │ ├── photo.rb
│ │ ├── profile_image.rb
│ │ ├── update.rb
│ │ ├── user.rb
│ │ ├── version.rb
│ │ └── voice.rb
│ └── mixi.rb
├── LICENSE
├── mixi.gemspec
├── pkg
│ ├── mixi-0.0.2.gem
│ └── mixi-1.0.0.gem
├── Rakefile
├── README.md
└── test
└── test_mixi.rb
4 directories, 28 files
Cài đặt
Khai báo trong Gemfile
gem 'mixi', git: "https://github.com/dainghiavotinh/mixi.git"
Sau đó chạy lệnh để cài đặt gem
bundle install
Cách sử dụng
- Khởi tạo mixi:
mixi = Mixi::Client.new(CUSTOMER_KEY, CUSTOMER_SECRET, MIXI_TOKEN, MIXI_REFRESH_TOKEN)
Trong đó:
CUSTEMER_KEY : customer key
CUSTOMER_SECRET : customer secret
MIXI_TOKEN : mixi token (obtained by omiauth)
MIXI_REFRESH_TOKEN : mixi refresh token (obtained by omiauth)
- Danh sách bạn bè
friends = mixi.friends
- Cập nhật status có đính kèm ảnh
data = IO.binread("path to photo")
results = mixi.posting_with_photo("status", data)
All rights reserved