zoho_hub 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -8
- data/README.md +160 -13
- data/bin/console +4 -0
- data/bin/read +8 -4
- data/bin/zoho_hub +29 -48
- data/examples/models/campaign.rb +13 -0
- data/{lib/zoho_hub/deprecated_and_only_for_reference_records → examples/models}/potential.rb +2 -1
- data/{lib/zoho_hub/deprecated_and_only_for_reference_records → examples/models}/quote.rb +5 -9
- data/lib/zoho_hub/auth.rb +36 -28
- data/lib/zoho_hub/base_record.rb +23 -12
- data/lib/zoho_hub/cli/callback_server.rb +94 -0
- data/lib/zoho_hub/cli/read_modules.rb +122 -0
- data/lib/zoho_hub/connection.rb +7 -0
- data/lib/zoho_hub/oauth_callback_server.rb +0 -4
- data/lib/zoho_hub/{module_builder.rb → reflection/module_builder.rb} +11 -15
- data/lib/zoho_hub/response.rb +1 -5
- data/lib/zoho_hub/string_utils.rb +5 -1
- data/lib/zoho_hub/validations/base_validation.rb +14 -0
- data/lib/zoho_hub/validations/validate_length.rb +19 -0
- data/lib/zoho_hub/validations/validate_picklist.rb +22 -0
- data/lib/zoho_hub/version.rb +1 -1
- data/lib/zoho_hub/views/variables.erb +7 -0
- data/lib/zoho_hub/with_connection.rb +8 -0
- data/lib/zoho_hub/with_validations.rb +66 -0
- data/lib/zoho_hub.rb +2 -1
- metadata +12 -10
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/account.rb +0 -43
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/campaign.rb +0 -14
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/contact.rb +0 -45
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/funder.rb +0 -9
- data/lib/zoho_hub/deprecated_and_only_for_reference_records/product.rb +0 -9
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'launchy'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
require 'zoho_hub'
|
7
|
+
require 'zoho_hub/oauth_callback_server'
|
8
|
+
|
9
|
+
module ZohoHub
|
10
|
+
module Cli
|
11
|
+
class CallbackServer
|
12
|
+
def initialize
|
13
|
+
@options = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def parser
|
17
|
+
@parser ||= OptionParser.new do |op|
|
18
|
+
op.banner = "Usage: #{op.program_name} server -c CLIENT_ID -s SECRET [options]"
|
19
|
+
|
20
|
+
op.on('-c', '--client-id=client_id', 'The Zoho client ID') do |client|
|
21
|
+
@options[:client_id] = client
|
22
|
+
end
|
23
|
+
|
24
|
+
op.on('-s', '--secret=secret', 'The Zoho secret') do |secret|
|
25
|
+
@options[:secret] = secret
|
26
|
+
end
|
27
|
+
|
28
|
+
op.on('-p', '--port=port', "The port for your callback (#{default_port})") do |port|
|
29
|
+
@options[:port] = port
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def default_port
|
35
|
+
ZohoHub::OauthCallbackServer.settings.port
|
36
|
+
end
|
37
|
+
|
38
|
+
def run(argv = ARGV, env = ENV)
|
39
|
+
exit 1 unless good_run(argv, env)
|
40
|
+
|
41
|
+
ZohoHub::OauthCallbackServer.set(:port, @options[:port]) if @options[:port]
|
42
|
+
|
43
|
+
callback_path = ZohoHub::OauthCallbackServer::CALLBACK_PATH
|
44
|
+
bind_port = ZohoHub::OauthCallbackServer.settings.port
|
45
|
+
bind_address = ZohoHub::OauthCallbackServer.settings.bind
|
46
|
+
|
47
|
+
callback_url = "http://#{bind_address}:#{bind_port}/#{callback_path}"
|
48
|
+
|
49
|
+
ZohoHub.configure do |config|
|
50
|
+
config.client_id = @options[:client_id] || ENV['ZOHO_CLIENT_ID']
|
51
|
+
config.secret = @options[:secret] || ENV['ZOHO_SECRET']
|
52
|
+
config.redirect_uri = callback_url
|
53
|
+
end
|
54
|
+
|
55
|
+
if configuration_incomplete?
|
56
|
+
parser.parse %w[--help]
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
|
60
|
+
puts "Callback URL: #{callback_url}"
|
61
|
+
|
62
|
+
url = ZohoHub::Auth.auth_url
|
63
|
+
Launchy.open(url)
|
64
|
+
|
65
|
+
puts "Running callback server...."
|
66
|
+
ZohoHub::OauthCallbackServer.run!
|
67
|
+
end
|
68
|
+
|
69
|
+
def configuration_incomplete?
|
70
|
+
!ZohoHub.configuration.client_id || !ZohoHub.configuration.secret
|
71
|
+
end
|
72
|
+
|
73
|
+
def good_run(argv, env)
|
74
|
+
return false unless parse(argv, env)
|
75
|
+
|
76
|
+
true
|
77
|
+
end
|
78
|
+
|
79
|
+
def parse(argv, _env)
|
80
|
+
parser.parse!(argv)
|
81
|
+
true
|
82
|
+
rescue OptionParser::ParseError => error
|
83
|
+
error_output(error)
|
84
|
+
end
|
85
|
+
|
86
|
+
def error_output(error)
|
87
|
+
$stderr.puts "Error: #{error}"
|
88
|
+
$stderr.puts "Try `#{parser.program_name} server --help' for more information"
|
89
|
+
|
90
|
+
false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
require 'zoho_hub'
|
8
|
+
require 'zoho_hub/settings/module'
|
9
|
+
|
10
|
+
module ZohoHub
|
11
|
+
module Cli
|
12
|
+
class ReadModules
|
13
|
+
def initialize
|
14
|
+
@options = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def parser
|
18
|
+
@parser ||= OptionParser.new do |op|
|
19
|
+
op.banner = "Usage: #{op.program_name} read-modules -c CLIENT_ID -s SECRET"
|
20
|
+
|
21
|
+
op.on('-c', '--client-id=client_id', 'The Zoho client ID') do |client|
|
22
|
+
@options[:client_id] = client
|
23
|
+
end
|
24
|
+
|
25
|
+
op.on('-s', '--secret=secret', 'The Zoho secret') do |secret|
|
26
|
+
@options[:secret] = secret
|
27
|
+
end
|
28
|
+
|
29
|
+
op.on('-r', '--refresh-token=token', 'Your refresh token') do |refresh|
|
30
|
+
@options[:refresh_token] = refresh
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def run(argv = ARGV, env = ENV)
|
36
|
+
exit 1 unless good_run(argv, env)
|
37
|
+
|
38
|
+
setup_connection
|
39
|
+
|
40
|
+
client_id = @options[:client_id] || ENV['ZOHO_CLIENT_ID']
|
41
|
+
puts "Reading modules for client ID: #{client_id}..."
|
42
|
+
|
43
|
+
modules_hashes = ZohoHub::Settings::Module.all_json
|
44
|
+
|
45
|
+
puts "Found #{modules_hashes.size} modules"
|
46
|
+
|
47
|
+
modules_hashes.each do |hash|
|
48
|
+
puts "- Caching configuration for #{hash[:plural_label]}"
|
49
|
+
cache_module_info(hash)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def good_run(argv, env)
|
54
|
+
return false unless parse(argv, env)
|
55
|
+
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
def setup_connection
|
60
|
+
ZohoHub.configure do |config|
|
61
|
+
config.client_id = @options[:client_id] || ENV['ZOHO_CLIENT_ID']
|
62
|
+
config.secret = @options[:secret] || ENV['ZOHO_SECRET']
|
63
|
+
end
|
64
|
+
|
65
|
+
refresh_token = @options[:refresh_token] || ENV['ZOHO_REFRESH_TOKEN']
|
66
|
+
token_params = ZohoHub::Auth.refresh_token(refresh_token)
|
67
|
+
|
68
|
+
if configuration_incomplete?(refresh_token)
|
69
|
+
parser.parse %w[--help]
|
70
|
+
exit 1
|
71
|
+
end
|
72
|
+
|
73
|
+
ZohoHub.setup_connection(token_params)
|
74
|
+
end
|
75
|
+
|
76
|
+
def configuration_incomplete?(refresh_token)
|
77
|
+
return true unless refresh_token
|
78
|
+
|
79
|
+
!ZohoHub.configuration.client_id || !ZohoHub.configuration.secret
|
80
|
+
end
|
81
|
+
|
82
|
+
def cache_module_info(info)
|
83
|
+
modules_path = File.join(ZohoHub.root, 'cache', 'modules')
|
84
|
+
FileUtils.mkdir_p(modules_path)
|
85
|
+
file_name = File.join(modules_path, "#{info[:api_name]}.json")
|
86
|
+
|
87
|
+
File.open(file_name, 'w') do |file|
|
88
|
+
file.write(JSON.pretty_generate(info))
|
89
|
+
end
|
90
|
+
|
91
|
+
return unless info[:api_supported]
|
92
|
+
|
93
|
+
cache_module_fields(info)
|
94
|
+
end
|
95
|
+
|
96
|
+
def cache_module_fields(info)
|
97
|
+
fields_array = ZohoHub::Settings::Field.all_json_for(info[:api_name])
|
98
|
+
fields_path = File.join(ZohoHub.root, 'cache', 'fields')
|
99
|
+
FileUtils.mkdir_p(fields_path)
|
100
|
+
file_name = File.join(fields_path, "#{info[:api_name]}.json")
|
101
|
+
|
102
|
+
File.open(file_name, 'w') do |file|
|
103
|
+
file.write(JSON.pretty_generate(fields_array))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def parse(argv, _env)
|
108
|
+
parser.parse!(argv)
|
109
|
+
true
|
110
|
+
rescue OptionParser::ParseError => error
|
111
|
+
error_output(error)
|
112
|
+
end
|
113
|
+
|
114
|
+
def error_output(error)
|
115
|
+
$stderr.puts "Error: #{error}"
|
116
|
+
$stderr.puts "Try `#{parser.program_name} server --help' for more information"
|
117
|
+
|
118
|
+
false
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/zoho_hub/connection.rb
CHANGED
@@ -9,7 +9,7 @@ module ZohoHub
|
|
9
9
|
cached_module_definitions.map do |file|
|
10
10
|
json = MultiJson.load(File.read(file), symbolize_keys: true)
|
11
11
|
|
12
|
-
|
12
|
+
eval_module_class(json)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -17,31 +17,27 @@ module ZohoHub
|
|
17
17
|
Dir[File.join(ZohoHub.root, 'cache', 'modules', '**')]
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def eval_module_class(json)
|
21
21
|
fields = cached_module_fields(json[:api_name])
|
22
22
|
|
23
23
|
klass = Class.new(ZohoHub::BaseRecord) do
|
24
24
|
request_path json[:api_name]
|
25
25
|
|
26
|
-
translations = {}
|
26
|
+
translations = { id: :id }
|
27
27
|
fields.each do |field|
|
28
|
-
key = StringUtils.underscore(field[:api_name])
|
28
|
+
key = StringUtils.underscore(field[:api_name]).to_sym
|
29
29
|
|
30
|
-
translations[key] = field[:api_name]
|
31
|
-
end
|
32
|
-
|
33
|
-
if translations.any?
|
34
|
-
attributes(*translations.keys)
|
35
|
-
attribute_translation(translations)
|
36
|
-
end
|
30
|
+
translations[key] = field[:api_name].to_sym
|
37
31
|
|
38
|
-
|
39
|
-
attributes.each do |attr|
|
40
|
-
zoho_key = attr_to_zoho_key(attr)
|
32
|
+
add_validation(key, validate: :length, length: field[:length]) if field[:length]
|
41
33
|
|
42
|
-
|
34
|
+
if field[:data_type] == 'picklist'
|
35
|
+
add_validation(key, validate: :picklist, list: field[:pick_list_values])
|
43
36
|
end
|
44
37
|
end
|
38
|
+
|
39
|
+
attributes(*translations.keys)
|
40
|
+
attribute_translation(translations)
|
45
41
|
end
|
46
42
|
|
47
43
|
ZohoHub.const_set(StringUtils.camelize(json[:singular_label]), klass)
|
data/lib/zoho_hub/response.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zoho_hub/validations/base_validation'
|
4
|
+
|
5
|
+
module ZohoHub
|
6
|
+
module Validations
|
7
|
+
class ValidateLength < BaseValidation
|
8
|
+
def validate(options = {})
|
9
|
+
value = record.send(field)
|
10
|
+
|
11
|
+
return unless value
|
12
|
+
|
13
|
+
return if value.size <= options[:length]
|
14
|
+
|
15
|
+
record.add_error(field, 'is too long')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zoho_hub/validations/base_validation'
|
4
|
+
|
5
|
+
module ZohoHub
|
6
|
+
module Validations
|
7
|
+
class ValidatePicklist < BaseValidation
|
8
|
+
def validate(options = {})
|
9
|
+
value = record.send(field)
|
10
|
+
|
11
|
+
return unless value
|
12
|
+
|
13
|
+
list = options[:list].map { |option| option[:actual_value] }
|
14
|
+
|
15
|
+
return if list.include?(value)
|
16
|
+
|
17
|
+
msg = "has an invalid value `#{value}`. Accepted values: #{list.join(', ')}"
|
18
|
+
record.add_error(field, msg)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/zoho_hub/version.rb
CHANGED
@@ -38,6 +38,11 @@
|
|
38
38
|
padding: 0;
|
39
39
|
margin: 0;
|
40
40
|
}
|
41
|
+
|
42
|
+
footer {
|
43
|
+
margin-top: 60px;
|
44
|
+
font-size: .8em;
|
45
|
+
}
|
41
46
|
</style>
|
42
47
|
</head>
|
43
48
|
|
@@ -68,5 +73,7 @@
|
|
68
73
|
config.refresh_token = ENV['ZOHO_REFRESH_TOKEN']
|
69
74
|
end</code></pre>
|
70
75
|
</div>
|
76
|
+
|
77
|
+
<footer>ZohoHub <%= ZohoHub::VERSION %></footer>
|
71
78
|
</body>
|
72
79
|
</html>
|
@@ -19,6 +19,10 @@ module ZohoHub
|
|
19
19
|
def put(path, params = {})
|
20
20
|
ZohoHub.connection.put(path, params.to_json)
|
21
21
|
end
|
22
|
+
|
23
|
+
def delete(path, params = {})
|
24
|
+
ZohoHub.connection.delete(path, params.to_json)
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
def get(path, params = {})
|
@@ -32,5 +36,9 @@ module ZohoHub
|
|
32
36
|
def put(path, params = {})
|
33
37
|
self.class.put(path, params)
|
34
38
|
end
|
39
|
+
|
40
|
+
def delete(path, params = {})
|
41
|
+
self.class.delete(path, params)
|
42
|
+
end
|
35
43
|
end
|
36
44
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zoho_hub/validations/validate_length'
|
4
|
+
require 'zoho_hub/validations/validate_picklist'
|
5
|
+
|
6
|
+
module ZohoHub
|
7
|
+
module WithValidations
|
8
|
+
def self.included(base)
|
9
|
+
base.extend ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def add_validation(field, params = {})
|
14
|
+
@validations ||= []
|
15
|
+
|
16
|
+
options = params.dup
|
17
|
+
validate = options.delete(:validate)
|
18
|
+
|
19
|
+
unless validate
|
20
|
+
raise ArgumentError, 'You must provide the validation with the `validate` key!'
|
21
|
+
end
|
22
|
+
|
23
|
+
@validations << { field: field, validate: validate }.merge(options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def validations
|
27
|
+
@validations || []
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate!
|
32
|
+
@errors = []
|
33
|
+
|
34
|
+
self.class.validations.each { |validation| validate_field!(validation) }
|
35
|
+
|
36
|
+
@errors
|
37
|
+
end
|
38
|
+
|
39
|
+
def errors
|
40
|
+
@errors
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate_field!(params = {})
|
44
|
+
options = params.dup
|
45
|
+
validate = options.delete(:validate)
|
46
|
+
|
47
|
+
validator = Module.const_get("Validations::Validate#{validate.downcase.capitalize}")
|
48
|
+
validator.new(self, options[:field]).validate(options)
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_error(field, message)
|
52
|
+
@errors << { field: field, message: message }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class ValidationError < StandardError
|
57
|
+
attr_reader :record
|
58
|
+
|
59
|
+
def initialize(record)
|
60
|
+
@record = record
|
61
|
+
errors = @record.errors.join(', ')
|
62
|
+
|
63
|
+
super(errors)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/zoho_hub.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zoho_hub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricardo Otero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -242,29 +242,31 @@ files:
|
|
242
242
|
- bin/setup
|
243
243
|
- bin/zoho_hub
|
244
244
|
- cache/.git_keep
|
245
|
+
- examples/models/campaign.rb
|
246
|
+
- examples/models/potential.rb
|
247
|
+
- examples/models/quote.rb
|
245
248
|
- lib/zoho_hub.rb
|
246
249
|
- lib/zoho_hub/auth.rb
|
247
250
|
- lib/zoho_hub/base_record.rb
|
251
|
+
- lib/zoho_hub/cli/callback_server.rb
|
252
|
+
- lib/zoho_hub/cli/read_modules.rb
|
248
253
|
- lib/zoho_hub/configuration.rb
|
249
254
|
- lib/zoho_hub/connection.rb
|
250
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/account.rb
|
251
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/campaign.rb
|
252
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/contact.rb
|
253
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/funder.rb
|
254
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/potential.rb
|
255
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/product.rb
|
256
|
-
- lib/zoho_hub/deprecated_and_only_for_reference_records/quote.rb
|
257
255
|
- lib/zoho_hub/errors.rb
|
258
|
-
- lib/zoho_hub/module_builder.rb
|
259
256
|
- lib/zoho_hub/oauth_callback_server.rb
|
257
|
+
- lib/zoho_hub/reflection/module_builder.rb
|
260
258
|
- lib/zoho_hub/response.rb
|
261
259
|
- lib/zoho_hub/settings/field.rb
|
262
260
|
- lib/zoho_hub/settings/module.rb
|
263
261
|
- lib/zoho_hub/string_utils.rb
|
262
|
+
- lib/zoho_hub/validations/base_validation.rb
|
263
|
+
- lib/zoho_hub/validations/validate_length.rb
|
264
|
+
- lib/zoho_hub/validations/validate_picklist.rb
|
264
265
|
- lib/zoho_hub/version.rb
|
265
266
|
- lib/zoho_hub/views/variables.erb
|
266
267
|
- lib/zoho_hub/with_attributes.rb
|
267
268
|
- lib/zoho_hub/with_connection.rb
|
269
|
+
- lib/zoho_hub/with_validations.rb
|
268
270
|
- zoho_hub.gemspec
|
269
271
|
homepage: https://github.com/rikas/zoho_hub
|
270
272
|
licenses:
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/records/base_record'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class Account < BaseRecord
|
7
|
-
attributes :id, :name, :territories, :company_number, :employee_count, :company_type, :industry
|
8
|
-
attributes :billing_city, :billing_code, :billing_country, :billing_street, :billing_state
|
9
|
-
attributes :account_type
|
10
|
-
|
11
|
-
# This is the ID to be used when the borrower has no organisation (unlikely) or belongs to
|
12
|
-
# multiple organisations.
|
13
|
-
CATCH_ALL_ID = '78265000000826001'
|
14
|
-
|
15
|
-
DEFAULTS = {
|
16
|
-
account_type: 'Prospect'
|
17
|
-
}.freeze
|
18
|
-
|
19
|
-
# The translation from attribute name to the JSON field on Zoho. The default behaviour will be
|
20
|
-
# to Camel_Case the attribute so on this list we should only have exceptions to this rule.
|
21
|
-
attribute_translation(
|
22
|
-
id: :id,
|
23
|
-
name: :Account_Name,
|
24
|
-
company_number: :company_reg_id,
|
25
|
-
employee_count: :No_of_Employees,
|
26
|
-
industry: :Industry_Category
|
27
|
-
)
|
28
|
-
|
29
|
-
def initialize(params)
|
30
|
-
attributes.each do |attr|
|
31
|
-
zoho_key = attr_to_zoho_key(attr)
|
32
|
-
|
33
|
-
send("#{attr}=", params[zoho_key] || params[attr] || DEFAULTS[attr])
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_params
|
38
|
-
params = super
|
39
|
-
|
40
|
-
params
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'zoho_hub/records/base_record'
|
4
|
-
|
5
|
-
module ZohoHub
|
6
|
-
class Contact < BaseRecord
|
7
|
-
attributes :id, :email, :salutation, :first_name, :mobile, :role, :last_name
|
8
|
-
attributes :account_id, :owner_id, :campaign_id, :status, :campaign_detail
|
9
|
-
|
10
|
-
attribute_translation(
|
11
|
-
id: :id,
|
12
|
-
role: :platform_cont_type,
|
13
|
-
status: :platform_cont_status,
|
14
|
-
use_proceeds: :use_proceeds
|
15
|
-
)
|
16
|
-
|
17
|
-
DEFAULTS = {
|
18
|
-
status: 'active',
|
19
|
-
campaign_detail: 'Web Sign Up'
|
20
|
-
}.freeze
|
21
|
-
|
22
|
-
def initialize(params)
|
23
|
-
attributes.each do |attr|
|
24
|
-
zoho_key = attr_to_zoho_key(attr)
|
25
|
-
|
26
|
-
send("#{attr}=", params[zoho_key] || params[attr] || DEFAULTS[attr])
|
27
|
-
end
|
28
|
-
|
29
|
-
# Setup values as they come from the Zoho API if needed
|
30
|
-
@account_id ||= params.dig(:Account_Name, :id)
|
31
|
-
@owner_id ||= params.dig(:Owner, :id)
|
32
|
-
@campaign_id ||= params.dig(:Campaign_Lookup, :id)
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_params
|
36
|
-
params = super
|
37
|
-
|
38
|
-
params[:Account_Name] = { id: @account_id } if @account_id
|
39
|
-
params[:Owner] = { id: @owner_id } if @owner_id
|
40
|
-
params[:Campaign_Lookup] = { id: @campaign_id } if @campaign_id
|
41
|
-
|
42
|
-
params
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|