centaman 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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