csv_madness 0.0.4 → 0.0.9

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