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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea189d76157c7ff7072624e96c36cf55ed81156c
4
- data.tar.gz: d99f8f3f82ee4f72b51605bc5aa4dc4d08f605a1
3
+ metadata.gz: af6d0d2b43457fbf7e400f2aecd5b417e77ea3c6
4
+ data.tar.gz: d507d507240c193a41c48ea00c56a253af1ae191
5
5
  SHA512:
6
- metadata.gz: 15f1d9edf2f48b5e22e2cc3971e9288978cc572c090580f4769421c7cb3f315584a04395c6b1c96ef22f748fabba7ec832997c46c633803483b8b2d8eafd28cc
7
- data.tar.gz: 2b4bdb12542d3ed750589a7486284878cbb314243fcbf288fc8592143beb12dacbd0edf141ae66003d618b0feffcbd656a2392c9c24c88301ca0326995d884cf
6
+ metadata.gz: 64a3ce994c2dbafe5112c8780b7bd020db87ca58618073a6ba3f3376b839c1c4d147730e62c9e6f122ef11ddf7b313bd24053a9b449d9dd57fa834eeed1b39fa
7
+ data.tar.gz: 49268667cf1e52a763311a41f729f8df9334b9b5d101e55e683bd4dd4a86a53b608d92c326ff656031a996eecc7cf63322fe501d0763e77b141fb6830bc43415
@@ -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
+
@@ -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 'uri'
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
- # Login user into API
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
- @api_key = Base64.decode64(auth_data['data']['auth_key'])
19
+ @auth_key = Base64.decode64(auth_data['data']['auth_key'])
20
20
  end
21
21
 
22
- # Send GET request
23
- def get(method, params = {})
24
- url = URI.parse(@url + method)
25
- req = Net::HTTP::Get.new(url.request_uri)
26
- add_auth_headers(req, 'GET', method, params)
27
- http = Net::HTTP.new(url.host, url.port)
28
- http.use_ssl = true
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
- # Send DELETE request
34
- def delete(method, params = {})
35
- url = URI.parse(@url + method)
36
- req = Net::HTTP::Delete.new(url.request_uri)
37
- add_auth_headers(req, 'DELETE', method, params)
38
- http = Net::HTTP.new(url.host, url.port)
39
- http.use_ssl = true
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
- # Send POST request
45
- def post(method, params = {})
46
- url = URI.parse(@url + method)
47
- req = Net::HTTP::Post.new(url.path)
48
- req.body = params.to_json
49
- req.add_field('Content-Type', 'application/json; charset=utf-8')
50
- add_auth_headers(req, 'POST', method, params)
51
- http = Net::HTTP.new(url.host, url.port)
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 = create_token(timestamp, http_method, url_to_sign, params)
81
-
82
- req.add_field('X-OnePageCRM-UID', @uid)
83
- req.add_field('X-OnePageCRM-TS', timestamp)
84
- req.add_field('X-OnePageCRM-Auth', token)
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 create_token(timestamp, request_type, request_url, request_body)
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
- signature_message = [@uid, timestamp, request_type.upcase, request_url_hash].join '.'
93
- signature_message += ('.' + request_body_hash) unless request_body.empty?
94
- OpenSSL::HMAC.hexdigest('sha256', @api_key, signature_message).to_s
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
@@ -1,3 +1,4 @@
1
+ # Version for Oneapgecrm gem
1
2
  class Onepagecrm
2
- VERSION = '0.0.8'
3
+ VERSION = '0.0.9'
3
4
  end
@@ -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
@@ -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']
@@ -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'
@@ -1,3 +1,5 @@
1
1
  require 'rspec/core/rake_task'
2
2
 
3
- RSpec::Core::RakeTask.new(:spec)
3
+ RSpec::Core::RakeTask.new do |task|
4
+ task.rspec_opts = ['--color', '--format', 'doc']
5
+ end
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.8
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