ecommerceshopppingcartgem 0.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 30e84a00966dba66a4838bbff12a1b6a0168557c923ce6e97e80849e43be9a5f
4
+ data.tar.gz: b9b88cd2f1e107fb748ac21ee3791499b07d0b4e468b5a3adc52fdbdc22fecfc
5
+ SHA512:
6
+ metadata.gz: b3196ee2a941137111c8c789978169425c9704cfbf7bf686fd738e4b6071d5674c783af3207cd98fd904988df52e4f3ca9b82996b997417c2ed3053c089c2b94
7
+ data.tar.gz: 219bc9eb71c0a60c345e37ff6a2f1105f5e181b22d9024113ba25dcb866226631d6436d6364d678bd62c96af61ef2a912bea771530926a43a85a396721b95922
@@ -0,0 +1,62 @@
1
+ class ShoppingCart
2
+
3
+ delegate :sub_total, :total, to: :order
4
+
5
+ def initialize(token, cart_user)
6
+ @token = token
7
+ @cart_user = cart_user
8
+ end
9
+
10
+ def order
11
+ @order ||= Order.find_or_create_by(token: @token, status: 'cart') do |order|
12
+ order.sub_total = 0
13
+ order.total = 0
14
+ end
15
+ end
16
+
17
+ def items_count
18
+ order.items.sum(:quantity)
19
+ end
20
+
21
+ def add_item(product_id:, quantity: 1)
22
+ product = Product.find(product_id)
23
+
24
+ order_item = order.items.find_or_initialize_by(
25
+ product_id:
26
+ )
27
+
28
+ order_item.price = product.net_price
29
+ order_item.quantity = quantity
30
+
31
+ ActiveRecord::Base.transaction do
32
+ order_item.save
33
+ update_sub_total!
34
+ end
35
+ end
36
+
37
+ def remove_item(id:)
38
+ ActiveRecord::Base.transaction do
39
+ order.items.destroy(id)
40
+ update_sub_total!
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def update_sub_total!
47
+ order.sub_total = order.items.sum('quantity * price')
48
+ order.save
49
+ update_total!
50
+ end
51
+
52
+ def update_total!
53
+ order.total = (order.sub_total * 0.23) + order.sub_total
54
+ order.save
55
+ update_user!
56
+ end
57
+
58
+ def update_user!
59
+ order.user_id = @cart_user
60
+ order.save
61
+ end
62
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ecommerceshopppingcartgem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - rubyl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-01-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Shopping cart processor
14
+ email: x19128355@student.ncirl.ie
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/ecommerceshopppingcartgem.rb
20
+ homepage: http://rubygems.org/gems/ecommerceshopppingcartgem
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.3.7
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: Gem used to process order checkouts
43
+ test_files: []