rooftop-spektrix_sync 0.0.2.15 → 0.0.3
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 +4 -4
- data/lib/rooftop/spektrix_sync/lib/event_sync.rb +76 -19
- data/lib/rooftop/spektrix_sync/lib/instance_sync.rb +31 -6
- data/lib/rooftop/spektrix_sync/lib/price_list_sync.rb +26 -10
- data/lib/rooftop/spektrix_sync/lib/sync_task.rb +49 -32
- data/lib/rooftop/spektrix_sync/tasks/import.rake +10 -9
- data/lib/rooftop/spektrix_sync/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c6ea7f937c20f6eeaefb7b45d6bd032002f63f1
|
4
|
+
data.tar.gz: e8eac4c9b5e0be2a7292464f7b92328f6c03d25d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363820205f2eb78e34c589ea37e01b763b03c44e1f62f92cd75a42582129f4daf10d07e1a1f4ff7f17b02d1b81d46114c88d64a22f468f6ffac85865224e797d
|
7
|
+
data.tar.gz: 917bb08292a2ce12af2288c70f624a05c44ab25d0f3a2a3839d48e7c150b82afdec24e588249ee036b1562b8151a48ee390501a3ff7d24f50b7d45e6c5d4d425
|
@@ -2,6 +2,7 @@ module Rooftop
|
|
2
2
|
module SpektrixSync
|
3
3
|
class EventSync
|
4
4
|
attr_reader :spektrix_event,
|
5
|
+
:spektrix_instance_statuses,
|
5
6
|
:rooftop_event,
|
6
7
|
:rooftop_price_lists,
|
7
8
|
:logger
|
@@ -13,6 +14,9 @@ module Rooftop
|
|
13
14
|
@spektrix_event = spektrix_event
|
14
15
|
@rooftop_event = @rooftop_events.find {|e| e.meta_attributes[:spektrix_id].try(:to_i) == @spektrix_event.id.to_i}
|
15
16
|
@rooftop_price_lists = sync_task.rooftop_price_lists
|
17
|
+
@sync_task = sync_task
|
18
|
+
@logger.info("Fetching all instance statuses for event")
|
19
|
+
@spektrix_instance_statuses = Spektrix::Events::InstanceStatus.where(event_id: @spektrix_event.id, all: true).to_a
|
16
20
|
end
|
17
21
|
|
18
22
|
def sync_to_rooftop
|
@@ -20,36 +24,64 @@ module Rooftop
|
|
20
24
|
# find the event
|
21
25
|
@rooftop_event ||= Rooftop::Events::Event.new({
|
22
26
|
title: @spektrix_event.title,
|
23
|
-
content: {
|
27
|
+
content: {
|
28
|
+
basic: {
|
29
|
+
content: @sync_task.options[:import_spektrix_description] ? @spektrix_event.description : ""
|
30
|
+
}
|
31
|
+
},
|
24
32
|
meta_attributes: {},
|
25
33
|
status: nil
|
26
34
|
})
|
27
35
|
sync()
|
28
36
|
rescue => e
|
29
|
-
@logger.
|
37
|
+
@logger.fatal(e.to_s)
|
30
38
|
end
|
31
39
|
end
|
32
40
|
|
33
41
|
def sync
|
34
42
|
update_meta_attributes
|
35
43
|
update_on_sale
|
36
|
-
if @rooftop_event.persisted?
|
37
|
-
# Ensure we're not overwriting newer stuff in RT with older stuff from this sync by
|
38
|
-
# removing the title and content if this is a PUT request (i.e. it already exists in RT)
|
39
|
-
@rooftop_event.restore_title!
|
40
|
-
@rooftop_event.restore_content!
|
41
|
-
@rooftop_event.restore_slug!
|
42
|
-
@rooftop_event.restore_link!
|
43
|
-
@rooftop_event.restore_event_instance_availabilities!
|
44
|
-
end
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
sync_event_instances = true
|
46
|
+
|
47
|
+
if event_requires_sync?
|
48
|
+
@rooftop_event.meta_attributes[:spektrix_hash] = generate_spektrix_hash(@spektrix_event)
|
49
|
+
rooftop_event_title = @rooftop_event.title
|
50
|
+
|
51
|
+
new_event = !@rooftop_event.persisted?
|
52
|
+
if @rooftop_event.persisted?
|
53
|
+
# Ensure we're not overwriting newer stuff in RT with older stuff from this sync by
|
54
|
+
# removing the title and content if this is a PUT request (i.e. it already exists in RT)
|
55
|
+
@rooftop_event.restore_title!
|
56
|
+
@rooftop_event.restore_content!
|
57
|
+
@rooftop_event.restore_slug!
|
58
|
+
@rooftop_event.restore_link!
|
59
|
+
@rooftop_event.restore_event_instance_availabilities!
|
60
|
+
end
|
61
|
+
|
62
|
+
if @rooftop_event.save!
|
63
|
+
@logger.info("#{new_event ? 'Created' : 'Saved'} event: #{rooftop_event_title} #{@rooftop_event.id}")
|
64
|
+
else
|
65
|
+
sync_event_instances = false
|
66
|
+
end
|
67
|
+
else
|
68
|
+
@logger.info("Skipping event update")
|
49
69
|
end
|
70
|
+
|
71
|
+
sync_instances if sync_event_instances
|
50
72
|
end
|
51
73
|
|
52
74
|
private
|
75
|
+
def event_requires_sync?
|
76
|
+
rooftop_event_hash = @rooftop_event.meta_attributes['spektrix_hash']
|
77
|
+
|
78
|
+
@rooftop_event.id.nil? || !rooftop_event_hash || rooftop_event_hash != generate_spektrix_hash(@spektrix_event)
|
79
|
+
end
|
80
|
+
|
81
|
+
def generate_spektrix_hash(event)
|
82
|
+
Digest::MD5.hexdigest(event.attributes.to_s)
|
83
|
+
end
|
84
|
+
|
53
85
|
def update_meta_attributes
|
54
86
|
@rooftop_event.meta_attributes ||= {}
|
55
87
|
@rooftop_event.meta_attributes[:spektrix_id] = @spektrix_event.id
|
@@ -70,21 +102,46 @@ module Rooftop
|
|
70
102
|
def sync_instances
|
71
103
|
@rooftop_instances = @rooftop_event.instances.to_a
|
72
104
|
@spektrix_instances = @spektrix_event.instances.to_a
|
105
|
+
@logger.info("\tChecking #{@rooftop_instances.size} instances..")
|
106
|
+
|
107
|
+
synced_to_rooftop = [] # array of event instance id's that were updated/created on RT
|
108
|
+
|
109
|
+
# delete any RT instances that aren't included in the set of spektrix event instances
|
110
|
+
rooftop_instance_spektrix_ids = @rooftop_instances.collect{|i| i.meta_attributes[:spektrix_id]}.compact
|
111
|
+
spektrix_instance_ids = @spektrix_instances.collect(&:id)
|
112
|
+
delete_instance_ids = rooftop_instance_spektrix_ids - spektrix_instance_ids
|
113
|
+
delete_instances = @rooftop_instances.select{|i| delete_instance_ids.include?(i.meta_attributes[:spektrix_id])}
|
114
|
+
# before we can call .destroy on an instance, we need to mutate the object so it has an :event_id to hit the proper destroy method endpoint...
|
115
|
+
delete_instances.each do |instance|
|
116
|
+
@logger.info("Deleting Rooftop Instance #{instance.id}")
|
117
|
+
instance.tap{|i| i.event_id = @rooftop_event.meta_attributes[:spektrix_id]}.destroy
|
118
|
+
end
|
119
|
+
|
73
120
|
@spektrix_instances.each_with_index do |instance, i|
|
121
|
+
@logger.info("Instance #{instance.id}")
|
74
122
|
begin
|
75
123
|
tries ||= 2
|
76
124
|
instance_sync = Rooftop::SpektrixSync::InstanceSync.new(instance, self)
|
77
|
-
instance_sync.sync
|
78
|
-
rescue
|
79
|
-
|
125
|
+
synced_to_rooftop << instance_sync.sync
|
126
|
+
rescue => e
|
127
|
+
if (tries -= 1).zero?
|
128
|
+
@logger.fatal("Not retrying... #{e}")
|
129
|
+
else
|
130
|
+
@logger.warn("Retrying... #{e}")
|
131
|
+
retry
|
132
|
+
end
|
80
133
|
end
|
81
134
|
end
|
82
135
|
|
83
|
-
|
136
|
+
# if we have any updated event instances, send the POST /events/$event-instance/update_metadata request
|
137
|
+
# to trigger the event meta data update on Rooftop (sets first/last event instance dates on an event to aid in filtering and sorting)
|
138
|
+
if synced_to_rooftop.compact.any?
|
139
|
+
update_event_metadata
|
140
|
+
end
|
84
141
|
end
|
85
142
|
|
86
143
|
def update_event_metadata
|
87
|
-
@logger.
|
144
|
+
@logger.info("Saved event instances. Updating event metadata")
|
88
145
|
Rooftop::Events::Event.post("#{@rooftop_event.class.collection_path}/#{@rooftop_event.id}/update_metadata")
|
89
146
|
end
|
90
147
|
end
|
@@ -3,6 +3,7 @@ module Rooftop
|
|
3
3
|
class InstanceSync
|
4
4
|
|
5
5
|
def initialize(spektrix_instance, event_sync)
|
6
|
+
@spektrix_instance_statuses = event_sync.spektrix_instance_statuses
|
6
7
|
@spektrix_event = event_sync.spektrix_event
|
7
8
|
@rooftop_event = event_sync.rooftop_event
|
8
9
|
@logger = event_sync.logger
|
@@ -19,18 +20,40 @@ module Rooftop
|
|
19
20
|
end
|
20
21
|
update_price
|
21
22
|
if @rooftop_instance.price_list_id.nil?
|
22
|
-
@logger.
|
23
|
+
@logger.error("No price list for Spektrix instance id #{@spektrix_instance.id}")
|
23
24
|
return
|
24
25
|
end
|
25
26
|
update_meta_attributes
|
26
27
|
update_availability
|
27
28
|
update_on_sale
|
28
|
-
|
29
|
-
|
29
|
+
|
30
|
+
if event_instance_requires_sync?
|
31
|
+
@rooftop_instance.meta_attributes[:spektrix_hash] = generate_spektrix_hash(@spektrix_instance)
|
32
|
+
|
33
|
+
if @rooftop_instance.save!
|
34
|
+
@logger.info("#{instance_updated ? "Updated" : "Created"} Rooftop instance #{@rooftop_instance.id}")
|
35
|
+
return @rooftop_instance.id
|
36
|
+
else
|
37
|
+
@logger.info("\n\nCouldn't save instance\n\n")
|
38
|
+
end
|
39
|
+
else
|
40
|
+
@logger.info("Skipping event instance save - computed hash matched")
|
41
|
+
return nil
|
30
42
|
end
|
31
43
|
end
|
32
44
|
|
33
45
|
private
|
46
|
+
def event_instance_requires_sync?
|
47
|
+
rooftop_event_instance_hash = @rooftop_instance.meta_attributes['spektrix_hash']
|
48
|
+
|
49
|
+
@rooftop_instance.id.nil? || !rooftop_event_instance_hash || rooftop_event_instance_hash != generate_spektrix_hash(@spektrix_instance)
|
50
|
+
end
|
51
|
+
|
52
|
+
def generate_spektrix_hash(event_instance)
|
53
|
+
instance_status = @spektrix_instance_statuses.find{|is| is.instance[:id] == @spektrix_instance.id} || @spektrix_instance.status
|
54
|
+
Digest::MD5.hexdigest(event_instance.attributes.to_s + instance_status.attributes.to_s)
|
55
|
+
end
|
56
|
+
|
34
57
|
def find_rooftop_instance_by_spektrix_id(spektrix_id)
|
35
58
|
@rooftop_event.instances.to_a.find {|i| i.meta_attributes[:spektrix_id] == spektrix_id }
|
36
59
|
end
|
@@ -40,7 +63,7 @@ module Rooftop
|
|
40
63
|
end
|
41
64
|
|
42
65
|
def update_meta_attributes
|
43
|
-
@rooftop_instance.meta_attributes = @spektrix_instance.custom_attributes.merge(spektrix_id: @spektrix_instance.id)
|
66
|
+
@rooftop_instance.meta_attributes = @spektrix_instance.custom_attributes.merge(spektrix_id: @spektrix_instance.id, spektrix_hash: @rooftop_instance.meta_attributes.try(:[], :spektrix_hash))
|
44
67
|
end
|
45
68
|
|
46
69
|
def update_on_sale
|
@@ -58,12 +81,14 @@ module Rooftop
|
|
58
81
|
end
|
59
82
|
|
60
83
|
def update_availability
|
84
|
+
instance_status = @spektrix_instance_statuses.find{|is| is.instance[:id] == @spektrix_instance.id} || @spektrix_instance.status
|
85
|
+
|
61
86
|
availability = {
|
62
87
|
availability: {
|
63
88
|
starts_at: @spektrix_instance.start.iso8601,
|
64
89
|
stops_at: @spektrix_instance.start.advance(seconds: @rooftop_event.meta_attributes[:duration]),
|
65
|
-
seats_capacity:
|
66
|
-
seats_available:
|
90
|
+
seats_capacity: instance_status.capacity,
|
91
|
+
seats_available: instance_status.available
|
67
92
|
}
|
68
93
|
}
|
69
94
|
@rooftop_instance.title = @rooftop_event.title + ": " + @spektrix_instance.start.strftime("%d %b %Y %H:%M")
|
@@ -22,8 +22,12 @@ module Rooftop
|
|
22
22
|
# begin
|
23
23
|
@spektrix_price_lists.each do |spektrix_price_list|
|
24
24
|
# Don't bother syncing a price list where none of the prices have bands.
|
25
|
+
if spektrix_price_list.prices.nil?
|
26
|
+
@logger.error("Spektrix price list ID #{spektrix_price_list.id} has no prices at all")
|
27
|
+
next
|
28
|
+
end
|
25
29
|
if spektrix_price_list.prices.select {|p| !p.band.nil?}.empty?
|
26
|
-
@logger.
|
30
|
+
@logger.error("Spektrix price list ID #{spektrix_price_list.id} has prices with missing bands.")
|
27
31
|
end
|
28
32
|
|
29
33
|
# find or create a price list
|
@@ -33,22 +37,22 @@ module Rooftop
|
|
33
37
|
new_price_list = @rooftop_price_list.new?
|
34
38
|
# save the price list to rooftop
|
35
39
|
if @rooftop_price_list.save!
|
36
|
-
@logger.
|
40
|
+
@logger.info("#{new_price_list ? "Created" : "Updated"} price list #{spektrix_price_list.id}")
|
37
41
|
sync_prices(spektrix_price_list, @rooftop_price_list)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
# rescue => e
|
41
|
-
# @logger.
|
45
|
+
# @logger.error(e.to_s)
|
42
46
|
# end
|
43
47
|
end
|
44
48
|
|
45
49
|
def sync_prices(spektrix_price_list, rooftop_price_list)
|
46
50
|
# begin
|
47
51
|
spektrix_price_list.prices.each_with_index do |spektrix_price, i |
|
48
|
-
@logger.
|
52
|
+
@logger.info("syncing price #{i+1} / #{spektrix_price_list.prices.count}")
|
49
53
|
# skip ones without a band
|
50
54
|
if spektrix_price.band.nil?
|
51
|
-
@logger.
|
55
|
+
@logger.error("Spektrix price list ID: #{spektrix_price_list.id}: Price #{spektrix_price.price} with ticket type #{spektrix_price.ticket_type.name} does not have a band")
|
52
56
|
next
|
53
57
|
end
|
54
58
|
current_rooftop_price = find_rooftop_price(rooftop_price_list, spektrix_price)
|
@@ -58,16 +62,28 @@ module Rooftop
|
|
58
62
|
new_price.assign_attributes(current_rooftop_price.attributes)
|
59
63
|
end
|
60
64
|
|
65
|
+
ticket_type_id = find_rooftop_ticket_type(spektrix_price).try(:id)
|
66
|
+
price_band_id = find_rooftop_price_band(spektrix_price).try(:id)
|
67
|
+
if ticket_type_id.nil?
|
68
|
+
@logger.error("Ticket type for spektrix price #{spektrix_price.price} with ticket type #{spektrix_price.ticket_type.name} is nil")
|
69
|
+
next
|
70
|
+
end
|
71
|
+
|
72
|
+
if price_band_id.nil?
|
73
|
+
@logger.error("Price band for spektrix price #{spektrix_price.price} with ticket type #{spektrix_price.ticket_type.name} is nil")
|
74
|
+
next
|
75
|
+
end
|
76
|
+
|
61
77
|
new_price.meta_attributes = {
|
62
78
|
is_band_default: (spektrix_price.is_band_default == "true"),
|
63
|
-
ticket_type_id:
|
64
|
-
price_band_id:
|
79
|
+
ticket_type_id: ticket_type_id,
|
80
|
+
price_band_id: price_band_id,
|
65
81
|
ticket_price: spektrix_price.price.to_f
|
66
82
|
}
|
67
83
|
|
68
84
|
new_price.title = "#{spektrix_price.band.name} (£#{new_price.meta_attributes[:ticket_price]})"
|
69
85
|
if new_price.save!
|
70
|
-
@logger.
|
86
|
+
@logger.error("Spektrix price list ID: #{spektrix_price_list.id}: Saved price £#{new_price.meta_attributes[:ticket_price]} with ticket type #{spektrix_price.ticket_type.name} for price band #{spektrix_price.band.name}")
|
71
87
|
end
|
72
88
|
end
|
73
89
|
# rescue => e
|
@@ -85,11 +101,11 @@ module Rooftop
|
|
85
101
|
end
|
86
102
|
Rooftop::Events::PriceList.where(post__in: rooftop_ids_to_remove).each do |pricelist|
|
87
103
|
if pricelist.destroy
|
88
|
-
@logger.
|
104
|
+
@logger.info("Removed rooftop price list #{id} which didn't exist in spektrix")
|
89
105
|
end
|
90
106
|
end
|
91
107
|
rescue => e
|
92
|
-
@logger.
|
108
|
+
@logger.fatal(e.to_s)
|
93
109
|
end
|
94
110
|
end
|
95
111
|
|
@@ -10,11 +10,16 @@ module Rooftop
|
|
10
10
|
:rooftop_price_bands,
|
11
11
|
:options
|
12
12
|
|
13
|
-
|
13
|
+
PIDFILE = ARGV.find{|a| a=~/pidname=[^$]+/}.try(:split, '=').try(:last) || 'sync'
|
14
|
+
PIDPATH = "/tmp/rooftop-spektrix-#{PIDFILE}.pid"
|
14
15
|
|
15
16
|
def initialize(starting_at, opts={})
|
17
|
+
if defined?(Rooftop::Rails)
|
18
|
+
Rooftop::Rails.configuration.perform_object_caching = false
|
19
|
+
end
|
20
|
+
|
16
21
|
begin
|
17
|
-
Rooftop.
|
22
|
+
Rooftop.include_drafts = true
|
18
23
|
if defined?(Rooftop::Rails)
|
19
24
|
Rooftop::Rails.configuration.perform_object_caching = false
|
20
25
|
end
|
@@ -26,39 +31,47 @@ module Rooftop
|
|
26
31
|
import_prices: false,
|
27
32
|
import_events: true,
|
28
33
|
delete_orphan_events: false,
|
29
|
-
accept_empty_rooftop_events: false
|
34
|
+
accept_empty_rooftop_events: false,
|
35
|
+
import_spektrix_description: true
|
30
36
|
}
|
31
37
|
@options = default_opts.merge!(opts)
|
32
|
-
@logger.
|
33
|
-
@logger.
|
34
|
-
@logger.
|
38
|
+
@logger.info("*************************************************************************")
|
39
|
+
@logger.info("Running with options: #{@options.select {|k,v| k if v}.keys.join(", ")}")
|
40
|
+
@logger.info("*************************************************************************")
|
35
41
|
rescue => e
|
36
|
-
@logger.
|
42
|
+
@logger.fatal("Couldn't start sync: #{e}")
|
37
43
|
end
|
38
44
|
end
|
39
45
|
|
40
46
|
def fetch_rooftop_and_spektrix_data
|
41
|
-
@logger.debug("Fetching all Spektrix events")
|
42
47
|
@spektrix_events = @spektrix_events.present? ? @spektrix_events : Spektrix::Events::Event.all(instance_start_from: @starting_at.iso8601).to_a
|
43
48
|
if @options[:spektrix_event_id]
|
49
|
+
@logger.info("Selecting single Spektrix event")
|
44
50
|
@spektrix_events = @spektrix_events.select {|e| e.id == @options[:spektrix_event_id].to_s}
|
51
|
+
else
|
52
|
+
@logger.info("Fetching all Spektrix events")
|
45
53
|
end
|
46
|
-
|
54
|
+
|
55
|
+
@logger.info("Fetching all Rooftop events")
|
47
56
|
@rooftop_events = Rooftop::Events::Event.all.to_a
|
48
57
|
unless @options[:accept_empty_rooftop_events]
|
58
|
+
@logger.info("No Rooftop events")
|
49
59
|
raise StandardError, "Rooftop returned an empty set of events which is probably wrong" if @rooftop_events.empty?
|
50
60
|
end
|
51
|
-
@logger.
|
61
|
+
@logger.info("Fetching all Spektrix price lists")
|
52
62
|
@spektrix_price_lists = @spektrix_price_lists.present? ? @spektrix_price_lists : Spektrix::Tickets::PriceList.all.to_a
|
53
|
-
@logger.
|
63
|
+
@logger.info("Fetching all Rooftop Price lists")
|
54
64
|
@rooftop_price_lists = Rooftop::Events::PriceList.all.to_a
|
55
|
-
@logger.debug("Fetching all Rooftop ticket types")
|
56
|
-
@rooftop_ticket_types = Rooftop::Events::TicketType.all.to_a
|
57
|
-
@logger.debug("Fetching all Rooftop price bands")
|
58
|
-
@rooftop_price_bands = Rooftop::Events::PriceBand.all.to_a
|
59
|
-
end
|
60
|
-
|
61
65
|
|
66
|
+
if @options[:import_price_bands] || @options[:import_ticket_types] || @options[:import_prices]
|
67
|
+
@logger.info("Fetching all Spektrix price lists")
|
68
|
+
@spektrix_price_lists = @spektrix_price_lists.present? ? @spektrix_price_lists : Spektrix::Tickets::PriceList.all.to_a
|
69
|
+
@logger.info("Fetching all Rooftop ticket types")
|
70
|
+
@rooftop_ticket_types = Rooftop::Events::TicketType.all.to_a
|
71
|
+
@logger.info("Fetching all Rooftop price bands")
|
72
|
+
@rooftop_price_bands = Rooftop::Events::PriceBand.all.to_a
|
73
|
+
end
|
74
|
+
end
|
62
75
|
|
63
76
|
def self.run(starting_at=nil, opts={})
|
64
77
|
sync_pid = Process.get_pid(Rooftop::SpektrixSync::SyncTask::PIDPATH)
|
@@ -75,29 +88,29 @@ module Rooftop
|
|
75
88
|
Process.remove_pidfile(Rooftop::SpektrixSync::SyncTask::PIDPATH)
|
76
89
|
end
|
77
90
|
|
78
|
-
def self.run_events_import(starting_at=nil, event_id=nil)
|
79
|
-
opts = event_id.present? ? {spektrix_event_id: event_id} :
|
91
|
+
def self.run_events_import(starting_at=nil, event_id=nil, opts={})
|
92
|
+
opts = event_id.present? ? opts.merge({spektrix_event_id: event_id}) : opts
|
80
93
|
self.run(starting_at, opts)
|
81
94
|
end
|
82
95
|
|
83
|
-
def self.run_full_import(starting_at=nil)
|
96
|
+
def self.run_full_import(starting_at=nil, opts={})
|
84
97
|
self.run(starting_at, {
|
85
98
|
import_price_bands: true,
|
86
99
|
import_ticket_types: true,
|
87
100
|
import_prices: true,
|
88
101
|
import_events: true,
|
89
102
|
delete_orphan_events: false
|
90
|
-
})
|
103
|
+
}.merge(opts))
|
91
104
|
end
|
92
105
|
|
93
|
-
def self.run_prices_import(starting_at=nil)
|
106
|
+
def self.run_prices_import(starting_at=nil, opts={})
|
94
107
|
self.run(starting_at, {
|
95
108
|
import_price_bands: true,
|
96
109
|
import_ticket_types: true,
|
97
110
|
import_prices: true,
|
98
111
|
import_events: false,
|
99
112
|
delete_orphan_events: false
|
100
|
-
})
|
113
|
+
}.merge(opts))
|
101
114
|
end
|
102
115
|
|
103
116
|
|
@@ -125,7 +138,7 @@ module Rooftop
|
|
125
138
|
# delete_orphan_spektrix_events
|
126
139
|
# end
|
127
140
|
rescue => e
|
128
|
-
@logger.
|
141
|
+
@logger.fatal(e)
|
129
142
|
end
|
130
143
|
|
131
144
|
end
|
@@ -136,13 +149,17 @@ module Rooftop
|
|
136
149
|
begin
|
137
150
|
tries ||= 2
|
138
151
|
@spektrix_events.each_with_index do |event, i|
|
139
|
-
@logger.
|
152
|
+
@logger.info("Sync #{i+1} / #{@spektrix_events.length}: #{event.title}")
|
140
153
|
item = EventSync.new(event, self)
|
141
154
|
item.sync_to_rooftop
|
142
155
|
end
|
143
156
|
rescue => e
|
144
|
-
|
145
|
-
|
157
|
+
if (tries -= 1).zero?
|
158
|
+
@logger.fatal("Not retrying...#{e.to_s}")
|
159
|
+
else
|
160
|
+
@logger.error("Retrying...#{e.to_s}")
|
161
|
+
retry
|
162
|
+
end
|
146
163
|
end
|
147
164
|
end
|
148
165
|
|
@@ -159,7 +176,7 @@ module Rooftop
|
|
159
176
|
Rooftop::Events::Event.where(post__in: rooftop_ids_to_delete).each do |rooftop_event|
|
160
177
|
title = rooftop_event.title
|
161
178
|
if rooftop_event.destroy
|
162
|
-
@logger.
|
179
|
+
@logger.info("Removed Rooftop event #{title} which doesn't exist in Spektrix")
|
163
180
|
end
|
164
181
|
end
|
165
182
|
end
|
@@ -170,7 +187,7 @@ module Rooftop
|
|
170
187
|
spektrix_bands = Spektrix::Tickets::Band.all.to_a
|
171
188
|
# create or update existing
|
172
189
|
spektrix_bands.each do |band|
|
173
|
-
@logger.
|
190
|
+
@logger.info("Updating band #{band.name}")
|
174
191
|
rooftop_band = rooftop_bands.find {|b| b.title == band.name} || Rooftop::Events::PriceBand.new
|
175
192
|
rooftop_band.title = band.name
|
176
193
|
rooftop_band.save!
|
@@ -183,7 +200,7 @@ module Rooftop
|
|
183
200
|
rooftop_bands.find {|b| b.title == title}.destroy
|
184
201
|
end
|
185
202
|
rescue => e
|
186
|
-
@logger.
|
203
|
+
@logger.fatal(e.to_s)
|
187
204
|
end
|
188
205
|
|
189
206
|
|
@@ -195,7 +212,7 @@ module Rooftop
|
|
195
212
|
spektrix_ticket_types = Spektrix::Tickets::Type.all.to_a
|
196
213
|
# create or update exiting
|
197
214
|
spektrix_ticket_types.each do |type|
|
198
|
-
@logger.
|
215
|
+
@logger.info("Updating ticket type #{type.name}")
|
199
216
|
rooftop_ticket_type = rooftop_ticket_types.find {|t| t.title == type.name} || Rooftop::Events::TicketType.new
|
200
217
|
rooftop_ticket_type.title = type.name
|
201
218
|
rooftop_ticket_type.save!
|
@@ -208,7 +225,7 @@ module Rooftop
|
|
208
225
|
rooftop_ticket_types.find {|b| b.title == title}.destroy
|
209
226
|
end
|
210
227
|
rescue => e
|
211
|
-
@logger.
|
228
|
+
@logger.fatal(e.to_s)
|
212
229
|
end
|
213
230
|
end
|
214
231
|
|
@@ -3,29 +3,30 @@ namespace :rooftop do
|
|
3
3
|
|
4
4
|
task :prepare, [:since, :logger_path] do |task, args|
|
5
5
|
logger_path = args[:logger_path] || STDOUT
|
6
|
-
Rooftop::SpektrixSync.logger = Logger.new(logger_path, 'daily')
|
6
|
+
Rooftop::SpektrixSync.logger = defined?(::Rails) ? Rails.logger : Logger.new(logger_path, 'daily')
|
7
7
|
@since = eval(args[:since]) rescue DateTime.now
|
8
|
+
@options = eval(args[:options]) rescue {}
|
8
9
|
end
|
9
10
|
|
10
11
|
|
11
12
|
desc "Synchronise events from Spektrix to Rooftop"
|
12
|
-
task :sync_events, [:since, :logger_path] => [:environment, :prepare] do |task, args|
|
13
|
-
Rooftop::SpektrixSync::SyncTask.run_events_import(@since)
|
13
|
+
task :sync_events, [:since, :logger_path, :options] => [:environment, :prepare] do |task, args|
|
14
|
+
Rooftop::SpektrixSync::SyncTask.run_events_import(@since, nil, @options)
|
14
15
|
end
|
15
16
|
|
16
17
|
desc "Synchronise events and prices from Spektrix to Rooftop"
|
17
|
-
task :sync_all, [:since, :logger_path] => [:environment, :prepare] do |task, args|
|
18
|
-
Rooftop::SpektrixSync::SyncTask.run_full_import(@since)
|
18
|
+
task :sync_all, [:since, :logger_path, :options] => [:environment, :prepare] do |task, args|
|
19
|
+
Rooftop::SpektrixSync::SyncTask.run_full_import(@since, @options)
|
19
20
|
end
|
20
21
|
|
21
22
|
desc "Synchronise events and prices from Spektrix to Rooftop"
|
22
|
-
task :sync_prices, [:since, :logger_path] => [:environment, :prepare] do |task, args|
|
23
|
-
Rooftop::SpektrixSync::SyncTask.run_prices_import(@since)
|
23
|
+
task :sync_prices, [:since, :logger_path, :options] => [:environment, :prepare] do |task, args|
|
24
|
+
Rooftop::SpektrixSync::SyncTask.run_prices_import(@since, @options)
|
24
25
|
end
|
25
26
|
|
26
27
|
desc "Sync specific event"
|
27
|
-
task :sync_event, [:spektrix_event_id, :since, :logger_path] => [:environment, :prepare] do |task, args|
|
28
|
-
Rooftop::SpektrixSync::SyncTask.run_events_import(@since, args[:spektrix_event_id])
|
28
|
+
task :sync_event, [:spektrix_event_id, :since, :logger_path, :options] => [:environment, :prepare] do |task, args|
|
29
|
+
Rooftop::SpektrixSync::SyncTask.run_events_import(@since, args[:spektrix_event_id], @options)
|
29
30
|
end
|
30
31
|
|
31
32
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rooftop-spektrix_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|