csv_pirate 2.0.1 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ Version 2.1.0 2009-10-01
2
+ - Added handling of nested methods!
3
+
1
4
  Version 2.0.1 2009-10-01
2
5
  - Fixed Readme formatting
3
6
 
data/README.rdoc CHANGED
@@ -183,6 +183,63 @@ OR
183
183
 
184
184
  csv_pirate = CsvPirate.new({:swag => users,:waggoner => 'inactive_users_not_logged_in',:booty => ["id","number","login","created_at"],:chart => 'log/csv/'})
185
185
 
186
+ == Advanced Example with Nested Methods
187
+
188
+ You have a VehicleModel class and the same Make class as up above:
189
+
190
+ # == Schema Information
191
+ #
192
+ # Table name: vehicle_models
193
+ #
194
+ # id :integer(4) not null, primary key
195
+ # name :string(255)
196
+ # year :integer(4)
197
+ # horsepower :integer(4)
198
+ # price :integer(4)
199
+ # electric :boolean(1)
200
+ # make_id :integer(4)
201
+ #
202
+
203
+ class VehicleModel < ActiveRecord::Base
204
+ belongs_to :make
205
+ has_csv_pirate_ship :booty => [:id, :name, :year,
206
+ {:make => :name},
207
+ {:tires => {:size => {:width => :inches}}}]
208
+ def tires; TireSize.new; end
209
+ end
210
+
211
+ class TireSize
212
+ # To call an instance method you need to return an instance
213
+ def size; TireWidth.new; end
214
+ end
215
+
216
+ class TireWidth
217
+ # To call a class method you need to return the class object
218
+ def width; Measurement; end
219
+ end
220
+
221
+ class Measurement
222
+ def self.inches; 13; end
223
+ end
224
+
225
+ Then to create the CSV:
226
+
227
+ a = VehicleModel.walk_the_plank
228
+
229
+ Then check the output from the console:
230
+
231
+ a.weigh_anchor
232
+
233
+ id,name,year,makename,tiressizewidthinches
234
+ 1,Cavalier,1999,Chevrolet,13
235
+ 2,Trailblazer,2006,Chevrolet,13
236
+ 3,Corvette,2010,Chevrolet,13
237
+ 4,Mustang,1976,Ford,13
238
+ 5,Lebaron,1987,Chrysler,13
239
+ 6,Avalon,1996,Toyota,13
240
+ => #<File:/Users/pboling/RubymineProjects/empty_csv_pirate_app/log/VehicleModel.20091001.export.2.csv (closed)>
241
+
242
+ Joy to recursive code everywhere!
186
243
 
187
244
  ----------------------------------------------------------------------------------
188
245
  Author: Peter Boling, peter.boling at gmail dot com
data/Rakefile CHANGED
@@ -15,7 +15,6 @@ It works better if you are wearing a tricorne!}
15
15
  "init.rb",
16
16
  "rails/init.rb",
17
17
  "install.rb",
18
- "about.yml",
19
18
  "lib/csv_pirate.rb",
20
19
  "lib/ninth_bit/pirate_ship.rb",
21
20
  "Rakefile",
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :major: 2
3
- :minor: 0
4
2
  :patch: 1
3
+ :major: 2
4
+ :minor: 1
data/csv_pirate.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{csv_pirate}
8
- s.version = "2.0.1"
8
+ s.version = "2.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Peter Boling"]
@@ -23,7 +23,6 @@ It works better if you are wearing a tricorne!}
23
23
  "README.rdoc",
24
24
  "Rakefile",
25
25
  "VERSION.yml",
26
- "about.yml",
27
26
  "csv_pirate.gemspec",
28
27
  "init.rb",
29
28
  "install.rb",
data/lib/csv_pirate.rb CHANGED
@@ -158,7 +158,12 @@ class CsvPirate
158
158
  def prize(spoils)
159
159
  gold_doubloons = []
160
160
  self.booty.each do |plunder|
161
- gold_doubloons << spoils.send(plunder.to_sym)
161
+ # Check for nestedness
162
+ if plunder.is_a?(Hash)
163
+ gold_doubloons << CsvPirate.marlinespike(spoils, plunder)
164
+ else
165
+ gold_doubloons << spoils.send(plunder.to_sym)
166
+ end
162
167
  end
163
168
  gold_doubloons
164
169
  end
@@ -286,6 +291,26 @@ class CsvPirate
286
291
  ############ CLASS METHODS #############
287
292
  ########################################
288
293
 
294
+ # if this is your booty:
295
+ # {:booty => [
296
+ # :id,
297
+ # {:region => {:country => :name }, :state => :name },
298
+ # :name
299
+ # ]}
300
+ # so nested_hash = {:region => {:country => :name }, :state => :name }
301
+ def self.marlinespike(spoils, navigation)
302
+ navigation.map do |east,west|
303
+ spoils = spoils.send(east.to_sym)
304
+ if west.is_a?(Hash)
305
+ # Recursive nadness is here!
306
+ spoils = CsvPirate.marlinespike(spoils, west)
307
+ else
308
+ spoils = spoils.send(west.to_sym)
309
+ end
310
+ spoils
311
+ end.join(' - ')
312
+ end
313
+
289
314
  # Used to read any loot found by any pirate
290
315
  def self.rinse(quarterdeck)
291
316
  File.open(File.expand_path(quarterdeck), "r") do |bucket_line|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_pirate
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -30,7 +30,6 @@ files:
30
30
  - README.rdoc
31
31
  - Rakefile
32
32
  - VERSION.yml
33
- - about.yml
34
33
  - csv_pirate.gemspec
35
34
  - init.rb
36
35
  - install.rb
data/about.yml DELETED
@@ -1,7 +0,0 @@
1
- author:
2
- name: Peter H. Boling
3
- homepage: http://www.peterboling.com
4
- summary: How does a Pirate create CSVs? With the waggoner, charts, spyglasses, chronometers, swag, and grub.
5
- version: 2.0.1
6
- rails_version: 1.0+
7
- license: MIT