google_apps 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: