class GoogleR::Group

Constants

Property

Attributes

etag[RW]
google_id[RW]
property[RW]
title[RW]
updated[RW]

Public Class Methods

api_headers() click to toggle source
# File lib/google_r/group.rb, line 16
def self.api_headers
  {
    'GData-Version' => '3.0',
    'Content-Type' => 'application/atom+xml',
  }
end
from_xml(doc, *attrs) click to toggle source
# File lib/google_r/group.rb, line 54
def self.from_xml(doc, *attrs)
  is_collection = doc.search("totalResults").size > 0
  return doc.search("entry").map { |e| from_xml(e) } if is_collection

  group = self.new

  google_id = doc.search("id")
  if google_id.empty?
    group.etag = group.google_id = nil
  else
    group.etag = doc["etag"]
    group.google_id = google_id.inner_text
  end

  title = doc.search("title")
  group.title = title.inner_text unless title.size == 0

  updated = doc.search("updated")
  group.updated = Time.parse(updated.inner_text) unless updated.empty?

  extended = doc.search("extendedProperty")
  if extended.size != 0
    info = extended.search("info")
    info = info.size == 0 ? nil : info.inner_text
    property = GoogleR::Group::Property.new(extended[0][:name], info)
    group.property = property
  end

  group
end
path() click to toggle source
# File lib/google_r/group.rb, line 12
def self.path
  "/m8/feeds/groups/default/full/"
end
url() click to toggle source
# File lib/google_r/group.rb, line 8
def self.url
  "https://www.google.com"
end

Public Instance Methods

new?() click to toggle source
# File lib/google_r/group.rb, line 85
def new?
  self.google_id.nil?
end
path() click to toggle source
# File lib/google_r/group.rb, line 23
def path
  if new?
    self.class.path
  else
    self.class.path + google_id.split("/")[-1]
  end
end
to_google() click to toggle source
# File lib/google_r/group.rb, line 31
def to_google
  builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
    root_attrs = {
      'xmlns:atom' => 'http://www.w3.org/2005/Atom',
      'xmlns:gd' => 'http://schemas.google.com/g/2005',
    }
    root_attrs["gd:etag"] = self.etag unless new?
    xml.entry(root_attrs) do
      xml.id_ self.google_id unless new?
      xml.updated self.updated.strftime("%Y-%m-%dT%H:%M:%S.%LZ") unless self.updated.nil?

      xml['atom'].title({:type => "text"}, self.title) unless self.title.nil?
      if self.property
        xml['gd'].extendedProperty({:name => self.property.name}) do
          xml.info self.property.info unless self.property.info.nil?
        end
      end
      xml.parent.namespace = xml.parent.namespace_definitions.find { |ns| ns.prefix == "atom" }
    end
  end
  builder.to_xml
end