velocify 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 97f15fb45f36d32865f86c664f2fd251ce441619
4
+ data.tar.gz: d564c72f7a58df8870a73be0adf13e079905cf60
5
+ SHA512:
6
+ metadata.gz: db057c074748a81574b5323dda98b6cef55ac129affde7a2ba0a1cf5224db72134b788799484a597deb8270100b22781b11fa0d7b43c540b778675c6a36dac70
7
+ data.tar.gz: 9223d5c1869477f446a1b8c23ee4fa4aa331736d57141e896eef0942637973855271cbb64123e3d3f16dbaf564b50a111b7b3f24e51eca99747108acd32844f6
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *~
11
+ .env
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.6
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Daniel Dyba
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # Velocify
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/velocify`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'velocify'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install velocify
20
+
21
+ ## Usage
22
+
23
+ Before getting started, you must export two environment variables: ```VELOCIFY_USERNAME``` and ```VELOCIFY_PASSWORD```.
24
+
25
+ ``` ruby
26
+ require 'velocify'
27
+
28
+ statuses = Velocify::Status.find_all
29
+ dormant_id = Velocify::ResponseReader.read(kind: :status, statuses).find_id_by_title 'Dormant'
30
+ ```
31
+
32
+ ## Development
33
+
34
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
35
+
36
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
37
+
38
+ ## Contributing
39
+
40
+ Bug reports and pull requests are welcome on GitHub at https://github.com/pennymac/velocify. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
41
+
42
+ ## License
43
+
44
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "velocify"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/lib/velocify.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "savon"
2
+ require "dotenv"
3
+
4
+ Dotenv.load
5
+
6
+ require "velocify/version"
7
+ require "velocify/model"
8
+ require "velocify/campaign"
9
+ require "velocify/field"
10
+ require "velocify/field_type"
11
+ require "velocify/lead"
12
+ require "velocify/status"
13
+
14
+ require "velocify/response_reader"
15
+ require "velocify/lead_list"
16
+
17
+
18
+ module Velocify
19
+ end
@@ -0,0 +1,16 @@
1
+ module Velocify
2
+ class Campaign
3
+ include Model
4
+
5
+ operations :get_campaigns
6
+
7
+ def self.find_all
8
+ verify_credentials!
9
+
10
+ request do
11
+ response = get_campaigns(message: @credentials)
12
+ response.body[:get_campaigns_response][:get_campaigns_result]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Velocify
2
+ class Field
3
+ include Model
4
+
5
+ operations :get_fields
6
+
7
+ # @return [Hash] a list of fields
8
+ #
9
+ def self.find_all
10
+ verify_credentials!
11
+
12
+ request do
13
+ response = get_fields(message: @credentials)
14
+ response.body[:get_fields_response][:get_fields_result]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module Velocify
2
+ class FieldType
3
+ include Model
4
+
5
+ operations :get_field_types
6
+
7
+ # @return [Hash] a list of fields
8
+ def self.find_all
9
+ verify_credentials!
10
+
11
+ request do
12
+ response = get_field_types(message: authenticated_message({}))
13
+ response.body[:get_field_types_response][:get_field_types_result]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,153 @@
1
+ module Velocify
2
+ class Lead
3
+ include Model
4
+
5
+ operations :get_lead,
6
+ :get_leads,
7
+ :get_last_created_lead,
8
+ :get_leads_by_email,
9
+ :get_last_modified_lead,
10
+ :modify_lead_field,
11
+ :modify_lead_status,
12
+ :add_leads
13
+
14
+ attr :fields
15
+ attr_accessor :campaign_id, :agent_id, :status_id
16
+
17
+ def initialize body: {}
18
+ @body = body
19
+ end
20
+
21
+ def add_field id:, value:
22
+ @fields = [] if @fields.nil?
23
+ @fields << { id: id, value: value }
24
+ end
25
+
26
+ def campaign_id?; !@campaign_id.nil?; end
27
+
28
+ def agent_id?; !@agent_id.nil?; end
29
+
30
+ def status_id?; !@status_id.nil?; end
31
+
32
+ class << self
33
+ # Adds a lead or leads
34
+ #
35
+ # @param leads [String] The string representation of the XML document
36
+ # containing the new leads
37
+ #
38
+ def add leads:
39
+ verify_credentials!
40
+
41
+ request do
42
+ response = add_leads(message: authenticated_message({ leads: leads }))
43
+ response.body[:add_leads_response][:add_leads_result]
44
+ end
45
+ end
46
+
47
+ # Retrieves all leads
48
+ #
49
+ # @param from [String] The start date
50
+ # @param to [String] The end date
51
+ # @return [Hash] The leads between the `from:` and `to:` dates
52
+ #
53
+ def find_all from:, to:
54
+ verify_credentials!
55
+
56
+ m = { from: from, to: to }
57
+
58
+ request do
59
+ response = get_leads(message: authenticated_message(m))
60
+ response.body
61
+ end
62
+ end
63
+
64
+ # Retrieves a lead using an email address
65
+ #
66
+ # @param email [String] The email address used to search for a lead
67
+ # @return [Hash] The leads having the matching email address
68
+ #
69
+ def find_by_email email
70
+ verify_credentials!
71
+
72
+ request do
73
+ response = get_leads_by_email(message: authenticated_message({ email: email }))
74
+ response.body[:get_leads_by_email_response][:get_leads_by_email_result]
75
+ end
76
+ end
77
+
78
+ # Retrieves a lead by an id
79
+ #
80
+ # @param id [String] the id of the lead
81
+ # @return [Hash] The lead with the matching id
82
+ #
83
+ def find_by_id id
84
+ verify_credentials!
85
+
86
+ request do
87
+ response = get_lead(message: authenticated_message({ lead_id: id }))
88
+ response.body[:get_lead_response][:get_lead_result]
89
+ end
90
+ end
91
+
92
+ def find_last_created
93
+ verify_credentials!
94
+
95
+ request do
96
+ response = get_last_created_lead(message: authenticated_message({}))
97
+ response.body[:get_last_created_lead_response][:get_last_created_lead_result]
98
+ end
99
+ end
100
+
101
+ def find_last_modified
102
+ verify_credentials!
103
+
104
+ request do
105
+ response = get_last_modified_lead(message: authenticated_message({}))
106
+ response.body[:get_last_modified_lead_response][:get_last_modified_lead_result]
107
+ end
108
+ end
109
+
110
+ # Updates the status of a lead.
111
+ #
112
+ # Use the `Velocify::Status.find_all` method to retrieve the id of the status
113
+ #
114
+ # @see Velocify::Status.find_all
115
+ #
116
+ # @param lead_id [String] The id of the lead
117
+ # @param status_id [String] The id of the status
118
+ # @return [Hash] The response containing the updated lead
119
+ #
120
+ def update_status lead_id:, status_id:
121
+ verify_credentials!
122
+
123
+ request do
124
+ response = modify_lead_status(message: authenticated_message({
125
+ lead_id: lead_id,
126
+ status_id: status_id
127
+ }))
128
+ response.body[:modify_lead_status_response][:modify_lead_status_result]
129
+ end
130
+ end
131
+
132
+ # Updates a field for a lead
133
+ #
134
+ # @param lead_id [String] The id of the lead to be updated
135
+ # @param field_id [String] The id of the field to be updated
136
+ # @param new_value [String] The new value of the field
137
+ # @return [Hash] The response containing the updated lead
138
+ #
139
+ def update_field lead_id:, field_id:, new_value:
140
+ verify_credentials!
141
+
142
+ request do
143
+ response = modify_lead_field(message: authenticated_message({
144
+ field_id: field_id,
145
+ lead_id: lead_id,
146
+ new_value: new_value
147
+ }))
148
+ response.body[:modify_lead_field_response][:modify_lead_field_result]
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,53 @@
1
+ module Velocify
2
+ module ModelHelpers
3
+ attr :credentials
4
+
5
+ def authenticate!
6
+ @credentials = {
7
+ username: ENV['VELOCIFY_USERNAME'],
8
+ password: ENV['VELOCIFY_PASSWORD']
9
+ }
10
+ valid_credentials?
11
+ end
12
+
13
+ def authenticated?
14
+ valid_credentials?
15
+ end
16
+
17
+ private
18
+
19
+ def verify_credentials!
20
+ if @credentials.nil?
21
+ raise Velocify::AuthenticationException, "You must export your credentials to the environment"
22
+ end
23
+ end
24
+
25
+ def authenticated_message msg
26
+ @credentials.merge(msg) unless @credentials.nil?
27
+ end
28
+
29
+ def valid_credentials?
30
+ return false if @credentials.nil?
31
+ !@credentials[:username].empty? && !@credentials[:password].empty?
32
+ end
33
+
34
+ def request &block
35
+ begin
36
+ yield block
37
+ rescue Savon::SOAPFault => ex
38
+ { message: ex.message }
39
+ rescue Net::ReadTimeout => ex
40
+ { message: ex.message }
41
+ end
42
+ end
43
+ end
44
+
45
+ module Model
46
+ def self.included mod
47
+ mod.extend Savon::Model
48
+ mod.client wsdl: 'http://service.leads360.com/ClientService.asmx?WSDL'
49
+ mod.extend Velocify::ModelHelpers
50
+ mod.authenticate!
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,62 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ module Velocify
4
+ class ResponseReader
5
+ class << self
6
+ # Convenience method to create a ResponseReader
7
+ #
8
+ # @param kind [Symbol] Choose from [:field]
9
+ # @param response [Hash] The SOAP response received as returned by the other
10
+ # Velocify model objects
11
+ #
12
+ def read kind:, response:
13
+ singular_key = kind.to_s
14
+ plural_key = singular_key.pluralize
15
+ fields = response[plural_key.to_sym][singular_key.to_sym]
16
+ ResponseReader.new kind: kind, hash: fields
17
+ end
18
+ end
19
+
20
+ # Retrieve the id of a `kind` given a title
21
+ #
22
+ # @param title [String] the title of the `kind`
23
+ # @return [String] the id of the `kind` that matches the title you searched for
24
+ #
25
+ def find_id_by_title title
26
+ key = @hash.select { |f|
27
+ f["@#{kind}_title".to_sym] == title
28
+ }.pop
29
+
30
+ key["@#{kind}_id".to_sym] if key
31
+ end
32
+
33
+ def search_by_title title
34
+ key = @hash.select { |k|
35
+ k["@#{kind}_title".to_sym] =~ /#{title}/
36
+ }
37
+
38
+ key if key
39
+ end
40
+
41
+ def find_by_title title
42
+ key = @hash.select { |k|
43
+ k["@#{kind}_title".to_sym] == title
44
+ }.pop
45
+
46
+ key if key
47
+ end
48
+
49
+ # @return [String] a list of all the titles
50
+ def all_titles
51
+ @hash.map { |k| k["@#{kind}_title".to_sym] }
52
+ end
53
+
54
+ private
55
+
56
+ attr :kind, :hash
57
+
58
+ def initialize kind:, hash:
59
+ @kind, @hash = kind.to_s, hash
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,16 @@
1
+ module Velocify
2
+ class Status
3
+ include Model
4
+
5
+ operations :get_statuses
6
+
7
+ def self.find_all
8
+ verify_credentials!
9
+
10
+ request do
11
+ response = get_statuses(message: authenticated_message({}))
12
+ response.body[:get_statuses_response][:get_statuses_result]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module Velocify
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,23 @@
1
+ <!-- sample XML payload for AddLeads webmethod -->
2
+ <Leads>
3
+ <% @leads.each do |lead| %>
4
+ <Lead>
5
+ <% if lead.status_id? %>
6
+ <Status StatusId="<%= lead.status_id %>"/>
7
+ <% end %>
8
+ <% if lead.agent_id? %>
9
+ <Agent AgentId="<%= lead.agent_id %>"/>
10
+ <% end %>
11
+ <% if lead.campaign_id? %>
12
+ <Campaign CampaignId="<%= lead.campaign_id %>"/>
13
+ <% end %>
14
+ <% unless lead.fields.empty? %>
15
+ <Fields>
16
+ <% lead.fields.each do |field| %>
17
+ <Field FieldId="<%= field[:id] %>" Value="<%= field[:value] %>"/>
18
+ <% end %>
19
+ </Fields>
20
+ <% end %>
21
+ </Lead>
22
+ <% end %>
23
+ </Leads>
data/velocify.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'velocify/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "velocify"
8
+ spec.version = Velocify::VERSION
9
+ spec.authors = ["Daniel Dyba"]
10
+ spec.email = ["daniel.dyba@gmail.com"]
11
+
12
+ spec.summary = %q{A library to communicate with Velocify's API.}
13
+ spec.description = %q{A library to communicate with Velocify's API.}
14
+ spec.homepage = "http://github.com/pennymac/velocify"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "savon", "~> 2.10"
23
+ spec.add_dependency "activesupport", "~> 4.2"
24
+ spec.add_dependency "dotenv", "~> 2.0"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.10"
27
+ spec.add_development_dependency "yard", "~> 0.8.7.6"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "minitest", "~> 5.8"
30
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: velocify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Dyba
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-09-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: savon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dotenv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.8.7.6
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.8.7.6
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '5.8'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '5.8'
111
+ description: A library to communicate with Velocify's API.
112
+ email:
113
+ - daniel.dyba@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - CODE_OF_CONDUCT.md
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - bin/console
126
+ - bin/setup
127
+ - lib/velocify.rb
128
+ - lib/velocify/campaign.rb
129
+ - lib/velocify/field.rb
130
+ - lib/velocify/field_type.rb
131
+ - lib/velocify/lead.rb
132
+ - lib/velocify/lead_list.rb
133
+ - lib/velocify/model.rb
134
+ - lib/velocify/response_reader.rb
135
+ - lib/velocify/status.rb
136
+ - lib/velocify/version.rb
137
+ - templates/add_leads.xml.erb
138
+ - velocify.gemspec
139
+ homepage: http://github.com/pennymac/velocify
140
+ licenses:
141
+ - MIT
142
+ metadata: {}
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.4.5.1
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: A library to communicate with Velocify's API.
163
+ test_files: []
164
+ has_rdoc: