jekyll-attendease 0.5.5 → 0.6.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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll-attendease.rb +9 -705
  3. data/lib/jekyll/attendease_plugin.rb +19 -0
  4. data/lib/jekyll/attendease_plugin/event_data_generator.rb +154 -0
  5. data/lib/jekyll/attendease_plugin/event_layout_generator.rb +43 -0
  6. data/lib/jekyll/attendease_plugin/filters.rb +9 -0
  7. data/lib/jekyll/attendease_plugin/pre_zero_point_six_link_redirect_generator.rb +35 -0
  8. data/lib/jekyll/attendease_plugin/presenter_page.rb +31 -0
  9. data/lib/jekyll/attendease_plugin/presenters_index_page.rb +23 -0
  10. data/lib/jekyll/attendease_plugin/redirect_page.rb +22 -0
  11. data/lib/jekyll/attendease_plugin/schedule_day_page.rb +38 -0
  12. data/lib/jekyll/attendease_plugin/schedule_generator.rb +156 -0
  13. data/lib/jekyll/attendease_plugin/schedule_index_page.rb +23 -0
  14. data/lib/jekyll/attendease_plugin/schedule_session_page.rb +24 -0
  15. data/lib/jekyll/attendease_plugin/schedule_sessions_page.rb +26 -0
  16. data/lib/jekyll/attendease_plugin/sponsor_generator.rb +37 -0
  17. data/lib/jekyll/attendease_plugin/sponsors_index_page.rb +23 -0
  18. data/lib/jekyll/attendease_plugin/tags.rb +65 -0
  19. data/lib/jekyll/attendease_plugin/venue_page.rb +24 -0
  20. data/lib/jekyll/attendease_plugin/venues_index_page.rb +23 -0
  21. data/lib/jekyll/attendease_plugin/version.rb +6 -0
  22. data/spec/lib/jekyll/attendease_plugin/event_data_generator_spec.rb +16 -0
  23. data/spec/lib/jekyll/attendease_plugin/event_layout_generator_spec.rb +12 -0
  24. data/spec/lib/jekyll/attendease_plugin/filters_spec.rb +15 -0
  25. data/spec/lib/jekyll/attendease_plugin/pre_zero_point_six_link_redirect_generator_spec.rb +40 -0
  26. data/spec/lib/jekyll/attendease_plugin/schedule_generator_spec.rb +104 -0
  27. data/spec/lib/jekyll/attendease_plugin/sponsor_generator_spec.rb +12 -0
  28. data/spec/lib/jekyll/attendease_plugin/tags_spec.rb +45 -0
  29. data/spec/spec_helper.rb +83 -0
  30. data/spec/support/fixtures_helpers.rb +7 -0
  31. data/templates/_includes/attendease/presenters/index.html +2 -2
  32. data/templates/_includes/attendease/presenters/presenter.html +3 -3
  33. data/templates/_includes/attendease/redirect.html +12 -0
  34. data/templates/_includes/attendease/schedule/day.html +5 -5
  35. data/templates/_includes/attendease/schedule/index.html +3 -3
  36. data/templates/_includes/attendease/schedule/session.html +3 -3
  37. data/templates/_includes/attendease/schedule/sessions.html +3 -3
  38. data/templates/_includes/attendease/sponsors/index.html +14 -3
  39. data/templates/layout.html +1 -1
  40. metadata +113 -20
  41. data/README.md +0 -181
@@ -0,0 +1,19 @@
1
+ require 'jekyll/attendease_plugin/event_data_generator'
2
+ require 'jekyll/attendease_plugin/event_layout_generator'
3
+ require 'jekyll/attendease_plugin/schedule_generator'
4
+ require 'jekyll/attendease_plugin/sponsor_generator'
5
+ require 'jekyll/attendease_plugin/pre_zero_point_six_link_redirect_generator'
6
+ require 'jekyll/attendease_plugin/redirect_page'
7
+ require 'jekyll/attendease_plugin/tags'
8
+ require 'jekyll/attendease_plugin/filters'
9
+
10
+ require 'jekyll/attendease_plugin/presenters_index_page'
11
+ require 'jekyll/attendease_plugin/presenter_page'
12
+ require 'jekyll/attendease_plugin/schedule_day_page'
13
+ require 'jekyll/attendease_plugin/schedule_index_page'
14
+ require 'jekyll/attendease_plugin/schedule_sessions_page'
15
+ require 'jekyll/attendease_plugin/schedule_session_page'
16
+ require 'jekyll/attendease_plugin/sponsors_index_page'
17
+ require 'jekyll/attendease_plugin/venues_index_page'
18
+ require 'jekyll/attendease_plugin/venue_page'
19
+ require 'jekyll/attendease_plugin/version'
@@ -0,0 +1,154 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class EventDataGenerator < ::Jekyll::Generator
4
+ safe true
5
+
6
+ priority :highest
7
+
8
+ include HTTParty
9
+
10
+ def get(url, options = {})
11
+ begin
12
+ self.class.get(url, options)
13
+ rescue => e
14
+ Jekyll.logger.error "Could not connect to #{url}."
15
+ puts e.inspect
16
+ end
17
+ end
18
+
19
+ def self.parameterize(source, sep = '-')
20
+ return '' if source.nil?
21
+ string = source.downcase
22
+ # Turn unwanted chars into the separator
23
+ string.gsub!(/[^a-z0-9\-_]+/, sep)
24
+ unless sep.nil? || sep.empty?
25
+ re_sep = Regexp.escape(sep)
26
+ # No more than one of the separator in a row.
27
+ string.gsub!(/#{re_sep}{2,}/, sep)
28
+ # Remove leading/trailing separator.
29
+ string.gsub!(/^#{re_sep}|#{re_sep}$/, '')
30
+ end
31
+ string
32
+ end
33
+
34
+ def use_cache?(file)
35
+ (Time.now.to_i - File.mtime(file).to_i) <= (@attendease_config['cache_expiry'].nil? ? 30 : @attendease_config['cache_expiry']) # file is less than 30 seconds old
36
+ end
37
+
38
+ def generate(site)
39
+ if @attendease_config = site.config['attendease']
40
+ if @attendease_config['api_host'] && !@attendease_config['api_host'].match(/^http/)
41
+ raise "Is your Attendease api_host site properly in _config.yml? Needs to be something like https://myevent.attendease.com/"
42
+ else
43
+ # add a trailing slash if we are missing one.
44
+ if @attendease_config['api_host'][-1, 1] != '/'
45
+ @attendease_config['api_host'] += '/'
46
+ end
47
+
48
+ @attendease_data_path = File.join(site.source, '_attendease', 'data')
49
+
50
+ FileUtils.mkdir_p(@attendease_data_path)
51
+
52
+ data_files = %w{ site event sessions presenters rooms filters venues sponsors }.map { |m| "#{m}.json"} << 'lingo.yml'
53
+
54
+ data_files.each do |file_name|
55
+ update_data = true
56
+
57
+ file = File.join(@attendease_data_path, file_name)
58
+ if File.exists?(file) && use_cache?(file)
59
+ update_data = false
60
+
61
+ if file_name.match(/json$/)
62
+ begin
63
+ data = JSON.parse(File.read(file))
64
+ rescue => e
65
+ raise "Error parsing #{file}: #{e.inspect}"
66
+ end
67
+ else
68
+ data = File.read(file)
69
+ end
70
+ end
71
+
72
+ key = "has_#{file_name.split('.')[0]}"
73
+
74
+ # don't bother making a request for resources that don't exist in the event
75
+ if !@attendease_config[key].nil? && !@attendease_config[key]
76
+ update_data = false
77
+ data = []
78
+ end
79
+
80
+ if update_data
81
+ options = {}
82
+ options.merge!(:headers => {'X-Event-Token' => @attendease_config['access_token']}) if @attendease_config['access_token']
83
+
84
+ request_filename = file_name.gsub(/yml$/, 'yaml')
85
+ data = get("#{@attendease_config['api_host']}api/#{request_filename}", options)
86
+
87
+ #if (file_name.match(/yaml$/) || data.is_a?(Hash) && !data['error']) || data.is_a?(Array)
88
+ if (!data.nil? && data.response.is_a?(Net::HTTPOK))
89
+ Jekyll.logger.info "[Attendease] Saving #{file_name} data..."
90
+
91
+ if file_name.match(/json$/)
92
+ File.open(file, 'w+') { |f| f.write(data.parsed_response.to_json) }
93
+ else
94
+ File.open(file, 'w+') { |f| f.write(data.body) }
95
+ end
96
+ else
97
+ raise "Request failed for #{@attendease_config['api_host']}api/#{request_filename}. Is your Attendease api_host site properly in _config.yml?"
98
+ end
99
+ end
100
+
101
+ if file_name == 'site.json'
102
+ # Adding to site config so we can access these variables globally wihtout using a Liquid Tag so we can use if/else
103
+ site.config['attendease']['data'] = {}
104
+
105
+ data.keys.each do |tag|
106
+ site.config['attendease']['data'][tag] = data[tag]
107
+ # memorandum from the department of redundancy department:
108
+ # --------------------------------------------------------
109
+ # support accessing the attendease_* variables without the
110
+ # attendease_ prefix because they're already namespaced in
111
+ # site.attendease.data
112
+ #
113
+ # TODO: update all themes to not use attendease_ variables
114
+ # and then retire them from the ThemeManager.
115
+ if tag.match(/^attendease_/)
116
+ site.config['attendease']['data'][tag.gsub(/^attendease_/, '')] = data[tag]
117
+ end
118
+ end
119
+ elsif file_name == 'event.json'
120
+ site.config['attendease']['event'] = {}
121
+
122
+ data.keys.each do |tag|
123
+ site.config['attendease']['event'][tag] = data[tag]
124
+ end
125
+ end
126
+ end
127
+
128
+ # Generate the template files if they don't yet exist.
129
+ %w{ schedule presenters venues sponsors}.each do |p|
130
+ path = File.join(site.source, '_attendease', 'templates', p)
131
+ FileUtils.mkdir_p(path)
132
+ raise "Could not create #{path}." unless File.exists?(path)
133
+ end
134
+
135
+ template_path = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'templates', '_includes', 'attendease'))
136
+ files_to_create_if_they_dont_exist = Dir.chdir(template_path) { Dir.glob('*/**.html') + Dir.glob('*.html') }
137
+
138
+ files_to_create_if_they_dont_exist.each do |file|
139
+ destination_file = File.join(site.source, '_attendease', 'templates', file)
140
+ FileUtils.cp(File.join(template_path, file), destination_file) unless File.exists?(destination_file)
141
+ end
142
+
143
+ # make the event available to anyone
144
+ event = JSON.parse(File.read("#{@attendease_data_path}/event.json"))
145
+ site.config['attendease']['event'] = event
146
+ end
147
+
148
+ else
149
+ raise "Please set the Attendease event data in your _config.yml"
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,43 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class EventLayoutGenerator < ::Jekyll::Generator
4
+ safe true
5
+
6
+ priority :high
7
+
8
+ def generate(site)
9
+ Jekyll.logger.debug "[Attendease] Generating theme layouts..."
10
+
11
+ attendease_precompiled_theme_layouts_path = File.join(site.source, 'attendease_layouts')
12
+
13
+ FileUtils.mkdir_p(attendease_precompiled_theme_layouts_path)
14
+
15
+ base_layout = site.config['attendease']['base_layout']
16
+
17
+ layouts_to_precompile = %w{ layout register schedule presenters venues sponsors }
18
+
19
+ # Precompiled layout for website sections.
20
+ layouts_to_precompile.each do |layout|
21
+ if File.exists?(File.join(site.source, 'attendease_layouts', "#{base_layout}.html"))
22
+ # create a layout file if it already doesn't exist.
23
+ # the layout file will be used by attendease to wrap /register, /schedule, /presenters in the
24
+ # look the compiled file defines.
25
+ # ensure {{ content }} is in the file so we can render content in there!
26
+ unless File.exists?(File.join(attendease_precompiled_theme_layouts_path, "#{layout}.html"))
27
+ FileUtils.cp File.join(site.source, 'attendease_layouts', "#{base_layout}.html"), File.join(site.source, 'attendease_layouts', "#{layout}.html")
28
+ #site.pages << LayoutPage.new(site, site.source, 'attendease_layouts', "#{layout}.html", base_layout)
29
+ end
30
+ else
31
+ Jekyll.logger.debug "Could not find attendease_layouts/#{base_layout}.html in your site source. Using the built-in template from jekyll-attendease."
32
+ #FileUtils.cp File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'templates', 'layout.html')), File.join(site.source, 'attendease_layouts', "#{base_layout}.html")
33
+ source_template = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'templates', 'layout.html'))
34
+ html = Liquid::Template.parse(File.read(source_template)).render('page' => { 'base_layout' => base_layout })
35
+
36
+ File.open(File.join(site.source, 'attendease_layouts', "#{base_layout}.html"), 'w') { |f| f.write(html) }
37
+ #site.pages << LayoutPage.new(site, site.source, 'attendease_layouts', "#{layout}.html", base_layout)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,9 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ module Filters
4
+ def slugify(string)
5
+ EventDataGenerator.parameterize(string, '_')
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class PreZeroPointSixLinkRedirectGenerator < ::Jekyll::Generator
4
+ safe true
5
+
6
+ priority :low
7
+
8
+ def generate(site)
9
+ if site.config['attendease']['generate_schedule_pages'] && site.config['attendease']['redirect_ugly_urls']
10
+ schedule_generator = site.generators.select { |g| g.class == Jekyll::AttendeasePlugin::ScheduleGenerator }.first
11
+
12
+ # presenters
13
+ dir = site.config['attendease']['presenters_path_name']
14
+ schedule_generator.presenters.each do |o|
15
+ site.pages << RedirectPage.new(site, site.source, File.join(dir, o['id']), File.join('/', dir, o['slug']))
16
+ end
17
+
18
+ # venues
19
+ dir = site.config['attendease']['venues_path_name']
20
+ schedule_generator.venues.each do |o|
21
+ site.pages << RedirectPage.new(site, site.source, File.join(dir, o['id']), File.join('/', dir, o['slug']))
22
+ end
23
+
24
+ # sessions
25
+ dir = site.config['attendease']['schedule_path_name']
26
+ schedule_generator.sessions.each do |o|
27
+ site.pages << RedirectPage.new(site, site.source, File.join(dir, o['code']), File.join('/', dir, o['slug']))
28
+ end
29
+ end
30
+ end # end generate
31
+
32
+ end # end class
33
+ end
34
+ end
35
+
@@ -0,0 +1,31 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class PresenterPage < Page
4
+ def initialize(site, base, dir, presenter, sessions)
5
+ @site = site
6
+ @base = base
7
+ @dir = dir
8
+ @name = presenter['slug']
9
+
10
+ self.process(@name)
11
+
12
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'presenters.html')
13
+
14
+ presenter_page_title = site.config['presenter_page_title'] ? site.config['presenter_page_title'] : 'Presenter: %s'
15
+ self.data['title'] = sprintf(presenter_page_title, presenter['first_name'] + ' ' + presenter['last_name'])
16
+
17
+ presenter['sessions'] = []
18
+
19
+ sessions.each do |session|
20
+ if session['speaker_ids'].include?(presenter['id'])
21
+ presenter['sessions'] << session
22
+ end
23
+ end
24
+
25
+ self.data['presenter'] = presenter
26
+
27
+ self.content = File.read(File.join(base, '_attendease', 'templates', 'presenters', 'presenter.html'))
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class PresentersIndexPage < Page
4
+ def initialize(site, base, dir, presenters)
5
+ @site = site
6
+ @base = base
7
+ @dir = dir
8
+ @name = 'index.html'
9
+
10
+ self.process(@name)
11
+
12
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'presenters.html')
13
+
14
+ self.data['title'] = site.config['presenters_index_title'] || 'Presenters'
15
+
16
+ self.data['presenters'] = presenters
17
+
18
+ self.content = File.read(File.join(base, '_attendease', 'templates', 'presenters', 'index.html'))
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,22 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class RedirectPage < Page
4
+ def initialize(site, base, dir, redirect_url)
5
+ @site = site
6
+ @base = base
7
+ @dir = dir
8
+ @name = 'index.html'
9
+
10
+ self.process(@name)
11
+
12
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'layout.html')
13
+ self.data = {}
14
+
15
+ self.data['redirect_url'] = redirect_url
16
+
17
+ self.content = File.read(File.join(base, '_attendease', 'templates', 'redirect.html'))
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,38 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class ScheduleDayPage < Page
4
+ def initialize(site, base, dir, day, sessions, dates)
5
+ @site = site
6
+ @base = base
7
+ @dir = dir
8
+ @name = 'index.html'
9
+
10
+ self.process(@name)
11
+
12
+ self.read_yaml(File.join(base, 'attendease_layouts'), 'schedule.html')
13
+
14
+ session_day_title_prefix = site.config['schedule_day_title_prefix'] || 'Schedule: '
15
+ self.data['title'] = "#{session_day_title_prefix}#{day['date_formatted']}"
16
+
17
+ self.data['day'] = day
18
+ self.data['dates'] = dates
19
+
20
+ instances = []
21
+
22
+ sessions.each do |s|
23
+ s['instances'].each do |instance|
24
+ if instance['date'] == day['date']
25
+ instance['session'] = s
26
+ instances << instance
27
+ end
28
+ end
29
+ end
30
+
31
+ self.data['instances'] = instances.sort{|x,y| [x['time'], x['session']['name']] <=> [y['time'], y['session']['name']]}
32
+
33
+ self.content = File.read(File.join(base, '_attendease', 'templates', 'schedule', 'day.html'))
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,156 @@
1
+ module Jekyll
2
+ module AttendeasePlugin
3
+ class ScheduleGenerator < Generator
4
+ safe true
5
+ attr_reader :event
6
+ attr_reader :sessions
7
+ attr_reader :presenters
8
+ attr_reader :rooms
9
+ attr_reader :filters
10
+ attr_reader :venues
11
+
12
+ def generate(site)
13
+ if site.config['attendease'] && site.config['attendease']['api_host'] && site.config['attendease']['generate_schedule_pages']
14
+
15
+ # Fetch all the session data!
16
+ attendease_api_host = site.config['attendease']['api_host']
17
+ attendease_access_token = site.config['attendease']['access_token']
18
+
19
+ attendease_data_path = File.join(site.source, '_attendease', 'data')
20
+
21
+ @event = site.config['attendease']['event']
22
+
23
+ sessions = JSON.parse(File.read("#{attendease_data_path}/sessions.json")).sort{|s1, s2| s1['name'] <=> s2['name']}
24
+ @presenters = JSON.parse(File.read("#{attendease_data_path}/presenters.json")).sort{|p1, p2| p1['last_name'] <=> p2['last_name']}
25
+ @rooms = JSON.parse(File.read("#{attendease_data_path}/rooms.json")).sort{|r1, r2| r1['name'] <=> r2['name']}
26
+ @filters = JSON.parse(File.read("#{attendease_data_path}/filters.json")).sort{|f1, f2| f1['name'] <=> f2['name']}
27
+ @venues = JSON.parse(File.read("#{attendease_data_path}/venues.json")).sort{|v1, v2| v1['name'] <=> v2['name']}
28
+
29
+ @presenters.each do |presenter|
30
+ presenter['slug'] = EventDataGenerator.parameterize("#{presenter['first_name']} #{presenter['last_name']}", '_') + '.html'
31
+ end
32
+
33
+ @venues.each do |venue|
34
+ venue['slug'] = EventDataGenerator.parameterize(venue['name'], '_') + '.html'
35
+ end
36
+
37
+ sessions.each do |session|
38
+ if site.config['attendease']['session_slug_uses_code']
39
+ session['slug'] = session['code'] + '.html'
40
+ else
41
+ session['slug'] = EventDataGenerator.parameterize(session['name'], '_') + '.html'
42
+ end
43
+ end
44
+
45
+ @sessions = sessions_with_all_data(@event, sessions, @presenters, @rooms, @venues, @filters)
46
+
47
+ #
48
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
49
+ # /schedule pages.
50
+ dir = site.config['attendease']['schedule_path_name']
51
+
52
+ if (site.config['attendease'] && site.config['attendease']['show_day_index'])
53
+ site.pages << ScheduleIndexPage.new(site, site.source, File.join(dir), @event['dates'])
54
+ else
55
+ site.pages << ScheduleDayPage.new(site, site.source, File.join(dir), @event['dates'].first, @sessions, @event['dates'])
56
+ end
57
+
58
+ site.pages << ScheduleSessionsPage.new(site, site.source, File.join(dir, 'sessions'), @sessions, @event['dates'])
59
+
60
+ @event['dates'].each do |day|
61
+ site.pages << ScheduleDayPage.new(site, site.source, File.join(dir, day['date']), day, @sessions, @event['dates'])
62
+ end
63
+
64
+ @sessions.each do |session|
65
+ site.pages << ScheduleSessionPage.new(site, site.source, File.join(dir, 'sessions'), session)
66
+ end
67
+
68
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
69
+ # /presenters pages.
70
+ dir = site.config['attendease']['presenters_path_name']
71
+
72
+ @presenters.each do |presenter|
73
+ site.pages << PresenterPage.new(site, site.source, dir, presenter, @sessions)
74
+ end
75
+
76
+ site.pages << PresentersIndexPage.new(site, site.source, File.join(dir), @presenters)
77
+
78
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
79
+ # /venue pages.
80
+ dir = site.config['attendease']['venues_path_name']
81
+
82
+ @venues.each do |venue|
83
+ site.pages << VenuePage.new(site, site.source, dir, venue)
84
+ end
85
+
86
+ site.pages << VenuesIndexPage.new(site, site.source, File.join(dir), @venues)
87
+ end
88
+ end
89
+
90
+ def sessions_with_all_data(event, sessions, presenters, rooms, venues, filters)
91
+ sessionsData = []
92
+
93
+ sessions.each do |s|
94
+ session = s.select { |k, v| %w{ id name description code speaker_ids slug }.include?(k) }
95
+ session['presenters'] = []
96
+ presenters.select{|presenter| s['speaker_ids'].include?(presenter['id'])}.each do |presenter|
97
+ session['presenters'] << presenter.select { |k, v| %w{ id first_name last_name company title profile_url slug }.include?(k) }
98
+ end
99
+
100
+ filters_for_session_hash = {}
101
+ filters.each do |filter|
102
+ filter['filter_items'].each do |filter_item|
103
+ if s['filters'].include?(filter_item['id'])
104
+ filters_for_session_hash[filter['name']] = [] unless filters_for_session_hash[filter['name']]
105
+ filters_for_session_hash[filter['name']] << {
106
+ 'name' => filter_item['name']
107
+ }
108
+ if event['primary_filter_id'] && event['primary_filter_id'] == filter['id']
109
+ session['primary_filter_name'] = filter['name']
110
+ session['primary_filter'] = filter_item['name']
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ filters_for_session = filters_for_session_hash.map { |key, value| { 'name' => key, 'items' => value } }
117
+
118
+ session['filters'] = filters_for_session
119
+
120
+ filter_tags = []
121
+ filters_for_session.each do |filter|
122
+ item_names = []
123
+ if !filter['items'].nil?
124
+ filter['items'].each do |item|
125
+ filter_tags << EventDataGenerator.parameterize('attendease-filter-' + filter['name'] + "-" + item['name'])
126
+ end
127
+ end
128
+ end
129
+ session['filter_tags'] = filter_tags.join(" ")
130
+
131
+ if s['instances']
132
+ instances = []
133
+ s['instances'].each do |i|
134
+ instance = i.select { |k, v| %w{ id date time end_time duration date_formatted time_formatted end_time_formatted duration_formatted room_id }.include?(k) }
135
+
136
+ room = rooms.select { |room| room['id'] == i['room_id'] }.first
137
+ venue = venues.select { |venue| venue['id'] == room['venue_id'] }.first
138
+ instance['room'] = room.merge({ 'venue_name' => venue['name'] })
139
+ instance['venue_slug'] = venue['slug']
140
+
141
+ instances << instance
142
+ end
143
+ session['instances'] = instances
144
+ else
145
+ session['instances'] = []
146
+ end
147
+
148
+ sessionsData << session
149
+ end
150
+
151
+ sessionsData
152
+ end
153
+ end
154
+ end
155
+ end
156
+