csv_pirate 2.0.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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