centaman 2.0.0 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf84f21a04040cf1685d623079ad1ee017600517cf8287fb2fac2dd977beee52
4
- data.tar.gz: 9989e292425ac4ba79bbc4965fb385abdaf1cb2abf408fc5de73d0871be477c8
3
+ metadata.gz: b086304bfe0d8678a187a7d43058fe00087fef991beb64217bb2ae125beccc56
4
+ data.tar.gz: a59a1b24532da83778e575e177991f9aefd1e7ceaef09cdc633cdc8ba95100f2
5
5
  SHA512:
6
- metadata.gz: dc15a598fe70b2f091bc7be34f8af9df008bb0fe62ff37673ab80531f21c45c1e6f7e926dd99952062417b8381c7335bdc8205756483743637365f263959579d
7
- data.tar.gz: 33d16db50b65257756868f95b35fa0da0ef11a521b5e8d340620f8c695b55f6c8160750693017876f2bc52fae73c132528fa9ca9903d5d5ad5b7f881cf135011
6
+ metadata.gz: 8caa51a4d4a4504b243d0a70144090afeed1eb7bbbca210784e9e33987af853a4b58f19d265e8ba1df50cdf938d3748cb8ec9e8d917a8d06281932ebb1406ae5
7
+ data.tar.gz: 9c4b8cfeb6feaffd1b0901b74dc6b20ac8e9209ef07c0d6d8ce7013403797467e892243fe4109cff3f4f56954ed20fb49e75a000b1678727415b1acce0273524
@@ -7,20 +7,24 @@ require 'centaman/json_wrapper'
7
7
  require 'centaman/object'
8
8
  require 'centaman/filter'
9
9
  require 'centaman/attribute'
10
+ require 'centaman/service/add_on'
10
11
  require 'centaman/service/authenticate_member'
11
12
  require 'centaman/service/booking_time'
12
13
  require 'centaman/service/booking_type'
13
14
  require 'centaman/service/capacity'
14
15
  require 'centaman/service/coupon_check'
15
16
  require 'centaman/service/create_customer'
17
+ require 'centaman/service/create_primary_member'
18
+ require 'centaman/service/create_secondary_member'
16
19
  require 'centaman/service/extra'
17
20
  require 'centaman/service/gift_ticket'
18
21
  require 'centaman/service/general_admission_ticket'
19
22
  require 'centaman/service/hold_ticket'
20
23
  require 'centaman/service/membership_type'
21
24
  require 'centaman/service/member'
22
- require 'centaman/service/add_on'
25
+ require 'centaman/service/purchase_membership'
23
26
  require 'centaman/service/purchase_ticket'
27
+ require 'centaman/service/update_member'
24
28
  require 'centaman/service/ticket_type'
25
29
  require 'centaman/object/booking_time'
26
30
  require 'centaman/object/booking_type'
@@ -1,11 +1,60 @@
1
1
  module Centaman
2
2
  class Object::Member < Centaman::Object
3
3
  # rubocop:disable Metrics/MethodLength
4
- attr_reader :id, :package_id
4
+ attr_reader :id, :package_id, :address, :memberships, :phone
5
5
 
6
6
  def define_variables(args)
7
7
  super
8
- @id = member_code # TODO confirm member code is the centaman defined ID
8
+ @id = member_code
9
+ @address = set_address
10
+ @phone = @address ? @address[:phone] : nil
11
+ @memberships = set_memberships
12
+ end
13
+
14
+ def full_name
15
+ [first_name, last_name].join(' ')
16
+ end
17
+
18
+ def set_address
19
+ return unless home_address
20
+ {
21
+ street_address: home_address['Street1'],
22
+ street_address_two: home_address['Street2'],
23
+ suburb: home_address['Suburb'],
24
+ state: home_address['State'],
25
+ zip: home_address['Postcode'],
26
+ city: home_address['City'],
27
+ country: home_address['Country'],
28
+ phone: home_address['HomePhone'],
29
+ work_phone: home_address['WorkPhone'],
30
+ mobile_phone: home_address['MobilePhone']
31
+ }
32
+ end
33
+
34
+ def set_memberships
35
+ return [] unless membership_list && membership_list.any?
36
+ membership_list.map { |m| set_membership(m) }
37
+ end
38
+
39
+ def set_membership(membership)
40
+ {
41
+ linkfield: membership['Linkfield'],
42
+ type_name: membership['TypeName'],
43
+ cancelled: membership['Cancelled'],
44
+ activated: membership['Activated'],
45
+ unique_package_id: membership['UniquePackageId'],
46
+ member_code: membership['MemberCode'],
47
+ type_code: membership['TypeCode'],
48
+ cost: membership['Cost'],
49
+ tax: membership['Tax'],
50
+ paid: membership['Paid'],
51
+ join_date: membership['JoinDate'],
52
+ expiry_date: membership['ExpiryDate'],
53
+ is_gift: membership['IsGift'],
54
+ purchaser_renewal: membership['PurchaserRenewal'],
55
+ package_id: membership['PackageID'],
56
+ payment_gateway_reference: membership['PaymentGatewayReference']
57
+ }
9
58
  end
10
59
 
11
60
  def json
@@ -15,6 +64,7 @@ module Centaman
15
64
  member_number: member_number,
16
65
  first_name: first_name,
17
66
  last_name: last_name,
67
+ full_name: full_name,
18
68
  title: title,
19
69
  email: email,
20
70
  gender: gender,
@@ -25,6 +75,7 @@ module Centaman
25
75
  gift_purchaser_id: gift_purchaser_id,
26
76
  concession_card_number: concession_card_number,
27
77
  incomplete: incomplete,
78
+ member_photo: member_photo,
28
79
  memberships: memberships
29
80
  }
30
81
  end
@@ -43,7 +94,7 @@ module Centaman
43
94
  ),
44
95
  Centaman::Attribute.new(
45
96
  centaman_key: 'Memberships',
46
- app_key: :memberships,
97
+ app_key: :membership_list,
47
98
  type: :string
48
99
  ),
49
100
  Centaman::Attribute.new(
@@ -66,6 +117,11 @@ module Centaman
66
117
  app_key: :email,
67
118
  type: :string
68
119
  ),
120
+ Centaman::Attribute.new(
121
+ centaman_key: 'Password',
122
+ app_key: :password,
123
+ type: :string
124
+ ),
69
125
  Centaman::Attribute.new(
70
126
  centaman_key: 'Gender',
71
127
  app_key: :gender,
@@ -78,7 +134,7 @@ module Centaman
78
134
  ),
79
135
  Centaman::Attribute.new(
80
136
  centaman_key: 'HomeAddress',
81
- app_key: :address,
137
+ app_key: :home_address,
82
138
  type: :string
83
139
  ),
84
140
  Centaman::Attribute.new(
@@ -99,12 +155,17 @@ module Centaman
99
155
  Centaman::Attribute.new(
100
156
  centaman_key: 'ConcessionCardNumber',
101
157
  app_key: :concession_card_number,
102
- type: :integer # TODO confirm this is integer and what it's used for
158
+ type: :integer
103
159
  ),
104
160
  Centaman::Attribute.new(
105
161
  centaman_key: 'Incomplete',
106
162
  app_key: :incomplete,
107
163
  type: :boolean
164
+ ),
165
+ Centaman::Attribute.new(
166
+ centaman_key: 'MemberPhoto',
167
+ app_key: :member_photo,
168
+ type: :string
108
169
  )
109
170
  ]
110
171
  end
@@ -44,6 +44,16 @@ module Centaman
44
44
  end
45
45
  end
46
46
 
47
+ def put
48
+ @put_request ||= begin
49
+ req = Proc.new do
50
+ self.class.put(endpoint, payload(:put))
51
+ end
52
+ resp = wrap_request_in_case_of_timeout(req)
53
+ self.respond_to?(:build_object) ? after_post(resp) : resp
54
+ end
55
+ end
56
+
47
57
  def after_post(response)
48
58
  build_object(response)
49
59
  end
@@ -38,7 +38,10 @@ module Centaman
38
38
  private
39
39
 
40
40
  def auth_error(resp)
41
- { error: resp.parsed_response || 'Authentication Failed. Invalid login credentials.' }
41
+ p "error from #{self.class.name}"
42
+
43
+ message = { error: resp.parsed_response || 'Authentication Failed. Invalid login credentials.' }
44
+ raise message[:error]
42
45
  end
43
46
  end
44
47
  end
@@ -0,0 +1,49 @@
1
+ require 'securerandom'
2
+
3
+ module Centaman
4
+ class Service::CreatePrimaryMember < Centaman::Service
5
+ include Centaman::JsonWrapper
6
+
7
+ attr_reader :first_name, :last_name, :email, :password
8
+
9
+ def after_init(args)
10
+ @first_name = args[:first_name]
11
+ @last_name = args[:last_name]
12
+ @email = args[:email]
13
+ @password = args[:password] || SecureRandom.hex
14
+ end
15
+
16
+ def endpoint
17
+ '/member_services/Member'
18
+ end
19
+
20
+ def object_class
21
+ Centaman::Object::Member
22
+ end
23
+
24
+ def build_object(resp)
25
+ return build_objects(resp) if resp.respond_to?(:map)
26
+ return create_error(resp) unless resp.respond_to?(:merge)
27
+ @build_object ||= object_class.new(resp.merge(additional_hash_to_serialize_after_response))
28
+ end
29
+
30
+ def options_hash
31
+ [
32
+ {
33
+ 'FirstName' => first_name,
34
+ 'LastName' => last_name,
35
+ 'Email' => email,
36
+ 'Password' => password,
37
+ 'IsPrimary' => true
38
+ }
39
+ ].to_json
40
+ end
41
+
42
+ private
43
+
44
+ def create_error(resp)
45
+ message = { error: resp.parsed_response || 'Unable to create primary member record.' }
46
+ raise message[:error]
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,51 @@
1
+ require 'securerandom'
2
+
3
+ module Centaman
4
+ class Service::CreateSecondaryMember < Centaman::Service
5
+ include Centaman::JsonWrapper
6
+
7
+ attr_reader :primary_member_id, :secondary_members
8
+
9
+ def after_init(args)
10
+ @primary_member_id = args.fetch(:primary_member_id, nil)
11
+ @secondary_members = args.fetch(:secondary_members, [])
12
+ end
13
+
14
+ def endpoint
15
+ '/member_services/Member'
16
+ end
17
+
18
+ def object_class
19
+ Centaman::Object::Member
20
+ end
21
+
22
+ def build_object(resp)
23
+ return build_objects(resp) if resp.respond_to?(:map)
24
+
25
+ return create_error(resp) unless resp.respond_to?(:merge)
26
+ @build_object ||= object_class.new(resp.merge(additional_hash_to_serialize_after_response))
27
+ end
28
+
29
+ def options_hash
30
+ request_body = secondary_members.map { |m| build_member(m) }
31
+ request_body.to_json
32
+ end
33
+
34
+ private
35
+
36
+ def build_member(member)
37
+ {
38
+ 'FirstName' => member.first_name,
39
+ 'LastName' => member.last_name,
40
+ 'Title' => member.title,
41
+ 'IsPrimary' => false,
42
+ 'PrimaryMemberId' => primary_member_id
43
+ }
44
+ end
45
+
46
+ def create_error(resp)
47
+ message = { error: resp.parsed_response || 'Unable to create the member record(s).' }
48
+ raise message[:error]
49
+ end
50
+ end
51
+ end
@@ -25,13 +25,27 @@ module Centaman
25
25
  @build_object ||= object_class.new(resp.merge(additional_hash_to_serialize_after_response))
26
26
  end
27
27
 
28
+ # given primary member id, returns array with primary and associated secondary member records
28
29
  def self.find(id)
29
- obj = new(member_code: id)
30
- obj.objects.detect { |obj| obj.id == id }
30
+ members = self.find_members_by_id(id)
31
+ return unless members && members.any?
32
+ return members if members.detect { |obj| obj.is_primary }
33
+ find_members_by_id(members[0].primary_member_id)
34
+ end
35
+
36
+ # returns individual member object matching the given id
37
+ def self.find_member(id)
38
+ member_array = find(id) || []
39
+ member_array.detect { |obj| obj.id == id }
31
40
  end
32
41
 
33
42
  private
34
43
 
44
+ def self.find_members_by_id(id)
45
+ obj = new(member_code: id)
46
+ obj.objects
47
+ end
48
+
35
49
  def member_endpoint(attr_key)
36
50
  attr_val = self.send(attr_key)
37
51
  endpoint_url(attr_key, attr_val)
@@ -53,7 +67,7 @@ module Centaman
53
67
  raise "missing required arguments. #{self.class} must be instantiated with a :member_code or :email" if args_missing
54
68
  end
55
69
 
56
- def not_found(resp)
70
+ def not_found(resp={})
57
71
  { error: resp.parsed_response || 'Member not found' }
58
72
  end
59
73
  end
@@ -0,0 +1,48 @@
1
+ module Centaman
2
+ class Service::PurchaseMembership < Centaman::Service
3
+ attr_reader :payment_reference, :order_info, :checkout_service,
4
+ :members, :memberships, :add_ons, :membership_type_id,
5
+ :is_new, :purchaser_renewal
6
+
7
+ def after_init(args)
8
+ @payment_reference = args[:payment_reference]
9
+ @is_new = args.fetch(:is_new, true)
10
+ @order_info = args[:order_info]
11
+ @purchaser_renewal = order_info.is_renewal
12
+ @checkout_service = args[:checkout_service]
13
+ @membership_type_id = @order_info.membership_type_id
14
+ @members = @order_info.members
15
+ @add_ons = @checkout_service.add_ons
16
+ @memberships = []
17
+ build_membership_request
18
+ end
19
+
20
+ def endpoint
21
+ "/member_services/Membership?isNew=#{is_new}"
22
+ end
23
+
24
+ def membership_payload(member_id, add_on)
25
+ {
26
+ 'MemberCode': member_id,
27
+ 'TypeCode': add_on.id,
28
+ 'Cost': add_on.cost,
29
+ 'Tax': 0,
30
+ 'Paid': add_on.cost,
31
+ 'PackageID': membership_type_id,
32
+ 'PurchaserRenewal': purchaser_renewal
33
+ }
34
+ end
35
+
36
+ def build_membership_request
37
+ members.map do |m|
38
+ order_info.add_ons_for_member(add_ons, m.member_type).each do |ao|
39
+ @memberships << membership_payload(m.id, ao)
40
+ end
41
+ end
42
+ end
43
+
44
+ def options_hash
45
+ memberships.to_json
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,74 @@
1
+ require 'securerandom'
2
+
3
+ module Centaman
4
+ class Service::UpdateMember < Centaman::Service
5
+ include Centaman::JsonWrapper
6
+
7
+ attr_reader :id, :first_name, :last_name, :address,
8
+ :gender, :phone, :email, :password, :is_primary
9
+
10
+ def after_init(args)
11
+ @id = args[:id].try(:to_i)
12
+ @first_name = args[:first_name]
13
+ @last_name = args[:last_name]
14
+ @address = args[:address].try(:symbolize_keys)
15
+ @gender = args[:gender]
16
+ @phone = args[:phone]
17
+ @email = args[:email]
18
+ @password = args[:password]
19
+ @is_primary = args[:is_primary]
20
+ end
21
+
22
+ def endpoint
23
+ "/member_services/Member/#{id}"
24
+ end
25
+
26
+ def object_class
27
+ Centaman::Object::Member
28
+ end
29
+
30
+ def build_object(resp)
31
+ return update_error(resp) unless resp.respond_to?(:merge)
32
+ @build_object ||= object_class.new(resp.merge(additional_hash_to_serialize_after_response))
33
+ end
34
+
35
+ def options_hash_no_json
36
+ {
37
+ 'FirstName' => first_name,
38
+ 'LastName' => last_name,
39
+ 'homeAddress' => home_address,
40
+ 'Gender' => gender,
41
+ 'Email' => email,
42
+ 'Password' => password,
43
+ 'IsPrimary' => is_primary
44
+ }
45
+ end
46
+
47
+ def options_hash
48
+ options_hash_no_json.compact.to_json
49
+ end
50
+
51
+ private
52
+
53
+ def home_address
54
+ return if !address
55
+ {
56
+ 'street1': address[:street_address],
57
+ 'street2': '',
58
+ 'suburb': address[:city],
59
+ 'city': address[:city],
60
+ 'state': address[:state],
61
+ 'postcode': address[:zip],
62
+ 'country': address[:country],
63
+ 'homePhone': phone,
64
+ 'workPhone': '',
65
+ 'mobilePhone': ''
66
+ }
67
+ end
68
+
69
+ def update_error(resp)
70
+ message = { error: resp.parsed_response || 'Unable to update member record.' }
71
+ raise message[:error]
72
+ end
73
+ end
74
+ end
@@ -1,3 +1,3 @@
1
1
  module Centaman
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: centaman
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - francirp
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-02-06 00:00:00.000000000 Z
12
+ date: 2018-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -114,14 +114,18 @@ files:
114
114
  - lib/centaman/service/capacity.rb
115
115
  - lib/centaman/service/coupon_check.rb
116
116
  - lib/centaman/service/create_customer.rb
117
+ - lib/centaman/service/create_primary_member.rb
118
+ - lib/centaman/service/create_secondary_member.rb
117
119
  - lib/centaman/service/extra.rb
118
120
  - lib/centaman/service/general_admission_ticket.rb
119
121
  - lib/centaman/service/gift_ticket.rb
120
122
  - lib/centaman/service/hold_ticket.rb
121
123
  - lib/centaman/service/member.rb
122
124
  - lib/centaman/service/membership_type.rb
125
+ - lib/centaman/service/purchase_membership.rb
123
126
  - lib/centaman/service/purchase_ticket.rb
124
127
  - lib/centaman/service/ticket_type.rb
128
+ - lib/centaman/service/update_member.rb
125
129
  - lib/centaman/version.rb
126
130
  - lib/centaman/wrapper.rb
127
131
  homepage: https://github.com/LaunchPadLab/centaman