Class: BetterSeo::StructuredData::Event

Inherits:
Base
  • Object
show all
Defined in:
lib/better_seo/structured_data/event.rb

Constant Summary collapse

EVENT_STATUS_MAPPING =
{
  "EventScheduled" => "https://schema.org/EventScheduled",
  "EventCancelled" => "https://schema.org/EventCancelled",
  "EventPostponed" => "https://schema.org/EventPostponed",
  "EventRescheduled" => "https://schema.org/EventRescheduled"
}.freeze
ATTENDANCE_MODE_MAPPING =
{
  "OfflineEventAttendanceMode" => "https://schema.org/OfflineEventAttendanceMode",
  "OnlineEventAttendanceMode" => "https://schema.org/OnlineEventAttendanceMode",
  "MixedEventAttendanceMode" => "https://schema.org/MixedEventAttendanceMode"
}.freeze
AVAILABILITY_MAPPING =
{
  "InStock" => "https://schema.org/InStock",
  "SoldOut" => "https://schema.org/SoldOut",
  "PreOrder" => "https://schema.org/PreOrder"
}.freeze

Instance Attribute Summary

Attributes inherited from Base

#properties, #type

Instance Method Summary collapse

Methods inherited from Base

#get, #set, #to_h, #to_json, #to_script_tag, #valid?, #validate!

Constructor Details

#initialize(**properties) ⇒ Event

Returns a new instance of Event.



25
26
27
# File 'lib/better_seo/structured_data/event.rb', line 25

def initialize(**properties)
  super("Event", **properties)
end

Instance Method Details

#description(value) ⇒ Object



34
35
36
# File 'lib/better_seo/structured_data/event.rb', line 34

def description(value)
  set(:description, value)
end

#end_date(value) ⇒ Object



52
53
54
55
# File 'lib/better_seo/structured_data/event.rb', line 52

def end_date(value)
  formatted_value = format_date(value)
  set(:endDate, formatted_value)
end

#event_attendance_mode(value) ⇒ Object

Event attendance mode



68
69
70
71
72
73
74
75
# File 'lib/better_seo/structured_data/event.rb', line 68

def event_attendance_mode(value)
  mode_value = if value.start_with?("https://schema.org/")
                 value
               else
                 ATTENDANCE_MODE_MAPPING[value] || value
               end
  set(:eventAttendanceMode, mode_value)
end

#event_status(value) ⇒ Object

Event status



58
59
60
61
62
63
64
65
# File 'lib/better_seo/structured_data/event.rb', line 58

def event_status(value)
  status_value = if value.start_with?("https://schema.org/")
                   value
                 else
                   EVENT_STATUS_MAPPING[value] || value
                 end
  set(:eventStatus, status_value)
end

#image(value) ⇒ Object



42
43
44
# File 'lib/better_seo/structured_data/event.rb', line 42

def image(value)
  set(:image, value)
end

#location(type: nil, name: nil, address: nil, url: nil, **other_properties) ⇒ Object

Location (Place or VirtualLocation)



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/better_seo/structured_data/event.rb', line 78

def location(type: nil, name: nil, address: nil, url: nil, **other_properties)
  location_hash = {}

  location_hash["@type"] = type if type
  location_hash["name"] = name if name
  location_hash["url"] = url if url

  location_hash["address"] = build_address(address) if address

  other_properties.each do |key, value|
    location_hash[key.to_s] = value
  end

  set(:location, location_hash)
end

#name(value) ⇒ Object

Basic properties



30
31
32
# File 'lib/better_seo/structured_data/event.rb', line 30

def name(value)
  set(:name, value)
end

#offers(value) ⇒ Object

Offers



108
109
110
111
112
113
114
115
116
# File 'lib/better_seo/structured_data/event.rb', line 108

def offers(value)
  if value.is_a?(Array)
    set(:offers, value.map { |v| build_offer(v) })
  elsif value.is_a?(Hash)
    set(:offers, build_offer(value))
  else
    set(:offers, value)
  end
end

#organizer(value) ⇒ Object

Organizer (Organization or Person)



95
96
97
98
99
100
101
102
103
104
105
# File 'lib/better_seo/structured_data/event.rb', line 95

def organizer(value)
  organizer_value = if value.is_a?(Base)
                      value
                    elsif value.is_a?(Hash)
                      build_organizer(value)
                    else
                      value
                    end

  set(:organizer, organizer_value)
end

#performer(value) ⇒ Object

Performer



119
120
121
122
123
124
125
126
127
# File 'lib/better_seo/structured_data/event.rb', line 119

def performer(value)
  if value.is_a?(Array)
    set(:performer, value.map { |v| build_performer(v) })
  elsif value.is_a?(Hash)
    set(:performer, build_performer(value))
  else
    set(:performer, value)
  end
end

#start_date(value) ⇒ Object

Date and time



47
48
49
50
# File 'lib/better_seo/structured_data/event.rb', line 47

def start_date(value)
  formatted_value = format_date(value)
  set(:startDate, formatted_value)
end

#url(value) ⇒ Object



38
39
40
# File 'lib/better_seo/structured_data/event.rb', line 38

def url(value)
  set(:url, value)
end