office_autopilot 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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ .rvmrc
4
+ Gemfile.lock
5
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in office_autopilot.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Prashant Nadarajan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ The OfficeAutopilot Ruby Gem
2
+ ============================
3
+ A Ruby wrapper for the OfficeAutopilot API
4
+
5
+ Installation
6
+ ------------
7
+ gem install office_autopilot
8
+
9
+ Usage Examples
10
+ --------------
11
+ require "rubygems"
12
+ require "office_autopilot"
13
+
14
+ oap = OfficeAutopilot::Client.new(:api_id => 'xxx', :api_key => 'yyy')
15
+
16
+ # Search Contacts
17
+ puts oap.contacts_search(:field => 'E-Mail', :op => 'e', :value => 'jimbo@example.com')
18
+ => [ { :id => 7, :first_name => 'Jimbo', :last_name => 'Watunusi', :email => 'jimbo@example.com' } ]
19
+
20
+ Documentation
21
+ -------------
22
+ [OfficeAutopilot API Docs](http://wiki.sendpepper.com/w/page/19528683/API-Documentation)
23
+
24
+ Todo
25
+ ----
26
+
27
+ * support ALL API calls
28
+ * allow returning all possible contact details instead of the current subset
29
+
30
+ Submitting a Pull Request
31
+ -------------------------
32
+ 1. Fork the project.
33
+ 2. Create a topic branch.
34
+ 3. Implement your feature or bug fix.
35
+ 4. Add documentation for your feature or bug fix.
36
+ 5. Add specs for your feature or bug fix.
37
+ 6. Run <tt>bundle exec rake spec</tt>. If your changes are not 100% covered, go back to step 5.
38
+ 7. Commit and push your changes.
39
+ 8. Submit a pull request. Please do not include changes to the gemspec, version, or history file. (If you want to create your own version for some reason, please do so in a separate commit.)
40
+
41
+ Copyright
42
+ ---------
43
+ Copyright (c) 2011 Prashant Nadarajan.
44
+ See [LICENSE](https://github.com/prashantrajan/office_autopilot/blob/master/LICENSE) for details.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :test => :spec
8
+ task :default => :spec
@@ -0,0 +1,27 @@
1
+ module OfficeAutopilot
2
+ class Client
3
+
4
+ module Contacts
5
+
6
+ CONTACTS_ENDPOINT = '/cdata.php'
7
+
8
+ def contacts_search(options = {})
9
+ xml = xml_for_search(options)
10
+ response = self.class.post(CONTACTS_ENDPOINT, :body => {'reqType' => 'search', 'data' => xml}.merge(auth))
11
+
12
+ contacts = []
13
+ xml = Nokogiri::XML(response)
14
+ xml.css('result contact').each do |node|
15
+ contacts << {
16
+ :id => node['id'].to_i,
17
+ :first_name => node.at_css("Group_Tag[name='Contact Information'] field[name='First Name']").text,
18
+ :last_name => node.at_css("Group_Tag[name='Contact Information'] field[name='Last Name']").text,
19
+ :email => node.at_css("Group_Tag[name='Contact Information'] field[name='E-Mail']").text
20
+ }
21
+ end
22
+ contacts
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ require 'httparty'
2
+ require 'builder'
3
+ require 'nokogiri'
4
+
5
+
6
+ require File.expand_path('../client/contacts', __FILE__)
7
+
8
+
9
+ module OfficeAutopilot
10
+ class Client
11
+
12
+ include HTTParty
13
+
14
+ include OfficeAutopilot::Client::Contacts
15
+
16
+ base_uri 'http://api.moon-ray.com'
17
+ format :plain
18
+
19
+
20
+ def initialize(options)
21
+ @api = {
22
+ :api_id => options[:api_id],
23
+ :api_key => options[:api_key]
24
+ }
25
+
26
+ raise ArgumentError, "Missing required parameter: api_id" if @api[:api_id].nil?
27
+ raise ArgumentError, "Missing required parameter: api_key" if @api[:api_key].nil?
28
+ end
29
+
30
+ def api_id
31
+ @api[:api_id]
32
+ end
33
+
34
+ def api_key
35
+ @api[:api_key]
36
+ end
37
+
38
+ def auth
39
+ { 'Appid' => api_id, 'Key' => api_key }
40
+ end
41
+
42
+ def xml_for_search(options)
43
+ if options.is_a?(Hash)
44
+ options = [ options ]
45
+ end
46
+
47
+ xml = Builder::XmlMarkup.new
48
+ xml.search do
49
+ options.each do |option|
50
+ xml.equation do
51
+ xml.field option[:field]
52
+ xml.op option[:op]
53
+ xml.value option[:value]
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,3 @@
1
+ module OfficeAutopilot
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1 @@
1
+ require 'office_autopilot/client'
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "office_autopilot/version"
4
+
5
+ Gem::Specification.new do |s|
6
+
7
+ s.add_development_dependency('rake', '~> 0.8')
8
+ s.add_development_dependency('rspec', '~> 2.5')
9
+ s.add_development_dependency('webmock', '~> 1.6')
10
+
11
+ s.add_runtime_dependency('httparty', '~> 0.7')
12
+ s.add_runtime_dependency('builder', '~> 3.0')
13
+ s.add_runtime_dependency('nokogiri', '~> 1.4')
14
+
15
+ s.name = "office_autopilot"
16
+ s.version = OfficeAutopilot::VERSION
17
+ s.platform = Gem::Platform::RUBY
18
+ s.authors = ["Prashant Nadarajan"]
19
+ s.email = ["prashant.nadarajan@gmail.com"]
20
+ s.homepage = "https://github.com/prashantrajan/office_autopilot"
21
+ s.summary = %q{Ruby wrapper for the OfficeAutopilot API}
22
+ s.description = %q{A Ruby wrapper for the OfficeAutopilot API}
23
+
24
+ s.rubyforge_project = "office_autopilot"
25
+
26
+ s.files = `git ls-files`.split("\n")
27
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
29
+ s.require_paths = ["lib"]
30
+ end
@@ -0,0 +1,198 @@
1
+ <result>
2
+ <contact id='8' date='1299674533' dlm='1299674554' score='0.00' purl='bobby' bulk_mail='1'>
3
+ <Group_Tag name='Contact Information'>
4
+ <field name="First Name">bobby</field>
5
+ <field name="Last Name">brown</field>
6
+ <field name="E-Mail">bobby@example.com</field>
7
+ <field name="Home Phone"/>
8
+ <field name="Title"/>
9
+ <field name="Office Phone"/>
10
+ <field name="Cell Phone"/>
11
+ <field name="Fax"/>
12
+ <field name="Address"/>
13
+ <field name="Company"/>
14
+ <field name="Address 2"/>
15
+ <field name="City"/>
16
+ <field name="State"/>
17
+ <field name="Zip Code"/>
18
+ <field name="Website "/>
19
+ <field name="Country"/>
20
+ <field name="Birthday"/>
21
+ </Group_Tag>
22
+ <Group_Tag name='Lead Information'>
23
+ <field name="Contact Owner">Jimbo Watunusi</field>
24
+ <field name="First Referrer"/>
25
+ <field name="Last Referrer"/>
26
+ <field name="Lead Source"/>
27
+ <field name="Campaign"/>
28
+ <field name="Ad"/>
29
+ <field name="Media"/>
30
+ </Group_Tag>
31
+ <Group_Tag name='Sequences and Tags'>
32
+ <field name="Sequences">*/*</field>
33
+ <field name="Contact Tags"/>
34
+ </Group_Tag>
35
+ <Group_Tag name='Purchase History'></Group_Tag>
36
+ <Group_Tag name='Most Recent Charge'>
37
+ <field name="Charge Amount">$0.00</field>
38
+ <field name="Charge Invoice #"/>
39
+ </Group_Tag>
40
+ <Group_Tag name='Affiliate Data'>
41
+ <field name="Affiliate Program"/>
42
+ <field name="Number of Sales"/>
43
+ <field name="$ Sales">$0.00</field>
44
+ <field name="Paypal E-mail"/>
45
+ <field name="Affiliate Paypal"/>
46
+ </Group_Tag>
47
+ <Group_Tag name='Most Recent Invoice'>
48
+ <field name="Invoice #"/>
49
+ <field name="Total Invoice Amount">$0.00</field>
50
+ </Group_Tag>
51
+ <Group_Tag name='Lead Status'>
52
+ <field name="Lead Status"/>
53
+ <field name="Preferencia Contacto"/>
54
+ </Group_Tag>
55
+ <Group_Tag name='Credit Card'>
56
+ <field name="Card Type"/>
57
+ <field name="Card Expiration Month"/>
58
+ <field name="Charge Result"/>
59
+ <field name="Card Expiration Year"/>
60
+ <field name="Card Number (Last 4)"/>
61
+ <field name="Payment Center Link"/>
62
+ </Group_Tag>
63
+ <Group_Tag name='Invoices'></Group_Tag>
64
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
65
+ <Group_Tag name='Website Subscribers'></Group_Tag>
66
+ </contact>
67
+ <contact id='5' date='1296056609' dlm='1296056694' score='0.00' purl='Paciente2' bulk_mail='1'>
68
+ <Group_Tag name='Contact Information'>
69
+ <field name="First Name">Ali</field>
70
+ <field name="Last Name">Maju</field>
71
+ <field name="E-Mail">ali@example.com</field>
72
+ <field name="Home Phone">1234</field>
73
+ <field name="Title"/>
74
+ <field name="Office Phone">1234123</field>
75
+ <field name="Cell Phone">123444</field>
76
+ <field name="Fax"/>
77
+ <field name="Address"/>
78
+ <field name="Company"/>
79
+ <field name="Address 2"/>
80
+ <field name="City"/>
81
+ <field name="State"/>
82
+ <field name="Zip Code"/>
83
+ <field name="Website "/>
84
+ <field name="Country"/>
85
+ <field name="Birthday"/>
86
+ </Group_Tag>
87
+ <Group_Tag name='Lead Information'>
88
+ <field name="Contact Owner">Jimbo Watunusi</field>
89
+ <field name="First Referrer"/>
90
+ <field name="Last Referrer"/>
91
+ <field name="Lead Source"/>
92
+ <field name="Campaign"/>
93
+ <field name="Ad"/>
94
+ <field name="Media"/>
95
+ </Group_Tag>
96
+ <Group_Tag name='Sequences and Tags'>
97
+ <field name="Sequences">*/*</field>
98
+ <field name="Contact Tags"/>
99
+ </Group_Tag>
100
+ <Group_Tag name='Purchase History'></Group_Tag>
101
+ <Group_Tag name='Most Recent Charge'>
102
+ <field name="Charge Amount">$0.00</field>
103
+ <field name="Charge Invoice #"/>
104
+ </Group_Tag>
105
+ <Group_Tag name='Affiliate Data'>
106
+ <field name="Affiliate Program"/>
107
+ <field name="Number of Sales"/>
108
+ <field name="$ Sales">$0.00</field>
109
+ <field name="Paypal E-mail"/>
110
+ <field name="Affiliate Paypal"/>
111
+ </Group_Tag>
112
+ <Group_Tag
113
+ name='Most Recent Invoice'>
114
+ <field name="Invoice #"/>
115
+ <field name="Total Invoice Amount">$0.00</field>
116
+ </Group_Tag>
117
+ <Group_Tag name='Lead Status'>
118
+ <field name="Lead Status">ASSIGNED</field>
119
+ <field name="Preferencia Contacto">Entre las 13 y 16</field>
120
+ </Group_Tag>
121
+ <Group_Tag name='Credit Card'>
122
+ <field name="Card Type"/>
123
+ <field name="Card Expiration Month"/>
124
+ <field name="Charge Result"/>
125
+ <field name="Card Expiration Year"/>
126
+ <field name="Card Number (Last 4)"/>
127
+ <field name="Payment Center Link"/>
128
+ </Group_Tag>
129
+ <Group_Tag name='Invoices'></Group_Tag>
130
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
131
+ <Group_Tag name='Website Subscribers'></Group_Tag>
132
+ </contact>
133
+ <contact id='7' date='1299671887' dlm='1299674450' score='0.00' purl='prashant' bulk_mail='1'>
134
+ <Group_Tag name='Contact Information'>
135
+ <field name="First Name">prashant</field>
136
+ <field name="Last Name">nadarajan</field>
137
+ <field name="E-Mail">prashant@example.com</field>
138
+ <field name="Home Phone"/>
139
+ <field name="Title"/>
140
+ <field name="Office Phone"/>
141
+ <field name="Cell Phone"/>
142
+ <field name="Fax"/>
143
+ <field name="Address"/>
144
+ <field name="Company"/>
145
+ <field name="Address 2"/>
146
+ <field name="City"/>
147
+ <field name="State"/>
148
+ <field name="Zip Code"/>
149
+ <field name="Website "/>
150
+ <field name="Country"/>
151
+ <field name="Birthday"/>
152
+ </Group_Tag>
153
+ <Group_Tag name='Lead Information'>
154
+ <field name="Contact Owner">Don Corleone</field>
155
+ <field name="First Referrer"/>
156
+ <field name="Last Referrer"/>
157
+ <field name="Lead Source"/>
158
+ <field name="Campaign"/>
159
+ <field name="Ad"/>
160
+ <field name="Media"/>
161
+ </Group_Tag>
162
+ <Group_Tag name='Sequences and Tags'>
163
+ <field name="Sequences">*/*</field>
164
+ <field name="Contact Tags"/>
165
+ </Group_Tag>
166
+ <Group_Tag name='Purchase History'></Group_Tag>
167
+ <Group_Tag name='Most Recent Charge'>
168
+ <field name="Charge Amount">$0.00</field>
169
+ <field name="Charge Invoice #"/>
170
+ </Group_Tag>
171
+ <Group_Tag name='Affiliate Data'>
172
+ <field name="Affiliate Program"/>
173
+ <field name="Number of Sales"/>
174
+ <field name="$ Sales">$0.00</field>
175
+ <field name="Paypal E-mail"/>
176
+ <field name="Affiliate Paypal"/>
177
+ </Group_Tag>
178
+ <Group_Tag name='Most Recent Invoice'>
179
+ <field name="Invoice #"/>
180
+ <field name="Total Invoice Amount">$0.00</field>
181
+ </Group_Tag>
182
+ <Group_Tag name='Lead Status'>
183
+ <field name="Lead Status"/>
184
+ <field name="Preferencia Contacto"/>
185
+ </Group_Tag>
186
+ <Group_Tag name='Credit Card'>
187
+ <field name="Card Type"/>
188
+ <field name="Card Expiration Month"/>
189
+ <field name="Charge Result"/>
190
+ <field name="Card Expiration Year"/>
191
+ <field name="Card Number (Last 4)"/>
192
+ <field name="Payment Center Link"/>
193
+ </Group_Tag>
194
+ <Group_Tag name='Invoices'></Group_Tag>
195
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
196
+ <Group_Tag name='Website Subscribers'></Group_Tag>
197
+ </contact>
198
+ </result>
@@ -0,0 +1,68 @@
1
+ <result>
2
+ <contact id='7' date='1299671887' dlm='1299674450' score='0.00' purl='prashant' bulk_mail='1'>
3
+ <Group_Tag name='Contact Information'>
4
+ <field name="First Name">prashant</field>
5
+ <field name="Last Name">nadarajan</field>
6
+ <field name="E-Mail">prashant@example.com</field>
7
+ <field name="Home Phone"/>
8
+ <field name="Title"/>
9
+ <field name="Office Phone"/>
10
+ <field name="Cell Phone"/>
11
+ <field name="Fax"/>
12
+ <field name="Address"/>
13
+ <field name="Company"/>
14
+ <field name="Address 2"/>
15
+ <field name="City"/>
16
+ <field name="State"/>
17
+ <field name="Zip Code"/>
18
+ <field name="Website "/>
19
+ <field name="Country"/>
20
+ <field name="Birthday"/>
21
+ </Group_Tag>
22
+ <Group_Tag name='Lead Information'>
23
+ <field name="Contact Owner">Don Corleone</field>
24
+ <field name="First Referrer"/>
25
+ <field name="Last Referrer"/>
26
+ <field name="Lead Source"/>
27
+ <field name="Campaign"/>
28
+ <field name="Ad"/>
29
+ <field name="Media"/>
30
+ </Group_Tag>
31
+ <Group_Tag name='Sequences and Tags'>
32
+ <field name="Sequences">*/*</field>
33
+ <field name="Contact Tags"/>
34
+ </Group_Tag>
35
+ <Group_Tag name='Purchase History'></Group_Tag>
36
+ <Group_Tag name='Most Recent Charge'>
37
+ <field name="Charge Amount">$0.00</field>
38
+ <field name="Charge Invoice #"/>
39
+ </Group_Tag>
40
+ <Group_Tag name='Affiliate Data'>
41
+ <field name="Affiliate Program"/>
42
+ <field name="Number of Sales"/>
43
+ <field name="$ Sales">$0.00</field>
44
+ <field name="Paypal E-mail"/>
45
+ <field name="Affiliate Paypal"/>
46
+ </Group_Tag>
47
+ <Group_Tag
48
+ name='Most Recent Invoice'>
49
+ <field name="Invoice #"/>
50
+ <field name="Total Invoice Amount">$0.00</field>
51
+ </Group_Tag>
52
+ <Group_Tag name='Lead Status'>
53
+ <field name="Lead Status"/>
54
+ <field name="Preferencia Contacto"/>
55
+ </Group_Tag>
56
+ <Group_Tag name='Credit Card'>
57
+ <field name="Card Type"/>
58
+ <field name="Card Expiration Month"/>
59
+ <field name="Charge Result"/>
60
+ <field name="Card Expiration Year"/>
61
+ <field name="Card Number (Last 4)"/>
62
+ <field name="Payment Center Link"/>
63
+ </Group_Tag>
64
+ <Group_Tag name='Invoices'></Group_Tag>
65
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
66
+ <Group_Tag name='Website Subscribers'></Group_Tag>
67
+ </contact>
68
+ </result>
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe OfficeAutopilot::Client::Contacts do
4
+
5
+ before do
6
+ @contact_endpoint = "#{api_endpoint}/cdata.php"
7
+ @client = OfficeAutopilot::Client.new(:api_id => 'xxx', :api_key => 'xxx')
8
+ @auth_str = "Appid=#{@client.api_id}&Key=#{@client.api_key}"
9
+ end
10
+
11
+ def parse_xml_contacts(xml)
12
+ contacts = []
13
+ xml = Nokogiri::XML(xml)
14
+ xml.css('result contact').each do |node|
15
+ contacts << {
16
+ :id => node['id'].to_i,
17
+ :first_name => node.at_css("Group_Tag[name='Contact Information'] field[name='First Name']").text,
18
+ :last_name => node.at_css("Group_Tag[name='Contact Information'] field[name='Last Name']").text,
19
+ :email => node.at_css("Group_Tag[name='Contact Information'] field[name='E-Mail']").text
20
+ }
21
+ end
22
+ contacts
23
+ end
24
+
25
+ describe "#contacts_search" do
26
+ context "when the results contain one user" do
27
+ it "returns an array containing the contact" do
28
+ search_params = {:field => 'E-Mail', :op => 'e', :value => 'prashant@example.com'}
29
+ xml_request = @client.xml_for_search(search_params)
30
+ xml_response = test_data('contacts_search_single_response.xml')
31
+
32
+ stub_request(:post, @contact_endpoint).with(
33
+ :body => "reqType=search&data=#{escape_xml(xml_request)}&#{@auth_str}"
34
+ ).to_return(:body => xml_response)
35
+
36
+ xml_contacts = parse_xml_contacts(xml_response)
37
+
38
+ response = @client.contacts_search(search_params)
39
+ response.each_with_index do |contact, index|
40
+ contact[:id].should == xml_contacts[index][:id]
41
+ contact[:first_name].should == xml_contacts[index][:first_name]
42
+ contact[:last_name].should == xml_contacts[index][:last_name]
43
+ contact[:email].should == xml_contacts[index][:email]
44
+ end
45
+ end
46
+ end
47
+
48
+ context "when the results contain more than one user" do
49
+ it "returns an array containing the contacts" do
50
+ search_params = {:field => 'E-Mail', :op => 'c', :value => ''}
51
+ xml_request = @client.xml_for_search(search_params)
52
+ xml_response = test_data('contacts_search_multiple_response.xml')
53
+
54
+ stub_request(:post, @contact_endpoint).with(
55
+ :body => "reqType=search&data=#{escape_xml(xml_request)}&#{@auth_str}"
56
+ ).to_return(:body => xml_response)
57
+
58
+ xml_contacts = parse_xml_contacts(xml_response)
59
+
60
+ response = @client.contacts_search(search_params)
61
+ response.each_with_index do |contact, index|
62
+ contact[:id].should == xml_contacts[index][:id]
63
+ contact[:first_name].should == xml_contacts[index][:first_name]
64
+ contact[:last_name].should == xml_contacts[index][:last_name]
65
+ contact[:email].should == xml_contacts[index][:email]
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe OfficeAutopilot::Client do
4
+
5
+ describe "#new" do
6
+ before do
7
+ @api_id = 'foo'
8
+ @api_key = 'bar'
9
+ end
10
+
11
+ it "initializes the API credentials" do
12
+ client = OfficeAutopilot::Client.new(:api_id => @api_id, :api_key => @api_key)
13
+ client.api_id.should == @api_id
14
+ client.api_key.should == @api_key
15
+ client.auth.should == { 'Appid' => @api_id, 'Key' => @api_key }
16
+ end
17
+
18
+ it "raises an ArgumentError when api_id is not provided" do
19
+ expect {
20
+ OfficeAutopilot::Client.new(:api_key => 'foo')
21
+ }.to raise_error(ArgumentError)
22
+ end
23
+
24
+ it "raises an ArgumentError when api_key is not provided" do
25
+ expect {
26
+ OfficeAutopilot::Client.new(:api_id => 'foo')
27
+ }.to raise_error(ArgumentError)
28
+ end
29
+ end
30
+
31
+ describe "HTTParty" do
32
+ it "sets the base uri to the Office Autopilot API host" do
33
+ OfficeAutopilot::Client.base_uri.should == 'http://api.moon-ray.com'
34
+ end
35
+
36
+ it "set the format to :xml" do
37
+ OfficeAutopilot::Client.format.should == :plain
38
+ end
39
+ end
40
+
41
+ describe "#xml_for_search" do
42
+ before do
43
+ @client = OfficeAutopilot::Client.new(:api_id => 'xx', :api_key => 'yy')
44
+ end
45
+
46
+ # <search>
47
+ # <equation>
48
+ # <field>E-Mail</field>
49
+ # <op>e</op>
50
+ # <value>john@example.com</value>
51
+ # </equation>
52
+ # </search>
53
+
54
+ context "searching with one field" do
55
+ it "returns a valid simple search data xml" do
56
+ field = "E-Mail"
57
+ op = "e"
58
+ value = "john@example.com"
59
+
60
+ xml = Nokogiri::XML(@client.xml_for_search(:field => field, :op => op, :value => value))
61
+ xml.at_css('field').content.should == field
62
+ xml.at_css('op').content.should == op
63
+ xml.at_css('value').content.should == value
64
+ end
65
+ end
66
+
67
+ context "searching with more than one field" do
68
+ it "returns a valid multi search data xml" do
69
+ field = "E-Mail"
70
+ op = "e"
71
+ value = "john@example.com"
72
+
73
+ search_options = [
74
+ {:field => 'E-Mail', :op => 'e', :value => 'foo@example.com'},
75
+ {:field => 'Contact Tags', :op => 'n', :value => 'bar'},
76
+ ]
77
+
78
+ xml = @client.xml_for_search(search_options)
79
+ xml = Nokogiri::XML(xml)
80
+ xml.css('field')[0].content.should == 'E-Mail'
81
+ xml.css('op')[0].content.should == 'e'
82
+ xml.css('value')[0].content.should == 'foo@example.com'
83
+ xml.css('field')[1].content.should == 'Contact Tags'
84
+ xml.css('op')[1].content.should == 'n'
85
+ xml.css('value')[1].content.should == 'bar'
86
+ end
87
+ end
88
+ end
89
+
90
+ end
@@ -0,0 +1,24 @@
1
+ #Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
2
+
3
+
4
+ require 'office_autopilot'
5
+
6
+ require 'cgi'
7
+ require 'webmock/rspec'
8
+
9
+
10
+ RSpec.configure do |config|
11
+ end
12
+
13
+
14
+ def test_data(file_name)
15
+ File.read(File.join(File.dirname(__FILE__), 'data', file_name))
16
+ end
17
+
18
+ def api_endpoint
19
+ 'http://api.moon-ray.com'
20
+ end
21
+
22
+ def escape_xml(xml)
23
+ CGI.escape(xml)
24
+ end
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: office_autopilot
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Prashant Nadarajan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-12 00:00:00 +08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "0.8"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "2.5"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: webmock
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: "1.6"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: httparty
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: "0.7"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: builder
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: "3.0"
69
+ type: :runtime
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: nokogiri
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: "1.4"
80
+ type: :runtime
81
+ version_requirements: *id006
82
+ description: A Ruby wrapper for the OfficeAutopilot API
83
+ email:
84
+ - prashant.nadarajan@gmail.com
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - .gitignore
93
+ - .rspec
94
+ - Gemfile
95
+ - LICENSE
96
+ - README.md
97
+ - Rakefile
98
+ - lib/office_autopilot.rb
99
+ - lib/office_autopilot/client.rb
100
+ - lib/office_autopilot/client/contacts.rb
101
+ - lib/office_autopilot/version.rb
102
+ - office_autopilot.gemspec
103
+ - spec/data/contacts_search_multiple_response.xml
104
+ - spec/data/contacts_search_single_response.xml
105
+ - spec/office_autopilot/client/contacts_spec.rb
106
+ - spec/office_autopilot/client_spec.rb
107
+ - spec/spec_helper.rb
108
+ has_rdoc: true
109
+ homepage: https://github.com/prashantrajan/office_autopilot
110
+ licenses: []
111
+
112
+ post_install_message:
113
+ rdoc_options: []
114
+
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: "0"
129
+ requirements: []
130
+
131
+ rubyforge_project: office_autopilot
132
+ rubygems_version: 1.6.1
133
+ signing_key:
134
+ specification_version: 3
135
+ summary: Ruby wrapper for the OfficeAutopilot API
136
+ test_files:
137
+ - spec/data/contacts_search_multiple_response.xml
138
+ - spec/data/contacts_search_single_response.xml
139
+ - spec/office_autopilot/client/contacts_spec.rb
140
+ - spec/office_autopilot/client_spec.rb
141
+ - spec/spec_helper.rb