Tạo Gem bằng Bundler
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 ...
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)