google_apps 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,54 @@
1
+ module GoogleApps
2
+ module Atom
3
+ class GroupMember
4
+ attr_accessor :member
5
+
6
+ def initialize
7
+ @document = Atom::XML::Document.new
8
+ add_header
9
+ end
10
+
11
+ def member=(member)
12
+ @member.nil? ? set_member(member) : change_member(member)
13
+ end
14
+
15
+ def to_s
16
+ @document.to_s
17
+ end
18
+
19
+ private
20
+
21
+ def set_member(member)
22
+ @document.root << build_node(member)
23
+
24
+ @member = member
25
+ end
26
+
27
+ def build_node(member)
28
+ node = Atom::XML::Node.new('apps:property')
29
+ node.attributes['name'] = 'memberId'
30
+ node.attributes['value'] = member
31
+
32
+ node
33
+ end
34
+
35
+ def change_member(member)
36
+ # This really should use find but I can't figure out how to
37
+ # get the XPath to work with this document.
38
+ @document.root.each do |node|
39
+ node.attributes['value'] = member if node.attributes['value'] == @member
40
+ end
41
+
42
+ @member = member
43
+ end
44
+
45
+ def add_header
46
+ @document.root = Atom::XML::Node.new('atom:entry')
47
+
48
+ Atom::XML::Namespace.new(@document.root, 'atom', 'http://www.w3.org/2005/Atom')
49
+ Atom::XML::Namespace.new(@document.root, 'apps', 'http://schemas.google.com/apps/2006')
50
+ Atom::XML::Namespace.new(@document.root, 'gd', 'http://schemas.google.com/g/2005')
51
+ end
52
+ end
53
+ end
54
+ end
@@ -5,7 +5,7 @@ require 'rexml/document'
5
5
 
6
6
  module GoogleApps
7
7
  class Transport
8
- attr_reader :request, :response
8
+ attr_reader :request, :response, :domain
9
9
  attr_accessor :auth, :user, :group, :nickname
10
10
 
11
11
  BOUNDARY = "=AaB03xDFHT8xgg"
@@ -18,11 +18,12 @@ module GoogleApps
18
18
  @group = targets[:group] || "https://apps-apis.google.com/a/feeds/group/2.0/#{domain}"
19
19
  @nickname = targets[:nickname]
20
20
  @export = targets[:export] || "https://apps-apis.google.com/a/feeds/compliance/audit/mail/export/#{domain}"
21
+ @domain = domain
21
22
  @token = nil
22
23
  @response = nil
23
24
  @request = nil
24
25
  end
25
-
26
+
26
27
 
27
28
  # authenticate will take the provided account and
28
29
  # password and attempt to authenticate them with
@@ -126,6 +127,20 @@ module GoogleApps
126
127
  @response = request(uri)
127
128
  end
128
129
 
130
+
131
+ # add_member_to adds a member to a group in the domain.
132
+ # It takes a group_id and a GoogleApps::Atom::GroupMember
133
+ # document as arguments.
134
+ #
135
+ # add_member_to 'test', document
136
+ #
137
+ # add_member_to returns the response received from Google.
138
+ def add_member_to(group_id, document)
139
+ puts @group + "/#{group_id}/member"
140
+ add(@group + "/#{group_id}/member", document)
141
+ end
142
+
143
+
129
144
  # add is a generic target for method_missing. It is
130
145
  # intended to handle the general case of adding
131
146
  # to the GoogleApps Domain. It takes an API endpoint
@@ -174,13 +189,13 @@ module GoogleApps
174
189
  uri = URI(endpoint + "/#{id}")
175
190
  @request = Net::HTTP::Delete.new(uri.path)
176
191
  set_headers :user
177
-
192
+
178
193
  @response = request(uri)
179
194
  end
180
195
 
181
196
  # migration performs mail migration from a local
182
197
  # mail environment to GoogleApps. migrate takes a
183
- # username a GoogleApps::Atom::Properties dcoument
198
+ # username a GoogleApps::Atom::Properties dcoument
184
199
  # and the message as plain text (String) as arguments.
185
200
  #
186
201
  # migrate 'user', properties, message
@@ -253,6 +268,10 @@ module GoogleApps
253
268
  when :migrate
254
269
  @request['content-type'] = "multipart/related; boundary=\"#{BOUNDARY}\""
255
270
  @request['authorization'] = "GoogleLogin auth=#{@token}"
271
+ when :member
272
+ @request['content-type'] = "application/x-www-form-urlencoded"
273
+ @request['content-length'] = 0
274
+ @request['authorization'] = "GoogleLogin auth=#{@token}"
256
275
  else
257
276
  @request['content-type'] = "application/atom+xml"
258
277
  @request['authorization'] = "GoogleLogin auth=#{@token}"
data/lib/google_apps.rb CHANGED
@@ -5,4 +5,5 @@ require 'google_apps/atom/group'
5
5
  require 'google_apps/atom/public_key'
6
6
  require 'google_apps/atom/export'
7
7
  require 'google_apps/atom/message'
8
- require 'google_apps/atom/message_attributes'
8
+ require 'google_apps/atom/message_attributes'
9
+ require 'google_apps/atom/group_member'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_apps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-05 00:00:00.000000000 Z
12
+ date: 2012-06-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Library for interfacing with Google Apps' Domain and Application APIs
15
15
  email:
@@ -17,24 +17,16 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - !binary |-
21
- bGliL2dvb2dsZV9hcHBzL2F0b20vYXRvbS5yYg==
22
- - !binary |-
23
- bGliL2dvb2dsZV9hcHBzL2F0b20vZXhwb3J0LnJi
24
- - !binary |-
25
- bGliL2dvb2dsZV9hcHBzL2F0b20vZ3JvdXAucmI=
26
- - !binary |-
27
- bGliL2dvb2dsZV9hcHBzL2F0b20vbWVzc2FnZS5yYg==
28
- - !binary |-
29
- bGliL2dvb2dsZV9hcHBzL2F0b20vbWVzc2FnZV9hdHRyaWJ1dGVzLnJi
30
- - !binary |-
31
- bGliL2dvb2dsZV9hcHBzL2F0b20vcHVibGljX2tleS5yYg==
32
- - !binary |-
33
- bGliL2dvb2dsZV9hcHBzL2F0b20vdXNlci5yYg==
34
- - !binary |-
35
- bGliL2dvb2dsZV9hcHBzL3RyYW5zcG9ydC5yYg==
36
- - !binary |-
37
- bGliL2dvb2dsZV9hcHBzLnJi
20
+ - lib/google_apps/atom/atom.rb
21
+ - lib/google_apps/atom/export.rb
22
+ - lib/google_apps/atom/group.rb
23
+ - lib/google_apps/atom/group_member.rb
24
+ - lib/google_apps/atom/message.rb
25
+ - lib/google_apps/atom/message_attributes.rb
26
+ - lib/google_apps/atom/public_key.rb
27
+ - lib/google_apps/atom/user.rb
28
+ - lib/google_apps/transport.rb
29
+ - lib/google_apps.rb
38
30
  homepage: https://github.com/LeakyBucket/google_apps
39
31
  licenses: []
40
32
  post_install_message:
@@ -55,8 +47,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
47
  version: '0'
56
48
  requirements: []
57
49
  rubyforge_project:
58
- rubygems_version: 1.8.10
50
+ rubygems_version: 1.8.23
59
51
  signing_key:
60
52
  specification_version: 3
61
53
  summary: Google Apps APIs
62
54
  test_files: []
55
+ has_rdoc: