c80_shared 0.1.8 → 0.1.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
- 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.