csv_class_maker 0.3.0 → 0.3.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.
- checksums.yaml +7 -0
- data/lib/csv_class_maker/csv_class_maker.rb +2 -4
- data/lib/csv_class_maker/csv_find.rb +16 -38
- data/spec/csv_class_maker_spec.rb +1 -1
- metadata +9 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 948e6040124f37290122b5405595b00889cfb579
|
4
|
+
data.tar.gz: 48ed1b40e8b145f0d58f5d32857e3ffb7b40ee92
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 109692828cc8410b9d10d3fd7f7f28b2a8e7972267e5cb987d7b43522aa7ce711254bcfa734a8639460cfd96188f3fbb23a7d3a213850ddf9eaec6c3363f31d2
|
7
|
+
data.tar.gz: 82c30a2788e9c90af06da059f006d82c0c0a75f9b3e86c4dc84adf04c9fe6e16389a7aeeaa692882534008c6e59a6220ff7fa9634cd20a5d47c036ac93a0bb55
|
@@ -48,12 +48,10 @@ module CsvClassMaker
|
|
48
48
|
private
|
49
49
|
|
50
50
|
def self.extract_headers(file_name, options)
|
51
|
-
@csv_headers = []
|
52
51
|
csv_file = File.open(file_name,'r')
|
53
52
|
|
54
|
-
CSV.new(csv_file, options).first.
|
55
|
-
|
53
|
+
@csv_headers = CSV.new(csv_file, options).first.map do |headers, values|
|
54
|
+
headers
|
56
55
|
end
|
57
|
-
@csv_headers
|
58
56
|
end
|
59
57
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
module CsvClassMaker::CsvFind
|
2
|
-
|
3
2
|
def all
|
4
3
|
rewind
|
5
|
-
|
6
|
-
file.each {|row| object_array << build_instance(row, file.lineno) }
|
7
|
-
object_array
|
4
|
+
file.map { |row| build_instance(row, file.lineno) }
|
8
5
|
end
|
9
6
|
|
10
7
|
def find_by(key_val_pair)
|
@@ -13,40 +10,34 @@ module CsvClassMaker::CsvFind
|
|
13
10
|
end
|
14
11
|
|
15
12
|
def find_all_by(key_val_pair)
|
16
|
-
|
17
|
-
output_objects = []
|
18
|
-
rows.each { |row|
|
19
|
-
output_objects << build_instance(row, row[:line_number])
|
20
|
-
}
|
21
|
-
output_objects
|
13
|
+
search(key_val_pair).map { |row| build_instance(row, row[:line_number]) }
|
22
14
|
end
|
23
15
|
|
24
16
|
def find(line_number)
|
25
|
-
if (first_line..last_line).include? line_number
|
26
|
-
|
17
|
+
row = if (first_line..last_line).include? line_number
|
18
|
+
front_find(line_number, file.path)
|
27
19
|
elsif (middle_line..last_line).include? line_number
|
28
|
-
|
29
|
-
else
|
30
|
-
row = nil
|
20
|
+
back_find(line_number, file.path)
|
31
21
|
end
|
32
|
-
|
22
|
+
|
23
|
+
row.nil? ? row : build_instance(row, line_number)
|
33
24
|
end
|
34
25
|
|
35
26
|
def first
|
36
27
|
rewind
|
37
|
-
build_instance
|
28
|
+
build_instance(file.first, first_line)
|
38
29
|
end
|
39
30
|
|
40
31
|
def last
|
41
32
|
command = `head -n 1 #{file.path} && tail -n 1 #{file.path}`
|
42
33
|
last_row = CSV.new(command, file_options).first
|
43
|
-
build_instance
|
34
|
+
build_instance(last_row, last_line)
|
44
35
|
end
|
45
36
|
|
46
37
|
def each
|
47
38
|
rewind
|
48
39
|
(first_line..last_line).each do |line_number|
|
49
|
-
yield find
|
40
|
+
yield find(line_number)
|
50
41
|
end
|
51
42
|
end
|
52
43
|
|
@@ -54,7 +45,7 @@ module CsvClassMaker::CsvFind
|
|
54
45
|
|
55
46
|
def build_instance(row, line)
|
56
47
|
new_instance = self.new
|
57
|
-
row.each { |key, value| new_instance.send
|
48
|
+
row.each { |key, value| new_instance.send("#{key}=".to_sym, value) }
|
58
49
|
new_instance.line_number = line
|
59
50
|
return new_instance
|
60
51
|
end
|
@@ -68,29 +59,17 @@ module CsvClassMaker::CsvFind
|
|
68
59
|
@results = file
|
69
60
|
@pairs = key_val_pair
|
70
61
|
|
71
|
-
@pairs.each { |pair|
|
72
|
-
@results = dig(pair, @results)
|
73
|
-
}
|
62
|
+
@pairs.each { |pair| @results = dig(pair, @results) }
|
74
63
|
|
75
64
|
@results
|
76
65
|
end
|
77
66
|
|
78
67
|
def dig(hash_pair, rows)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
rows.each { |row|
|
84
|
-
if row[@key] == @value
|
85
|
-
if $. != last_line
|
86
|
-
@accumulator << row.push(line_number: $.) if $. != last_line
|
87
|
-
else
|
88
|
-
@accumulator << row
|
89
|
-
end
|
68
|
+
rows.map do |row|
|
69
|
+
if row[hash_pair.first] == hash_pair.last
|
70
|
+
$. != last_line ? row.push(line_number: $.) : row
|
90
71
|
end
|
91
|
-
|
92
|
-
|
93
|
-
@accumulator
|
72
|
+
end.reject(&:nil?)
|
94
73
|
end
|
95
74
|
|
96
75
|
def front_find(line_number, file_path)
|
@@ -101,5 +80,4 @@ module CsvClassMaker::CsvFind
|
|
101
80
|
command = `head -n 1 #{file_path} && tail -n #{last_line - line_number} #{file_path} | head -n 1`
|
102
81
|
CSV.new(command, file_options).first
|
103
82
|
end
|
104
|
-
|
105
83
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv_class_maker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mark Platt
|
@@ -14,7 +13,6 @@ dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,13 +20,12 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
|
-
description:
|
31
|
-
|
27
|
+
description: '''csv_class_maker will create a class out of your csv''s headers, and
|
28
|
+
provide some methods for finding data in the CSV'''
|
32
29
|
email: mplatt@mrkplt.com
|
33
30
|
executables: []
|
34
31
|
extensions: []
|
@@ -41,27 +38,26 @@ files:
|
|
41
38
|
homepage: http://mrkplt.com
|
42
39
|
licenses:
|
43
40
|
- MIT
|
41
|
+
metadata: {}
|
44
42
|
post_install_message:
|
45
43
|
rdoc_options: []
|
46
44
|
require_paths:
|
47
45
|
- lib
|
48
46
|
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
47
|
requirements:
|
51
|
-
- -
|
48
|
+
- - '>='
|
52
49
|
- !ruby/object:Gem::Version
|
53
50
|
version: 1.9.3
|
54
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
52
|
requirements:
|
57
|
-
- -
|
53
|
+
- - '>='
|
58
54
|
- !ruby/object:Gem::Version
|
59
55
|
version: '0'
|
60
56
|
requirements: []
|
61
57
|
rubyforge_project:
|
62
|
-
rubygems_version:
|
58
|
+
rubygems_version: 2.0.14
|
63
59
|
signing_key:
|
64
|
-
specification_version:
|
65
|
-
summary:
|
60
|
+
specification_version: 4
|
61
|
+
summary: '''Object oriented CSV reading'''
|
66
62
|
test_files:
|
67
63
|
- spec/csv_class_maker_spec.rb
|