Skip to content

Instantly share code, notes, and snippets.

@jasonm23
Created May 21, 2010 00:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jasonm23/408318 to your computer and use it in GitHub Desktop.
Save jasonm23/408318 to your computer and use it in GitHub Desktop.
#!/usr/bin/ruby
# convert a legacy config.xml
require 'rubygems'
require 'active_support'
require 'rexml/document'
include REXML
stdin = ARGF.read
if stdin != ""
begin
x = Document.new stdin
locale = x.root.attributes["locale"]
menuUrl = x.elements["//setting[@key='menuUrl']"].attributes['value']
minimumMenuRefreshTime = x.elements["//setting[@key='minimumMenuRefreshTime']"].attributes['value']
eventFeedPrefix = x.elements["//setting[@key='eventFeedPrefix']"].attributes['value']
minimumEventRefreshTime = x.elements["//setting[@key='minimumEventRefreshTime']"].attributes['value']
domain = menuUrl.match('http:\/\/(.*)\/')[1]
bookingMarketNames = x.elements["//setting[@key='bookingMarketNames']"].attributes['value']
cornerMarketNames = x.elements["//setting[@key='cornerMarketNames']"].attributes['value']
scoreMarketNames = x.elements["//setting[@key='scoreMarketNames']"].attributes['value']
betSlipFunctionName = x.elements["//setting[@key='betSlipFunctionName']"].attributes['value']
dict = x.elements.to_a("//setting[@key='language']//dict")
menuAllEvents = x.elements["//setting[@key='menuAllEvents']"].attributes['value']
menu = x.elements.to_a("//setting[@key='menuTopLevel']//menu")
imageType = x.elements["//setting[@key='imageType']"].attributes['value']
imageBasePath = x.elements["//setting[@key='imageBasePath']"].attributes['value']
defaultEventImage = x.elements["//setting[@key='defaultEventImage']"].attributes['value']
eventTypeImage = x.elements.to_a("//setting[@key='eventTypeImages']//eventTypeImage")
eventImage = x.elements.to_a("//setting[@key='eventImageKeys']//eventImage")
# Create the builder...
xm = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
xm.instruct!
xm.comment! "WARNING: AUTO GENERATED CONFIG (converted) DO NOT EDIT"
xm.comment! "orbis feed domain : #{domain}"
xm.config( :locale => locale, :name => "config_#{locale}" ) {
xm.comment! "service"
xm.setting( :key => 'eventService', :value => eventFeedPrefix )
xm.setting( :key => 'minimumEventRefreshTime', :value => minimumEventRefreshTime )
xm.setting( :key => 'menuService', :value => menuUrl )
xm.setting( :key => 'minimumMenuRefreshTime', :value => minimumMenuRefreshTime )
xm.setting( :key => 'serviceDomain', :value => domain )
xm.comment! "javascript interface - betslip function name"
xm.setting( :key => 'betSlipFunctionName', :value => betSlipFunctionName )
xm.comment! "market names"
xm.setting( :key => 'bookingMarketNames', :value => bookingMarketNames )
xm.setting( :key => 'cornerMarketNames', :value => cornerMarketNames )
xm.setting( :key => 'scoreMarketNames', :value => scoreMarketNames )
xm.comment! "language"
xm.setting( :key => 'language' ) {
dict.each { |mx|
xm.dict( :key => mx.attributes['key'], :value => mx.attributes['value'] )
}
xm.dict( :key => 'menuAllEvents', :value => menuAllEvents )
}
xm.comment! "menu"
xm.setting( :key => 'menuTopLevel' ) {
menu.each { |mx|
xm.menu( :name => mx.attributes['name'], :key => mx.attributes['key'], :filter => mx.attributes['filter'], :order => mx.attributes['order'] )
}
}
xm.comment! "runtime images"
xm.setting( :key => 'defaultEventImage', :value => defaultEventImage )
xm.setting( :key => 'imageBasePath', :value => imageBasePath )
xm.setting( :key => 'imageType', :value => imageType )
xm.comment! "image - event id"
xm.setting( :key => 'eventTypeImages' ) {
eventImage.each { |ex|
xm.eventImage( :key => ex.attributes['key'], :value => ex.attributes['value'].match(/(.*)(\.png)/)[1] )
}
}
xm.comment! "event type images"
xm.setting( :key => 'eventTypeImages' ) {
eventTypeImage.each { |ex|
xm.eventTypeImage( :filename => ex.attributes['filename'].match(/(.*)(\.png)/)[1] )
}
}
}
rescue
puts "incoming config format not recognised"
end
else
puts "Usage: source | ./convert.rb > dest"
end
#!/usr/bin/ruby
=begin
This is a simple config importer, needs to be integrated into a controller (eg.)
controllers/ConfigurationsController::import
And a view(s) for getting the import file and showing error / successs
views/configuration/import.dryml
Or better still, add import functionality to the configurations/index view
=end
require 'rubygems'
require 'active_support'
require 'rexml/document'
include REXML
## input comes from uploaded file... http://google.com/search?q=upload+file+ruby+rails
infileText = ""
if infileText != ""
begin
x = Document.new infileText
locale = x.root.attributes["locale"]
menuUrl = x.elements["//setting[@key='menuUrl']"].attributes['value']
minimumMenuRefreshTime = x.elements["//setting[@key='minimumMenuRefreshTime']"].attributes['value']
eventFeedPrefix = x.elements["//setting[@key='eventFeedPrefix']"].attributes['value']
minimumEventRefreshTime = x.elements["//setting[@key='minimumEventRefreshTime']"].attributes['value']
domain = menuUrl.match('http:\/\/(.*)\/')[1]
bookingMarketNames = x.elements["//setting[@key='bookingMarketNames']"].attributes['value'].split(';')
cornerMarketNames = x.elements["//setting[@key='cornerMarketNames']"].attributes['value'].split(';')
scoreMarketNames = x.elements["//setting[@key='scoreMarketNames']"].attributes['value'].split(';')
betSlipFunctionName = x.elements["//setting[@key='betSlipFunctionName']"].attributes['value']
dict = x.elements.to_a("//setting[@key='language']//dict")
menu = x.elements.to_a("//setting[@key='menuTopLevel']//menu")
imageType = x.elements["//setting[@key='imageType']"].attributes['value']
imageBasePath = x.elements["//setting[@key='imageBasePath']"].attributes['value']
defaultEventImage = x.elements["//setting[@key='defaultEventImage']"].attributes['value']
eventTypeImage = x.elements.to_a("//setting[@key='eventTypeImages']//eventTypeImage")
eventImage = x.elements.to_a("//setting[@key='eventImageKeys']//eventImage")
# Create the config...
conf = Configuration.new
conf.name = "config_#{locale}"
conf.locale = locale
conf.minimumMenuRefreshTime = minimumMenuRefreshTime
conf.minimumEventRefreshTime = minimumEventRefreshTime
conf.betSlipFunctionName = betSlipFunctionName
conf.imageType = imageType
conf.imageBasePath = imageBasePath
conf.defaultEventImage = defaultEventImage
conf.create
cfgId = conf.id
# menu
menu.each { |mx|
mn = Menu.new
mn.translate = mx.attributes['name']
mn.name = mx.attributes['key']
mn.filterClass = mx.attributes['filter']
mn.order = mx.attributes['order']
mn.configuration_id = cfgId
mn.create
}
# language
dict.each { |d|
t = Translation.new
t.name = d.attributes['key']
t.translate = d.attributes['value']
t.configuration_id = cfgId
t.create
}
# Markets...
scoreMarketNames.each { |name|
m = ScoreMarketName.new
m.name = name
m.configuration_id = cfgId
m.create
}
cornerMarketNames.each { |name|
m = CornerMarketName.new
m.name = name
m.configuration_id = cfgId
m.create
}
bookingMarketNames.each { |name|
m = BookingMarketName.new
m.name = name
m.configuration_id = cfgId
m.create
}
# Services - probably better to make this straight yaml - but what-the-hey!
defaultServices = [
{
:name => "Live",
:menuService => "bir_xml_feed?action=category%26ev_category=1",
:eventService => "bir_xml_feed?action=event%26ev_id=",
:domain => "centrebet.com"
},
{
:name => "UAT",
:menuService => "bir_xml_feed?action=category%26ev_category=1",
:eventService => "bir_xml_feed?action=event%26ev_id=",
:domain => "puntuat1.com"
},
{
:name => "Test1",
:menuService => "bir_xml_feed?action=category%26ev_category=1",
:eventService => "bir_xml_feed?action=event%26ev_id=",
:domain => "punttest1.com"
},
{
:name => "Test",
:menuService => "bir_xml_feed?action=category%26ev_category=5",
:eventService => "bir_xml_feed?action=event%26ev_id=",
:domain => "203.42.122.7"
}
]
defaultServices.each { |serv|
se = Service.new
se.name = serv[:name]
se.menuService = serv[:domain] + serv[:menuService]
se.eventService = serv[:domain] + serv[:eventService]
se.domain = serv[:domain]
se.configuration_id = cfgId
se.create
}
rescue
# redirect to error page #1
end
else
# redirect to error page #2
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment