Repository is archived
No commit activity in last 3 years
No release in over 3 years
Simple wrapper to access a google spreadsheet using the GData gem
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

GData Spreadsheet¶ ↑

Use the GData API the way its meant to be: OO-style!

Installation¶ ↑

gem install gdata_spreadsheet

Setup¶ ↑

You have to initialise the connection by setting up the config:

Google::Config.file = File.join(File.dirname(__FILE__), "google.yml")

The config file itself looks like this:

account:          account@google.com
worksheet_token:  session_token_for_worksheets
list_token:       session_token_for_lists

Don’t know how to get session tokens? Check this out: blog.tricycledevelopments.com/2010/08/19/gdata-authsub.html

Usage¶ ↑

Just create a subclass of the Google::Base class and overwrite worksheet_name, id_column and sync_attributes. A very simple example is the Log class, which can be used to write messages to a spreadsheet. A more advanced example would be this:

module Google
  class Order < Google::Base
    attr_reader :line_items

    def initialize(doc_id, id = nil, items = [])
      super doc_id, id

      @line_items = items
    end

    def id_column
      "ordernumber"
    end

    def worksheet_name
      "orders"
    end

    def sync_attributes
      {
        :timestamp        => Time.now.strftime("%d/%m/%Y %H:%M"),
        :ordernumber      => 123,
        ...
        :lineitems        => line_items,
        ...
      }
    end
  end
end

Finding / updating existing records¶ ↑

The second parameter for the Base initialiser takes an ID. If an ID value is provided (and the id_column is specified), then the matching row will be fetched from the spreadsheet while mapping all existing attributes (see ‘How do attributes map?’ for more information).

order = Google::Order.new("spreadsheet_id", "1234")

The record can then be written to the spreadsheet by calling save. If sync! is executed, the attributes will be updated according to the mapping specified in sync_attributes.

order.save

Creating new records¶ ↑

Just instantiate your model without an ID. sync! will take care of pushing the data to the spreadsheet.

order = Google::Order.new("spreadsheet_id")
order.sync!

How do attributes map?¶ ↑

All attributes can then be accessed using the regular getters and setters:

order = Google::Order.new("spreadsheet_id")
order.ordernumber = "4321"
order.ordernumber             # => "4321"

Google uses a shortened version of the column headers and strips all characters except for [a-z0-9]. So when your column header in the spreadsheet reads ‘Order Number’, the mapped attribute in your code will be ‘ordernumber’. Make sure to call the correct methods!

Note on Patches/Pull Requests¶ ↑

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 Trike Apps. See LICENSE for details.