Skip to content

Instantly share code, notes, and snippets.

@danahern
Created October 10, 2008 22:23
Show Gist options
  • Save danahern/16168 to your computer and use it in GitHub Desktop.
Save danahern/16168 to your computer and use it in GitHub Desktop.
require 'net/http'
require 'uri'
require 'hpricot'
module PhoneSystem
class Phone
attr_accessor :action, :destination_number, :upbid, :published_number
attr_accessor :local_to_number, :unassigned_type, :allowed_delayed_provisions, :toll_free_if_no_match, :local_assignment_order, :local_require_rc_match
attr_accessor :local_require_npa_match, :local_distance_match, :max_numbers, :extension, :name, :allow_delayed_provisioning, :start_date, :end_date, :suspended
attr_accessor :new_number_date, :new_number, :toll_free_if_no_match, :permitted_area_codes, :prohibitied_area_codes, :prohibitied_numbers, :verify_company_name
attr_accessor :min_miles_verify, :min_miles_prohibit, :days_outbound_is_sticky, :record_calls, :email, :send_email, :caller_audio, :destination_audio
attr_accessor :var1, :var2, :var3, :var4, :var5, :var6, :var7, :var8, :var9, :var10, :ring_timeout_1, :phone_2, :ring_timeout2, :phone3, :cost_per_call
attr_accessor :cost_per_call_field, :request_number, :filter_field, :filter_value, :days_since_deleted
def initialize(attrs = {})
attrs.each do |key, value|
__send__("#{key}=", value)
end
end
def destination_number=(value)
@destination_number = "1"+value.scan(/\d{3}-\d{3}-\d{4}/).first.gsub("-",'')
end
def phone2=(value)
@phone2 = "1"+value.scan(/\d{3}-\d{3}-\d{4}/).first.gsub("-",'')
end
def extension=(value)
phone = value.split(/\d{3}-\d{3}-\d{4}/)
if phone.size > 1
unless phone.last.gsub(/-x/,'').blank?
return @extension = ","+phone.last.gsub(/[-|x]/,'')
end
end
@extension = nil
end
end
class Generator
class << self
def generate_request(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("request")
xml.DestinationNumber(phone_system.destination_number)
xml.Extension(phone_system.extension)
xml.Name(phone_system.name)
xml.RecordCalls("1")
xml.CallerAudio("")
xml.DestinationAudio("")
xml.var1(phone_system.var1)
xml.var2(phone_system.var2)
xml.RingTimeout1(phone_system.ring_timeout_1)
xml.Phone2(phone_system.phone_2)
# xml.LocalToNumber("17038600000")
# xml.UnassignedType("Trak Auto Listing")
# xml.AllowDelayedProvisioning("Trak Auto Listing")
# xml.StartDate("Trak Auto Listing")
# xml.NewNumberDate("Trak Auto Listing")
# xml.NewNumber("Trak Auto Listing")
# xml.EndDate("Trak Auto Listing")
# xml.suspended("Trak Auto Listing")
# xml.TollFreeIfNoMatch("Trak Auto Listing")
# xml.LocalAssignmentOrder("Trak Auto Listing")
# xml.LocalRequireRCMatch("Trak Auto Listing")
# xml.LocalRequireNPAMatch("Trak Auto Listing")
# xml.LocalDistanceMatch("Trak Auto Listing")
# xml.PermittedAreaCodes("Trak Auto Listing")
# xml.ProhibitiedAreaCodes("Trak Auto Listing")
# xml.ProhibitedNumbers("Trak Auto Listing")
# xml.VerifyCompanyName("Trak Auto Listing")
# xml.MinMilesVerify("Trak Auto Listing")
# xml.MinMilesProhibit("Trak Auto Listing")
# xml.DaysOutboundIsSticky("Trak Auto Listing")
# xml.AllowDelayedProvisioning("Trak Auto Listing")
# xml.Email("Trak Auto Listing")
# xml.SendEmail("Trak Auto Listing")
# xml.var3("Parts and Services")
# xml.var4("Trak Auto")
# xml.var5("Vienna Trak Auto")
# xml.var6("Parts department")
# xml.var7("")
# xml.var8("")
# xml.var9("")
# xml.var10("")
# xml.RingTimeout2("")
# xml.Phone3("")
# xml.Balance("5.00")
# xml.CostPerCall("Trak Auto Listing")
# xml.CostPerCallField("Trak Auto Listing")
# xml.DaysOutboundIsSticky("Trak Auto Listing")
# xml.RequestNumber("Trak Auto Listing")
end
end
def generate_inventory(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("inventory")
xml.DestinationNumber(phone_system.destination_number)
# xml.LocalToNumber("17038600000")
# xml.UnassignedType("local")
# xml.TollFreeIfNoMatch("0")
# xml.LocalRequireNPAMatch("1")
# xml.LocalAssignmentOrder("rc npa dist")
# xml.AllowDelayedProvisioning("1")
end
end
def generate_getfulfilled(phone_system, field, value)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("getfulfilled")
xml.UPBID(phone_system.upbid)
xml.FilterField(field) unless field.blank?
xml.FilterValue(value) unless value.blank?
end
end
def generate_updatefulfilled(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("updatefulfilled")
xml.UPBID(phone_system.upbid)
xml.PublishedNumber(phone_system.published_number)
xml.DestinationNumber(phone_system.destination_number)
xml.Name(phone_system.name)
xml.Extension(phone_system.extension)
xml.var1(phone_system.var1)
xml.var2(phone_system.var2)
xml.RingTimeout1(phone_system.ring_timeout_1)
xml.Phone2(phone_system.phone_2)
#xml.RingTimeout2("")
# xml.var3("")
# xml.var4("")
# xml.var5("")
# xml.var6("")
# xml.var7("")
# xml.var8("")
# xml.var9("")
# xml.var10("")
# xml.Phone3("")
# xml.BalanceIncrement("")
end
end
def generate_deletefulfilled(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("deletefulfilled")
xml.PublishedNumber(phone_system.published_number) unless phone_system.published_number.blank?
xml.DestinationNumber(phone_system.destination_number) unless phone_system.destination_number.blank?
xml.UPBID(phone_system.upbid) unless phone_system.upbid.blank?
end
end
def generate_getdeleted(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("getdeleted")
xml.UPBID(phone_system.upbid) unless phone_system.upbid.blank?
#xml.FilterField()
#xml.FilterValue()
#xml.dayssincedeleted("")
end
end
def generate_undeletedeleted(phone_system)
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version=> "1.0", :encoding => "UTF-8"
xml.PhoneBuilder do
xml.login("ctpartner")
xml.password("ctpartner")
xml.action("deletefulfilled")
xml.PublishedNumber(phone_system.published_number)
xml.DestinationNumber(phone_system.destination_number)
end
end
end
end
def gather_information(type, objects = {})
url = URI.parse('http://as00.estara.com/webcare/phonebuilder/xml.php')
server = Net::HTTP.new(url.host, url.port)
data = case type
when "request"
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :extension => objects[:dealership].phone,
:name => objects[:dealership].companyname, :var1 => objects[:dealership].id, :var2 => "motors", :ring_timeout_1 => "10", :phone_2 => objects[:dealership].phone2)
Generator.generate_request(phone_system)
when "inventory"
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone)
Generator.generate_inventory(phone_system)
when "getfulfilled"
phone_system = PhoneSystem::Phone.new(:upbid => objects[:dealership].upbid,
:filter_field => objects[:phone][:filter_field], :filter_value => objects[:phone][:filter_value])
Generator.generate_getfulfilled(phone_system)
when "updatefulfilled"
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :extension => objects[:dealership].phone,
:published_number => objects[:dealership].estara_phone, :upbid => objects[:dealership].upbid,
:name => objects[:dealership].companyname, :var1 => objects[:dealership].id, :var2 => "motors", :ring_timeout_1 => "10", :phone_2 => objects[:dealership].phone2)
Generator.generate_updatefulfilled(phone_system)
when "deletefulfilled"
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone,
:published_number => objects[:dealership].estara_phone, :upbid => objects[:dealership].upbid)
Generator.generate_deletefulfilled(phone_system)
when "getdeleted"
phone_system = PhoneSystem::Phone.new(:upbid => objects[:dealership].upbid)
Generator.generate_getdeleted(phone_system)
when "undeletedeleted"
phone_system = PhoneSystem::Phone.new(:destination_number => objects[:dealership].phone, :published_number => objects[:dealership].estara_phone)
Generator.generate_undeletedeleted(phone_system)
end
response = server.post(url.path, data)
doc = Hpricot.XML(response.body)
case type
when "inventory"
use_inventory(doc)
when "getfulfilled"
use_getfulfilled(doc)
when "updatefulfilled"
use_updatefulfilled(doc, objects[:dealership])
when "request"
use_request(doc, objects[:dealership])
when "deletefulfilled"
use_deletefulfilled(doc, objects[:dealership])
when "getdeleted"
use_getdeleted(doc)
when "undeletedeleted"
use_undeletedeleted(doc)
end
end
def use_request(doc, dealership)
if doc.at("status")['code'] == "0"
dealership.estara_phone = doc.at("status").inner_html
dealership.upbid = doc.at("UPBID").inner_html
dealership.save
end
end
def use_inventory(doc)
#Don't know what we'll use this for
end
def use_getfulfilled(doc)
#Don't know what we'll use this for
end
def use_updatefulfilled(doc, dealership)
if doc.at("status")['code'] == "0"
dealership.estara_phone = doc.at("status").inner_html
dealership.upbid = doc.at("UPBID").inner_html
dealership.save
end
end
def use_deletefulfilled(doc, dealership)
if doc.at("status")['code'] == "0"
dealership.estara_phone = nil
dealership.upbid = nil
dealership.save
end
end
def use_getdeleted(doc)
#Don't know what we'll use this for
end
def use_undeletedeleted(doc)
#Don't know what we'll use this for
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment