cash_register 0.0.0 → 0.0.1

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
2
  SHA1:
3
- metadata.gz: aaf9247d87bd9455e6e92ae7a8fb79b91f5868d3
4
- data.tar.gz: edca00208186cb3f1d160ccf5bd5ee59b1250954
3
+ metadata.gz: 9903c93d23b99d9e29386368753bec17026c5956
4
+ data.tar.gz: 04a4bedb120c2eb8f2575c7e528dc37ffb732412
5
5
  SHA512:
6
- metadata.gz: 6760f9046b9a8412d2081c2df5dbb6f57a1863b6033eddb716e818863fd14e5f2d11b3d8e3cd5a58eac88503013eba4b532343435a6c516f70c26c285b33a987
7
- data.tar.gz: a80ccd0fe78b513e3aa6fa5062b3660e0b77eaa7583166311fdcfe39ff06d9ba292c508aa855003aa193002973e3e788cd12ee2b8119ede3ca85db63e28ff70a
6
+ metadata.gz: 4e2e8f0cee10be2c4eed68f3524b55926d70fed5999ce007934a355d0955055fd7702ce3e3b45919c059ee8a6edaf45098d9cd19283582f6332e6981e284848a
7
+ data.tar.gz: 3b29e11e52b9ad3c181eff69e19d1ec17d86175a6bfc9bfb8b8dc829bc719db4fbf1c1c5fdb2bf42350c03fb72ded45f1235e50cc04e8fac24bda1ba5c624959
data/lib/cash_register.rb CHANGED
@@ -1,2 +1,131 @@
1
+ # encoding: UTF-8
2
+ require 'json'
1
3
  class CashRegister
4
+ @input_array = [
5
+ 'ITEM000001',
6
+ 'ITEM000001',
7
+ 'ITEM000001',
8
+ 'ITEM000001',
9
+ 'ITEM000001',
10
+ 'ITEM000003-2',
11
+ 'ITEM000005',
12
+ 'ITEM000005',
13
+ 'ITEM000005'
14
+ ]
15
+ SHOP_NAME = '没钱赚商店'
16
+
17
+ #价格单位为百分之一分
18
+ DEAL_INFOS = {
19
+ 'ITEM000001': {
20
+ name: '可口可乐',
21
+ price: 30000,
22
+ unit: '瓶'
23
+ },
24
+ 'ITEM000002': {
25
+ name: '羽毛球',
26
+ price: 10000,
27
+ unit: '个'
28
+ },
29
+ 'ITEM000003': {
30
+ name: '苹果',
31
+ price: 55000,
32
+ unit: '斤'
33
+ },
34
+ 'ITEM000004': {
35
+ name: '牛奶',
36
+ price: 50000,
37
+ unit: '瓶'
38
+ },
39
+ 'ITEM000005': {
40
+ name: '包子',
41
+ price: 20000,
42
+ unit: '个'
43
+ }
44
+ }
45
+ #普通商品
46
+ DEAL_NORMAL = 0
47
+ #买二赠一商品
48
+ DEAL_TWO_FOR_ONE = 1
49
+ #打折商品
50
+ DEAL_DISCOUNT = 2
51
+
52
+ ON_SALE = {
53
+ TWO_FOR_ONE: [
54
+ 'ITEM000001',
55
+ 'ITEM000002'
56
+ ],
57
+ DISCOUNT: [
58
+ 'ITEM000002',
59
+ 'ITEM000003'
60
+ ]
61
+ }
62
+
63
+ class << self
64
+ #***<没钱赚商店>购物清单***
65
+ #名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元)
66
+ #名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元)
67
+ #名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)
68
+ #----------------------
69
+ #买二赠一商品:
70
+ #名称:可口可乐,数量:1瓶
71
+ #名称:羽毛球,数量:1个
72
+ #----------------------
73
+ #总计:21.00(元)
74
+ #节省:4.00(元)
75
+ #**********************
76
+ def output_bill
77
+ data_to_print = calculate(@input_array)
78
+ p data_to_print
79
+ end
80
+
81
+
82
+ def calculate(deals = [])
83
+ out_data = []
84
+ deals = deals.inject({}) do |mem, deal|
85
+ deal_id, deal_count = deal.split('-')
86
+ if mem[deal_id].nil?
87
+ mem[deal_id] = 0
88
+ end
89
+ if deal_count.nil?
90
+ mem[deal_id] += 1
91
+ else
92
+ mem[deal_id] += deal_count.to_i
93
+ end
94
+ mem
95
+ end
96
+ deals.each do |deal, count|
97
+ deal_type = get_deal_type(deal)
98
+ p deal_type
99
+ out_data << calculate_item(deal, count, deal_type)
100
+ end
101
+ out_data
102
+ end
103
+
104
+ def calculate_item(deal_id = '', count = 0, deal_type = 0)
105
+ result = {}
106
+ deal_info = DEAL_INFOS[deal_id.to_sym]
107
+ case deal_type
108
+ when DEAL_TWO_FOR_ONE
109
+ result[:free_num] = count/2
110
+ result[:billing] = (count - count/2)*deal_info[:price]
111
+ when DEAL_DISCOUNT
112
+ result[:saving] = (count*deal_info[:price]*0.05).to_i
113
+ result[:billing] = count*deal_info[:price] - result[:saving]
114
+ else
115
+ result[:billing] = count*deal_info[:price]
116
+ end
117
+ result.merge!(deal_info)
118
+ result
119
+ end
120
+
121
+ def get_deal_type(deal = '')
122
+ if ON_SALE[:TWO_FOR_ONE].include?(deal)
123
+ DEAL_TWO_FOR_ONE
124
+ elsif ON_SALE[:DISCOUNT].include?(deal)
125
+ DEAL_DISCOUNT
126
+ else
127
+ DEAL_NORMAL
128
+ end
129
+ end
130
+ end
2
131
  end
@@ -0,0 +1,14 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+ Dir["#{File.dirname(__FILE__)}/../lib/*.rb"].sort.each { |f| require f }
6
+
7
+ RSpec.describe CashRegister do
8
+ it "sums the price" do
9
+
10
+ bill = CashRegister.output_bill
11
+
12
+ expect(bill.length).to eq(3)
13
+ end
14
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cash_register
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clark King
@@ -31,6 +31,7 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - lib/cash_register.rb
34
+ - spec/spec_helper.rb
34
35
  homepage: https://github.com/wskongdesheng/homework-kongdesheng
35
36
  licenses:
36
37
  - MIT
@@ -55,4 +56,5 @@ rubygems_version: 2.4.5.1
55
56
  signing_key:
56
57
  specification_version: 4
57
58
  summary: cash register
58
- test_files: []
59
+ test_files:
60
+ - spec/spec_helper.rb