Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.ruby > #7271
| Newsgroups | comp.lang.ruby |
|---|---|
| Date | 2016-07-03 07:01 -0700 |
| Message-ID | <df5ec7e9-0d75-4810-9f8c-5396113e8cc4@googlegroups.com> (permalink) |
| Subject | extract into a method - struggling to abstract |
| From | Sayth Renshaw <flebber.crue@gmail.com> |
Hi
I have working code that I have currently loops through an example returning matches via nokogiri module.
This works
require 'nokogiri'
require 'awesome_print'
@doc = Nokogiri::XML(File.open('/home/sayth/data/20160702RHIL0.xml'))
@doc.search('race').map do |race|
nominations = race.search('nomination')
.map do |nomination|
{
number: nomination['number'].to_i,
id: nomination['id'].to_i,
horse: nomination['horse'].to_s,
age: nomination['age'].to_i,
sex: nomination['sex'].to_s,
colour: /\W(.+?)\d?\s/.match(nomination['description'].to_s)[1]
}
end
a = { race['id'].to_i => nominations }
ap a
end
_______________________________________________________________________________
So at this point I know that I need to replicate this for 6 sections in total, logically to me then I want to abstract especially the middle.
{
number: nomination['number'].to_i,
id: nomination['id'].to_i,
horse: nomination['horse'].to_s,
age: nomination['age'].to_i,
sex: nomination['sex'].to_s,
colour: /\W(.+?)\d?\s/.match(nomination['description'].to_s)[1]
}
and substitute a variable into race.search('nomination') this to replace the word nomination and to then replace all 'nomination' in the above section.
So this is what I have done.
data = %w(number id horse age sex colour)
def extract_value(path_id, data)
@doc.search('race').map do |race|
puts path_id
nominations = race.search(path_id)
.map do | |
data
end
values = { race['id'].to_i => nominations }
ap values
return values
end
end
extract_value('nomination', data)
_______________________________________________________________________________
The main part I cannot wrap my head around is how to get these sections in without replicating it in the definition.
number: nomination['number'].to_i,
How can I better abstract this out?
Cheers
Sayth
Back to comp.lang.ruby | Previous | Next — Next in thread | Find similar
extract into a method - struggling to abstract Sayth Renshaw <flebber.crue@gmail.com> - 2016-07-03 07:01 -0700
Re: extract into a method - struggling to abstract Robert Klemme <shortcutter@googlemail.com> - 2016-07-03 18:52 +0200
Re: extract into a method - struggling to abstract Sayth Renshaw <flebber.crue@gmail.com> - 2016-07-04 05:58 -0700
Re: extract into a method - struggling to abstract Sayth Renshaw <flebber.crue@gmail.com> - 2016-07-04 04:27 -0700
Re: extract into a method - struggling to abstract Robert Klemme <shortcutter@googlemail.com> - 2016-07-05 23:21 +0200
csiph-web