onepagecrm 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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