rubyzoho 0.1.7 → 0.1.11

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,32 @@
1
+ c = Class.new(RubyZoho::Crm) do
2
+ def initialize(object_attribute_hash = {})
3
+ Crm.module_name = 'Users'
4
+ super
5
+ end
6
+
7
+ def self.delete(id)
8
+ raise 'Cannot delete users through API'
9
+ end
10
+
11
+ def save
12
+ raise 'Cannot delete users through API'
13
+ end
14
+
15
+ def self.all
16
+ result = RubyZoho.configuration.api.users('AllUsers')
17
+ result.collect { |r| new(r) }
18
+ end
19
+
20
+ def self.find_by_email(email)
21
+ r = []
22
+ self.all.index { |u| r << u if u.email == email }
23
+ r
24
+ end
25
+
26
+ def self.method_missing(meth, *args, &block)
27
+ Crm.module_name = 'Users'
28
+ super
29
+ end
30
+ end
31
+
32
+ Kernel.const_set 'CRMUser', c
@@ -0,0 +1,81 @@
1
+ module ZohoCrmUtils
2
+
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ module ClassMethods
8
+
9
+ def create_accessor(klass, names)
10
+ names.each do |name|
11
+ n = name.class == Symbol ? name.to_s : name
12
+ n.gsub!(/[()]*/, '')
13
+ raise(RuntimeError, "Bad field name: #{name}") unless method_name?(n)
14
+ create_getter(klass, n)
15
+ create_setter(klass, n)
16
+ end
17
+ names
18
+ end
19
+
20
+ def create_getter(klass, *names)
21
+ names.each do |name|
22
+ klass.send(:define_method, "#{name}") { instance_variable_get("@#{name}") }
23
+ end
24
+ end
25
+
26
+ def create_setter(klass, *names)
27
+ names.each do |name|
28
+ klass.send(:define_method, "#{name}=") { |val| instance_variable_set("@#{name}", val) }
29
+ end
30
+ end
31
+
32
+ def method_name?(n)
33
+ name = n.class == String ? ApiUtils.string_to_symbol(n) : n
34
+ return /[@$"]/ !~ name.inspect
35
+ end
36
+
37
+ def method_is_module?(str_or_sym)
38
+ return nil if str_or_sym.nil?
39
+ s = str_or_sym.class == String ? str_or_sym : ApiUtils.symbol_to_string(str_or_sym)
40
+ possible_module = s[s.length - 1].downcase == 's' ? s : s + 's'
41
+ i = RubyZoho.configuration.crm_modules.index(possible_module.capitalize)
42
+ return str_or_sym unless i.nil?
43
+ nil
44
+ end
45
+
46
+ end
47
+
48
+ def create_accessor(klass, names)
49
+ names.each do |name|
50
+ n = name.class == Symbol ? name.to_s : name
51
+ n.gsub!(/[()]*/, '')
52
+ raise(RuntimeError, "Bad field name: #{name}") unless self.class.method_name?(n)
53
+ self.class.create_getter(klass, n)
54
+ self.class.create_setter(klass, n)
55
+ end
56
+ names
57
+ end
58
+
59
+ def update_or_create_attrs(object_attribute_hash)
60
+ retry_counter = object_attribute_hash.count
61
+ begin
62
+ object_attribute_hash.map { |(k, v)| public_send("#{k}=", v) }
63
+ rescue NoMethodError => e
64
+ m = e.message.slice(/`(.*?)=/)
65
+ create_accessor(self.class, [m.gsub(/[`()]*/, '').chop]) unless m.nil?
66
+ retry_counter -= 1
67
+ retry if retry_counter > 0
68
+ end
69
+ end
70
+
71
+ def attr_writers
72
+ self.methods.grep(/\w=$/)
73
+ end
74
+
75
+ def run_create_accessor(klass, meth)
76
+ method = meth.to_s.chop.to_sym
77
+ RubyZoho::Crm.create_accessor(klass, [method])
78
+ nil
79
+ end
80
+
81
+ end
Binary file
data/rubyzoho.gemspec CHANGED
@@ -2,14 +2,15 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: rubyzoho 0.1.11 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "rubyzoho"
8
- s.version = "0.1.7"
9
+ s.version = "0.1.11"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
12
  s.authors = ["amalc"]
12
- s.date = "2013-02-24"
13
+ s.date = "2013-12-16"
13
14
  s.description = ""
14
15
  s.email = ""
15
16
  s.extra_rdoc_files = [
@@ -17,9 +18,11 @@ Gem::Specification.new do |s|
17
18
  "README.rdoc"
18
19
  ]
19
20
  s.files = [
21
+ ".coverall.yml",
20
22
  ".document",
21
23
  ".rspec",
22
- ".rvmrc",
24
+ ".ruby-gemset",
25
+ ".ruby-version",
23
26
  ".travis.yml",
24
27
  "Gemfile",
25
28
  "LICENSE.txt",
@@ -27,9 +30,15 @@ Gem::Specification.new do |s|
27
30
  "Rakefile",
28
31
  "VERSION",
29
32
  "lib/api_utils.rb",
33
+ "lib/crm.rb",
34
+ "lib/crud_methods.rb",
30
35
  "lib/ruby_zoho.rb",
31
36
  "lib/zoho_api.rb",
32
- "rubyzoho-0.1.6.gem",
37
+ "lib/zoho_api_field_utils.rb",
38
+ "lib/zoho_api_finders.rb",
39
+ "lib/zoho_crm_users.rb",
40
+ "lib/zoho_crm_utils.rb",
41
+ "rubyzoho-0.1.7.gem",
33
42
  "rubyzoho.gemspec",
34
43
  "spec/api_utils_spec.rb",
35
44
  "spec/fixtures/sample.pdf",
@@ -45,15 +54,16 @@ Gem::Specification.new do |s|
45
54
  s.homepage = "http://github.com/amalc/rubyzoho"
46
55
  s.licenses = ["MIT"]
47
56
  s.require_paths = ["lib"]
48
- s.rubygems_version = "1.8.24"
57
+ s.rubygems_version = "2.1.11"
49
58
  s.summary = "A set of Ruby classes supporting the ActiveRecord lifecycle for the Zoho API."
50
59
 
51
60
  if s.respond_to? :specification_version then
52
- s.specification_version = 3
61
+ s.specification_version = 4
53
62
 
54
63
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
- s.add_runtime_dependency(%q<httmultiparty>, [">= 0.3.8"])
56
- s.add_runtime_dependency(%q<roxml>, [">= 3.3.1"])
64
+ s.add_runtime_dependency(%q<activemodel>, [">= 0"])
65
+ s.add_runtime_dependency(%q<httmultiparty>, [">= 0"])
66
+ s.add_runtime_dependency(%q<roxml>, [">= 0"])
57
67
  s.add_runtime_dependency(%q<multipart-post>, [">= 0"])
58
68
  s.add_development_dependency(%q<bundler>, [">= 1.2"])
59
69
  s.add_development_dependency(%q<cucumber>, [">= 1.2.1"])
@@ -64,8 +74,9 @@ Gem::Specification.new do |s|
64
74
  s.add_development_dependency(%q<rspec>, [">= 2.12.0"])
65
75
  s.add_development_dependency(%q<xml-simple>, [">= 1.1.2"])
66
76
  else
67
- s.add_dependency(%q<httmultiparty>, [">= 0.3.8"])
68
- s.add_dependency(%q<roxml>, [">= 3.3.1"])
77
+ s.add_dependency(%q<activemodel>, [">= 0"])
78
+ s.add_dependency(%q<httmultiparty>, [">= 0"])
79
+ s.add_dependency(%q<roxml>, [">= 0"])
69
80
  s.add_dependency(%q<multipart-post>, [">= 0"])
70
81
  s.add_dependency(%q<bundler>, [">= 1.2"])
71
82
  s.add_dependency(%q<cucumber>, [">= 1.2.1"])
@@ -77,8 +88,9 @@ Gem::Specification.new do |s|
77
88
  s.add_dependency(%q<xml-simple>, [">= 1.1.2"])
78
89
  end
79
90
  else
80
- s.add_dependency(%q<httmultiparty>, [">= 0.3.8"])
81
- s.add_dependency(%q<roxml>, [">= 3.3.1"])
91
+ s.add_dependency(%q<activemodel>, [">= 0"])
92
+ s.add_dependency(%q<httmultiparty>, [">= 0"])
93
+ s.add_dependency(%q<roxml>, [">= 0"])
82
94
  s.add_dependency(%q<multipart-post>, [">= 0"])
83
95
  s.add_dependency(%q<bundler>, [">= 1.2"])
84
96
  s.add_dependency(%q<cucumber>, [">= 1.2.1"])
@@ -9,14 +9,14 @@ describe RubyZoho::Crm do
9
9
  base_path = File.join(File.dirname(__FILE__), 'fixtures')
10
10
  @sample_pdf = File.join(base_path, 'sample.pdf')
11
11
  RubyZoho.configure do |config|
12
- config.api_key = ENV['ZOHO_API_KEY'].strip
12
+ config.api_key = ENV['ZOHO_API_KEY'].strip
13
13
  config.crm_modules = %w(Quotes)
14
14
  config.cache_fields = true
15
15
  end
16
16
  r = RubyZoho::Crm::Contact.find_by_last_name('Smithereens')
17
17
  r.each { |m| RubyZoho::Crm::Contact.delete(m.contactid) } unless r.nil?
18
18
  r = RubyZoho::Crm::Contact.find_by_email('raj@portra.com')
19
- r.each { |c| RubyZoho::Crm::Contact.delete(c.contactid) } unless r.nil?
19
+ r.each { |c| RubyZoho::Crm::Contact.delete(c.contactid) } unless r.nil?
20
20
  end
21
21
 
22
22
  it 'should add accessors using a list of names' do
@@ -63,7 +63,7 @@ describe RubyZoho::Crm do
63
63
  :priority => 'High',
64
64
  :send_notification_email => 'False',
65
65
  :due_date => '2014-02-16 16:00:00',
66
- :start_datetime => Time.now.to_s[1,19],
66
+ :start_datetime => Time.now.to_s[1, 19],
67
67
  :end_datetime => '2014-02-16 16:00:00'
68
68
  )
69
69
  r = RubyZoho::Crm::Task.find_by_subject(subject)
@@ -80,9 +80,9 @@ describe RubyZoho::Crm do
80
80
  r.each { |m| RubyZoho::Crm::Contact.delete(m.id) } unless r.nil?
81
81
  1.upto(3) do
82
82
  c = RubyZoho::Crm::Contact.new(
83
- :first_name => 'Bob',
84
- :last_name => 'Smithereens',
85
- :email => 'bob@smith.com')
83
+ :first_name => 'Bob',
84
+ :last_name => 'Smithereens',
85
+ :email => 'bob@smith.com')
86
86
  c.save
87
87
  end
88
88
  r = RubyZoho::Crm::Contact.find_by_email('bob@smith.com')
@@ -113,8 +113,8 @@ describe RubyZoho::Crm do
113
113
  end
114
114
 
115
115
  it 'should find a user by email address' do
116
- users = RubyZoho::Crm::User.all
117
- r = RubyZoho::Crm::User.find_by_email(users.first.email)
116
+ users = RubyZoho::Crm::CRMUser.all
117
+ r = RubyZoho::Crm::CRMUser.find_by_email(users.first.email)
118
118
  r.first.email.should eq(users.first.email)
119
119
  end
120
120
 
@@ -125,7 +125,7 @@ describe RubyZoho::Crm do
125
125
 
126
126
  it 'should get a list of attr_writers for contacts' do
127
127
  c = RubyZoho::Crm::Contact.new
128
- c.attr_writers.count.should be >= 21
128
+ c.attr_writers.count.should be >= 10
129
129
  end
130
130
 
131
131
  it 'should get a list of attr_writers for leads' do
@@ -155,12 +155,10 @@ describe RubyZoho::Crm do
155
155
  end
156
156
 
157
157
  it 'should get a list of calls' do
158
- #pending
159
158
  r = RubyZoho::Crm::Call.all
160
159
  unless r.nil?
161
- #r.count.should be > 1
162
160
  r.map { |e| e.class.should eq(RubyZoho::Crm::Call) }
163
- r.map { |e| e.id.should eq(e.activityid)}
161
+ r.map { |e| e.id.should eq(e.activityid) }
164
162
  end
165
163
  end
166
164
 
@@ -168,61 +166,63 @@ describe RubyZoho::Crm do
168
166
  r = RubyZoho::Crm::Contact.all
169
167
  r.count.should be > 1
170
168
  r.map { |e| e.class.should eq(RubyZoho::Crm::Contact) }
171
- r.map { |e| e.id.should eq(e.contactid)}
169
+ r.map { |e| e.id.should eq(e.contactid) }
172
170
  end
173
171
 
174
172
  it 'should get a list of events' do
173
+ pending
175
174
  r = RubyZoho::Crm::Event.all
176
175
  r.map { |r| r.class.should eq(RubyZoho::Crm::Event) } unless r.nil?
177
- r.map { |e| e.id.should eq(e.eventid)}
176
+ r.map { |e| e.id.should eq(e.eventid) }
178
177
  end
179
178
 
180
179
  it 'should get a list of potentials' do
181
180
  r = RubyZoho::Crm::Potential.all
182
181
  r.count.should be > 1
183
182
  r.map { |r| r.class.should eq(RubyZoho::Crm::Potential) }
184
- r.map { |e| e.id.should eq(e.potentialid)}
183
+ r.map { |e| e.id.should eq(e.potentialid) }
185
184
  end
186
185
 
187
186
  it 'should get a list of quotes' do
187
+ pending
188
188
  r = RubyZoho::Crm::Quote.all
189
189
  r.count.should be >= 1
190
190
  r.map { |r| r.class.should eq(RubyZoho::Crm::Quote) }
191
- r.map { |e| e.id.should eq(e.quoteid)}
191
+ r.map { |e| e.id.should eq(e.quoteid) }
192
192
  end
193
193
 
194
194
  it 'should get a list of tasks' do
195
195
  r = RubyZoho::Crm::Task.all
196
196
  r.map { |r| r.class.should eq(RubyZoho::Crm::Task) } unless r.nil?
197
- r.map { |e| e.id.should eq(e.activityid)}
197
+ r.map { |e| e.id.should eq(e.activityid) }
198
198
  end
199
199
 
200
200
  it 'should get a list of users' do
201
- pp r = RubyZoho::Crm::User.all
201
+ r = RubyZoho::Crm::CRMUser.all
202
202
  r.count.should be >= 1
203
203
  end
204
204
 
205
205
  it 'should save a contact record' do
206
206
  c = RubyZoho::Crm::Contact.new(
207
- :first_name => 'Raj',
208
- :last_name => 'Portra',
209
- :email => 'raj@portra.com')
207
+ :first_name => 'Raj',
208
+ :last_name => 'Portra',
209
+ :email => 'raj@portra.com')
210
210
  c.save
211
211
  r = RubyZoho::Crm::Contact.find_by_email('raj@portra.com')
212
212
  r.first.email.should eq('raj@portra.com')
213
- r.each { |c| RubyZoho::Crm::Contact.delete(c.contactid) }
213
+ r.each { |c| RubyZoho::Crm::Contact.delete(c.contactid) }
214
214
  end
215
215
 
216
216
  it 'should save a lead record' do
217
217
  l = RubyZoho::Crm::Lead.new(
218
- :first_name => 'Raj',
219
- :last_name => 'Portra',
220
- :email => 'raj@portra.com')
218
+ :first_name => 'Raj',
219
+ :last_name => 'Portra',
220
+ :email => 'raj@portra.com')
221
221
  l.save
222
222
  r = RubyZoho::Crm::Lead.find_by_email('raj@portra.com')
223
223
  r.should_not eq(nil)
224
224
  r.first.email.should eq(l.email)
225
- r.each { |c| RubyZoho::Crm::Lead.delete(c.id) }
225
+ r.each { |c| RubyZoho::Crm::Lead.delete(c.id) }
226
226
  end
227
227
 
228
228
  it 'should save and retrieve an account record with a custom field' do
@@ -248,7 +248,7 @@ describe RubyZoho::Crm do
248
248
  :type => 'New Business',
249
249
  :stage => 'Needs Analysis'}
250
250
  r = RubyZoho::Crm::Potential.find_by_potential_name(h[:potential_name])
251
- r.each { |c| RubyZoho::Crm::Potential.delete(c.potentialid) } unless r.nil?
251
+ r.each { |c| RubyZoho::Crm::Potential.delete(c.potentialid) } unless r.nil?
252
252
  p = RubyZoho::Crm::Potential.new(h)
253
253
  p.save
254
254
  r = RubyZoho::Crm::Potential.find_by_potential_name(p.potential_name)
@@ -256,9 +256,9 @@ describe RubyZoho::Crm do
256
256
  potential = RubyZoho::Crm::Potential.find(r.first.potentialid)
257
257
  potential.first.potentialid.should eq(r.first.potentialid)
258
258
  p_by_account_id = RubyZoho::Crm::Potential.find_by_accountid(accounts.first.accountid)
259
- p_found = p_by_account_id.map { |pn| pn if pn.potential_name == h[:potential_name]}.compact
259
+ p_found = p_by_account_id.map { |pn| pn if pn.potential_name == h[:potential_name] }.compact
260
260
  p_found.first.potentialid.should eq(r.first.potentialid)
261
- r.each { |c| RubyZoho::Crm::Potential.delete(c.potentialid) }
261
+ r.each { |c| RubyZoho::Crm::Potential.delete(c.potentialid) }
262
262
  end
263
263
 
264
264
  it 'should save and retrieve a task record' do
@@ -269,22 +269,22 @@ describe RubyZoho::Crm do
269
269
  :semodule => 'Accounts',
270
270
  :relatedtoid => accounts.first.accountid,
271
271
  :related_to => accounts.first.account_name,
272
- :priority => 'Low' }
272
+ :priority => 'Low'}
273
273
  r = RubyZoho::Crm::Task.find_by_subject(h[:subject])
274
- r.each { |t| RubyZoho::Crm::Task.delete(t.activityid) } unless r.nil?
274
+ r.each { |t| RubyZoho::Crm::Task.delete(t.activityid) } unless r.nil?
275
275
  t = RubyZoho::Crm::Task.new(h)
276
276
  t.save
277
277
  r = RubyZoho::Crm::Task.find_by_subject(h[:subject])
278
278
  r.first.subject.should eq(h[:subject])
279
279
  tasks = RubyZoho::Crm::Task.find_by_activityid(r.first.activityid)
280
280
  tasks.first.activityid.should eq(r.first.activityid)
281
- r.each { |c| RubyZoho::Crm::Task.delete(c.activityid) }
281
+ r.each { |c| RubyZoho::Crm::Task.delete(c.activityid) }
282
282
  end
283
283
 
284
284
  it 'should save an task record related to an account' do
285
285
  a = RubyZoho::Crm::Account.all.first
286
286
  e = RubyZoho::Crm::Task.new(
287
- :task_owner => a.account_owner,
287
+ :task_owner => a.account_owner,
288
288
  :subject => "Task should be related to #{a.account_name} #{Time.now}",
289
289
  :description => 'Nothing',
290
290
  :smownerid => "#{a.smownerid}",
@@ -292,38 +292,37 @@ describe RubyZoho::Crm do
292
292
  :priority => 'High',
293
293
  :send_notification_email => 'False',
294
294
  :due_date => '2014-02-16 16:00:00',
295
- :start_datetime => Time.now.to_s[1,19],
295
+ :start_datetime => Time.now.to_s[1, 19],
296
296
  :end_datetime => '2014-02-16 16:00:00',
297
297
  :related_to => "#{a.account_name}",
298
298
  :seid => "#{a.accountid}",
299
299
  :semodule => "Accounts"
300
300
  )
301
- r_expected = e.save
301
+ r_expected = e.save
302
302
  r = RubyZoho::Crm::Task.find_by_activityid(r_expected.id)
303
303
  r.first.subject.should eq(r_expected.subject)
304
304
  end
305
305
 
306
306
  it 'should get tasks by user' do
307
307
  pending
308
- pp u = RubyZoho::Crm::User.all.first
309
- pp tasks = RubyZoho::Crm::Task.find_by_smownerid(u.id)
310
- pp tasks = RubyZoho::Crm::Task.all
311
- tasks.map { |t| RubyZoho::Crm::Task.delete(t.activityid)} unless tasks.nil?
308
+ pp task_owner = RubyZoho::Crm::Task.first.task_owner
309
+ pp tasks = RubyZoho::Crm::Task.find_by_task_owner(task_owner)
310
+ #tasks.map { |t| RubyZoho::Crm::Task.delete(t.activityid)} unless tasks.nil?
312
311
  end
313
312
 
314
313
  it 'should sort contact records' do
315
314
  r = RubyZoho::Crm::Contact.all
316
- sorted = r.sort {|a, b| a.last_name <=> b.last_name }
315
+ sorted = r.sort { |a, b| a.last_name <=> b.last_name }
317
316
  sorted.collect { |c| c.last_name }.should_not eq(nil)
318
317
  end
319
318
 
320
319
  it 'should update a lead record' do
321
320
  r_changed = RubyZoho::Crm::Lead.find_by_email('changed_raj@portra.com')
322
- r_changed.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) } unless r_changed.nil?
321
+ r_changed.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) } unless r_changed.nil?
323
322
  l = RubyZoho::Crm::Lead.new(
324
- :first_name => 'Raj',
325
- :last_name => 'Portra',
326
- :email => 'raj@portra.com')
323
+ :first_name => 'Raj',
324
+ :last_name => 'Portra',
325
+ :email => 'raj@portra.com')
327
326
  l.save
328
327
  r = RubyZoho::Crm::Lead.find_by_email('raj@portra.com')
329
328
  RubyZoho::Crm::Lead.update(
@@ -332,15 +331,15 @@ describe RubyZoho::Crm do
332
331
  )
333
332
  r_changed = RubyZoho::Crm::Lead.find_by_email('changed_raj@portra.com')
334
333
  r.first.leadid.should eq(r_changed.first.leadid)
335
- r.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) }
336
- r_changed.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) }
334
+ r.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) }
335
+ r_changed.each { |c| RubyZoho::Crm::Lead.delete(c.leadid) }
337
336
  end
338
337
 
339
338
  it 'should validate a field name' do
340
- good_names = ['This is OK', 'OK_to_use']
341
- bad_names = ['This % is not', 'Bad()']
342
- good_names.map { |f| RubyZoho::Crm.method_name?(ApiUtils.string_to_symbol(f)).should_not eq(false)}
343
- bad_names.map { |f| RubyZoho::Crm.method_name?(ApiUtils.string_to_symbol(f)).should eq(false)}
339
+ good_names = ['This is OK', 'OK_to_use', 'field()']
340
+ bad_names = ['This %#{@} is not']
341
+ good_names.map { |f| RubyZoho::Crm.method_name?(ApiUtils.string_to_symbol(f)).should_not eq(false) }
342
+ bad_names.map { |f| RubyZoho::Crm.method_name?(ApiUtils.string_to_symbol(f)).should eq(false) }
344
343
  end
345
344
 
346
345
  end