2011-12-02 31 views
13

Tôi muốn viết phần mở rộng cho Devise cho phép bạn sử dụng parse_resource làm kho dữ liệu (trái ngược với ActiveRecord). parse_resource là một trình bao bọc của Ruby cho REST api của Parse.com. Giao diện của nó khá giống với ActiveRecord và là khiếu nại ActiveModel. Bởi vì điều này, có vẻ như có thể là một phần mở rộng cho Devise có thể không đòi hỏi quá nhiều không phải boilerplate.Cách viết phần mở rộng Devise (để sử dụng kho dữ liệu tùy chỉnh)

Tuy nhiên, tôi không thể tìm thấy bất kỳ hướng dẫn nào. Tất cả những gì tôi phải dựa vào là các nguồn cho các phần mở rộng khác. Từ MongoMapper extension, tôi thu thập rằng có hai phần chính:

  1. The generators (không hoàn toàn theo yêu cầu)

    Ở đây bạn ghi đè lên DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) phương pháp.

  2. The "guts "(rất nhiều yêu cầu)

    Tôi không phải là khá chắc chắn những gì đang xảy ra ở đây. Có vẻ như rằng có rất nhiều soạn sẵn, với một chút tùy chỉnh kiểu đúc, đồng đáy có một tuyên bố rằng chúng ta sẽ sử dụng phần mở rộng này thay cho ORM mặc định.

có phải đó là tất cả để có nó? có gì là tôi thiếu? ai đó có thể giải thích những gì xảy ra trong "can đảm" trong một chi tiết hơn một chút?

có bất kỳ thử nghiệm lint đơn giản nào để chạy để đảm bảo khả năng tương thích hoàn toàn với Devise không?

+0

Bạn đã bao giờ tạo điều này hay tìm một giải pháp thay thế? – emkman

Trả lời

1

Để bắt đầu tốt, bạn có thể kiểm tra tiện ích mở rộng couchDB và tiện ích mở rộng Riak. Bạn có thể thấy rằng trong số Hook module bạn ghi đè bất kỳ thứ gì bạn muốn/phải để làm cho Devise hoạt động.

Bạn có thể xem tuyên bố class_eval ở dưới cùng không? Ở đó bạn mở rộng các lớp (trong trường hợp của bạn ParseResource::Base) với các module Devise::Models, nắm giữ tất cả các phương pháp cần thiết (bao gồm cả phương pháp nổi tiếng deviseas you can see), và tiếp theo với các module Hooks nếu bạn muốn ghi đè lên bất cứ điều gì (phần mở rộng MongoMapper doen't cần ghi đè lên bất cứ điều gì, đó là lý do tại sao không sử dụng phương thức này). Vì vậy bạn phải viết:

module Devise 
    module Orm 
    module ParseResource 
     module Hooks 
     # here you define any overrides 
     end 
    end 
    end 
end 

ParseResource::Base.class_eval do 
    extend Devise::Models 
    extend Devise::Orm::ParseResource::Hooks 
end 

Sau đó bạn phải require 'devise/orm/parse_resource' (giả sử bạn đã đặt tên cho tập tin parse_resource.rb) trong #{Rails.root}/config/initializers/devise.rb initializer của bạn. Hy vọng tôi đã giúp một chút :)

3

Tôi nghĩ cách tiếp cận tốt nhất là viết bộ chuyển đổi orm_adapter để phân tích cú pháp tài nguyên. Nó là "ruột" thực sự của sự tích hợp của các nhà tiên tri với các orms khác nhau.

Thực tế rất đơn giản và bao gồm test suite bạn có thể sử dụng. Xem xét parse_resource là tuân thủ activemodel, bộ điều hợp nên dễ dàng như nhân bản một existing adapter.

Tiếp theo, bạn sẽ cần móc trong orm_adapter để tạo ra, đây chỉ là bản sao của một trong số files này.

Các vấn đề liên quan