onepagecrm 0.0.8 → 0.0.9
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/Guardfile +9 -0
- data/lib/onepagecrm.rb +37 -68
- data/lib/onepagecrm/version.rb +2 -1
- data/onepagecrm.gemspec +6 -0
- data/spec/contacts_spec.rb +4 -1
- data/spec/spec_helper.rb +3 -3
- data/tasks/rspec.rake +3 -1
- metadata +72 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af6d0d2b43457fbf7e400f2aecd5b417e77ea3c6
|
4
|
+
data.tar.gz: d507d507240c193a41c48ea00c56a253af1ae191
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64a3ce994c2dbafe5112c8780b7bd020db87ca58618073a6ba3f3376b839c1c4d147730e62c9e6f122ef11ddf7b313bd24053a9b449d9dd57fa834eeed1b39fa
|
7
|
+
data.tar.gz: 49268667cf1e52a763311a41f729f8df9334b9b5d101e55e683bd4dd4a86a53b608d92c326ff656031a996eecc7cf63322fe501d0763e77b141fb6830bc43415
|
data/Guardfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec, cmd: 'bundle exec rspec' do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
8
|
+
end
|
9
|
+
|
data/lib/onepagecrm.rb
CHANGED
@@ -1,96 +1,65 @@
|
|
1
1
|
require 'onepagecrm/version'
|
2
|
-
require 'net/http'
|
3
|
-
require 'openssl'
|
4
2
|
require 'base64'
|
5
3
|
require 'json'
|
6
|
-
require '
|
4
|
+
require 'faraday'
|
7
5
|
|
6
|
+
# OnePageCRM API Client Object
|
8
7
|
class Onepagecrm
|
9
8
|
def initialize(login = nil, password = nil)
|
10
9
|
@url = 'https://app.onepagecrm.com/api/v3/'
|
10
|
+
@conn = Faraday.new(url: @url)
|
11
11
|
log_in(login, password)
|
12
12
|
end
|
13
13
|
|
14
|
-
#
|
14
|
+
# Log user into API
|
15
15
|
def log_in(login, password)
|
16
16
|
params = { login: login, password: password }
|
17
17
|
auth_data = post('login.json', params)
|
18
18
|
@uid = auth_data['data']['user_id']
|
19
|
-
@
|
19
|
+
@auth_key = Base64.decode64(auth_data['data']['auth_key'])
|
20
20
|
end
|
21
21
|
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
result = http.request(req).body
|
30
|
-
JSON.parse result
|
22
|
+
# defines get and delete methods
|
23
|
+
%w(get delete).each do |http_method|
|
24
|
+
define_method http_method do |endpoint, params = {}|
|
25
|
+
@conn.headers = auth_header(http_method, @url + endpoint, params)
|
26
|
+
response = @conn.send(http_method, endpoint, params)
|
27
|
+
JSON.parse response.body
|
28
|
+
end
|
31
29
|
end
|
32
30
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
result = http.request(req).body
|
41
|
-
JSON.parse result
|
31
|
+
# Defines put and post methods
|
32
|
+
%w(post put).each do |http_method|
|
33
|
+
define_method http_method do |endpoint, params = {}|
|
34
|
+
@conn.headers = auth_header(http_method, @url + endpoint, params)
|
35
|
+
response = @conn.send(http_method, endpoint, params.to_json)
|
36
|
+
JSON.parse response.body
|
37
|
+
end
|
42
38
|
end
|
43
39
|
|
44
|
-
#
|
45
|
-
def
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
http.use_ssl = true
|
53
|
-
result = http.request(req).body
|
54
|
-
JSON.parse result
|
55
|
-
end
|
56
|
-
|
57
|
-
# Send PUT request
|
58
|
-
def put(method, params = {})
|
59
|
-
url = URI.parse(@url + method)
|
60
|
-
req = Net::HTTP::Put.new(url.path)
|
61
|
-
req.body = params.to_json
|
62
|
-
req.add_field('Content-Type', 'application/json; charset=utf-8')
|
63
|
-
add_auth_headers(req, 'PUT', method, params)
|
64
|
-
http = Net::HTTP.new(url.host, url.port)
|
65
|
-
http.use_ssl = true
|
66
|
-
result = http.request(req).body
|
67
|
-
JSON.parse result
|
68
|
-
end
|
40
|
+
# Returns headers required for API authentication
|
41
|
+
def auth_header(http_method, url, parameters)
|
42
|
+
http_method = http_method.upcase
|
43
|
+
op_headers = { 'Content-Type' => 'application/json' }
|
44
|
+
return op_headers if @uid.nil? || @auth_key.nil?
|
45
|
+
if parameters.any? && %w(GET DELETE).include?(http_method)
|
46
|
+
url += '?' + URI.encode_www_form(parameters)
|
47
|
+
end
|
69
48
|
|
70
|
-
# Add authentication headers
|
71
|
-
def add_auth_headers(req, http_method, api_method, params)
|
72
|
-
return if @uid.nil? || @api_key.nil?
|
73
|
-
|
74
|
-
url_to_sign = @url + api_method
|
75
|
-
params_to_sign = params.empty? ? nil : URI.encode_www_form(params)
|
76
|
-
url_to_sign += '?' + params_to_sign unless params_to_sign.nil? || %w(POST PUT).include?(http_method)
|
77
|
-
|
78
|
-
# puts url_to_sign
|
79
49
|
timestamp = Time.now.to_i.to_s
|
80
|
-
token =
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
req.add_field('X-OnePageCRM-Source', 'lead_clip_chrome')
|
50
|
+
token = create_auth_token(http_method, url, parameters, timestamp)
|
51
|
+
{ 'X-OnePageCRM-UID' => @uid,
|
52
|
+
'X-OnePageCRM-TS' => timestamp,
|
53
|
+
'X-OnePageCRM-Auth' => token
|
54
|
+
}.merge op_headers
|
86
55
|
end
|
87
56
|
|
88
|
-
# Creates the token for X-OnePageCRM-Auth
|
89
|
-
def
|
57
|
+
# Creates the auth token for the X-OnePageCRM-Auth header
|
58
|
+
def create_auth_token(http_method, request_url, request_body, timestamp)
|
90
59
|
request_url_hash = Digest::SHA1.hexdigest request_url
|
91
60
|
request_body_hash = Digest::SHA1.hexdigest request_body.to_json
|
92
|
-
|
93
|
-
|
94
|
-
OpenSSL::HMAC.hexdigest('sha256', @
|
61
|
+
signature = [@uid, timestamp, http_method.upcase, request_url_hash].join '.'
|
62
|
+
signature += ('.' + request_body_hash) if %w(POST PUT).include?(http_method)
|
63
|
+
OpenSSL::HMAC.hexdigest('sha256', @auth_key, signature).to_s
|
95
64
|
end
|
96
65
|
end
|
data/lib/onepagecrm/version.rb
CHANGED
data/onepagecrm.gemspec
CHANGED
@@ -18,10 +18,16 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
+
spec.add_dependency 'faraday'
|
22
|
+
|
21
23
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
23
25
|
spec.add_development_dependency 'rspec'
|
24
26
|
spec.add_development_dependency 'json_spec'
|
25
27
|
spec.add_development_dependency 'codeclimate-test-reporter'
|
26
28
|
spec.add_development_dependency 'pry'
|
29
|
+
spec.add_development_dependency 'guard'
|
30
|
+
spec.add_development_dependency 'guard-rspec'
|
31
|
+
spec.add_development_dependency 'awesome_print'
|
32
|
+
spec.add_development_dependency 'vcr'
|
27
33
|
end
|
data/spec/contacts_spec.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'json_spec'
|
3
3
|
require 'pry'
|
4
|
+
require 'awesome_print'
|
4
5
|
|
5
6
|
describe Onepagecrm do
|
6
7
|
subject { Onepagecrm.new(TEST_CONFIG['login'], TEST_CONFIG['password']) }
|
7
8
|
|
8
9
|
describe '#contact' do
|
9
10
|
it 'creates, gets, updates and deletes a contact' do
|
11
|
+
|
12
|
+
contacts = subject.get('contacts.json')
|
13
|
+
expect(contacts['status']).to eq 0
|
10
14
|
new_contact_details = ({
|
11
15
|
'first_name' => 'yes',
|
12
16
|
'last_name' => 'address',
|
@@ -29,7 +33,6 @@ describe Onepagecrm do
|
|
29
33
|
'state' => 'CA'
|
30
34
|
]
|
31
35
|
})
|
32
|
-
|
33
36
|
new_contact = subject.post('contacts.json', new_contact_details)['data']
|
34
37
|
new_contact_id = new_contact['contact']['id']
|
35
38
|
got_deets = subject.get("contacts/#{new_contact_id}.json?search=yes")['data']['contact']
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require 'codeclimate-test-reporter'
|
2
|
+
# require 'codeclimate-test-reporter'
|
3
3
|
TEST_CONFIG = YAML.load_file("#{File.dirname(__FILE__)}/../config/config.yml")
|
4
4
|
|
5
|
-
ENV['CODECLIMATE_REPO_TOKEN'] = TEST_CONFIG['codeclimate_key']
|
6
|
-
CodeClimate::TestReporter.start
|
5
|
+
# ENV['CODECLIMATE_REPO_TOKEN'] = TEST_CONFIG['codeclimate_key']
|
6
|
+
# CodeClimate::TestReporter.start
|
7
7
|
require 'onepagecrm'
|
data/tasks/rspec.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onepagecrm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Armstrong
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,62 @@ dependencies:
|
|
94
108
|
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: awesome_print
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: vcr
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
97
167
|
description: Basic Gem for OnePageCRM.
|
98
168
|
email:
|
99
169
|
- peter@onepagecrm.com
|
@@ -103,6 +173,7 @@ extra_rdoc_files: []
|
|
103
173
|
files:
|
104
174
|
- ".gitignore"
|
105
175
|
- Gemfile
|
176
|
+
- Guardfile
|
106
177
|
- LICENSE.txt
|
107
178
|
- README.md
|
108
179
|
- Rakefile
|