sale 0.1.4 → 0.1.5
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/lib/sale/buyers.rb +27 -27
- data/lib/sale/entity.rb +6 -0
- data/lib/sale/fake_rut.rb +22 -0
- data/sale.gemspec +1 -1
- data/spec/buyers_spec.rb +21 -21
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 91c880bc22e32f5e06d49b7127c3841608760ae3a00222021bf30cdfb5b8570e
|
|
4
|
+
data.tar.gz: c389190b9f04ffbbf47d116db1173cf326b67bd5026181272f462eafdf138e40
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0666d3d2de7f3f0508b9780b35787e5625124712d9e4af295b7657b41bd47f9bb9cb9970dd18fa3bd4d39ba004ad4d976e7fed1e0e7dbb3401a2a502159aa228
|
|
7
|
+
data.tar.gz: 1afc01b9ef4bc598558aa5cfe68893602e4a68b27852821b7e37a680117bba7e4f11f3955a303e6fc9a9afab3d72799ddab6872366b6abc0f38b39364d34221d
|
data/lib/sale/buyers.rb
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
require_relative './base'
|
|
2
2
|
|
|
3
3
|
class Bsale::Buyers
|
|
4
|
-
|
|
5
|
-
def initialize(root)
|
|
6
|
-
@client = root
|
|
7
|
-
end
|
|
8
|
-
|
|
9
4
|
class BuyerNotFoundError < Bsale::InvalidResponseError; end
|
|
10
5
|
|
|
11
6
|
EMAIL_REGEX = /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
|
|
12
7
|
|
|
8
|
+
def initialize(root)
|
|
9
|
+
@root = root
|
|
10
|
+
end
|
|
11
|
+
|
|
13
12
|
def find_by_email_and_code(email, code = nil)
|
|
14
13
|
if list = find_all_by_email(email) and list.any?
|
|
15
14
|
with_code = list.select { |b| code.nil? ? (b.code || '').size > 0 : (code.to_s == b.code.to_s) }
|
|
@@ -27,16 +26,29 @@ class Bsale::Buyers
|
|
|
27
26
|
get_buyers_with(email: email)
|
|
28
27
|
end
|
|
29
28
|
|
|
30
|
-
def
|
|
29
|
+
def find_all_by_code(code)
|
|
31
30
|
get_buyers_with(code: code)
|
|
32
31
|
end
|
|
33
32
|
|
|
34
|
-
def
|
|
33
|
+
def find_or_create(data)
|
|
34
|
+
matches = if data[:code].present? # has rut, either from order contact info or company record
|
|
35
|
+
find_all_by_code(buyer.code)
|
|
36
|
+
else
|
|
37
|
+
find_all_by_code(FakeRUT.for(data[:code]))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
matches.any ? matches.first : create(data)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def create(firstName:, lastName:, email:, phone:, address:, municipality:, city:, code: nil, note: nil, activity: nil)
|
|
44
|
+
raise "Invalid email: #{email}" unless email.match(EMAIL_REGEX)
|
|
45
|
+
# is_foreign = buyer.code.to_s.gsub(/[^0-9]/, '').to_i == 55_555_555
|
|
46
|
+
|
|
35
47
|
data = {
|
|
36
48
|
accumulatePoints: 1,
|
|
37
49
|
firstName: firstName,
|
|
38
50
|
lastName: lastName,
|
|
39
|
-
code: code,
|
|
51
|
+
code: code && code != '' ? code : FakeRUT.for(email),
|
|
40
52
|
address: address,
|
|
41
53
|
email: email,
|
|
42
54
|
phone: phone,
|
|
@@ -46,8 +58,7 @@ class Bsale::Buyers
|
|
|
46
58
|
activity: activity # date of birth
|
|
47
59
|
}
|
|
48
60
|
|
|
49
|
-
|
|
50
|
-
client.post("/clients.json", data)
|
|
61
|
+
root.post("/clients.json", data)
|
|
51
62
|
end
|
|
52
63
|
|
|
53
64
|
def update(id, data)
|
|
@@ -56,7 +67,7 @@ class Bsale::Buyers
|
|
|
56
67
|
end
|
|
57
68
|
|
|
58
69
|
# puts "Updating client #{id} with data: #{data.inspect}"
|
|
59
|
-
|
|
70
|
+
root.put("/clients/#{id}.json", data.merge(id: id))
|
|
60
71
|
end
|
|
61
72
|
|
|
62
73
|
def update_points(buyer, difference, order_code)
|
|
@@ -70,27 +81,16 @@ class Bsale::Buyers
|
|
|
70
81
|
orderId: order_code
|
|
71
82
|
}
|
|
72
83
|
|
|
73
|
-
resp =
|
|
74
|
-
|
|
75
|
-
return parse_json(resp.body)['points']
|
|
76
|
-
else
|
|
77
|
-
raise InvalidResponseError.new("#{resp.code}: #{resp.body}")
|
|
78
|
-
end
|
|
84
|
+
resp = root.put('/clients/points.json', data)
|
|
85
|
+
# resp.points
|
|
79
86
|
end
|
|
80
87
|
|
|
81
88
|
private
|
|
82
|
-
attr_reader :
|
|
89
|
+
attr_reader :root
|
|
83
90
|
|
|
84
91
|
def get_buyers_with(attrs)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
else
|
|
88
|
-
[]
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def get_buyers(query)
|
|
93
|
-
client.clients(query)
|
|
92
|
+
# root.clients(attrs.merge(state: 0))
|
|
93
|
+
root.clients(attrs)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
end
|
data/lib/sale/entity.rb
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module FakeRUT
|
|
2
|
+
|
|
3
|
+
def self.for(str)
|
|
4
|
+
num = Digest::SHA1.hexdigest(str)[0..6].to_i(16)
|
|
5
|
+
"#{num}-#{get_rut_digit(num)}"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def self.get_digit(num)
|
|
11
|
+
m, s, t = 0, 1, num.to_i
|
|
12
|
+
|
|
13
|
+
while t > 0
|
|
14
|
+
s = (s + t % 10 * (9 - m % 6)) % 11
|
|
15
|
+
t = (t / 10).floor
|
|
16
|
+
m += 1
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
v = (s > 0) ? (s-1).to_s : 'K'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
data/sale.gemspec
CHANGED
data/spec/buyers_spec.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'bundler/setup'
|
|
2
|
-
require_relative '../lib/
|
|
2
|
+
require_relative '../lib/sale'
|
|
3
3
|
|
|
4
4
|
RSpec.configure do |config|
|
|
5
5
|
config.color = true
|
|
@@ -10,24 +10,24 @@ describe 'Bsale' do
|
|
|
10
10
|
describe 'Buyers' do
|
|
11
11
|
|
|
12
12
|
let(:client) {
|
|
13
|
-
Bsale::
|
|
13
|
+
Bsale::Root.new('foo').buyers
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
let(:fake_response) {
|
|
17
|
-
double('Response', code: 200, body: '{"count": 0}')
|
|
17
|
+
double('Response', code: 200, body: '{"count": 0}', success?: true)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
before do
|
|
21
21
|
allow(Dagger).to receive(:request).and_return(fake_response)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
describe '
|
|
24
|
+
describe 'find_by_email_and_code' do
|
|
25
25
|
|
|
26
26
|
describe 'when email is invalid' do
|
|
27
27
|
|
|
28
28
|
it 'returns nil, without making a request' do
|
|
29
29
|
expect(client).not_to receive(:request)
|
|
30
|
-
client.
|
|
30
|
+
client.find_by_email_and_code('aaa')
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
end
|
|
@@ -39,11 +39,11 @@ describe 'Bsale' do
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it 'returns nil without code' do
|
|
42
|
-
client.
|
|
42
|
+
client.find_by_email_and_code('aaa@foo.com')
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it 'returns nil with code' do
|
|
46
|
-
client.
|
|
46
|
+
client.find_by_email_and_code('aaa@foo.com', '123')
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
end
|
|
@@ -55,18 +55,18 @@ describe 'Bsale' do
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
it 'returns result, without code' do
|
|
58
|
-
res = client.
|
|
58
|
+
res = client.find_by_email_and_code('aaa@foo.com')
|
|
59
59
|
expect(res).to eql(OpenStruct.new({ code: 123, accumulatePoints: '1' }))
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it 'returns result, with matching code' do
|
|
63
|
-
res = client.
|
|
63
|
+
res = client.find_by_email_and_code('aaa@foo.com', '123')
|
|
64
64
|
expect(res).to eql(OpenStruct.new({ code: 123, accumulatePoints: '1' }))
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
it 'returns nil, with non-matching code' do
|
|
68
68
|
expect do
|
|
69
|
-
client.
|
|
69
|
+
client.find_by_email_and_code('aaa@foo.com', '234')
|
|
70
70
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -80,18 +80,18 @@ describe 'Bsale' do
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
it 'returns result, without code' do
|
|
83
|
-
res = client.
|
|
83
|
+
res = client.find_by_email_and_code('aaa@foo.com')
|
|
84
84
|
expect(res).to eql(OpenStruct.new({ code: 123, accumulatePoints: '1' }))
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
it 'returns result, with matching code' do
|
|
88
|
-
res = client.
|
|
88
|
+
res = client.find_by_email_and_code('aaa@foo.com', '123')
|
|
89
89
|
expect(res).to eql(OpenStruct.new({ code: 123, accumulatePoints: '1' }))
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
it 'returns nil, with non-matching code' do
|
|
93
93
|
expect do
|
|
94
|
-
client.
|
|
94
|
+
client.find_by_email_and_code('aaa@foo.com', '234')
|
|
95
95
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
96
96
|
end
|
|
97
97
|
|
|
@@ -105,19 +105,19 @@ describe 'Bsale' do
|
|
|
105
105
|
|
|
106
106
|
it 'returns nil, without code' do
|
|
107
107
|
expect do
|
|
108
|
-
client.
|
|
108
|
+
client.find_by_email_and_code('aaa@foo.com')
|
|
109
109
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
it 'returns nil, with matching code' do
|
|
113
113
|
expect do
|
|
114
|
-
client.
|
|
114
|
+
client.find_by_email_and_code('aaa@foo.com', '123')
|
|
115
115
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it 'returns nil, with non-matching code' do
|
|
119
119
|
expect do
|
|
120
|
-
client.
|
|
120
|
+
client.find_by_email_and_code('aaa@foo.com', '234')
|
|
121
121
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
122
122
|
end
|
|
123
123
|
|
|
@@ -132,18 +132,18 @@ describe 'Bsale' do
|
|
|
132
132
|
|
|
133
133
|
it 'returns nil, without code' do
|
|
134
134
|
expect do
|
|
135
|
-
client.
|
|
135
|
+
client.find_by_email_and_code('aaa@foo.com')
|
|
136
136
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
it 'returns result, when code matches one' do
|
|
140
|
-
res = client.
|
|
140
|
+
res = client.find_by_email_and_code('aaa@foo.com', '123')
|
|
141
141
|
expect(res).to eql(OpenStruct.new({ code: 123, accumulatePoints: '1' }))
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
it 'returns nil, when code doesnt match any' do
|
|
145
145
|
expect do
|
|
146
|
-
client.
|
|
146
|
+
client.find_by_email_and_code('aaa@foo.com', '234')
|
|
147
147
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
148
148
|
end
|
|
149
149
|
|
|
@@ -157,13 +157,13 @@ describe 'Bsale' do
|
|
|
157
157
|
|
|
158
158
|
it 'returns nil, without code' do
|
|
159
159
|
expect do
|
|
160
|
-
client.
|
|
160
|
+
client.find_by_email_and_code('aaa@foo.com')
|
|
161
161
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
it 'returns nil, with code' do
|
|
165
165
|
expect do
|
|
166
|
-
client.
|
|
166
|
+
client.find_by_email_and_code('aaa@foo.com', '123')
|
|
167
167
|
end.to raise_error(Bsale::Buyers::BuyerNotFoundError)
|
|
168
168
|
end
|
|
169
169
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sale
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tomás Pollak
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-08-
|
|
11
|
+
date: 2019-08-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -93,6 +93,7 @@ files:
|
|
|
93
93
|
- lib/sale/base.rb
|
|
94
94
|
- lib/sale/buyers.rb
|
|
95
95
|
- lib/sale/entity.rb
|
|
96
|
+
- lib/sale/fake_rut.rb
|
|
96
97
|
- lib/sale/invoices.rb
|
|
97
98
|
- lib/sale/root.rb
|
|
98
99
|
- sale.gemspec
|