velocify 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb9807a174a61d5c269b5a6c8c82a70518b1c1fd
4
- data.tar.gz: fd1f26749f639632e8e76140e23d72b6fbe79dd7
3
+ metadata.gz: 8d7d3962780f0757bf6fecac5b63a2eb439f5193
4
+ data.tar.gz: 404519cd5a282183841b133a47c013b6cd2cb3f3
5
5
  SHA512:
6
- metadata.gz: f6c4334483720f3e7e929b0fdd997b9a533b3000b7997377d1fdbcce9194240aba724c6fad3217f34ccdd8fe64020901269babcdf37f9314354622a0c2870bd1
7
- data.tar.gz: 504b3bc13bbc1bffdce8be6d45f940846e0cb00f129112272aeb9364a1a431a46e0bc1f23ea88cb0be70c767b49c7a7989041b6ca78bc52a736ac22030938de2
6
+ metadata.gz: 58e5fe96161f78a37d785fbda604aa756facd93334c7abd9c2f545472d23bdc3e2c5b3d986e6bf49816781370d0173cef2430acef66fc317b7539c930703de8d
7
+ data.tar.gz: 3b7eedb6aca41a7df0593728f4ad4bfe727727eb6fd4b844b504f9ade20939a401a3d2a0e7c4ac1a480c38ecde45b907cd01a943d54bb57609b656d6baaeb237
@@ -6,14 +6,15 @@ Dotenv.load
6
6
  require "velocify/version"
7
7
  require "velocify/model"
8
8
  require "velocify/campaign"
9
+ require "velocify/agent"
9
10
  require "velocify/field"
10
11
  require "velocify/field_type"
11
12
  require "velocify/lead"
12
13
  require "velocify/status"
13
14
 
14
15
  require "velocify/response_reader"
15
- require "velocify/lead_list"
16
-
16
+ require "velocify/message_payload"
17
+ require "velocify/add_leads_payload"
17
18
 
18
19
  module Velocify
19
20
  end
@@ -0,0 +1,34 @@
1
+ require 'erb'
2
+
3
+ module Velocify
4
+ class AddLeadsPayload
5
+ include ERB::Util
6
+
7
+ # Creates a new request to add leads
8
+ #
9
+ # @param leads [Array<Lead>] A list of leads to be added
10
+ def initialize leads
11
+ @leads = leads
12
+ @credentials = {}
13
+ end
14
+
15
+ # Stores credentials for making an authenticated request
16
+ #
17
+ # @param username [String]
18
+ # @param password [String]
19
+ # @return [Hash]
20
+ def authenticate username:, password:
21
+ @credentials = Hash[:username, username, :password, password]
22
+ end
23
+
24
+ # @return [String] The XML payload to send to Velocify's AddLeads operation
25
+ def render
26
+ relative_path = File.join '..', '..', 'templates', 'add_leads.xml.erb'
27
+ current_dir = File.dirname(__FILE__)
28
+ path = File.expand_path relative_path, current_dir
29
+ template = File.read(path)
30
+ xml_str = ERB.new(template).result binding
31
+ { xml: xml_str.gsub(/[\n\t]*/, '').gsub(/[ ]{2,}/, '') }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ module Velocify
2
+ class Agent
3
+ include Model
4
+
5
+ # Retrieve the entire list of agents
6
+ #
7
+ def self.find_all destruct: false, return_array: false
8
+ verify_credentials!
9
+
10
+ request do
11
+ destruct_response? destruct
12
+ operation :get_agents
13
+ authenticate? true
14
+ transform do |resp|
15
+ if return_array
16
+ arrayify resp[:agents][:agent]
17
+ else
18
+ resp
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -6,9 +6,9 @@ module Velocify
6
6
  verify_credentials!
7
7
 
8
8
  request do
9
- enable_destructuring destruct
9
+ destruct_response? destruct
10
10
  operation :get_campaigns
11
- authenticate true
11
+ authenticate? true
12
12
  transform do |resp|
13
13
  if return_array
14
14
  arrayify resp[:campaigns][:campaign]
@@ -8,9 +8,9 @@ module Velocify
8
8
  verify_credentials!
9
9
 
10
10
  request do
11
- enable_destructuring destruct
11
+ destruct_response? destruct
12
12
  operation :get_fields
13
- authenticate true
13
+ authenticate? true
14
14
  transform do |resp|
15
15
  if return_array
16
16
  arrayify resp[:fields][:field]
@@ -7,9 +7,9 @@ module Velocify
7
7
  verify_credentials!
8
8
 
9
9
  request do
10
- enable_destructuring destruct
10
+ destruct_response? destruct
11
11
  operation :get_field_types
12
- authenticate true
12
+ authenticate? true
13
13
  transform do |resp|
14
14
  if return_array
15
15
  arrayify resp[:field_types][:field_type]
@@ -30,9 +30,10 @@ module Velocify
30
30
  verify_credentials!
31
31
 
32
32
  request do
33
- enable_destructuring destruct
34
- operation :add_leads_response
35
- message leads: leads
33
+ destruct_response? destruct
34
+ operation :add_leads
35
+ authenticate? true
36
+ xml AddLeadsPayload.new(leads)
36
37
  transform do |resp|
37
38
  if return_array
38
39
  arrayify resp[:leads][:lead]
@@ -53,10 +54,10 @@ module Velocify
53
54
  verify_credentials!
54
55
 
55
56
  request do
56
- enable_destructuring destruct
57
+ destruct_response? destruct
57
58
  operation :get_leads
58
59
  message from: from, to: to
59
- authenticate true
60
+ authenticate? true
60
61
  transform do |resp|
61
62
  if return_array
62
63
  arrayify resp[:leads][:lead]
@@ -76,9 +77,9 @@ module Velocify
76
77
  verify_credentials!
77
78
 
78
79
  request do
79
- enable_destructuring destruct
80
+ destruct_response? destruct
80
81
  operation :get_leads_by_email
81
- authenticate true
82
+ authenticate? true
82
83
  message email: email
83
84
  transform do |resp|
84
85
  if return_array
@@ -99,10 +100,10 @@ module Velocify
99
100
  verify_credentials!
100
101
 
101
102
  request do
102
- enable_destructuring destruct
103
+ destruct_response? destruct
103
104
  operation :get_leads_by_phone
104
105
  message phone: phone.gsub(/[()\- ]/, '')
105
- authenticate true
106
+ authenticate? true
106
107
  transform do |resp|
107
108
  if return_array
108
109
  arrayify resp[:leads][:lead]
@@ -122,9 +123,9 @@ module Velocify
122
123
  verify_credentials!
123
124
 
124
125
  request do
125
- enable_destructuring destruct
126
+ destruct_response? destruct
126
127
  operation :get_lead
127
- authenticate true
128
+ authenticate? true
128
129
  message lead_id: id
129
130
  transform do |resp|
130
131
  if return_array
@@ -140,9 +141,9 @@ module Velocify
140
141
  verify_credentials!
141
142
 
142
143
  request do
143
- enable_destructuring destruct
144
+ destruct_response? destruct
144
145
  operation :get_last_created_lead
145
- authenticate true
146
+ authenticate? true
146
147
  transform do |resp|
147
148
  if return_array
148
149
  arrayify resp[:leads][:lead]
@@ -157,9 +158,9 @@ module Velocify
157
158
  verify_credentials!
158
159
 
159
160
  request do
160
- enable_destructuring destruct
161
+ destruct_response? destruct
161
162
  operation :get_last_modified_lead
162
- authenticate true
163
+ authenticate? true
163
164
  transform do |resp|
164
165
  if return_array
165
166
  arrayify resp[:leads][:lead]
@@ -174,9 +175,9 @@ module Velocify
174
175
  verify_credentials!
175
176
 
176
177
  request do
177
- enable_destructuring destruct
178
+ destruct_response? destruct
178
179
  operation :remove_lead
179
- authenticate true
180
+ authenticate? true
180
181
  message lead_id: id
181
182
  transform do |resp|
182
183
  if return_array
@@ -202,9 +203,9 @@ module Velocify
202
203
  verify_credentials!
203
204
 
204
205
  request do
205
- enable_destructuring destruct
206
+ destruct_response? destruct
206
207
  operation :modify_lead_status
207
- authenticate true
208
+ authenticate? true
208
209
  message lead_id: lead_id, status_id: status_id
209
210
  transform do |resp|
210
211
  if return_array
@@ -227,9 +228,9 @@ module Velocify
227
228
  verify_credentials!
228
229
 
229
230
  request do
230
- enable_destructuring destruct
231
+ destruct_response? destruct
231
232
  operation :modify_lead_field
232
- authenticate true
233
+ authenticate? true
233
234
  message field_id: field_id, lead_id: lead_id, new_value: new_value
234
235
  transform do |resp|
235
236
  if return_array
@@ -0,0 +1,15 @@
1
+ module Velocify
2
+ class MessagePayload
3
+ def initialize msg
4
+ @msg = msg || {}
5
+ end
6
+
7
+ def authenticate username:, password:
8
+ @msg.merge!({ username: username, password: password })
9
+ end
10
+
11
+ def render
12
+ { message: @msg }
13
+ end
14
+ end
15
+ end
@@ -3,42 +3,32 @@ module Velocify
3
3
  class Client
4
4
  WSDL = 'http://service.leads360.com/ClientService.asmx?WSDL'
5
5
 
6
- attr :spec, :client, :credentials
6
+ attr :request, :soap_client, :username, :password
7
7
 
8
- def initialize spec, credentials: nil
9
- @spec = spec
10
- @credentials = credentials
11
- @client = Savon.client wsdl: WSDL
8
+ def initialize request, username: nil, password: nil
9
+ @request = request
10
+ @username = username
11
+ @password = password
12
+ @soap_client = Savon.client wsdl: WSDL
12
13
  end
13
14
 
14
15
  def call
15
- payload = {}
16
-
17
- if spec.has_message?
18
- payload = spec.__message
19
- end
20
-
21
- if spec.requires_auth?
22
- payload.merge! credentials
16
+ if request.requires_auth?
17
+ request.authenticate username: @username, password: @password
23
18
  end
24
19
 
25
- raw_response = client.call(spec.__operation, { message: payload }).body
26
- response_tag = "#{spec.__operation.to_s}_response".to_sym
27
- result_tag = "#{spec.__operation.to_s}_result".to_sym
20
+ raw_response = soap_client.call(request.operation, request.payload).body
21
+ response_tag = "#{request.operation.to_s}_response".to_sym
22
+ result_tag = "#{request.operation.to_s}_result".to_sym
28
23
  response = raw_response[response_tag][result_tag]
29
-
30
- if spec.has_transform?
31
- spec.__transform.call response
32
- else
33
- response
34
- end
24
+ request.transform.call response
35
25
  end
36
26
 
37
27
  private
38
28
 
39
- def client; @client; end
40
-
41
- def credentials; @credentials; end
29
+ def soap_client; @soap_client ; end
30
+ def credentials; @credentials ; end
31
+ def request ; @request ; end
42
32
  end
43
33
 
44
34
  module RequestHelpers
@@ -51,72 +41,80 @@ module Velocify
51
41
  end
52
42
  end
53
43
 
54
- class RequestSpecification
55
- include RequestHelpers
56
-
57
- attr :destruct, :operation, :transform, :message, :credentials, :authenticate
44
+ class Request
45
+ attr_writer :payload, :requires_auth, :destruct_response
46
+ attr_accessor :transform
47
+ attr_accessor :operation
58
48
 
59
49
  def initialize
60
- @destruct = false
50
+ @destruct_response = false
51
+ @requires_auth = false
61
52
  end
62
53
 
63
- def enable_destructuring is_on
64
- @destruct = is_on
54
+ def authenticate username:, password:
55
+ @payload.authenticate username: username, password: password
65
56
  end
66
57
 
67
- def destruct?
68
- @destruct
58
+ def transform= transform
59
+ @transform = transform
69
60
  end
70
-
71
- def authenticate is_on
72
- @authenticate = is_on
73
- end
74
-
75
- def message *msg
76
- @message = Hash[ *msg ]
61
+
62
+ def payload
63
+ @payload.render
77
64
  end
65
+
66
+ def destruct_response? ; @destruct_response ; end
67
+ def requires_auth? ; @requires_auth ; end
68
+ end
69
+
70
+ class RequestBuilder
71
+ include RequestHelpers
78
72
 
79
- def operation op
80
- @operation = op.to_sym
73
+ def initialize
74
+ @destruct = false
81
75
  end
82
76
 
83
- def transform &block
84
- @transform = block
77
+ def destruct_response? is_on
78
+ @destruct = is_on
85
79
  end
86
80
 
87
- def has_message?
88
- !@message.nil?
81
+ def authenticate? is_on
82
+ @authenticate = is_on
89
83
  end
90
84
 
91
- def requires_auth?
92
- !@authenticate.nil?
85
+ def transform &block
86
+ @transform = block
93
87
  end
94
88
 
95
- def has_transform?
96
- !@transform.nil?
89
+ def operation op
90
+ @operation = op.to_sym
97
91
  end
98
92
 
99
- def __message
100
- @message
93
+ def xml xml
94
+ @xml = xml
101
95
  end
102
96
 
103
- def __operation
104
- @operation
97
+ def message msg
98
+ @message = msg
105
99
  end
106
100
 
107
- def __transform
108
- @transform
101
+ def build
102
+ Request.new.tap do |req|
103
+ req.payload = @xml || MessagePayload.new(@message)
104
+ req.requires_auth = @authenticate
105
+ req.transform = @transform || -> (resp) { resp }
106
+ req.operation = @operation
107
+ req.destruct_response = @destruct
108
+ end
109
109
  end
110
110
  end
111
-
111
+
112
112
  module ModelHelpers
113
- attr :credentials
113
+ attr :username, :password
114
114
 
115
115
  def authenticate!
116
- @credentials = {
117
- username: ENV['VELOCIFY_USERNAME'],
118
- password: ENV['VELOCIFY_PASSWORD']
119
- }
116
+ @username = ENV['VELOCIFY_USERNAME']
117
+ @password = ENV['VELOCIFY_PASSWORD']
120
118
  valid_credentials?
121
119
  end
122
120
 
@@ -127,40 +125,37 @@ module Velocify
127
125
  private
128
126
 
129
127
  def verify_credentials!
130
- if @credentials.nil?
128
+ if @username.nil? || @password.nil?
131
129
  raise Velocify::AuthenticationException, "You must export your credentials to the environment"
132
130
  end
133
131
  end
134
132
 
135
- def authenticated_message msg
136
- @credentials.merge(msg) unless @credentials.nil?
137
- end
138
-
139
133
  def valid_credentials?
140
- return false if @credentials.nil?
141
- !@credentials[:username].empty? && !@credentials[:password].empty?
134
+ return false if @username.nil? || @password.nil?
135
+ !@username.empty? && !@password.empty?
142
136
  end
143
137
 
144
138
  def request destruct: false, &block
145
139
  begin
146
- spec = RequestSpecification.new
147
- spec.instance_eval(&block)
148
- client = Client.new spec, credentials: @credentials
140
+ request_builder = RequestBuilder.new
141
+ request_builder.instance_eval(&block)
142
+ request = request_builder.build
143
+ client = Client.new request, username: @username, password: @password
149
144
 
150
- if destruct || spec.destruct?
145
+ if destruct || request.destruct_response?
151
146
  result = client.call
152
147
  [true, result]
153
148
  else
154
149
  client.call
155
150
  end
156
151
  rescue Savon::SOAPFault => ex
157
- if destruct || spec.destruct?
152
+ if destruct || request.destruct_response?
158
153
  [false, { message: ex.message }]
159
154
  else
160
155
  { message: ex.message }
161
156
  end
162
157
  rescue Net::ReadTimeout => ex
163
- if destruct || spec.destruct?
158
+ if destruct || request.destruct_response?
164
159
  [false, { message: ex.message }]
165
160
  else
166
161
  { message: ex.message }
@@ -12,8 +12,13 @@ module Velocify
12
12
  def read kind:, response:
13
13
  singular_key = kind.to_s
14
14
  plural_key = singular_key.pluralize
15
- fields = response[plural_key.to_sym][singular_key.to_sym]
16
- ResponseReader.new kind: kind, hash: fields
15
+ fields = response
16
+
17
+ if response.instance_of? Hash
18
+ fields = response[plural_key.to_sym][singular_key.to_sym]
19
+ end
20
+
21
+ ResponseReader.new kind: kind, elements: fields
17
22
  end
18
23
  end
19
24
 
@@ -23,40 +28,45 @@ module Velocify
23
28
  # @return [String] the id of the `kind` that matches the title you searched for
24
29
  #
25
30
  def find_id_by_title title
26
- key = @hash.select { |f|
27
- f["@#{kind}_title".to_sym] == title
28
- }.pop
31
+ element = select_one_by_title title
32
+ element["@#{kind}_id".to_sym] if element
33
+ end
29
34
 
30
- key["@#{kind}_id".to_sym] if key
35
+ def find_value_by_title title
36
+ element = select_one_by_title title
37
+ element["@value".to_sym] if element
31
38
  end
32
39
 
33
40
  def search_by_title title
34
- key = @hash.select { |k|
35
- k["@#{kind}_title".to_sym] =~ /#{title}/
41
+ element = @elements.select { |el|
42
+ el["@#{kind}_title".to_sym] =~ /#{title}/
36
43
  }
37
44
 
38
- key if key
45
+ element if element
39
46
  end
40
47
 
41
48
  def find_by_title title
42
- key = @hash.select { |k|
43
- k["@#{kind}_title".to_sym] == title
44
- }.pop
45
-
46
- key if key
49
+ element = select_one_by_title title
50
+ element if element
47
51
  end
48
52
 
49
53
  # @return [String] a list of all the titles
50
54
  def all_titles
51
- @hash.map { |k| k["@#{kind}_title".to_sym] }
55
+ @elements.map { |el| el["@#{kind}_title".to_sym] }
52
56
  end
53
57
 
54
58
  private
55
59
 
56
60
  attr :kind, :hash
57
61
 
58
- def initialize kind:, hash:
59
- @kind, @hash = kind.to_s, hash
62
+ def initialize kind:, elements:
63
+ @kind, @elements = kind.to_s, elements
64
+ end
65
+
66
+ def select_one_by_title title
67
+ @elements.select { |el|
68
+ el["@#{kind}_title".to_sym] == title
69
+ }.pop
60
70
  end
61
71
  end
62
72
  end
@@ -6,9 +6,9 @@ module Velocify
6
6
  verify_credentials!
7
7
 
8
8
  request do
9
- enable_destructuring destruct
9
+ destruct_response? destruct
10
10
  operation :get_statuses
11
- authenticate true
11
+ authenticate? true
12
12
  transform do |resp|
13
13
  if return_array
14
14
  arrayify resp[:statuses][:status]
@@ -1,3 +1,3 @@
1
1
  module Velocify
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,22 +1,32 @@
1
- <Leads>
2
- <% @leads.each do |lead| %>
3
- <Lead>
4
- <% if lead.status_id? %>
5
- <Status StatusId="<%= lead.status_id %>"></Status>
6
- <% end %>
7
- <% if lead.campaign_id? %>
8
- <Campaign CampaignId="<%= lead.campaign_id %>"></Campaign>
9
- <% end %>
10
- <% if lead.agent_id? %>
11
- <Agent AgentId="<%= lead.agent_id %>"></Agent>
12
- <% end %>
13
- <% unless lead.fields.empty? %>
14
- <Fields>
15
- <% lead.fields.each do |field| %>
16
- <Field FieldId="<%= field[:id] %>" Value="<%= field[:value] %>"></Field>
1
+ <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="https://service.leads360.com">
2
+ <env:Body>
3
+ <ser:AddLeads>
4
+ <ser:username><%= @credentials[:username] %></ser:username>
5
+ <ser:password><%= @credentials[:password] %></ser:password>
6
+ <ser:leads>
7
+ <Leads>
8
+ <% @leads.each do |lead| %>
9
+ <Lead>
10
+ <% if lead.status_id? %>
11
+ <Status StatusId="<%= lead.status_id %>"></Status>
12
+ <% end %>
13
+ <% if lead.campaign_id? %>
14
+ <Campaign CampaignId="<%= lead.campaign_id %>"></Campaign>
15
+ <% end %>
16
+ <% if lead.agent_id? %>
17
+ <Agent AgentId="<%= lead.agent_id %>"></Agent>
18
+ <% end %>
19
+ <% unless lead.fields.empty? %>
20
+ <Fields>
21
+ <% lead.fields.each do |field| %>
22
+ <Field FieldId="<%= field[:id] %>" Value="<%= field[:value] %>"></Field>
23
+ <% end %>
24
+ </Fields>
25
+ <% end %>
26
+ </Lead>
17
27
  <% end %>
18
- </Fields>
19
- <% end %>
20
- </Lead>
21
- <% end %>
22
- </Leads>
28
+ </Leads>
29
+ </ser:leads>
30
+ </ser:AddLeads>
31
+ </env:Body>
32
+ </env:Envelope>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: velocify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Dyba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-24 00:00:00.000000000 Z
11
+ date: 2015-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -126,11 +126,13 @@ files:
126
126
  - bin/console
127
127
  - bin/setup
128
128
  - lib/velocify.rb
129
+ - lib/velocify/add_leads_payload.rb
130
+ - lib/velocify/agent.rb
129
131
  - lib/velocify/campaign.rb
130
132
  - lib/velocify/field.rb
131
133
  - lib/velocify/field_type.rb
132
134
  - lib/velocify/lead.rb
133
- - lib/velocify/lead_list.rb
135
+ - lib/velocify/message_payload.rb
134
136
  - lib/velocify/model.rb
135
137
  - lib/velocify/response_reader.rb
136
138
  - lib/velocify/status.rb
@@ -1,25 +0,0 @@
1
- require 'erb'
2
-
3
- module Velocify
4
- class LeadList
5
- include ERB::Util
6
-
7
- attr :leads
8
-
9
- def initialize
10
- @leads = []
11
- end
12
-
13
- def add_lead lead
14
- @leads << lead
15
- end
16
-
17
- def render
18
- relative_path = File.join '..', '..', 'templates', 'add_leads.xml.erb'
19
- current_dir = File.dirname(__FILE__)
20
- path = File.expand_path relative_path, current_dir
21
- template = File.read(path)
22
- ERB.new(template).result binding
23
- end
24
- end
25
- end