c80_shared 0.1.8 → 0.1.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
- SHA256:
3
- metadata.gz: 6e1a4cc1d29e3b41b2621edc36f7a825e59841fcddfaeded7e0df55de344ba1e
4
- data.tar.gz: 869851dc848c047670df269abc659c1afdf864f98c3840be090d2c002844fb80
2
+ SHA1:
3
+ metadata.gz: fa7f6666b59ba7a52fb884bf341eaf24a17cfb92
4
+ data.tar.gz: e407fe01bcddfe7dea7292707e49fcd0bc4c50bc
5
5
  SHA512:
6
- metadata.gz: 99d6501d5c909d45d6a77687fb545151a2a101872ca7c4a356ec9f08f68e2d3e846e5858ff7e5f92ce21c59021f510fdcd630096387c5dec1fc7cdcb93fb58cb
7
- data.tar.gz: 8cd35b9389b28c00af2d4887df16c087b312307bb79bb55f59351a3f5230db9ebdb7728c1b83306903fbcd76c74f7ae43d4f924c62399ea706f420a7bffb4a00
6
+ metadata.gz: 5b8d0f09a04894e441b09c38ed23296a8aca88016e6794e59fa26e4c368a9ae92cabd8766f2d5e722695fded593d28c879f94cb2caf1d65705222f3715648a3f
7
+ data.tar.gz: eadff5f8150ef5ca6d497189ed21caf1b80a32ab0317469518c778aa1d35c3e23a391768b0d05a08a840655a8c0e8e09fb1397250d2a20c489e0509fa118e1c3
@@ -11,7 +11,10 @@ module Lease
11
11
  :id,
12
12
  :amount,
13
13
  :currency,
14
- :human_price
14
+ :human_price,
15
+ :old_amount,
16
+ :old_currency,
17
+ :old_human_price
15
18
  ].freeze
16
19
  end
17
20
 
@@ -34,6 +37,22 @@ module Lease
34
37
  end
35
38
  { human_price: val }
36
39
  end
40
+
41
+ def old_amount(rebate)
42
+ { old_amount: rebate.old_amount }
43
+ end
44
+
45
+ def old_currency(rebate)
46
+ { old_currency: rebate.old_currency }
47
+ end
48
+
49
+ def old_human_price(rebate)
50
+ val = nil
51
+ if rebate.old_amount.present? && rebate.old_currency.present?
52
+ val = num_to_cur(rebate.old_amount, rebate.old_currency, @opts[:locale])
53
+ end
54
+ { old_human_price: val }
55
+ end
37
56
  end
38
57
  end
39
58
  end
@@ -0,0 +1,48 @@
1
+ module Users
2
+ class FindOrGenerateEmailTokenService
3
+
4
+ attr_reader :token, :generated
5
+
6
+ def perform(user_id, bid_id)
7
+ _reset_ivars
8
+
9
+ new_token = _find_token user_id, bid_id
10
+ new_token ||= _generate_token user_id, bid_id
11
+ @token = new_token
12
+
13
+ true
14
+ end
15
+
16
+ private
17
+
18
+ # @return [Nil]
19
+ # @return [String]
20
+ #
21
+ def _find_token(user_id, bid_id)
22
+ return unless user_id.present? && bid_id.present?
23
+
24
+ sql = 'SELECT user_email_tokens.token FROM user_email_tokens
25
+ INNER JOIN user_email_tokens_bids ON user_email_tokens.id = user_email_tokens_bids.token_id
26
+ WHERE user_email_tokens_bids.bid_id = %s
27
+ AND user_email_tokens.user_id = %s
28
+ AND user_email_tokens.subj_id IN (%s)
29
+ LIMIT 1 ' % [bid_id, user_id, Users::GenerateEmailTokenService.db_types.join(',')]
30
+
31
+ res = ::ActiveRecord::Base.connection.exec_query(sql)
32
+ res.as_json.dig(0, 'token')
33
+ end
34
+
35
+ # @return [String]
36
+ #
37
+ def _generate_token(user_id, bid_id)
38
+ @generated = true
39
+ user = ::User.find user_id
40
+ ::Users::GenerateEmailTokenService.call user, ::Dicts::EmailTokenSubj::TO_CLIENT_NEW_BID.id, bid_id
41
+ end
42
+
43
+ def _reset_ivars
44
+ @token = nil
45
+ @generated = false
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ module Users
2
+ class GenerateEmailTokenService
3
+ def self.call(user, email_token_subj_id, bid_id = nil)
4
+ user_email_token = ::UserEmailToken.new user: user
5
+ user_email_token.token = ::TokenGenerator.generate_token
6
+ user_email_token.expires_at = Time.now + 1.week
7
+ user_email_token.subj_id = email_token_subj_id
8
+ user_email_token.save!
9
+
10
+ create_bid_link(user_email_token.id, bid_id) if needed_types.include? email_token_subj_id
11
+
12
+ user_email_token.token
13
+ end
14
+
15
+ # создадим связку с Предложением, если токен генерится для ссылки на лодку в письме о новом Предложении, отправляемого Клиенту
16
+ def self.create_bid_link(user_email_token_id, bid_id)
17
+ return unless bid_id
18
+
19
+ opts = {
20
+ token_id: user_email_token_id,
21
+ bid_id: bid_id
22
+ }
23
+ sql = 'INSERT IGNORE INTO user_email_tokens_bids(token_id, bid_id) VALUES(%{token_id}, %{bid_id})' % opts
24
+ ActiveRecord::Base.connection.execute(sql)
25
+ end
26
+
27
+ # для таких типов генерим связку
28
+ def self.needed_types
29
+ [::Dicts::EmailTokenSubj::TO_CLIENT_NEW_BID.id]
30
+ end
31
+
32
+ # в базе могут лежать такие связки
33
+ def self.db_types
34
+ [::Dicts::EmailTokenSubj::TO_CLIENT_NEW_BID.id, ::Dicts::EmailTokenSubj::TO_CLIENT_NEW_BID_BOAT.id]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ module TokenGenerator
2
+ module_function
3
+
4
+ def generate_token
5
+ Digest::SHA2.hexdigest(Time.now.to_f.to_s + SecureRandom.urlsafe_base64(32))
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module C80Shared
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_shared
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-20 00:00:00.000000000 Z
11
+ date: 2018-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,8 @@ files:
66
66
  - app/serializers/lib/boats/dimensions.rb
67
67
  - app/serializers/lib/boats/rent_price_per_season.rb
68
68
  - app/serializers/lib/boats/sale_price.rb
69
+ - app/services/users/find_or_generate_email_token_service.rb
70
+ - app/services/users/generate_email_token_service.rb
69
71
  - bin/console
70
72
  - bin/rails
71
73
  - bin/setup
@@ -79,6 +81,7 @@ files:
79
81
  - lib/c80_shared/engine.rb
80
82
  - lib/c80_shared/geo/distance.rb
81
83
  - lib/c80_shared/middleware/images_proxy.rb
84
+ - lib/c80_shared/token_generator.rb
82
85
  - lib/c80_shared/version.rb
83
86
  homepage: http://google.com
84
87
  licenses:
@@ -100,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
103
  version: '0'
101
104
  requirements: []
102
105
  rubyforge_project:
103
- rubygems_version: 2.7.3
106
+ rubygems_version: 2.5.2.3
104
107
  signing_key:
105
108
  specification_version: 4
106
109
  summary: Write a short summary, because RubyGems requires one.