csv_madness 0.0.4 → 0.0.6

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.
@@ -3,7 +3,6 @@ require 'helper'
3
3
  class TestCsvMadness < MadTestCase
4
4
  context "all:" do
5
5
  setup do
6
- set_spreadsheet_paths
7
6
  load_simple_spreadsheet
8
7
  end
9
8
 
@@ -14,12 +13,12 @@ class TestCsvMadness < MadTestCase
14
13
  context "testing sheet basics" do
15
14
  should "not accept duplicate search paths" do
16
15
  @path_count = CsvMadness::Sheet.search_paths.length
17
- CsvMadness::Sheet.add_search_path( Pathname.new( __FILE__ ).dirname.join("csv") )
16
+ CsvMadness::Sheet.add_search_path( @csv_load_path )
18
17
  assert_equal @path_count, CsvMadness::Sheet.search_paths.length
19
18
  end
20
19
 
21
20
  should "load a simple spreadsheet" do
22
- simple = CsvMadness::Sheet.from("simple.csv")
21
+ simple = CsvMadness::Sheet.from( "simple.csv" )
23
22
  assert_equal "Mary", simple[0].fname
24
23
  assert_equal "Paxton", simple[1].lname
25
24
  assert_equal "72", simple[2].age
@@ -0,0 +1,40 @@
1
+ require 'helper'
2
+
3
+ class TestMergingColumns < MadTestCase
4
+ context "with a simple spreadsheet loaded" do
5
+ setup do
6
+ set_spreadsheet_paths
7
+ load_simple_spreadsheet
8
+ end
9
+
10
+ teardown do
11
+
12
+ end
13
+
14
+ should "merge :age column into :born column, and drop :born column" do
15
+ @simple.merge_columns( :age, :born )
16
+ assert @simple.columns.include?( :born )
17
+ assert !@simple.columns.include?( :age )
18
+
19
+ load_mary
20
+ assert_equal "27", @mary.born
21
+ end
22
+
23
+ should "merge :age column into :born column, and keep :born column" do
24
+ @simple.merge_columns( :age, :born, :drop_source => false )
25
+ assert @simple.columns.include?( :born )
26
+ assert @simple.columns.include?( :age )
27
+
28
+ load_mary
29
+ assert_equal "27", @mary.born
30
+ end
31
+
32
+ should "concatanate first and last names" do
33
+ @simple.concatenate( :fname, :lname, :separator => " " )
34
+ @simple.rename_column( :fname, :full_name )
35
+
36
+ load_darwin
37
+ assert_equal "Charles Darwin", @darwin.full_name
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ class TestCsvMadness < MadTestCase
4
+ context "with a simple spreadsheet loaded" do
5
+ setup do
6
+ set_spreadsheet_paths
7
+ load_simple_spreadsheet
8
+ set_person_records
9
+ end
10
+
11
+ should "reset spreadsheet by reloading from file" do
12
+ assert @mary.respond_to?(:lname)
13
+ assert @darwin.respond_to?(:fname)
14
+ assert @mary.born.is_a?(String)
15
+
16
+ muck_up_spreadsheet
17
+ set_person_records
18
+
19
+ assert !@mary.respond_to?(:lname)
20
+ assert !@darwin.respond_to?(:fname)
21
+ assert @mary.born.is_a?(Float)
22
+
23
+ @simple.reload_spreadsheet
24
+ set_person_records
25
+
26
+ assert @mary.respond_to?(:lname)
27
+ assert @darwin.respond_to?(:fname)
28
+ end
29
+ end
30
+ end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestCsvMadness < MadTestCase
3
+ class TestSheet < MadTestCase
4
4
  context "testing getter_name()" do
5
5
  should "return proper function names" do
6
6
  assert_equal :hello_world, CsvMadness::Sheet.getter_name( " heLLo __ world " )
@@ -10,15 +10,114 @@ class TestCsvMadness < MadTestCase
10
10
 
11
11
  context "testing default spreadsheet paths" do
12
12
  should "only load existing paths" do
13
- assert_raise(RuntimeError) do
13
+ assert_raises(RuntimeError) do
14
14
  CsvMadness::Sheet.add_search_path( CsvMadness.root.join("rocaganthor") )
15
15
  end
16
16
  end
17
17
 
18
18
  should "check a search path for files to load" do
19
- CsvMadness::Sheet.add_search_path( CsvMadness.root.join("test", "csv") )
20
19
  sheet = CsvMadness.load( "with_nils.csv" )
21
20
  assert sheet.is_a?(CsvMadness::Sheet)
22
21
  end
23
22
  end
23
+
24
+ context "testing column_types" do
25
+ should "gracefully handle empty strings for all column_types" do
26
+ sheet = CsvMadness.load("test_column_types.csv")
27
+
28
+ for type, ignore_proc in CsvMadness::Sheet::COLUMN_TYPES
29
+ sheet.set_column_type( type, type )
30
+ end
31
+
32
+ record = sheet.records[0]
33
+
34
+ assert_kind_of String, record.date
35
+ assert_equal nil, record.number
36
+ assert_equal nil, record.float
37
+
38
+ record = sheet.records[1]
39
+ assert_equal "12", record.id
40
+ assert_equal 134.2, record.number
41
+ assert_equal 100, record.integer
42
+ assert_equal Time.parse("2013-01-13"), record.date
43
+ end
44
+ end
45
+
46
+ context "testing add/remove records" do
47
+ setup do
48
+ @sheet = CsvMadness.load( "simple.csv", :index => :id )
49
+ end
50
+
51
+ should "add record" do
52
+ count = @sheet.records.length
53
+ @sheet.add_record( @sheet.records.first.to_hash )
54
+ assert_equal count + 1, @sheet.records.length
55
+
56
+ for method in [:id, :fname, :lname, :age, :born]
57
+ assert_equal @sheet.records.first.send(method), @sheet.records.last.send(method)
58
+ end
59
+ end
60
+
61
+ should "test remove_record" do
62
+ count = @sheet.records.length
63
+ record = @sheet.records.last
64
+ record_id = record.id
65
+
66
+ assert @sheet.fetch(:id, record_id) != nil
67
+
68
+
69
+ @sheet.remove_record( record )
70
+ assert_equal (count - 1), @sheet.records.length
71
+ assert @sheet.fetch(:id, record_id) == nil
72
+
73
+ count = @sheet.records.length
74
+ record = @sheet.records[0]
75
+ record_id = record.id
76
+
77
+ @sheet.remove_record( 0 )
78
+ assert_nil @sheet.fetch(:id, record_id)
79
+ assert_equal (count - 1), @sheet.records.length
80
+ end
81
+ end
82
+
83
+ context "testing blanking and splitting of spreadsheet" do
84
+ should "deliver me a properly blanked spreadsheet (simple)" do
85
+ sheet = CsvMadness.load( "splitter.csv" )
86
+ blank_sheet = sheet.blanked
87
+
88
+ sheet.length.times do |i|
89
+ blank_sheet.add_record( sheet.remove_record( 0 ) )
90
+ end
91
+
92
+ assert_zero sheet.length
93
+ assert_equal 10, blank_sheet.length
94
+ assert_nil blank_sheet.spreadsheet_file
95
+ end
96
+
97
+ should "deliver me a properly blanked spreadsheet (index)" do
98
+ sheet = CsvMadness.load( "splitter.csv", :index => [:id] )
99
+ blank_sheet = sheet.blanked
100
+ end
101
+
102
+ should "split splitter" do
103
+ sheet = CsvMadness.load( "splitter.csv", :index => [:id, :party] )
104
+
105
+ sheets = sheet.split(&:party)
106
+
107
+ for party in %w(D I R)
108
+ assert_equal_length sheets[party], sheet.records.select{|r| r.party == party }
109
+ end
110
+
111
+ assert_includes sheets["D"].index_columns, :id
112
+ assert_includes sheets["I"].index_columns, :party
113
+ end
114
+ end
115
+
116
+ context "testing hilarious spreadsheet fails" do
117
+ should "raise error on forbidden column name" do
118
+ assert_raises(RuntimeError) do
119
+ sheet = CsvMadness.load( "forbidden_column.csv" )
120
+ end
121
+ end
122
+ end
24
123
  end
metadata CHANGED
@@ -1,100 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_madness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bryce Anderson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-07 00:00:00.000000000 Z
11
+ date: 2014-06-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: fun_with_files
14
+ name: fun_with_gems
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: shoulda
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rdoc
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
19
+ version: 0.0.2
51
20
  - - ~>
52
21
  - !ruby/object:Gem::Version
53
- version: '3.12'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '3.12'
62
- - !ruby/object:Gem::Dependency
63
- name: bundler
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 1.3.0
70
- type: :development
22
+ version: '0.0'
23
+ type: :runtime
71
24
  prerelease: false
72
25
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 1.3.0
78
- - !ruby/object:Gem::Dependency
79
- name: jeweler
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
26
  requirements:
83
- - - ~>
27
+ - - ! '>='
84
28
  - !ruby/object:Gem::Version
85
- version: 1.8.4
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
29
+ version: 0.0.2
91
30
  - - ~>
92
31
  - !ruby/object:Gem::Version
93
- version: 1.8.4
32
+ version: '0.0'
94
33
  - !ruby/object:Gem::Dependency
95
- name: debugger
34
+ name: fun_with_testing
96
35
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
36
  requirements:
99
37
  - - ! '>='
100
38
  - !ruby/object:Gem::Version
@@ -102,7 +40,6 @@ dependencies:
102
40
  type: :development
103
41
  prerelease: false
104
42
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
43
  requirements:
107
44
  - - ! '>='
108
45
  - !ruby/object:Gem::Version
@@ -116,47 +53,51 @@ extra_rdoc_files:
116
53
  - LICENSE.txt
117
54
  - README.rdoc
118
55
  files:
119
- - ./CHANGELOG.markdown
120
- - ./Gemfile
121
- - ./README.rdoc
122
- - ./Rakefile
123
- - ./VERSION
124
56
  - ./lib/csv_madness.rb
57
+ - ./lib/csv_madness/builder.rb
125
58
  - ./lib/csv_madness/data_accessor_module.rb
59
+ - ./lib/csv_madness/gem_api.rb
126
60
  - ./lib/csv_madness/record.rb
127
61
  - ./lib/csv_madness/sheet.rb
62
+ - ./test/csv/forbidden_column.csv
128
63
  - ./test/csv/simple.csv
64
+ - ./test/csv/splitter.csv
65
+ - ./test/csv/test_column_types.csv
66
+ - ./test/csv/with_nils.csv
129
67
  - ./test/helper.rb
68
+ - ./test/test_builder.rb
130
69
  - ./test/test_csv_madness.rb
70
+ - ./test/test_merging_columns.rb
71
+ - ./test/test_reloading_spreadsheet.rb
131
72
  - ./test/test_sheet.rb
73
+ - CHANGELOG.markdown
74
+ - Gemfile
132
75
  - LICENSE.txt
133
76
  - README.rdoc
77
+ - Rakefile
78
+ - VERSION
134
79
  homepage: http://github.com/darthschmoo/csv_madness
135
80
  licenses:
136
81
  - MIT
82
+ metadata: {}
137
83
  post_install_message:
138
84
  rdoc_options: []
139
85
  require_paths:
140
86
  - lib
141
87
  required_ruby_version: !ruby/object:Gem::Requirement
142
- none: false
143
88
  requirements:
144
89
  - - ! '>='
145
90
  - !ruby/object:Gem::Version
146
91
  version: '0'
147
- segments:
148
- - 0
149
- hash: 1185350757253474800
150
92
  required_rubygems_version: !ruby/object:Gem::Requirement
151
- none: false
152
93
  requirements:
153
94
  - - ! '>='
154
95
  - !ruby/object:Gem::Version
155
96
  version: '0'
156
97
  requirements: []
157
98
  rubyforge_project:
158
- rubygems_version: 1.8.25
99
+ rubygems_version: 2.2.2
159
100
  signing_key:
160
- specification_version: 3
101
+ specification_version: 4
161
102
  summary: CSV Madness turns your CSV rows into happycrazy objects.
162
103
  test_files: []