Biểu đồ đóng góp GitHub của bạn có màu xám không? Bạn có thể sử dụng một dự án mã nguồn mở để làm việc. Nhưng bạn không cần phải bắt đầu lại từ đầu. Cách dễ nhất để tạo một dự án phụ hữu ích là rút nó ra khỏi ứng dụng bạn đang xây dựng. Đó là cách Rails ra đời!
Nhưng làm thế nào để bạn biết những gì để giải nén? Và làm cách nào để biến nó thành một viên ngọc quý mà không phá hủy quy trình làm việc của bạn?
Tìm mã bạn muốn trích xuất.
Ở đâu đó, sâu bên trong ứng dụng của bạn, là một số mã không thuộc về đó. Mã không cần ứng dụng của bạn để thực hiện công việc của nó. Nó ở đâu?
Đôi khi, bạn sẽ chỉ phải đoán. Nhưng tôi thường tìm thấy mã có thể trích xuất ở một vài nơi giống nhau:
-
Xác thực
Bạn đã viết bất kỳ xác nhận tùy chỉnh nào cho các thuộc tính của mình chưa? Những thứ đó có thể tạo nên những viên ngọc tuyệt vời.
-
Những thay đổi bạn đã thực hiện đối với Rails
Thỉnh thoảng, bạn sẽ phải làm rối với Rails để có được các hook cam kết hoạt động trong các bài kiểm tra hoặc các thuộc tính trống để biến thành NULL trong cơ sở dữ liệu. Bất cứ khi nào tôi chuyển loại logic này thành một viên ngọc, nó sẽ trở nên ổn định hơn và dễ hiểu hơn.
-
Mô hình ghi âm không hoạt động
Bạn có phân tích cú pháp địa chỉ email hoặc số điện thoại nhiều đến mức bạn đã chuyển nó vào lớp riêng của nó không? Các lớp này thường hữu ích trong các ứng dụng khác và chúng khá dễ biến thành đá quý.
-
Đối tượng giả mạo và xác nhận tùy chỉnh
Bạn có thể viết các bài kiểm tra dễ đọc hơn bằng cách sử dụng các xác nhận tùy chỉnh. Và khi bạn có một số xác nhận tùy chỉnh tốt được viết cho một thư viện hoặc mẫu, chúng sẽ hữu ích cho bất kỳ ai khác sử dụng thư viện hoặc mẫu đó.
Bạn không cần phải nghĩ lớn. Một số viên ngọc yêu thích của tôi chỉ là một tệp!
Và nếu bạn vẫn không thể quyết định những gì sẽ trích xuất, hãy duyệt qua danh sách danh mục trên RubyToolbox để tìm một số cảm hứng.
Đặt mã của bạn vào một thư mục giống như đá quý
Khi bạn biết mã nào bạn sẽ biến thành đá quý, hãy di chuyển mã đó xung quanh để nó phù hợp với cấu trúc giống như đá quý bên trong ứng dụng của bạn.
Trong ứng dụng Rails, tôi sử dụng lib/
như một khu vực tổ chức đá quý . lib/
là nơi tôi đặt mã có tiềm năng biến thành đá quý của riêng nó. Vì vậy, nếu bạn đang tạo đá quý có tên “json_api_client”, thì lib/
của ứng dụng Rails của bạn thư mục có thể trông giống như sau:
...
my_rails_app/lib/json_api_client.rb
my_rails_app/lib/json_api_client/associations.rb
my_rails_app/lib/json_api_client/connection.rb
...
Hầu hết các đá quý sẽ có một tệp dưới lib/
được đặt tên theo viên đá quý (lib/json_api_client.rb
) và một loạt các tệp trong thư mục được đặt tên theo viên đá quý đó (mọi thứ trong lib/json_api_client/
). Vì vậy, hãy lấy cùng cấu trúc đó và khớp với nó bên trong ứng dụng Rails của bạn. Điều đó sẽ giúp việc chuyển mã vào gem sau này dễ dàng hơn nhiều.
Nếu bạn bối rối về bố cục đá quý trông như thế nào, hãy xem một số nguồn đá quý yêu thích của bạn trên GitHub. Bạn sẽ chọn mẫu khá nhanh chóng.
Còn các bài kiểm tra thì sao?
Tôi đã từng theo dõi lib/
Cấu trúc của bên trong test/unit/
:
...
my_rails_app/test/unit/json_api_client_test.rb
my_rails_app/test/unit/json_api_client/associations_test.rb
my_rails_app/test/unit/json_api_client/connection_test.rb
...
Nó hoạt động tốt, ngay cả khi việc đặt các mô hình và thư viện trong cùng một thư mục hơi lộn xộn.
Tuy nhiên, giờ đây, Rails sử dụng test/models/
thay vì test/unit/
. Và lưu trữ lib/
của bạn kiểm tra bên trong test/models/
không có nhiều ý nghĩa. Tôi vẫn chưa thực sự quyết định về một quy ước cho việc này. Bạn có gợi ý nào không?
Phá vỡ các phần phụ thuộc
Khi mã của bạn nằm trong một viên ngọc, nó sẽ không thể phụ thuộc vào ứng dụng của bạn. Điều này có nghĩa là bạn sẽ phải xem qua mã bạn nhập vào lib/
và tìm kiếm các vị trí phụ thuộc vào các lớp, đối tượng hoặc hành vi cụ thể cho ứng dụng của bạn.
Nếu bạn tìm thấy bất kỳ phụ thuộc nào trong số này, bạn sẽ phải phá bỏ chúng. Có rất nhiều bài viết hay về cách phá vỡ (hoặc thêm) các phần phụ thuộc, vì vậy tôi thực sự sẽ không đi sâu vào vấn đề đó ngay bây giờ.
Tạo đá quý
Tôi sử dụng bundle gem
để tạo đá quý của tôi. Cụ thể, để tạo một viên đá quý có tên là bulk_cache_fetcher
:
bundle gem bulk_cache_fetcher -t minitest
-t
thêm một số tệp trợ giúp kiểm tra và các nhiệm vụ kiểm tra vào Rakefile
của gem .
Bạn sẽ phải thực hiện một số công việc dọn phòng tiếp theo, chẳng hạn như điền vào .gemspec
, viết README
, chọn LICENSE
, tất cả những thứ đó.
Và sau đó, vì bạn đã có mã đá quý của mình trong lib/
của ứng dụng Rails thư mục, bạn chỉ có thể di chuyển mã đó và các thử nghiệm của nó vào lib/
và test/
thư mục trong đá quý mới của bạn.
Đôi khi, sẽ có những thứ bạn bỏ lỡ hoặc quên hoặc mã giả định những điều về ứng dụng của bạn không có thật bên trong một viên ngọc. Vì vậy, trước khi bạn tiếp tục, hãy chạy các bài kiểm tra bạn đã chuyển vào đá quý của mình và đảm bảo rằng tất cả chúng đều vượt qua.
Sử dụng đá quý mới trong ứng dụng của bạn
Bây giờ bạn đã có một viên ngọc, bạn muốn sử dụng nó, phải không? Nhưng việc thử nghiệm các thay đổi đối với gem bên trong ứng dụng Rails của bạn có thể nhanh chóng gây khó chịu. Bạn phải:
- Thực hiện thay đổi đá quý của bạn
- Xây dựng đá quý
- Xóa tất cả dấu vết của viên ngọc khỏi hệ thống của bạn hoặc cập nhật phiên bản
- Cài đặt đá quý
- Khởi động lại máy chủ của bạn
Điều này khá là khủng khiếp. May mắn thay, Bundler cung cấp cho bạn một cách dễ dàng hơn. Giả sử bạn đã tạo viên ngọc của mình trong ~/Source/bulk_cache_fetcher
. Trong khi kiểm tra các thay đổi về đá quý, bạn có thể viết điều này bên trong Gemfile
của ứng dụng Rails của bạn :
gem "bulk_cache_fetcher", path: "~/Source/bulk_cache_fetcher"
Tiếp theo, chạy bundle install
và bạn sẽ có thể thực hiện các thay đổi đối với đá quý của mình như thể mã đó vẫn tồn tại trong lib/
của ứng dụng của bạn thư mục.
Một điều cuối cùng:hãy đảm bảo rằng bạn xóa path:
trước khi bạn kiểm tra mã của mình! Đường dẫn đó có thể không trỏ đến đúng nơi trên các hệ thống khác, vì vậy rất có thể nó sẽ không hoạt động ở bất kỳ đâu ngoại trừ máy của bạn.
Xây dựng, giao hàng và tận hưởng!
Khi đá quý của bạn đã sẵn sàng, bạn có thể gửi nó ra thế giới.
Vì vậy, hãy đăng ký một tài khoản trên RubyGems nếu bạn chưa có, hãy kiểm tra các thay đổi của bạn và chạy rake release
. Xin chúc mừng, bạn hiện là tác giả đá quý! Và một khi bạn đẩy viên ngọc đó lên github, bạn sẽ có được hình vuông màu xanh lá cây đẹp mắt trong ngày.
Bạn có bất kỳ phần nào trong ứng dụng của riêng mình mà dường như có thể giải nén được không? Bất cứ thứ gì bạn nghĩ có thể tạo nên một viên ngọc tốt? Tôi rất muốn nghe về điều đó - chỉ cần để lại nhận xét bên dưới.
Và nếu bạn muốn học một tấn tìm hiểu thêm về cách tạo, quản lý và duy trì đá quý Ruby, Tôi thực sự khuyên Brandon Hilkert’s Build a Ruby Gem . Quy trình mà cuốn sách của anh ấy tuân theo rất gần với quá trình này và nó bao gồm nhiều thứ khác.