postini 0.0.1
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.
- data/History.txt +8 -0
- data/License.txt +29 -0
- data/Manifest.txt +42 -0
- data/PostInstall.txt +7 -0
- data/README.txt +62 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +76 -0
- data/config/requirements.rb +15 -0
- data/lib/postini/api/automatedbatch/AutomatedBatch.rb +1244 -0
- data/lib/postini/api/automatedbatch/AutomatedBatchDriver.rb +216 -0
- data/lib/postini/api/automatedbatch/AutomatedBatchMappingRegistry.rb +1883 -0
- data/lib/postini/api/automatedbatch/AutomatedBatchServiceClient.rb +523 -0
- data/lib/postini/api/endpointresolver/EndpointResolver.rb +121 -0
- data/lib/postini/api/endpointresolver/EndpointResolverDriver.rb +51 -0
- data/lib/postini/api/endpointresolver/EndpointResolverMappingRegistry.rb +268 -0
- data/lib/postini/api/endpointresolver/EndpointResolverServiceClient.rb +38 -0
- data/lib/postini/api.rb +8 -0
- data/lib/postini/domain.rb +65 -0
- data/lib/postini/user.rb +125 -0
- data/lib/postini/version.rb +9 -0
- data/lib/postini.rb +100 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +82 -0
- data/setup.rb +1585 -0
- data/spec/domain_spec.rb +36 -0
- data/spec/postini_spec.rb +30 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/user_spec.rb +12 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +17 -0
- data/vendor/automatedbatch.wsdl +1721 -0
- data/vendor/endpointresolver.wsdl +214 -0
- data/website/index.html +88 -0
- data/website/index.txt +60 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.html.erb +55 -0
- metadata +117 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!-- Originating Build y6_14_9c0, y6_14_9c0, Thu May 22 11:20:45 PDT 2008-->
|
|
3
|
+
|
|
4
|
+
<wsdl:definitions
|
|
5
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
6
|
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
|
7
|
+
xmlns:xmime="http://www.w3.org/2004/11/xmlmime"
|
|
8
|
+
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
|
9
|
+
xmlns:tns="http://postini.com/PSTN/SOAPAPI/v2/endpointresolver"
|
|
10
|
+
targetNamespace="http://postini.com/PSTN/SOAPAPI/v2/endpointresolver"
|
|
11
|
+
name="EndpointResolver"
|
|
12
|
+
>
|
|
13
|
+
|
|
14
|
+
<wsdl:types>
|
|
15
|
+
<schema
|
|
16
|
+
xmlns="http://www.w3.org/2001/XMLSchema"
|
|
17
|
+
targetNamespace="http://postini.com/PSTN/SOAPAPI/v2/endpointresolver"
|
|
18
|
+
>
|
|
19
|
+
|
|
20
|
+
<xsd:complexType name="AdminBlockException">
|
|
21
|
+
<xsd:sequence>
|
|
22
|
+
<xsd:element name="message" type="xsd:string" />
|
|
23
|
+
</xsd:sequence>
|
|
24
|
+
</xsd:complexType>
|
|
25
|
+
|
|
26
|
+
<xsd:complexType name="GetServiceEndpoint">
|
|
27
|
+
<xsd:sequence>
|
|
28
|
+
<xsd:element name="apiKey" type="xsd:string" />
|
|
29
|
+
<xsd:element name="email" type="xsd:string" />
|
|
30
|
+
<xsd:element name="service" type="tns:service" />
|
|
31
|
+
</xsd:sequence>
|
|
32
|
+
</xsd:complexType>
|
|
33
|
+
|
|
34
|
+
<xsd:complexType name="GetServiceEndpointResponse">
|
|
35
|
+
<xsd:sequence>
|
|
36
|
+
<xsd:element name="EndpointURI" minOccurs="0" type="xsd:string" />
|
|
37
|
+
</xsd:sequence>
|
|
38
|
+
</xsd:complexType>
|
|
39
|
+
|
|
40
|
+
<xsd:complexType name="InternalException">
|
|
41
|
+
<xsd:sequence>
|
|
42
|
+
<xsd:element name="message" type="xsd:string" />
|
|
43
|
+
</xsd:sequence>
|
|
44
|
+
</xsd:complexType>
|
|
45
|
+
|
|
46
|
+
<xsd:complexType name="InvalidValueException">
|
|
47
|
+
<xsd:sequence>
|
|
48
|
+
<xsd:element name="message" type="xsd:string" />
|
|
49
|
+
</xsd:sequence>
|
|
50
|
+
</xsd:complexType>
|
|
51
|
+
|
|
52
|
+
<xsd:complexType name="MalformedKeyException">
|
|
53
|
+
<xsd:sequence>
|
|
54
|
+
<xsd:element name="message" type="xsd:string" />
|
|
55
|
+
</xsd:sequence>
|
|
56
|
+
</xsd:complexType>
|
|
57
|
+
|
|
58
|
+
<xsd:complexType name="MissingElementException">
|
|
59
|
+
<xsd:sequence>
|
|
60
|
+
<xsd:element name="message" type="xsd:string" />
|
|
61
|
+
</xsd:sequence>
|
|
62
|
+
</xsd:complexType>
|
|
63
|
+
|
|
64
|
+
<xsd:complexType name="NoSuchKeyException">
|
|
65
|
+
<xsd:sequence>
|
|
66
|
+
<xsd:element name="message" type="xsd:string" />
|
|
67
|
+
</xsd:sequence>
|
|
68
|
+
</xsd:complexType>
|
|
69
|
+
|
|
70
|
+
<xsd:complexType name="UnknownEmailException">
|
|
71
|
+
<xsd:sequence>
|
|
72
|
+
<xsd:element name="message" type="xsd:string" />
|
|
73
|
+
</xsd:sequence>
|
|
74
|
+
</xsd:complexType>
|
|
75
|
+
|
|
76
|
+
<xsd:complexType name="UnknownInternalException">
|
|
77
|
+
<xsd:sequence>
|
|
78
|
+
<xsd:element name="message" type="xsd:string" />
|
|
79
|
+
</xsd:sequence>
|
|
80
|
+
</xsd:complexType>
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
<xsd:simpleType name="service">
|
|
87
|
+
<xsd:restriction base="xsd:string">
|
|
88
|
+
<xsd:enumeration value="v1"/>
|
|
89
|
+
<xsd:enumeration value="v2AutomatedBatch"/>
|
|
90
|
+
<xsd:enumeration value="v2PersonalArchive"/>
|
|
91
|
+
<xsd:enumeration value="v2UserSync"/>
|
|
92
|
+
</xsd:restriction>
|
|
93
|
+
</xsd:simpleType>
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
<xsd:element name="AdminBlockException" type="tns:AdminBlockException" />
|
|
99
|
+
|
|
100
|
+
<xsd:element name="GetServiceEndpoint" type="tns:GetServiceEndpoint" />
|
|
101
|
+
|
|
102
|
+
<xsd:element name="GetServiceEndpointResponse" type="tns:GetServiceEndpointResponse" />
|
|
103
|
+
|
|
104
|
+
<xsd:element name="InternalException" type="tns:InternalException" />
|
|
105
|
+
|
|
106
|
+
<xsd:element name="InvalidValueException" type="tns:InvalidValueException" />
|
|
107
|
+
|
|
108
|
+
<xsd:element name="MalformedKeyException" type="tns:MalformedKeyException" />
|
|
109
|
+
|
|
110
|
+
<xsd:element name="MissingElementException" type="tns:MissingElementException" />
|
|
111
|
+
|
|
112
|
+
<xsd:element name="NoSuchKeyException" type="tns:NoSuchKeyException" />
|
|
113
|
+
|
|
114
|
+
<xsd:element name="UnknownEmailException" type="tns:UnknownEmailException" />
|
|
115
|
+
|
|
116
|
+
<xsd:element name="UnknownInternalException" type="tns:UnknownInternalException" />
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
</schema>
|
|
120
|
+
</wsdl:types>
|
|
121
|
+
|
|
122
|
+
<wsdl:message name="UnknownEmailException">
|
|
123
|
+
<wsdl:part name="fault" element="tns:UnknownEmailException"/>
|
|
124
|
+
</wsdl:message>
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
<wsdl:message name="InternalException">
|
|
128
|
+
<wsdl:part name="fault" element="tns:InternalException"/>
|
|
129
|
+
</wsdl:message>
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
<wsdl:message name="UnknownInternalException">
|
|
133
|
+
<wsdl:part name="fault" element="tns:UnknownInternalException"/>
|
|
134
|
+
</wsdl:message>
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
<wsdl:message name="MissingElementException">
|
|
138
|
+
<wsdl:part name="fault" element="tns:MissingElementException"/>
|
|
139
|
+
</wsdl:message>
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
<wsdl:message name="InvalidValueException">
|
|
143
|
+
<wsdl:part name="fault" element="tns:InvalidValueException"/>
|
|
144
|
+
</wsdl:message>
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
<wsdl:message name="MalformedKeyException">
|
|
148
|
+
<wsdl:part name="fault" element="tns:MalformedKeyException"/>
|
|
149
|
+
</wsdl:message>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
<wsdl:message name="NoSuchKeyException">
|
|
153
|
+
<wsdl:part name="fault" element="tns:NoSuchKeyException"/>
|
|
154
|
+
</wsdl:message>
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
<wsdl:message name="AdminBlockException">
|
|
158
|
+
<wsdl:part name="fault" element="tns:AdminBlockException"/>
|
|
159
|
+
</wsdl:message>
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
<wsdl:message name="GetServiceEndpoint">
|
|
163
|
+
<wsdl:part name="parameters" element="tns:GetServiceEndpoint"/>
|
|
164
|
+
</wsdl:message>
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
<wsdl:message name="GetServiceEndpointResponse">
|
|
168
|
+
<wsdl:part name="parameters" element="tns:GetServiceEndpointResponse"/>
|
|
169
|
+
</wsdl:message>
|
|
170
|
+
|
|
171
|
+
<wsdl:portType name="EndpointResolverPort">
|
|
172
|
+
|
|
173
|
+
<wsdl:operation name="GetServiceEndpoint">
|
|
174
|
+
<wsdl:documentation>Perform a endpoint lookup for the specified service and user email</wsdl:documentation>
|
|
175
|
+
<wsdl:input message="tns:GetServiceEndpoint" name="GetServiceEndpoint"/>
|
|
176
|
+
<wsdl:output message="tns:GetServiceEndpointResponse" name="GetServiceEndpointResponse"/>
|
|
177
|
+
<wsdl:fault name="AdminBlockException" message="tns:AdminBlockException"/>
|
|
178
|
+
<wsdl:fault name="InternalException" message="tns:InternalException"/>
|
|
179
|
+
<wsdl:fault name="InvalidValueException" message="tns:InvalidValueException"/>
|
|
180
|
+
<wsdl:fault name="MalformedKeyException" message="tns:MalformedKeyException"/>
|
|
181
|
+
<wsdl:fault name="MissingElementException" message="tns:MissingElementException"/>
|
|
182
|
+
<wsdl:fault name="NoSuchKeyException" message="tns:NoSuchKeyException"/>
|
|
183
|
+
<wsdl:fault name="UnknownEmailException" message="tns:UnknownEmailException"/>
|
|
184
|
+
<wsdl:fault name="UnknownInternalException" message="tns:UnknownInternalException"/>
|
|
185
|
+
</wsdl:operation>
|
|
186
|
+
|
|
187
|
+
</wsdl:portType>
|
|
188
|
+
|
|
189
|
+
<wsdl:binding name="EndpointResolverBinding" type="tns:EndpointResolverPort">
|
|
190
|
+
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
<wsdl:operation name="GetServiceEndpoint">
|
|
194
|
+
<soap:operation soapAction="" style="document"/>
|
|
195
|
+
<wsdl:input name="GetServiceEndpoint"><soap:body use="literal"/></wsdl:input>
|
|
196
|
+
<wsdl:output name="GetServiceEndpointResponse"><soap:body use="literal"/></wsdl:output>
|
|
197
|
+
<wsdl:fault name="AdminBlockException"><soap:fault name="AdminBlockException" use="literal"/></wsdl:fault>
|
|
198
|
+
<wsdl:fault name="InternalException"><soap:fault name="InternalException" use="literal"/></wsdl:fault>
|
|
199
|
+
<wsdl:fault name="InvalidValueException"><soap:fault name="InvalidValueException" use="literal"/></wsdl:fault>
|
|
200
|
+
<wsdl:fault name="MalformedKeyException"><soap:fault name="MalformedKeyException" use="literal"/></wsdl:fault>
|
|
201
|
+
<wsdl:fault name="MissingElementException"><soap:fault name="MissingElementException" use="literal"/></wsdl:fault>
|
|
202
|
+
<wsdl:fault name="NoSuchKeyException"><soap:fault name="NoSuchKeyException" use="literal"/></wsdl:fault>
|
|
203
|
+
<wsdl:fault name="UnknownEmailException"><soap:fault name="UnknownEmailException" use="literal"/></wsdl:fault>
|
|
204
|
+
<wsdl:fault name="UnknownInternalException"><soap:fault name="UnknownInternalException" use="literal"/></wsdl:fault>
|
|
205
|
+
</wsdl:operation>
|
|
206
|
+
|
|
207
|
+
</wsdl:binding>
|
|
208
|
+
|
|
209
|
+
<wsdl:service name="EndpointResolverService">
|
|
210
|
+
<wsdl:port name="EndpointResolverPort" binding="tns:EndpointResolverBinding">
|
|
211
|
+
<soap:address location="https://api-meta.postini.com/api2/endpointresolver"/>
|
|
212
|
+
</wsdl:port>
|
|
213
|
+
</wsdl:service>
|
|
214
|
+
</wsdl:definitions>
|
data/website/index.html
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
+
<title>
|
|
8
|
+
postini Gem
|
|
9
|
+
</title>
|
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
|
11
|
+
<style>
|
|
12
|
+
|
|
13
|
+
</style>
|
|
14
|
+
<script type="text/javascript">
|
|
15
|
+
window.onload = function() {
|
|
16
|
+
settings = {
|
|
17
|
+
tl: { radius: 10 },
|
|
18
|
+
tr: { radius: 10 },
|
|
19
|
+
bl: { radius: 10 },
|
|
20
|
+
br: { radius: 10 },
|
|
21
|
+
antiAlias: true,
|
|
22
|
+
autoPad: true,
|
|
23
|
+
validTags: ["div"]
|
|
24
|
+
}
|
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
|
26
|
+
versionBox.applyCornersToAll();
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="main">
|
|
32
|
+
|
|
33
|
+
<h1>postini Gem</h1>
|
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/postini4r"; return false'>
|
|
35
|
+
<p>Get Version</p>
|
|
36
|
+
<a href="http://rubyforge.org/projects/postini4r" class="numbers">0.0.1</a>
|
|
37
|
+
</div>
|
|
38
|
+
<h2>Part of the postini4r project</h2>
|
|
39
|
+
<p>The postini4r project is a collection of sub-projects that aim to implement a broad range of Postini-related tools.</p>
|
|
40
|
+
<h2>What</h2>
|
|
41
|
+
<p>The postini gem is a Ruby wrapper library for the <a href="http://www.postini.com/">Postini</a> <span class="caps">SOAP</span> <span class="caps">API</span> (Early Access Program).</p>
|
|
42
|
+
<p>The postini gem aims to be fully compliant with the Postini <span class="caps">API</span>, starting off with what I need first, and then expanding to eventually cover all the available commands in the Batch Command Reference.</p>
|
|
43
|
+
<h2>Requirements</h2>
|
|
44
|
+
<ul>
|
|
45
|
+
<li>The postini gem requires that you gain access to the Postini Early Access Program and an <span class="caps">API</span> key. You need to contact your Postini Service Provider (or Postini directly if you deal with them).</li>
|
|
46
|
+
<li>soap4r</li>
|
|
47
|
+
</ul>
|
|
48
|
+
<h2>Installing</h2>
|
|
49
|
+
<p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">postini</span></pre></p>
|
|
50
|
+
<h2>Demonstration of usage</h2>
|
|
51
|
+
<p><span class="caps">TODO</span> – Coming soon, refer to the current specs for some samples</p>
|
|
52
|
+
<h2>Forum</h2>
|
|
53
|
+
<p><a href="http://groups.google.com/group/postini-ruby">http://groups.google.com/group/postini-ruby</a></p>
|
|
54
|
+
<p>Join us in the postini-ruby group for discussing everything aroung Postini and Ruby, and possibly Postini in general.</p>
|
|
55
|
+
<h2>How to submit patches</h2>
|
|
56
|
+
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
|
|
57
|
+
<p>You can fetch the source from:</p>
|
|
58
|
+
<ul>
|
|
59
|
+
<li>github: <a href="http://github.com/kennethkalmer/postini4r-postini/tree/master">http://github.com/kennethkalmer/postini4r-postini/tree/master</a></li>
|
|
60
|
+
</ul>
|
|
61
|
+
<pre>git clone git://github.com/kennethkalmer/postini4r-postini.git</pre>
|
|
62
|
+
<h3>Build and test instructions</h3>
|
|
63
|
+
<pre>cd postini4r-postini
|
|
64
|
+
rake spec
|
|
65
|
+
rake install_gem</pre>
|
|
66
|
+
<h2>License</h2>
|
|
67
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
|
68
|
+
<h2>Contact</h2>
|
|
69
|
+
<p>Comments are welcome. Send an email to <a href="mailto:kenneth.kalmer@gmail.com">me</a> via the <a href="http://groups.google.com/group/postini4r">forum</a></p>
|
|
70
|
+
<h2>Credits</h2>
|
|
71
|
+
<p>postini4r is developed by <a href="http://www.opensourcery.co.za/">Kenneth Kalmer</a> for <a href="http://www.spaminabox.co.za"><span class="caps">SPAM</span> in a Box</a> who has allowed the library to be released under the <span class="caps">MIT</span> License through their sponsorship.</p>
|
|
72
|
+
<p class="coda">
|
|
73
|
+
<a href="http://www.opensourcery.co.za">Kenneth Kalmer</a> &
|
|
74
|
+
<a href="http://www.spaminabox.co.za">SPAM in a Box</a>, 16th August 2008<br>
|
|
75
|
+
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
|
76
|
+
</p>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<script type="text/javascript">
|
|
80
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
|
81
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
|
82
|
+
</script>
|
|
83
|
+
<script type="text/javascript">
|
|
84
|
+
var pageTracker = _gat._getTracker("UA-192703-10");
|
|
85
|
+
pageTracker._trackPageview();
|
|
86
|
+
</script>
|
|
87
|
+
</body>
|
|
88
|
+
</html>
|
data/website/index.txt
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
h1. postini Gem
|
|
2
|
+
h2. Part of the postini4r project
|
|
3
|
+
|
|
4
|
+
The postini4r project is a collection of sub-projects that aim to implement a broad range of Postini-related tools.
|
|
5
|
+
|
|
6
|
+
h2. What
|
|
7
|
+
|
|
8
|
+
The postini gem is a Ruby wrapper library for the "Postini":http://www.postini.com/ SOAP API (Early Access Program).
|
|
9
|
+
|
|
10
|
+
The postini gem aims to be fully compliant with the Postini API, starting off with what I need first, and then expanding to eventually cover all the available commands in the Batch Command Reference.
|
|
11
|
+
|
|
12
|
+
h2. Requirements
|
|
13
|
+
|
|
14
|
+
* The postini gem requires that you gain access to the Postini Early Access Program and an API key. You need to contact your Postini Service Provider (or Postini directly if you deal with them).
|
|
15
|
+
* soap4r
|
|
16
|
+
|
|
17
|
+
h2. Installing
|
|
18
|
+
|
|
19
|
+
<pre syntax="ruby">sudo gem install postini</pre>
|
|
20
|
+
|
|
21
|
+
h2. Demonstration of usage
|
|
22
|
+
|
|
23
|
+
TODO - Coming soon, refer to the current specs for some samples
|
|
24
|
+
|
|
25
|
+
h2. Forum
|
|
26
|
+
|
|
27
|
+
"http://groups.google.com/group/postini-ruby":http://groups.google.com/group/postini-ruby
|
|
28
|
+
|
|
29
|
+
Join us in the postini-ruby group for discussing everything aroung Postini and Ruby, and possibly Postini in general.
|
|
30
|
+
|
|
31
|
+
h2. How to submit patches
|
|
32
|
+
|
|
33
|
+
Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
|
|
34
|
+
|
|
35
|
+
You can fetch the source from:
|
|
36
|
+
|
|
37
|
+
* github: "http://github.com/kennethkalmer/postini4r-postini/tree/master":http://github.com/kennethkalmer/postini4r-postini/tree/master
|
|
38
|
+
|
|
39
|
+
<pre>git clone git://github.com/kennethkalmer/postini4r-postini.git</pre>
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
h3. Build and test instructions
|
|
43
|
+
|
|
44
|
+
<pre>cd postini4r-postini
|
|
45
|
+
rake spec
|
|
46
|
+
rake install_gem</pre>
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
h2. License
|
|
50
|
+
|
|
51
|
+
This code is free to use under the terms of the MIT license.
|
|
52
|
+
|
|
53
|
+
h2. Contact
|
|
54
|
+
|
|
55
|
+
Comments are welcome. Send an email to "me":mailto:kenneth.kalmer@gmail.com via the "forum":http://groups.google.com/group/postini4r
|
|
56
|
+
|
|
57
|
+
h2. Credits
|
|
58
|
+
|
|
59
|
+
postini4r is developed by "Kenneth Kalmer":http://www.opensourcery.co.za/ for "SPAM in a Box":http://www.spaminabox.co.za who has allowed the library to be released under the MIT License through their sponsorship.
|
|
60
|
+
|