Class: AboutYou::SDK::Model::Basket

Inherits:
Object
  • Object
show all
Defined in:
lib/AboutYou/Model/basket.rb

Overview

This Class represents a basket model

author

Collins GmbH & Co KG

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#deleted_itemsObject

Returns the value of attribute deleted_items.



20
21
22
# File 'lib/AboutYou/Model/basket.rb', line 20

def deleted_items
  @deleted_items
end

#errorsObject

errors of the basket



13
14
15
# File 'lib/AboutYou/Model/basket.rb', line 13

def errors
  @errors
end

#itemsObject

array of items in the basket



11
12
13
# File 'lib/AboutYou/Model/basket.rb', line 11

def items
  @items
end

#productsObject

Returns the value of attribute products.



15
16
17
# File 'lib/AboutYou/Model/basket.rb', line 15

def products
  @products
end

#total_amountObject

Returns the value of attribute total_amount.



19
20
21
# File 'lib/AboutYou/Model/basket.rb', line 19

def total_amount
  @total_amount
end

#total_netObject

Returns the value of attribute total_net.



17
18
19
# File 'lib/AboutYou/Model/basket.rb', line 17

def total_net
  @total_net
end

#total_priceObject

Returns the value of attribute total_price.



16
17
18
# File 'lib/AboutYou/Model/basket.rb', line 16

def total_price
  @total_price
end

#total_vatObject

Returns the value of attribute total_vat.



18
19
20
# File 'lib/AboutYou/Model/basket.rb', line 18

def total_vat
  @total_vat
end

#unique_variant_countObject

Returns the value of attribute unique_variant_count.



14
15
16
# File 'lib/AboutYou/Model/basket.rb', line 14

def unique_variant_count
  @unique_variant_count
end

#updated_itemsObject

Returns the value of attribute updated_items.



21
22
23
# File 'lib/AboutYou/Model/basket.rb', line 21

def updated_items
  @updated_items
end

Class Method Details

.create_from_json(json_object, factory) ⇒ Object

Returns Basket.

Parameters:

  • object

    $json_object

  • ModelFactoryInterface

    $factory

Returns:

  • Basket



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/AboutYou/Model/basket.rb', line 29

def self.create_from_json(json_object, factory)
  basket = new
  basket.errors = {}
  basket.deleted_items = {}
  basket.updated_items = {}
  basket.total_price  = json_object['total_price']
  basket.total_net    = json_object['total_net']
  basket.total_vat    = json_object['total_vat']
  basket.parse_items(json_object, factory)
  basket.total_amount = items.count

  basket
end

Instance Method Details

#check_additional_data(add_data = nil, _img_url_required = false) ⇒ Object



225
226
227
228
229
230
231
# File 'lib/AboutYou/Model/basket.rb', line 225

def check_additional_data(add_data = nil, _img_url_required = false)
  fail 'InvalidArgumentException! description is required
    in additional data' if add_data && !add_data.key?('description')
  fail 'InvalidArgumentException! internal_infos must be an array' if
  add_data.key?('internal_infos') &&
  !add_data['internal_infos'].is_a?(Array)
end

#collected_itemsObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/AboutYou/Model/basket.rb', line 59

def collected_items
  items = self.items
  items_merged = {}
  items.each do |item|
    key = item.unique_key
    if items_merged.key?(key)
      amount = items_merged[key]['amount'] + 1
      items_merged[key] = {
        'item' => item,
        'price' => item.total_price * amount,
        'amount' => amount
      }
    else
      items_merged[key] = {
        'item' => item,
        'price' => item.total_price,
        'amount' => 1
      }
    end
  end

  items_merged
end

#delete_all_itemsObject

Returns $this.

Returns:

  • $this



157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/AboutYou/Model/basket.rb', line 157

def delete_all_items
  items = self.items

  return self unless items.empty?
  ids = []
  items.each do |item|
    ids.push = item.id
  end
  delete_items(ids)

  self
end

#delete_item(item_id) ⇒ Object

Returns $this.

Parameters:

  • string

    $itemId

Returns:

  • $this



135
136
137
138
139
# File 'lib/AboutYou/Model/basket.rb', line 135

def delete_item(item_id)
  deleted_items[item_id] = item_id

  self
end

#delete_items(item_ids) ⇒ Object

Returns $this.

Parameters:

  • string[]

    $itemIds

Returns:

  • $this



146
147
148
149
150
151
152
# File 'lib/AboutYou/Model/basket.rb', line 146

def delete_items(item_ids)
  item_ids.each do |item_id|
    deleted_items[item_id] = item_id
  end

  self
end

#errors?Boolean

Returns boolean.

Returns:

  • (Boolean)

    boolean



46
47
48
# File 'lib/AboutYou/Model/basket.rb', line 46

def errors?
  errors.count > 0
end

#item(item_id) ⇒ Object

Returns BasketItem|BasketSet|null.

Parameters:

  • $itemId

Returns:

  • BasketItem|BasketSet|null



55
56
57
# File 'lib/AboutYou/Model/basket.rb', line 55

def item(item_id)
  return items[item_id] if items.key?(item_id)
end

#order_lines_arrayObject

build order line for update query

Returns:

  • array



87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/AboutYou/Model/basket.rb', line 87

def order_lines_array
  order_lines = []

  deleted_items.uniq.each do |itemId|
    order_lines.push('delete' => itemId)
  end

  updatedItems.each do |item|
    order_lines.push(item)
  end

  order_lines
end

#parse_items(json_object, factory) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/AboutYou/Model/basket.rb', line 101

def parse_items(json_object, factory)
  products = {}

  json_object['products'].each do |key, json_product|
    products[key] = factory.create_product(json_product)
  end if json_object['products']

  self.products = products
  vids = []

  json_object['order_lines'].each do |key, json_item|
    if json_item['set_items']
      item = factory.create_basket_set(json_item, products)
    else
      vids.push(json_item['variantId'])
      item = factory.create_basket_item(json_item, products)
    end

    if item.errors?
      errors[key] = item
    else
      items[item.id] = item
    end
  end if json_object['order_lines']

  vids = vids.uniq
  self.uniqueVariantCount = vids.count
end

#update_item(basket_item) ⇒ Object

Returns $this.

Parameters:

  • BasketItem

    $basketItem

Returns:

  • $this



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/AboutYou/Model/basket.rb', line 175

def update_item(basket_item)
  item = {
    'id' => basket_item.id,
    'variant_id' => basket_item.variant_id,
    'app_id' => basket_item.app_id
  }
  add_data = basket_item.additional_data
  if add_data
    check_additional_data(add_data)
    item['additional_data'] = add_data
  end
  updated_items[basket_item.id] = item

  self
end

#update_item_set(basket_set) ⇒ Object

Returns $this.

Parameters:

  • BasketSet

    $basketSet

Returns:

  • $this



196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/AboutYou/Model/basket.rb', line 196

def update_item_set(basket_set)
  items = basket_set.items

  fail 'InvalidArgumentException! BasketSet
    needs at least one item' if items.empty?

  item_set = []
  items.each do |sub_item|
    item = {
      'variant_id' => sub_item.variant_id,
      'app_id' => sub_item.app_id
    }
    add_data = sub_item.additional_data
    if add_data
      check_additional_data(add_data)
      item['additional_data'] = add_data
    end
    item_set.push = item
  end

  updated_items[basket_set.id] = {
    'id' => basket_set.id,
    'additional_data' => basket_set.additional_data,
    'set_items' => item_set
  }

  self
end