Class: Wegift::Order

Inherits:
Response show all
Defined in:
lib/wegift/models/order.rb

Constant Summary collapse

PATH =
'/order-digital-card'
DELIVERY_METHODS =
{:direct => 'direct', :email => 'email'}
DELIVERY_FORMATS =
{:code => 'raw', :url => 'url-instant'}

Constants inherited from Response

Response::STATUS

Instance Attribute Summary collapse

Attributes inherited from Response

#error_code, #error_details, #error_string, #status

Instance Method Summary collapse

Methods inherited from Response

#is_successful?

Constructor Details

#initialize(params = {}) ⇒ Order

Returns a new instance of Order.



17
18
19
20
21
22
# File 'lib/wegift/models/order.rb', line 17

def initialize(params = {})
  super(params)
  # default/fallback: 'direct'/'raw'
  @delivery_method = params[:delivery_method] || DELIVERY_METHODS[:direct]
  @delivery_format = params[:delivery_format] || DELIVERY_FORMATS[:code]
end

Instance Attribute Details

#amountObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def amount
  @amount
end

#codeObject

response/success



15
16
17
# File 'lib/wegift/models/order.rb', line 15

def code
  @code
end

#currency_codeObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def currency_code
  @currency_code
end

#delivery_emailObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def delivery_email
  @delivery_email
end

#delivery_formatObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def delivery_format
  @delivery_format
end

#delivery_methodObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def delivery_method
  @delivery_method
end

#expiry_dateObject

response/success



15
16
17
# File 'lib/wegift/models/order.rb', line 15

def expiry_date
  @expiry_date
end

#external_refObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def external_ref
  @external_ref
end

#notification_emailObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def notification_email
  @notification_email
end

#pinObject

response/success



15
16
17
# File 'lib/wegift/models/order.rb', line 15

def pin
  @pin
end

#product_codeObject

request/payload



11
12
13
# File 'lib/wegift/models/order.rb', line 11

def product_code
  @product_code
end

Instance Method Details

#parse(data) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/wegift/models/order.rb', line 44

def parse(data)
  super(data)

  # nested status/error object
  # assuming root "status" is always "SUCCESS" if "e_code" is set
  #{
  #  "e_code": {
  #    "error_code": "EC001",
  #    "error_string": "Error retrieving E-Code from data processor",
  #    "status": "ERROR"
  #   },
  #  "error_code": null,
  #  "error_details": null,
  #  "error_string": null,
  #  "order_id": 18,
  #  "status": "SUCCESS"
  #}

  # override root "status" if set
  if data['e_code'] && data['e_code']['status'].eql?(STATUS[:error])
    @status = data['e_code']['status']
    @error_code = data['e_code']['error_code'] unless data['e_code']['error_code'].blank?
    @error_string = data['e_code']['error_string'] unless data['e_code']['error_string'].blank?
    @error_details = data['e_code']['error_details'] unless data['e_code']['error_details'].blank?
  end

  # set valid data
  if data['e_code'] && data['e_code']['status'].eql?(STATUS[:success])
    @code = data['e_code']['code']
    @expiry_date = data['e_code']['expiry_date']
    @pin = data['e_code']['pin']
  end
end

#payloadObject



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/wegift/models/order.rb', line 24

def payload
  {
      :product_code => @product_code,
      :currency_code => @currency_code,
      :amount => @amount,
      :delivery_method => @delivery_method,
      :delivery_format => delivery_format,
      :notification_email => @notification_email,
      :delivery_email => @delivery_email,
      :external_ref => @external_ref,
  }
end

#post(ctx) ⇒ Object

Order Digital Card POST /api/b2b-sync/v1/order-digital-card



39
40
41
42
# File 'lib/wegift/models/order.rb', line 39

def post(ctx)
  response = ctx.request(:post, PATH, self.payload)
  self.parse(JSON.parse(response.body))
end