backpack_api.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:5k
源码类别:

Ajax

开发平台:

Others

  1. # Requires that XmlSimple is already loaded, like it is from within script/console in the latest beta Rails
  2. # Author: David Heinemeier Hansson, 37signals
  3. require 'yaml'
  4. require 'net/https'
  5. class BackpackAPI
  6.   attr_accessor :username, :token, :current_page_id
  7.   def initialize(username, token)
  8.     @username, @token = username, token
  9.     connect
  10.   end
  11.   def connect(use_ssl = false)
  12.     @connection = Net::HTTP.new("#{@username}.backpackit.com", use_ssl ? 443 : 80)
  13.     @connection.use_ssl = use_ssl
  14.     @connection.verify_mode = OpenSSL::SSL::VERIFY_NONE if use_ssl
  15.   end
  16.   def page_id=(id)
  17.     self.current_page_id = id
  18.   end
  19.   alias :pi= :page_id=
  20.   def request(path, parameters = {}, second_try = false)
  21.     parameters = { "token" => @token }.merge(parameters)
  22.     response = @connection.post("/ws/#{path}", parameters.to_yaml, "X-POST_DATA_FORMAT" => "yaml")
  23.     if response.code == "200"
  24.       result = XmlSimple.xml_in(response.body)
  25.       result.delete "success"
  26.       result.empty? ? true : result
  27.     elsif response.code == "302" && !second_try
  28.       connect(true)
  29.       request(path, parameters, true)
  30.     else
  31.       raise "Error occured (#{response.code}): #{response.body}"
  32.     end
  33.   end
  34.   alias :r :request
  35.   # Items ----
  36.   def list_items(page_id = current_page_id)
  37.     request "page/#{page_id}/items/list"
  38.   end
  39.   alias :li :list_items
  40.   def create_item(content, page_id = current_page_id)
  41.     request "page/#{page_id}/items/add", "item" => { "content" => content }
  42.   end
  43.   alias :ci :create_item
  44.   def update_item(item_id, content, page_id = current_page_id)
  45.     request "page/#{page_id}/items/update/#{item_id}", "item" => { "content" => content }
  46.   end
  47.   alias :ui :update_item
  48.   def destroy_item(item_id, page_id = current_page_id)
  49.     request "page/#{page_id}/items/destroy/#{item_id}"
  50.   end
  51.   alias :di :destroy_item
  52.   def toggle_item(item_id, page_id = current_page_id)
  53.     request "page/#{page_id}/items/toggle/#{item_id}"
  54.   end
  55.   alias :ti :toggle_item
  56.   def move_item(item_id, direction, page_id = current_page_id)
  57.     request "page/#{page_id}/items/move/#{item_id}", "direction" => "move_#{direction}"
  58.   end
  59.   alias :mi :move_item
  60.   # Notes ----
  61.   def list_notes(page_id = current_page_id)
  62.     request "page/#{page_id}/notes/list"
  63.   end
  64.   alias :li :list_notes
  65.   def create_note(title, body, page_id = current_page_id)
  66.     request "page/#{page_id}/notes/create", "note" => { "title" => title, "body" => body }
  67.   end
  68.   alias :cn :create_note
  69.   def update_note(note_id, title, body, page_id = current_page_id)
  70.     request "page/#{page_id}/notes/update/#{note_id}", "note" => { "title" => title, "body" => body }
  71.   end
  72.   alias :un :update_note
  73.   def destroy_note(note_id, page_id = current_page_id)
  74.     request "page/#{page_id}/notes/destroy/#{note_id}"
  75.   end
  76.   alias :dn :destroy_note
  77.   # Emails ----
  78.   def list_emails(page_id = current_page_id)
  79.     request "page/#{page_id}/emails/list"
  80.   end
  81.   alias :le :list_emails
  82.   def show_email(email_id, page_id = current_page_id)
  83.     request "page/#{page_id}/emails/show/#{email_id}"
  84.   end
  85.   alias :se :show_email
  86.   def destroy_email(email_id, page_id = current_page_id)
  87.     request "page/#{page_id}/emails/destroy/#{email_id}"
  88.   end
  89.   alias :de :destroy_email
  90.   # Tags ----
  91.   def list_pages_with_tag(tag_id)
  92.     request "tags/select/#{tag_id}"
  93.   end
  94.   alias :lpt :list_pages_with_tag
  95.   def tag_page(tags, page_id = current_page_id)
  96.     request "page/#{page_id}/tags/tag", "tags" => tags
  97.   end
  98.   alias :tp :tag_page
  99.   # Pages ----
  100.   def list_pages
  101.     request "pages/all"
  102.   end
  103.   alias :lp :list_pages
  104.   def create_page(title, body)
  105.     request "pages/new", "page" => { "title" => title, "description" => body }
  106.   end
  107.   alias :cp :create_page
  108.   def show_page(page_id = current_page_id)
  109.     request "page/#{page_id}"
  110.   end
  111.   alias :sp :show_page
  112.   def destroy_page(page_id = current_page_id)
  113.     request "page/#{page_id}/destroy"
  114.   end
  115.   alias :dp :destroy_page
  116.   def update_title(title, page_id = current_page_id)
  117.     request "page/#{page_id}/update_title", "page" => { "title" => title }
  118.   end
  119.   alias :ut :update_title
  120.   def update_body(body, page_id = current_page_id)
  121.     request "page/#{page_id}/update_body", "page" => { "description" => body }
  122.   end
  123.   alias :ub :update_body
  124.   def link_page(linked_page_id, page_id = current_page_id)
  125.     request "page/#{page_id}/link", "linked_page_id" => linked_page_id
  126.   end
  127.   alias :lip :link_page
  128.   def unlink_page(linked_page_id, page_id = current_page_id)
  129.     request "page/#{page_id}/unlink", "linked_page_id" => linked_page_id
  130.   end
  131.   alias :ulip :unlink_page
  132.   def share_page(email_addresses, public_page = nil, page_id = current_page_id)
  133.     parameters = { "email_addresses" => email_addresses }
  134.     parameters = parameters.merge({ "page" => { "public" => public_page ? "1" : "0" }}) unless public_page.nil?
  135.     request "page/#{page_id}/share", parameters
  136.   end
  137.   # Reminders ---
  138.   def list_reminders
  139.     request "reminders"
  140.   end
  141.   alias :lr :list_reminders
  142.   def create_reminder(content, remind_at = "")
  143.     request "reminders/create", "reminder" => { "content" => content, "remind_at" => remind_at }
  144.   end
  145.   alias :cr :create_reminder
  146.   def update_reminder(reminder_id, content, remind_at)
  147.     request "reminders/update/#{reminder_id}", "reminder" => { "content" => content, "remind_at" => remind_at }
  148.   end
  149.   alias :ur :update_reminder
  150.   def destroy_reminder(reminder_id)
  151.     request "reminders/destroy/#{reminder_id}"
  152.   end
  153.   alias :dr :destroy_reminder
  154. end