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. &amp; 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