loady 0.6.0 → 0.7.0

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/README.rdoc CHANGED
@@ -20,7 +20,7 @@ By default, messages are logged to the standard output.
20
20
 
21
21
  Basic usage:
22
22
 
23
- Loady.csv "/your/file.csv" do |row|
23
+ Loady.read "/your/file.csv" do |row|
24
24
  # your code to process each row goes here
25
25
  puts "#{row[0]}, #{row[1]}, etc."
26
26
  end
@@ -29,19 +29,19 @@ Skip the first row and log to a file:
29
29
 
30
30
  logger = Logger.new "/your/file.log"
31
31
 
32
- Loady.csv "/your/file.csv", logger: logger, skip_first_row: true do |row|
32
+ Loady.read "/your/file.csv", logger: logger, skip_first_row: true do |row|
33
33
  # do some stuff for each row
34
34
  end
35
35
 
36
36
  Name your attributes:
37
37
 
38
- Loady.csv "/your/file.csv" do |row|
38
+ Loady.read "/your/file.csv" do |row|
39
39
  Monkey.create row.to_attributes [:name, :year, :mom]
40
40
  end
41
41
 
42
42
  Load a tab-delimited file:
43
43
 
44
- Loady.csv "/your/file.tab", col_sep: "\t" do |row|
44
+ Loady.read "/your/file.tab", col_sep: "\t" do |row|
45
45
  # go bananas
46
46
  end
47
47
 
data/Rakefile CHANGED
@@ -1,14 +1,10 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- require 'bundler'
5
- Bundler::GemHelper.install_tasks
6
-
7
- require 'rake/testtask'
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
8
3
 
9
4
  task default: [:test]
10
5
 
11
6
  Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
12
8
  t.test_files = %w(test/**/*.rb)
13
9
  t.verbose = false
14
10
  end
data/lib/loady.rb CHANGED
@@ -3,8 +3,13 @@ require 'loady/csv_loader'
3
3
  require 'loady/memory_logger'
4
4
 
5
5
  module Loady
6
+ def read(*args, &block)
7
+ Loady::CsvLoader.new.read(*args, &block)
8
+ end
9
+ module_function :read
10
+
6
11
  def csv(*args, &block)
7
- Loady::CsvLoader.read(*args, &block)
12
+ Loady::CsvLoader.new.read(*args, &block)
8
13
  end
9
14
  module_function :csv
10
15
  end
@@ -12,21 +12,21 @@ module Loady
12
12
  def to_attributes(names, options={})
13
13
  options = { strip: true }.merge(options)
14
14
 
15
- h = {}
15
+ attr_hash = {}
16
16
 
17
17
  names.each_with_index do |name, i|
18
18
  if i < self.size
19
19
  if options[:strip] && self[i]
20
- h[name] = self[i].strip
20
+ attr_hash[name] = self[i].strip
21
21
  else
22
- h[name] = self[i]
22
+ attr_hash[name] = self[i]
23
23
  end
24
24
  else
25
- h[name] = nil
25
+ attr_hash[name] = nil
26
26
  end
27
27
  end
28
28
 
29
- h
29
+ attr_hash
30
30
  end
31
31
 
32
32
  end
@@ -3,57 +3,63 @@ require 'logger'
3
3
 
4
4
  module Loady
5
5
  class CsvLoader
6
+ def initialize
7
+ @success = 0
8
+ @warning = 0
9
+ @line_number = 0
10
+ end
6
11
 
7
12
  class << self
8
- # valid options:
9
- # skip_first_row: true -- default = false
10
- # logger: Logger.new('/somewhere/file.log') -- default = Logger.new(STDOUT)
11
- # plus any valid options you can pass to CSV.new:
12
- # see http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/classes/CSV.html#M000190
13
- def read(filename, options={})
14
- success = 0
15
- warning = 0
16
-
17
- logger = options.delete(:logger) || default_logger
18
-
19
- f = File.new(filename)
20
- f.readline if options.delete(:skip_first_row)
21
-
22
- line_number = 0
23
-
24
- begin
25
- while (line = f.readline)
26
- begin
27
- line_number += 1
28
-
29
- row = Loady::AttributeArray.new CSV.parse(line, options)[0]
30
-
31
- unless row.empty?
32
- yield row
33
- success += 1
34
- end
35
- rescue Exception => message
36
- warning += 1
37
- logger.warn "#{message.to_s.gsub("line 1", "line #{line_number}")}\n#{line}"
38
- end
39
- end
40
- rescue EOFError
41
- f.close
42
- rescue Exception => message
43
- warning += 1
44
- line_number += 1
45
- logger.error "#{message.to_s} - at line #{line_number}\n#{line}"
46
- end
13
+ def read(*args, &block)
14
+ self.new.read(*args, &block)
15
+ end
16
+ end
17
+
18
+ # valid options:
19
+ # skip_first_row: true -- default = false
20
+ # logger: Logger.new('/somewhere/file.log') -- default = Logger.new(STDOUT)
21
+ # plus any valid options you can pass to CSV.new:
22
+ # see http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/classes/CSV.html#M000190
23
+ def read(filename, options={}, &block)
24
+ @logger = options.delete(:logger) || default_logger
25
+
26
+ f = File.new(filename)
27
+ f.readline if options.delete(:skip_first_row)
47
28
 
48
- logger.info "Finished. Loaded #{success} rows. #{warning} unprocessed rows."
29
+ begin
30
+ while (line = f.readline)
31
+ readline(line, options, &block)
32
+ end
33
+ rescue EOFError
34
+ f.close
35
+ rescue Exception => message
36
+ @warning += 1
37
+ @line_number += 1
38
+ @logger.error "#{message} - at line #@line_number\n#{line}"
49
39
  end
50
40
 
51
- def default_logger
52
- logger = Logger.new(STDOUT)
53
- logger.datetime_format = "%H:%M:%S"
54
- logger
41
+ @logger.info "Finished. Loaded #@success rows. #@warning unprocessed rows."
42
+ end
43
+
44
+ private
45
+
46
+ def readline(line, options)
47
+ @line_number += 1
48
+ row = AttributeArray.new(CSV.parse(line, options)[0])
49
+
50
+ unless row.empty?
51
+ yield row
52
+ @success += 1
55
53
  end
54
+ rescue Exception => message
55
+ @warning += 1
56
+ @logger.warn "#{message.to_s.gsub("line 1", "line #@line_number")}\n#{line}"
57
+ end
56
58
 
59
+ def default_logger
60
+ logger = Logger.new(STDOUT)
61
+ logger.datetime_format = "%H:%M:%S"
62
+ logger
57
63
  end
58
64
  end
59
65
  end
data/lib/loady/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Loady
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
data/loady.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = %w(lib)
21
21
 
22
- s.add_development_dependency "test-unit"
23
- s.add_development_dependency "shoulda"
22
+ s.add_development_dependency "mocha"
24
23
  s.add_development_dependency "rake"
24
+ s.add_development_dependency "shoulda"
25
+ s.add_development_dependency "test-unit"
25
26
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
1
+ require 'test_helper'
2
2
 
3
3
  class AttributeArrayTest < Test::Unit::TestCase
4
4
  should "respond to to_attributes" do
@@ -1,11 +1,25 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
1
+ require 'test_helper'
2
2
 
3
3
  class CsvLoaderTest < Test::Unit::TestCase
4
+ should "delegate Loady.csv to instance #read" do
5
+ Loady::CsvLoader.any_instance.expects :read
6
+ Loady.csv("file")
7
+ end
8
+
9
+ should "delegate Loady.read to instance #read" do
10
+ Loady::CsvLoader.any_instance.expects :read
11
+ Loady.read("file")
12
+ end
13
+
14
+ should "delegate #read to instance #read" do
15
+ Loady::CsvLoader.any_instance.expects :read
16
+ Loady::CsvLoader.read("file")
17
+ end
4
18
 
5
19
  should "read file1" do
6
20
  monkeys = []
7
21
 
8
- Loady::CsvLoader.read "test/csv/file1.csv", skip_first_row: true do |row|
22
+ Loady.read "test/csv/file1.csv", skip_first_row: true do |row|
9
23
  monkeys << { name: row[0], year: row[1] }
10
24
  end
11
25
 
@@ -20,7 +34,7 @@ class CsvLoaderTest < Test::Unit::TestCase
20
34
  logger = Logger.new("/dev/null")
21
35
  monkeys = []
22
36
 
23
- Loady.csv "test/csv/file2.csv", logger: logger do |row|
37
+ Loady.read "test/csv/file2.csv", logger: logger do |row|
24
38
  monkeys << row.to_attributes([:name, :year])
25
39
  end
26
40
 
@@ -34,7 +48,7 @@ class CsvLoaderTest < Test::Unit::TestCase
34
48
  should "read file3, a tab-delimited file" do
35
49
  monkeys = []
36
50
 
37
- Loady.csv "test/csv/file3.dat", skip_first_row: true, col_sep: "\t" do |row|
51
+ Loady.read "test/csv/file3.dat", skip_first_row: true, col_sep: "\t" do |row|
38
52
  monkeys << { name: row[0], year: row[1] }
39
53
  end
40
54
 
@@ -1,4 +1,4 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
1
+ require 'test_helper'
2
2
 
3
3
  class MemoryLoggerTest < Test::Unit::TestCase
4
4
  context "memory logger" do
@@ -12,17 +12,17 @@ class MemoryLoggerTest < Test::Unit::TestCase
12
12
 
13
13
  should "log warning" do
14
14
  @logger.warn "message"
15
- assert_equal "message", @logger.messages.first.to_s
15
+ assert_equal "message", @logger.messages.first
16
16
  end
17
17
 
18
18
  should "log info" do
19
19
  @logger.info "message"
20
- assert_equal "message", @logger.messages.first.to_s
20
+ assert_equal "message", @logger.messages.first
21
21
  end
22
22
 
23
23
  should "log error" do
24
24
  @logger.error "message"
25
- assert_equal "message", @logger.messages.first.to_s
25
+ assert_equal "message", @logger.messages.first
26
26
  end
27
27
  end
28
28
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loady
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
5
4
  prerelease:
5
+ version: 0.7.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tee Parham
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-03 00:00:00.000000000 Z
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: test-unit
15
+ name: mocha
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
@@ -20,13 +20,29 @@ dependencies:
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :development
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
23
29
  prerelease: false
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
24
39
  version_requirements: !ruby/object:Gem::Requirement
25
40
  none: false
26
41
  requirements:
27
42
  - - ! '>='
28
43
  - !ruby/object:Gem::Version
29
44
  version: '0'
45
+ prerelease: false
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: shoulda
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -36,15 +52,15 @@ dependencies:
36
52
  - !ruby/object:Gem::Version
37
53
  version: '0'
38
54
  type: :development
39
- prerelease: false
40
55
  version_requirements: !ruby/object:Gem::Requirement
41
56
  none: false
42
57
  requirements:
43
58
  - - ! '>='
44
59
  - !ruby/object:Gem::Version
45
60
  version: '0'
61
+ prerelease: false
46
62
  - !ruby/object:Gem::Dependency
47
- name: rake
63
+ name: test-unit
48
64
  requirement: !ruby/object:Gem::Requirement
49
65
  none: false
50
66
  requirements:
@@ -52,13 +68,13 @@ dependencies:
52
68
  - !ruby/object:Gem::Version
53
69
  version: '0'
54
70
  type: :development
55
- prerelease: false
56
71
  version_requirements: !ruby/object:Gem::Requirement
57
72
  none: false
58
73
  requirements:
59
74
  - - ! '>='
60
75
  - !ruby/object:Gem::Version
61
76
  version: '0'
77
+ prerelease: false
62
78
  description: CSV file loader with simple logging
63
79
  email:
64
80
  - tee@neighborland.com
@@ -95,12 +111,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
111
  requirements:
96
112
  - - ! '>='
97
113
  - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
116
+ hash: 1518214605886805454
98
117
  version: '0'
99
118
  required_rubygems_version: !ruby/object:Gem::Requirement
100
119
  none: false
101
120
  requirements:
102
121
  - - ! '>='
103
122
  - !ruby/object:Gem::Version
123
+ segments:
124
+ - 0
125
+ hash: 1518214605886805454
104
126
  version: '0'
105
127
  requirements: []
106
128
  rubyforge_project: loady