zoho_hub 0.1.56 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/.rspec +1 -0
- data/.rubocop.yml +5 -2
- data/.ruby-version +1 -1
- data/.travis.yml +5 -2
- data/Gemfile +0 -10
- data/README.md +91 -7
- data/bin/console +6 -7
- data/bin/read +44 -0
- data/bin/setup +0 -2
- data/bin/zoho_hub +62 -0
- data/cache/.git_keep +0 -0
- data/lib/zoho_hub/auth.rb +38 -47
- data/lib/zoho_hub/base_record.rb +122 -0
- data/lib/zoho_hub/configuration.rb +3 -4
- data/lib/zoho_hub/connection.rb +12 -17
- data/lib/zoho_hub/{records → deprecated_and_only_for_reference_records}/account.rb +1 -1
- data/lib/zoho_hub/{records → deprecated_and_only_for_reference_records}/contact.rb +3 -9
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/funder.rb +9 -0
- data/lib/zoho_hub/{records → deprecated_and_only_for_reference_records}/potential.rb +1 -25
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/product.rb +9 -0
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/quote.rb +34 -0
- data/lib/zoho_hub/errors.rb +0 -3
- data/lib/zoho_hub/module_builder.rb +61 -0
- data/lib/zoho_hub/oauth_callback_server.rb +26 -0
- data/lib/zoho_hub/response.rb +1 -4
- data/lib/zoho_hub/settings/field.rb +33 -0
- data/lib/zoho_hub/settings/module.rb +49 -0
- data/lib/zoho_hub/string_utils.rb +34 -0
- data/lib/zoho_hub/version.rb +1 -1
- data/lib/zoho_hub/views/variables.erb +72 -0
- data/lib/zoho_hub/with_attributes.rb +74 -0
- data/lib/zoho_hub/with_connection.rb +36 -0
- data/lib/zoho_hub.rb +21 -23
- data/zoho_hub.gemspec +21 -8
- metadata +180 -45
- data/lib/zoho_hub/records/adverse_criteria.rb +0 -43
- data/lib/zoho_hub/records/attachment.rb +0 -106
- data/lib/zoho_hub/records/base_record.rb +0 -189
- data/lib/zoho_hub/records/credit_score.rb +0 -36
- data/lib/zoho_hub/records/product.rb +0 -33
- data/lib/zoho_hub/records/quote.rb +0 -44
- data/lib/zoho_hub/records/sms_message.rb +0 -32
- data/lib/zoho_hub/records/vendor.rb +0 -34
- /data/lib/zoho_hub/{records → deprecated_and_only_for_reference_records}/campaign.rb +0 -0
@@ -1,189 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/response'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class BaseRecord
|
7
|
-
class << self
|
8
|
-
def request_path(name = nil)
|
9
|
-
@request_path = name if name
|
10
|
-
@request_path ||= to_s.demodulize.pluralize
|
11
|
-
@request_path
|
12
|
-
end
|
13
|
-
|
14
|
-
def attributes(*attributes)
|
15
|
-
@attributes ||= []
|
16
|
-
|
17
|
-
return @attributes unless attributes
|
18
|
-
|
19
|
-
attr_accessor(*attributes)
|
20
|
-
|
21
|
-
@attributes += attributes
|
22
|
-
end
|
23
|
-
|
24
|
-
def attribute_translation(translation = nil)
|
25
|
-
@attribute_translation ||= {}
|
26
|
-
|
27
|
-
return @attribute_translation unless translation
|
28
|
-
|
29
|
-
@attribute_translation = translation
|
30
|
-
end
|
31
|
-
|
32
|
-
def zoho_key_translation
|
33
|
-
@attribute_translation.to_a.map(&:rotate).to_h
|
34
|
-
end
|
35
|
-
|
36
|
-
def find(id)
|
37
|
-
body = get(File.join(request_path, id.to_s))
|
38
|
-
response = build_response(body)
|
39
|
-
|
40
|
-
if response.empty?
|
41
|
-
raise RecordNotFound, "Couldn't find #{request_path.singularize} with 'id'=#{id}"
|
42
|
-
end
|
43
|
-
|
44
|
-
new(response.data)
|
45
|
-
end
|
46
|
-
|
47
|
-
def where(params)
|
48
|
-
path = File.join(request_path, 'search')
|
49
|
-
|
50
|
-
response = get(path, params)
|
51
|
-
|
52
|
-
data = response.nil? ? [] : response.fetch(:data, [])
|
53
|
-
|
54
|
-
data.map { |info| new(info) }
|
55
|
-
end
|
56
|
-
|
57
|
-
def find_by(params)
|
58
|
-
records = where(params)
|
59
|
-
records.first
|
60
|
-
end
|
61
|
-
|
62
|
-
def create(params)
|
63
|
-
new(params).save
|
64
|
-
end
|
65
|
-
|
66
|
-
def all(options = {})
|
67
|
-
options[:page] ||= 1
|
68
|
-
options[:per_page] ||= 200
|
69
|
-
|
70
|
-
body = get(request_path, options)
|
71
|
-
response = build_response(body)
|
72
|
-
|
73
|
-
data = response.nil? ? [] : response.data
|
74
|
-
|
75
|
-
data.map { |info| new(info) }
|
76
|
-
end
|
77
|
-
|
78
|
-
def get(path, params = {}, &block)
|
79
|
-
ZohoHub.connection.get(path, params, &block)
|
80
|
-
end
|
81
|
-
|
82
|
-
def post(path, params = {}, &block)
|
83
|
-
ZohoHub.connection.post(path, params.to_json, &block)
|
84
|
-
end
|
85
|
-
|
86
|
-
def put(path, params = {}, &block)
|
87
|
-
ZohoHub.connection.put(path, params.to_json, &block)
|
88
|
-
end
|
89
|
-
|
90
|
-
def exists?(id)
|
91
|
-
!find(id).nil?
|
92
|
-
rescue RecordNotFound
|
93
|
-
false
|
94
|
-
end
|
95
|
-
|
96
|
-
alias exist? exists?
|
97
|
-
|
98
|
-
def build_response(body)
|
99
|
-
response = Response.new(body)
|
100
|
-
|
101
|
-
raise InvalidTokenError, response.msg if response.invalid_token?
|
102
|
-
raise RecordInvalid, response.msg if response.invalid_data?
|
103
|
-
|
104
|
-
response
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def attributes
|
109
|
-
self.class.attributes
|
110
|
-
end
|
111
|
-
|
112
|
-
def get(path, params = {})
|
113
|
-
self.class.get(path, params)
|
114
|
-
end
|
115
|
-
|
116
|
-
def post(path, params = {})
|
117
|
-
self.class.post(path, params)
|
118
|
-
end
|
119
|
-
|
120
|
-
def put(path, params = {})
|
121
|
-
self.class.put(path, params)
|
122
|
-
end
|
123
|
-
|
124
|
-
# Save the record to Zoho
|
125
|
-
# trigger: ['workflow', 'approval', 'blueprint']
|
126
|
-
def save(trigger:)
|
127
|
-
body = if new_record? # create new record
|
128
|
-
post(self.class.request_path, to_input(trigger: trigger))
|
129
|
-
else # update existing record
|
130
|
-
path = File.join(self.class.request_path, id)
|
131
|
-
put(path, to_input(trigger: trigger))
|
132
|
-
end
|
133
|
-
|
134
|
-
response = build_response(body)
|
135
|
-
|
136
|
-
id = response.data.dig(:details, :id)
|
137
|
-
|
138
|
-
return id if id
|
139
|
-
|
140
|
-
# Invalid errors
|
141
|
-
response.data
|
142
|
-
end
|
143
|
-
|
144
|
-
def to_input(trigger:)
|
145
|
-
json = { data: [to_params] }
|
146
|
-
json[:trigger] = Array(trigger) if trigger
|
147
|
-
|
148
|
-
json
|
149
|
-
end
|
150
|
-
|
151
|
-
def new_record?
|
152
|
-
!id.present?
|
153
|
-
end
|
154
|
-
|
155
|
-
def to_params
|
156
|
-
params = {}
|
157
|
-
|
158
|
-
attributes.each do |attr|
|
159
|
-
key = attr_to_zoho_key(attr)
|
160
|
-
|
161
|
-
params[key] = send(attr)
|
162
|
-
end
|
163
|
-
|
164
|
-
params
|
165
|
-
end
|
166
|
-
|
167
|
-
def build_response(body)
|
168
|
-
self.class.build_response(body)
|
169
|
-
end
|
170
|
-
|
171
|
-
private
|
172
|
-
|
173
|
-
def attr_to_zoho_key(attr_name)
|
174
|
-
translations = self.class.attribute_translation
|
175
|
-
|
176
|
-
return translations[attr_name.to_sym] if translations.key?(attr_name.to_sym)
|
177
|
-
|
178
|
-
attr_name.to_s.split('_').map(&:capitalize).join('_').to_sym
|
179
|
-
end
|
180
|
-
|
181
|
-
def zoho_key_to_attr(zoho_key)
|
182
|
-
translations = self.class.zoho_key_translation
|
183
|
-
|
184
|
-
return translations[zoho_key.to_sym] if translations.key?(zoho_key.to_sym)
|
185
|
-
|
186
|
-
zoho_key.to_sym
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/records/base_record'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class CreditScore < BaseRecord
|
7
|
-
request_path 'Credit_Scores'
|
8
|
-
|
9
|
-
attributes :id, :account_id, :credit_data_source, :credit_score_band
|
10
|
-
attributes :score_description, :credit_score_number, :credit_limit, :currency
|
11
|
-
|
12
|
-
attribute_translation(
|
13
|
-
id: :id,
|
14
|
-
credit_score_number: :Name
|
15
|
-
)
|
16
|
-
|
17
|
-
def initialize(params)
|
18
|
-
attributes.each do |attr|
|
19
|
-
zoho_key = attr_to_zoho_key(attr)
|
20
|
-
|
21
|
-
send("#{attr}=", params[zoho_key] || params[attr])
|
22
|
-
end
|
23
|
-
|
24
|
-
# Setup values as they come from the Zoho API if needed
|
25
|
-
@account_id ||= params.dig(:Account_Name, :id)
|
26
|
-
end
|
27
|
-
|
28
|
-
def to_params
|
29
|
-
params = super
|
30
|
-
|
31
|
-
params[:Account_Name] = { id: @account_id } if @account_id
|
32
|
-
|
33
|
-
params
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ZohoHub
|
4
|
-
class Product < BaseRecord
|
5
|
-
attributes :id, :description, :vendor_id, :owner_id, :active, :name
|
6
|
-
|
7
|
-
attribute_translation(
|
8
|
-
id: :id,
|
9
|
-
active: :Product_Active,
|
10
|
-
name: :Product_Name
|
11
|
-
)
|
12
|
-
|
13
|
-
def initialize(params)
|
14
|
-
attributes.each do |attr|
|
15
|
-
zoho_key = attr_to_zoho_key(attr)
|
16
|
-
|
17
|
-
send("#{attr}=", params[zoho_key] || params[attr])
|
18
|
-
end
|
19
|
-
|
20
|
-
@owner_id ||= params.dig(:Owner, :id)
|
21
|
-
@vendor_id ||= params.dig(:Vendor_Name, :id)
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_params
|
25
|
-
params = super
|
26
|
-
|
27
|
-
params[:Owner] = { id: @owner_id } if @owner_id
|
28
|
-
params[:Vendor_Name] = { id: @vendor_id } if @vendor_id
|
29
|
-
|
30
|
-
params
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/records/base_record'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class Quote < BaseRecord
|
7
|
-
attributes :id, :stage, :subject, :potential_id, :owner_id, :product_id, :account_id
|
8
|
-
attributes :funding_amount, :financed_on, :extra_info
|
9
|
-
|
10
|
-
attribute_translation(
|
11
|
-
id: :id,
|
12
|
-
stage: :Quote_Stage,
|
13
|
-
financed_on: :Financed_on
|
14
|
-
)
|
15
|
-
|
16
|
-
def initialize(params)
|
17
|
-
attributes.each do |attr|
|
18
|
-
zoho_key = attr_to_zoho_key(attr)
|
19
|
-
send("#{attr}=", params[zoho_key] || params[attr])
|
20
|
-
end
|
21
|
-
|
22
|
-
@potential_id ||= params.dig(:Deal_Name, :id)
|
23
|
-
@account_id ||= params.dig(:Account_Name, :id)
|
24
|
-
@owner_id ||= params.dig(:Owner, :id)
|
25
|
-
|
26
|
-
# The Quote has an array of products but we only care about one
|
27
|
-
if params.dig(:Product_Details)
|
28
|
-
product = params.dig(:Product_Details).first
|
29
|
-
@product_id = product[:id]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_params
|
34
|
-
params = super
|
35
|
-
|
36
|
-
params[:Deal_Name] = { id: @potential_id } if @potential_id
|
37
|
-
params[:Account_Name] = { id: @account_id } if @account_id
|
38
|
-
params[:Owner] = { id: @owner_id } if @owner_id
|
39
|
-
params[:Product_Details] = [{ product: { id: @product_id }, quantity: 1 }] if @product_id
|
40
|
-
|
41
|
-
params
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/records/base_record'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class SMSMessage < BaseRecord
|
7
|
-
attributes :id, :template, :state, :text, :contact_id, :potential_id, :name, :sent_by
|
8
|
-
|
9
|
-
attribute_translation id: :id
|
10
|
-
|
11
|
-
def initialize(params)
|
12
|
-
attributes.each do |attr|
|
13
|
-
zoho_key = attr_to_zoho_key(attr)
|
14
|
-
|
15
|
-
send("#{attr}=", params[zoho_key] || params[attr])
|
16
|
-
end
|
17
|
-
|
18
|
-
# Setup values as they come from the Zoho API if needed
|
19
|
-
@contact_id ||= params.dig(:Contact, :id)
|
20
|
-
@potential_id ||= params.dig(:Potential, :id)
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_params
|
24
|
-
params = super
|
25
|
-
|
26
|
-
params[:Contact] = { id: @contact_id } if @contact_id
|
27
|
-
params[:Potential] = { id: @potential_id } if @potential_id
|
28
|
-
|
29
|
-
params
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ZohoHub
|
4
|
-
class Vendor < BaseRecord
|
5
|
-
attributes :id, :email, :description, :vendor_name, :website, :owner_id, :phone, :currency
|
6
|
-
attributes :company_reg_no, :created_time, :modified_time, :lender_status
|
7
|
-
|
8
|
-
attribute_translation(
|
9
|
-
id: :id
|
10
|
-
)
|
11
|
-
|
12
|
-
DEFAULTS = {
|
13
|
-
currency: 'GBP'
|
14
|
-
}.freeze
|
15
|
-
|
16
|
-
def initialize(params)
|
17
|
-
attributes.each do |attr|
|
18
|
-
zoho_key = attr_to_zoho_key(attr)
|
19
|
-
|
20
|
-
send("#{attr}=", params[zoho_key] || params[attr] || DEFAULTS[attr])
|
21
|
-
end
|
22
|
-
|
23
|
-
@owner_id ||= params.dig(:Owner, :id)
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_params
|
27
|
-
params = super
|
28
|
-
|
29
|
-
params[:Owner] = { id: @owner_id } if @owner_id
|
30
|
-
|
31
|
-
params
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
File without changes
|