Skip to content

Instantly share code, notes, and snippets.

@edugonch
Last active June 26, 2018 01:21
Show Gist options
  • Save edugonch/f71d9f81865cb00ae8bba83b789c9367 to your computer and use it in GitHub Desktop.
Save edugonch/f71d9f81865cb00ae8bba83b789c9367 to your computer and use it in GitHub Desktop.
require 'date'
$config = {
"formats" => {
"comma" => {
"date_format" => "%m/%d/%Y",
"parts" => {
"date" => 2,
"city" => 1,
"name" => 0
},
"split" => ", ",
"cities" => {
"New York City" => "New York City",
"Atlanta" => "Atlanta",
"Los Angeles" => "Los Angeles"
}
},
"dollar" => {
"date_format" => "%m-%d-%Y",
"parts" => {
"date" => 1,
"city" => 0,
"last_name" => 2,
"name" => 3
},
"split" => " $ ",
"cities" => {
"NYC" => "New York City",
"ATLN" => "Atlanta",
"LA" => "Los Angeles"
}
},
"date_print" => "%-m/%-d/%Y"
}
}
class Entity
attr_accessor :name, :last_name, :city, :date
def initialize(params={})
@name = params[:name]
@last_name = params[:last_name]
@city = params[:city]
@date = params[:date]
end
def to_s
"#{@name} #{@city} #{@date}"
end
end
class StringParser
def self.call(params)
string = params[:string]
format = params[:format]
format_hash = $config['formats'][format]
parts = string.split(format_hash['split'])
name = parts[format_hash['parts']['name']]
last_name = format_hash['parts']['last_name'] ? parts[format_hash['parts']['last_name']] : nil
city = format_hash['cities'][parts[format_hash['parts']['city']]]
date = Date.strptime(parts[format_hash['parts']['date']], format_hash['date_format']).strftime($config['formats']['date_print'])
Entity.new(name: name, city: city, date: date, last_name: last_name)
end
end
class App
def self.run(params)
comma = params[:comma].map{|c| StringParser.call(string: c, format: 'comma') }
dollar = params[:dollar].map{|d| StringParser.call(string: d, format: 'dollar') }
comma.concat(dollar).sort_by{|x| x.city}.each{|c| puts c}
end
end
COMMA_ENTRIES = [ # First name, City, Birth date
'Mckayla, Atlanta, 5/29/1986',
'Elliot, New York City, 4/3/1947',
]
DOLLAR_ENTRIES = [ # City, Birth date, Last name, First name
'LA $ 10-4-1974 $ Nolan $ Rhiannon',
'NYC $ 12-1-1962 $ Bruen $ Rigoberto',
]
App.run(comma: COMMA_ENTRIES, dollar: DOLLAR_ENTRIES)
# WRITE YOUR SPECS HERE
puts "\n\n\n"
puts "Test model correct to_s"
entity = Entity.new(name: 'Rhiannon', last_name: 'Nolan', city: 'New York City', date: '04/03/1947')
puts "Assert equal #{'Rhiannon New York City 04/03/1947' == entity.to_s}"
puts "************************************************"
puts "Test string parser with dollar"
entity = StringParser.call(string: 'LA $ 10-4-1974 $ Nolan $ Rhiannon', format: 'dollar')
puts "Instance of Entity? #{entity.instance_of?(Entity)}"
puts "Assert equal #{'Rhiannon Los Angeles 10/4/1974' == entity.to_s}"
puts "************************************************"
puts "Test string parser with comma"
entity = StringParser.call(string: 'Elliot, New York City, 4/3/1947', format: 'comma')
puts "Instance of Entity? #{entity.instance_of?(Entity)}"
puts "Assert equal #{'Elliot New York City 4/3/1947' == entity.to_s}"
puts "************************************************"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment