lib/services/reg_center.rb in Active-0.0.11 vs lib/services/reg_center.rb in Active-0.0.12
- old
+ new
@@ -4,90 +4,87 @@
class RegCenterError < StandardError; end
class RegCenter < IActivity
require 'nokogiri'
require 'open-uri'
+ attr_accessor :asset_type_id
- attr_reader :metadata_loaded
+# attr_reader :metadata_loaded
# EXAMPLE Data hash
# {:asset_id=>"A9EF9D79-F859-4443-A9BB-91E1833DF2D5", :substitution_url=>"1878023", :asset_type_name=>"Active.com Event Registration",
# :asset_name=>"Fitness, Pilates Mat Class (16 Yrs. & Up)", :url=>"http://www.active.com/page/Event_Details.htm?event_id=1878023",
# :asset_type_id=>"EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65", :xmlns=>"http://api.asset.services.active.com"}
def initialize(data={})
# need to hold on to original data
- @data = data || {}
- @asset_id = data[:asset_id]
- @url = data[:url]
- @asset_id_type = data[:asset_type_id]
- @title = data[:asset_name] if data[:asset_name]
- @substitution_url = data[:substitution_url]
- @metadata_loaded = false
+ @data = HashWithIndifferentAccess.new(data) || HashWithIndifferentAccess.new
@api_data_loaded = false
+ @asset_type_id = "EA4E860A-9DCD-4DAA-A7CA-4A77AD194F65"
get_app_api
end
def source
:reg_center
end
def title
- get_app_api unless @api_data_loaded
if @data.has_key?("event") && @data["event"].has_key?("eventName")
cleanup_reg_string(@data["event"]["eventName"])
- else
- load_metadata unless @metadata_loaded
- if @data.has_key?("assetName")
- @data["assetName"]
- else
- @title
- end
end
end
def event_image_url
- get_app_api unless @api_data_loaded
if @data.has_key?("event") && @data["event"].has_key?("eventImageUrl")
@data["event"]["eventImageUrl"]
end
end
def url
- # best info is not in API call
- load_metadata unless @metadata_loaded
- if @data.has_key?("seourl")
- @data["seourl"]
- elsif @data.has_key?("trackbackurl")
- @data["trackbackurl"]
- else
- @url
+ if @data.has_key?("event") && @data["event"].has_key?("eventDetailsPageUrl")
+ @data["event"]["eventDetailsPageUrl"]
+ elsif @data.has_key?("event") && @data["event"].has_key?("registrationUrl")
+ @data["event"]["registrationUrl"]
+ elsif @data.has_key?("event") && @data["event"].has_key?("eventContactUrl")
+ @data["event"]["eventContactUrl"]
end
end
def categories
- get_app_api unless @api_data_loaded
- if @data["event"]["channels"]["channel"]!=nil
- @data["event"]["channels"]["channel"].collect {|e| e["channelName"]}
- else
- load_metadata unless @metadata_loaded
- @data["channel"]
+ if @data.has_key?("event") && @data["event"].has_key?("channels") && @data["event"]["channels"]!=nil && @data["event"]["channels"].has_key?("channel") && @data["event"]["channels"]["channel"]!=nil
+ channels = @data["event"]["channels"]["channel"]
+ if channels.class==Array
+ @data["event"]["channels"]["channel"].collect {|e| e["channelName"]}
+ else
+ #hash
+ [channels["channelName"]]
+ end
end
end
+ def asset_id
+ if @data.has_key?("event") && @data["event"].has_key?("assetID")
+ @data["event"]["assetID"]
+ end
+ end
+
def primary_category
- get_app_api unless @api_data_loaded
if @data["event"]["channels"]["channel"]!=nil
- @data["event"]["channels"]["channel"].each do |c|
- return c["channelName"] if c.has_key?("primaryChannel")
- end
- else
- categories.first
+ channels = @data["event"]["channels"]["channel"]
+ if channels.class==Array
+ channels.each do |c|
+ return c["channelName"] if c.has_key?("primaryChannel") && c["primaryChannel"]=="true"
+ end
+ else
+ #hash
+ return channels["channelName"] if channels.has_key?("primaryChannel") && channels["primaryChannel"]=="true"
+ end
+ #fallback
+ return category
end
end
def address
- get_app_api unless @api_data_loaded
if @data.has_key?("event") && @data["event"].has_key?("eventAddress") && !@data["event"]["eventAddress"].blank?
@address = {
:name => @data["event"]["eventLocation"],
:address => @data["event"]["eventAddress"],
:city => @data["event"]["eventCity"],
@@ -95,66 +92,48 @@
:zip => @data["event"]["eventZip"],
:lat => @data["event"]["latitude"],
:lng => @data["event"]["longitude"],
:country => @data["event"]["eventCountry"]
}
- else
- load_metadata unless @metadata_loaded
- @address = {
- :name => @data["location"],
- :address => @data["address"],
- :city => @data["city"],
- :state => @data["state"],
- :zip => @data["zip"],
- :lat => @data["latitude"],
- :lng => @data["longitude"],
- :country => @data["country"]
- }
end
end
def start_date
- load_metadata unless @metadata_loaded
- DateTime.parse @data["startDate"] if @data.has_key?("startDate")
+ DateTime.parse @data["event"]["eventDate"] if @data.has_key?("event") && @data["event"].has_key?("eventDate")
end
def start_time
- load_metadata unless @metadata_loaded
- @data["startTime"]
+ start_date
end
def end_time
- load_metadata unless @metadata_loaded
- @data["endTime"]
+ nil
end
def end_date
- load_metadata unless @metadata_loaded
- DateTime.parse @data["endDate"] if @data.has_key?("endDate")
+ nil
end
def category
primary_category
end
def desc
- get_app_api unless @api_data_loaded
if @data.has_key?("event") && @data["event"].has_key?("briefDescription")
ret=@data["event"]["briefDescription"]
- if data["event"].has_key?("eventDetails")
- data["event"]["eventDetails"]["eventDetail"].each do |detail|
- ret +="<div><b>" + detail["eventDetailsName"] + ":</b> " + cleanup_reg_string(detail["eventDetailsValue"]) + "</div>"
+ if @data["event"].has_key?("eventDetails") && @data["event"]["eventDetails"]!=nil && @data["event"]["eventDetails"].has_key?("eventDetail")
+ eventDetail = @data["event"]["eventDetails"]["eventDetail"]
+ if eventDetail.class==Array
+ @data["event"]["eventDetails"]["eventDetail"].each do |detail|
+ ret +="<div><b>" + detail["eventDetailsName"] + ":</b> " + cleanup_reg_string(detail["eventDetailsValue"]) + "</div>"
+ end
+ else
+ #hash
+ ret +="<div><b>" + eventDetail["eventDetailsName"] + ":</b> " + cleanup_reg_string(eventDetail["eventDetailsValue"]) + "</div>"
end
end
ret
- else
- load_metadata unless @metadata_loaded
- if @data.has_key?("allText")
- @data["allText"]
- elsif @data.has_key?("summary")
- @data["summary"]
- end
end
end
def cleanup_reg_string(input)
input.gsub("\r","").gsub("\n","").gsub("\"","""").gsub("\342\200\234","""").gsub("\342\200\235","""")
@@ -166,55 +145,54 @@
# def some_crazy
# return @some_crazy unless @some_crazy.nil?
# @some_crazy = @data[:some_crazy_method_from_ats].split replace twist bla bla bla
# end
- def self.find_by_id(id)
- begin
- r = self.get_asset_by_id(id)
- return RegCenter.new(r.to_hash[:get_asset_by_id_response][:out])
- rescue Savon::SOAPFault => e
- raise RegCenterError, "Couldn't find activity with the id of #{id}"
- return
- end
+ def self.find_by_id(id) #local id
+ return RegCenter.new({:id=>id})
end
private
- def self.get_asset_metadata(id)
- c = Savon::Client.new("http://api.amp.active.com/asset-service/services/AssetService?wsdl")
- c.request.headers["Api-Key"] = "6npky9t57235vps5cetm3s7k"
- r = c.get_asset_metadata do |soap|
- soap.namespace = "http://api.asset.services.active.com"
- soap.body = "<context><userId></userId><applicationId></applicationId></context><assetId>#{id}</assetId>"
- end
- puts "==========="
- puts r.to_hash[:get_asset_metadata_response][:out].inspect
- return r
- end
-
- def self.get_asset_by_id(id)
- puts "loading ATS"
- c = Savon::Client.new("http://api.amp.active.com/asset-service/services/AssetService")
- c.request.headers["Api-Key"] = "6npky9t57235vps5cetm3s7k"
- r = c.get_asset_by_id! do |soap|
- soap.namespace = "http://api.asset.services.active.com"
- soap.body = "<context><userId></userId><applicationId></applicationId></context><assetId>#{id}</assetId>"
- end
- return r
- end
-
- def load_metadata
- puts "loading ATS metadata"
- metadata = ATS.get_asset_metadata(@asset_id)
- @data.merge! Hash.from_xml(metadata.to_hash[:get_asset_metadata_response][:out])["importSource"]["asset"]
- @metadata_loaded=true
- end
+ # def self.get_asset_metadata(id)
+ # c = Savon::Client.new("http://api.amp.active.com/asset-service/services/AssetService?wsdl")
+ # c.request.headers["Api-Key"] = "6npky9t57235vps5cetm3s7k"
+ # r = c.get_asset_metadata do |soap|
+ # soap.namespace = "http://api.asset.services.active.com"
+ # soap.body = "<context><userId></userId><applicationId></applicationId></context><assetId>#{id}</assetId>"
+ # end
+ # puts "==========="
+ # puts r.to_hash[:get_asset_metadata_response][:out].inspect
+ # return r
+ # end
+ #
+ # def self.get_asset_by_id(id)
+ # puts "loading ATS"
+ # c = Savon::Client.new("http://api.amp.active.com/asset-service/services/AssetService")
+ # c.request.headers["Api-Key"] = "6npky9t57235vps5cetm3s7k"
+ # r = c.get_asset_by_id! do |soap|
+ # soap.namespace = "http://api.asset.services.active.com"
+ # soap.body = "<context><userId></userId><applicationId></applicationId></context><assetId>#{id}</assetId>"
+ # end
+ # return r
+ # end
+ #
+ # def load_metadata
+ # puts "loading ATS metadata"
+ # metadata = ATS.get_asset_metadata(@asset_id)
+ # @data.merge! Hash.from_xml(metadata.to_hash[:get_asset_metadata_response][:out])["importSource"]["asset"]
+ # @metadata_loaded=true
+ # end
def get_app_api
puts "loading reg center api"
- doc = Nokogiri::XML(open("http://apij.active.com/regcenter/event/#{@substitution_url}"))
- @data.merge! Hash.from_xml doc.to_s
- @api_data_loaded=true
+ begin
+ doc = Nokogiri::XML(open("http://apij.active.com/regcenter/event/#{@data[:id]}"))
+ @data.merge! Hash.from_xml doc.to_s
+ @api_data_loaded=true
+ rescue
+ raise RegCenterError, "Couldn't find Reg Center activity with the id of #{id}"
+ return
+ end
end
end # end ats
end
end