rubyzoho 0.0.4 → 0.1.0

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/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- # - jruby-19mode # JRuby in 1.9 mode
4
+ - jruby-19mode # JRuby in 1.9 mode
5
5
  # - rbx-19mode
data/Gemfile CHANGED
@@ -1,16 +1,18 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
2
 
9
3
  gem 'httparty'
10
4
  gem 'roxml'
11
5
 
12
6
 
13
- group :development, :test do
7
+ group :test do
8
+ gem 'cucumber'
9
+ gem 'rspec', ">= 2.12.0"
10
+ gem "shoulda", ">= 0"
11
+ gem 'xml-simple'
12
+ gem 'simplecov', :require => false, :group => :test
13
+ end
14
+
15
+ group :development do
14
16
  gem "bundler"
15
17
  gem 'cucumber'
16
18
  gem "jeweler", "~> 1.8.4"
data/README.rdoc CHANGED
@@ -1,5 +1,3 @@
1
- Travis CI - YRI 1.9.x
2
-
3
1
  {<img src="https://travis-ci.org/amalc/rubyzoho.png?branch=master" alt="Build Status" />}[https://travis-ci.org/amalc/rubyzoho]
4
2
 
5
3
  = rubyzoho
@@ -15,6 +13,8 @@ Put the following in an initializer (e.g. zoho.rb):
15
13
 
16
14
  RubyZoho.configure do |config|
17
15
  config.api_key = '<< API Key from Zoho>>'
16
+ # config.crm_modules = ['Accounts', 'Contacts', 'Leads', 'Potentials'] # Defaults to free edition if not set
17
+ # config.crm_modules = ['Accounts', 'Contacts', 'Leads', 'Potentials', 'Quotes', 'SalesOrders', 'Invoices'] # Depending on what kind of account you've got
18
18
  end
19
19
 
20
20
  Please be aware that Zoho limits API calls. So running tests repeatedly will quickly exhaust
@@ -115,6 +115,13 @@ To add a contact to an existing account:
115
115
  )
116
116
  c.save
117
117
 
118
+ To update a record:
119
+ l = RubyZoho::Crm::Lead.find_by_email('email@domain.com')
120
+ RubyZoho::Crm::Lead.update(
121
+ :id => l.first.leadid,
122
+ :email => 'changed_email@domain.com'
123
+ )
124
+
118
125
 
119
126
  Objects currently supported are:
120
127
  RubyZoho::Crm::Account
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.1.0
data/lib/ruby_zoho.rb CHANGED
@@ -5,11 +5,12 @@ require 'api_utils'
5
5
  module RubyZoho
6
6
 
7
7
  class Configuration
8
- attr_accessor :api, :api_key
8
+ attr_accessor :api, :api_key, :crm_modules
9
9
 
10
10
  def initialize
11
11
  self.api_key = nil
12
12
  self.api = nil
13
+ self.crm_modules = nil
13
14
  end
14
15
  end
15
16
 
@@ -20,7 +21,8 @@ module RubyZoho
20
21
  def self.configure
21
22
  self.configuration ||= Configuration.new
22
23
  yield(configuration) if block_given?
23
- self.configuration.api = ZohoApi::Crm.new(self.configuration.api_key)
24
+ self.configuration.crm_modules ||= ['Accounts', 'Contacts', 'Leads', 'Potentials']
25
+ self.configuration.api = ZohoApi::Crm.new(self.configuration.api_key, self.configuration.crm_modules)
24
26
  end
25
27
 
26
28
 
@@ -108,6 +110,13 @@ module RubyZoho
108
110
  nil
109
111
  end
110
112
 
113
+ def self.update(object_attribute_hash)
114
+ raise(RuntimeError, 'No ID found', object_attribute_hash) if object_attribute_hash[:id].nil?
115
+ id = object_attribute_hash[:id]
116
+ object_attribute_hash.delete(:id)
117
+ RubyZoho.configuration.api.update_record(Crm.module_name, id, object_attribute_hash)
118
+ end
119
+
111
120
 
112
121
  class Account < RubyZoho::Crm
113
122
  include RubyZoho
@@ -128,6 +137,11 @@ module RubyZoho
128
137
  Crm.module_name = 'Accounts'
129
138
  super
130
139
  end
140
+
141
+ def self.method_missing(meth, *args, &block)
142
+ Crm.module_name = 'Accounts'
143
+ super
144
+ end
131
145
  end
132
146
 
133
147
 
@@ -146,6 +160,11 @@ module RubyZoho
146
160
  super
147
161
  end
148
162
 
163
+ def self.method_missing(meth, *args, &block)
164
+ Crm.module_name = 'Contacts'
165
+ super
166
+ end
167
+
149
168
  def self.delete(id)
150
169
  Crm.module_name = 'Contacts'
151
170
  super
@@ -172,6 +191,11 @@ module RubyZoho
172
191
  Crm.module_name = 'Leads'
173
192
  super
174
193
  end
194
+
195
+ def self.method_missing(meth, *args, &block)
196
+ Crm.module_name = 'Leads'
197
+ super
198
+ end
175
199
  end
176
200
 
177
201
  class Potential < RubyZoho::Crm
@@ -193,6 +217,11 @@ module RubyZoho
193
217
  Crm.module_name = 'Potentials'
194
218
  super
195
219
  end
220
+
221
+ def self.method_missing(meth, *args, &block)
222
+ Crm.module_name = 'Potentials'
223
+ super
224
+ end
196
225
  end
197
226
 
198
227
  class Quote < RubyZoho::Crm
@@ -214,6 +243,11 @@ module RubyZoho
214
243
  Crm.module_name = 'Quotes'
215
244
  super
216
245
  end
246
+
247
+ def self.method_missing(meth, *args, &block)
248
+ Crm.module_name = 'Quotes'
249
+ super
250
+ end
217
251
  end
218
252
 
219
253
  end
data/lib/zoho_api.rb CHANGED
@@ -19,8 +19,9 @@ module ZohoApi
19
19
 
20
20
  attr_reader :auth_token, :module_fields
21
21
 
22
- def initialize(auth_token)
22
+ def initialize(auth_token, modules)
23
23
  @auth_token = auth_token
24
+ @modules = modules
24
25
  @module_fields = reflect_module_fields
25
26
  end
26
27
 
@@ -106,12 +107,8 @@ module ZohoApi
106
107
  to_hash(x)
107
108
  end
108
109
 
109
- def self.module_names
110
- %w{Leads Accounts Contacts Potentials Quotes Invoices SalesOrders}
111
- end
112
-
113
110
  def reflect_module_fields
114
- module_names = ZohoApi::Crm.module_names
111
+ module_names = @modules
115
112
  module_fields = {}
116
113
  module_names.each { |n| module_fields.merge!({ ApiUtils.string_to_symbol(n) => fields(n) }) }
117
114
  module_fields
@@ -141,6 +138,20 @@ module ZohoApi
141
138
  r
142
139
  end
143
140
 
141
+ def update_record(module_name, id, fields_values_hash)
142
+ x = REXML::Document.new
143
+ contacts = x.add_element module_name
144
+ row = contacts.add_element 'row', { 'no' => '1'}
145
+ fields_values_hash.each_pair { |k, v| add_field(row, ApiUtils.symbol_to_string(k), v) }
146
+ r = self.class.post(create_url(module_name, 'updateRecords'),
147
+ :query => { :newFormat => 1, :authtoken => @auth_token,
148
+ :scope => 'crmapi', :id => id,
149
+ :xmlData => x },
150
+ :headers => { 'Content-length' => '0' })
151
+ raise('Updating record failed', RuntimeError, r.response.body.to_s) unless r.response.code == '200'
152
+ r.response.code
153
+ end
154
+
144
155
  end
145
156
 
146
157
  end
Binary file
Binary file
data/rubyzoho.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "rubyzoho"
8
- s.version = "0.0.4"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["amalc"]
@@ -30,6 +30,9 @@ Gem::Specification.new do |s|
30
30
  "lib/api_utils.rb",
31
31
  "lib/ruby_zoho.rb",
32
32
  "lib/zoho_api.rb",
33
+ "rubyzoho-0.0.3.gem",
34
+ "rubyzoho-0.0.4.gem",
35
+ "rubyzoho-0.1.0.gem",
33
36
  "rubyzoho.gemspec",
34
37
  "spec/api_utils_spec.rb",
35
38
  "spec/fixtures/sample.pdf",
@@ -12,7 +12,12 @@ describe RubyZoho::Crm do
12
12
  RubyZoho.configure do |config|
13
13
  #config.api_key = params['auth_token']
14
14
  config.api_key = '62cedfe9427caef8afb9ea3b5bf68154'
15
+ config.crm_modules = ['Accounts', 'Contacts', 'Leads', 'Potentials', 'Quotes']
15
16
  end
17
+ r = RubyZoho::Crm::Contact.find_by_last_name('Smithereens')
18
+ r.each { |m| RubyZoho::Crm::Contact.delete(m.contactid) } unless r.nil?
19
+ r = RubyZoho::Crm::Contact.find_by_email('raj@portra.com')
20
+ r.each { |c| RubyZoho::Crm::Contact.delete(c.contactid) } unless r.nil?
16
21
  end
17
22
 
18
23
  it 'should add accessors using a list of names' do
@@ -150,4 +155,21 @@ describe RubyZoho::Crm do
150
155
  r.each { |c| RubyZoho::Crm::Potential.delete(c.potentialid) }
151
156
  end
152
157
 
158
+ it 'should update a lead record' do
159
+ l = RubyZoho::Crm::Lead.new(
160
+ :first_name => 'Raj',
161
+ :last_name => 'Portra',
162
+ :email => 'raj@portra.com')
163
+ l.save
164
+ r = RubyZoho::Crm::Lead.find_by_email('raj@portra.com')
165
+ RubyZoho::Crm::Lead.update(
166
+ :id => r.first.leadid,
167
+ :email => 'changed_raj@portra.com'
168
+ )
169
+ r_changed = RubyZoho::Crm::Lead.find_by_email('changed_raj@portra.com')
170
+ r.first.leadid.should eq(r_changed.first.leadid)
171
+ r_changed.should_not eq(nil)
172
+ r.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) }
173
+ end
174
+
153
175
  end
@@ -25,7 +25,8 @@ describe ZohoApi do
25
25
  #params = YAML.load(File.open(config_file))
26
26
  #@zoho = ZohoApi::Crm.new(params['auth_token'])
27
27
  @sample_pdf = File.join(base_path, 'sample.pdf')
28
- @zoho = ZohoApi::Crm.new('62cedfe9427caef8afb9ea3b5bf68154')
28
+ modules = ['Accounts', 'Contacts', 'Leads', 'Potentials', 'Quotes']
29
+ @zoho = ZohoApi::Crm.new('62cedfe9427caef8afb9ea3b5bf68154', modules)
29
30
  end
30
31
 
31
32
  it 'should add a new contact' do
@@ -105,4 +106,21 @@ describe ZohoApi do
105
106
  r.count.should be > 1
106
107
  end
107
108
 
109
+ it 'should update a contact' do
110
+ h = { :first_name => 'Robert',
111
+ :last_name => 'Smith',
112
+ :email => 'rsmith@smithereens.com',
113
+ :department => 'Waste Collection and Management',
114
+ :phone => '13452129087',
115
+ :mobile => '12341238790'
116
+ }
117
+ @zoho.add_record('Contacts', h)
118
+ contact = @zoho.find_records('Contacts', :email, '=', h[:email])
119
+ h_changed = { :email => 'robert.smith@smithereens.com' }
120
+ @zoho.update_record('Contacts', contact[0][:contactid], h_changed)
121
+ changed_contact = @zoho.find_records('Contacts', :email, '=', h_changed[:email])
122
+ changed_contact[0][:email].should eq(h_changed[:email])
123
+ @zoho.delete_record('Contacts', contact[0][:contactid])
124
+ end
125
+
108
126
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyzoho
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -208,6 +208,9 @@ files:
208
208
  - lib/api_utils.rb
209
209
  - lib/ruby_zoho.rb
210
210
  - lib/zoho_api.rb
211
+ - rubyzoho-0.0.3.gem
212
+ - rubyzoho-0.0.4.gem
213
+ - rubyzoho-0.1.0.gem
211
214
  - rubyzoho.gemspec
212
215
  - spec/api_utils_spec.rb
213
216
  - spec/fixtures/sample.pdf