Skip to content

Instantly share code, notes, and snippets.

@rafaelp
Created November 29, 2011 20:23
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 rafaelp/1406310 to your computer and use it in GitHub Desktop.
Save rafaelp/1406310 to your computer and use it in GitHub Desktop.
Como refatorar esse método?
# conteúdo do CSV
SF,Técnico Legislativo,Direito Constitucional,Constitucionalismo
SF,Técnico Legislativo,Direito Constitucional,Teoria do Estado
# método para refatorar
def self.concourses_from_file(file_path)
return @concourses unless @concourses.nil?
@concourses = {}
CSV.foreach(file_path) do |row|
@concourses[row[0].upcase] ||= {}
@concourses[row[0].upcase][row[2]] ||= []
@concourses[row[0].upcase][row[2]] << row[3]
end
@concourses
end
# hash esperado
{"SF"=>{"Direito Constitucional"=>["Constitucionalismo", "Teoria do Estado"]}}
@felipecsl
Copy link

Tenta isso se estiver usando ruby 1.9

def self.concourses_from_file(file_path)
    @concourses ||= Hash.new.tap do |concourses|
      CSV.foreach(file_path) do |row|
        concourses[row[0].upcase] ||= {}
        concourses[row[0].upcase][row[2]] ||= []
        concourses[row[0].upcase][row[2]] << row[3]
      end
    end
  end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment