remote_table 2.0.0 → 2.0.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/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --no-private
2
+ --readme README.markdown
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ 2.0.1 / 2012-05-16
2
+
3
+ * Enhancements
4
+
5
+ * For single-string transliteration to UTF-8, use ActiveSupport::Inflector.transliterate instead of Iconv - possibly a future-proof solution.
6
+ * For whole-file transliteration to UTF-8, warn users if iconv binary is not available in their $PATH.
7
+
1
8
  2.0.0 / 2012-05-08
2
9
 
3
10
  * Breaking changes
data/README.markdown CHANGED
@@ -21,11 +21,9 @@ It's also a big part of
21
21
  ## Example
22
22
 
23
23
  >> require 'remote_table'
24
- remote_table.rb:8:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
25
- [remote_table] Apologies - using iconv because Ruby 1.9.x's String#encode doesn't have transliteration tables (yet)
26
24
  => true
27
25
  >> t = RemoteTable.new 'http://www.fueleconomy.gov/FEG/epadata/98guide6.zip', :filename => '98guide6.csv'
28
- => #<RemoteTable:0x00000101b87390 @download_count_mutex=#<Mutex:0x00000101b87228>, @iconv_mutex=#<Mutex:0x00000101b87200>, @extend_bang_mutex=#<Mutex:0x00000101b871d8>, @errata_mutex=#<Mutex:0x00000101b871b0>, @cache=[], @download_count=0, @url="http://www.fueleconomy.gov/FEG/epadata/98guide6.zip", @format=nil, @headers=:first_row, @compression=:zip, @packing=nil, @streaming=false, @warn_on_multiple_downloads=true, @delimiter=",", @sheet=nil, @keep_blank_rows=false, @form_data=nil, @skip=0, @internal_encoding="UTF-8", @row_xpath=nil, @column_xpath=nil, @row_css=nil, @column_css=nil, @glob=nil, @filename="98guide6.csv", @transform_settings=nil, @cut=nil, @crop=nil, @schema=nil, @schema_name=nil, @pre_select=nil, @pre_reject=nil, @errata_settings=nil, @other_options={}, @transformer=#<RemoteTable::Transformer:0x00000101b8c2f0 @t=#<RemoteTable:0x00000101b87390 ...>, @legacy_transformer_mutex=#<Mutex:0x00000101b8c2a0>>, @local_copy=#<RemoteTable::LocalCopy:0x00000101b8bf58 @t=#<RemoteTable:0x00000101b87390 ...>, @encoded_io_mutex=#<Mutex:0x00000101b8be18>, @generate_mutex=#<Mutex:0x00000101b8bdc8>>>
26
+ => #<RemoteTable:0x00000101b87390 @download_count_mutex=#<Mutex:0x00000101b87228>, @extend_bang_mutex=#<Mutex:0x00000101b871d8>, @errata_mutex=#<Mutex:0x00000101b871b0>, @cache=[], @download_count=0, @url="http://www.fueleconomy.gov/FEG/epadata/98guide6.zip", @format=nil, @headers=:first_row, @compression=:zip, @packing=nil, @streaming=false, @warn_on_multiple_downloads=true, @delimiter=",", @sheet=nil, @keep_blank_rows=false, @form_data=nil, @skip=0, @internal_encoding="UTF-8", @row_xpath=nil, @column_xpath=nil, @row_css=nil, @column_css=nil, @glob=nil, @filename="98guide6.csv", @transform_settings=nil, @cut=nil, @crop=nil, @schema=nil, @schema_name=nil, @pre_select=nil, @pre_reject=nil, @errata_settings=nil, @other_options={}, @transformer=#<RemoteTable::Transformer:0x00000101b8c2f0 @t=#<RemoteTable:0x00000101b87390 ...>, @legacy_transformer_mutex=#<Mutex:0x00000101b8c2a0>>, @local_copy=#<RemoteTable::LocalCopy:0x00000101b8bf58 @t=#<RemoteTable:0x00000101b87390 ...>, @encoded_io_mutex=#<Mutex:0x00000101b8be18>, @generate_mutex=#<Mutex:0x00000101b8bdc8>>>
29
27
  >> t.rows.length
30
28
  => 806
31
29
  >> t.rows.first.length
@@ -2,7 +2,8 @@ require 'fileutils'
2
2
  require 'unix_utils'
3
3
 
4
4
  class RemoteTable
5
- class LocalCopy #:nodoc:all
5
+ # @private
6
+ class LocalCopy
6
7
  class << self
7
8
  def decompress(input, compression)
8
9
  output = case compression
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'unix_utils'
2
3
 
3
4
  class RemoteTable
4
5
  # Helper methods that act on plaintext files before they are parsed
@@ -15,12 +16,16 @@ class RemoteTable
15
16
  local_copy.in_place :perl, "s/#{CONSIDERED_HARMFUL.join('//g; s/')}//g"
16
17
  end
17
18
 
18
- # No matter what the file encoding is SUPPOSED to be, run it through iconv to make sure it's UTF-8
19
+ # No matter what the file encoding is SUPPOSED to be, run it through the system iconv binary to make sure it's UTF-8
19
20
  #
20
21
  # @example
21
22
  # iconv -c -t UTF-8//TRANSLIT -f WINDOWS-1252
22
23
  def transliterate_whole_file_to_utf8!
23
- local_copy.in_place :iconv, RemoteTable::EXTERNAL_ENCODING_ICONV, internal_encoding
24
+ if ::UnixUtils.available?('iconv')
25
+ local_copy.in_place :iconv, RemoteTable::EXTERNAL_ENCODING_ICONV, internal_encoding
26
+ else
27
+ ::Kernel.warn %{[remote_table] iconv not available in your $PATH, not performing transliteration}
28
+ end
24
29
  # now that we've force-transliterated to UTF-8, act as though this is what the user had specified
25
30
  @internal_encoding = RemoteTable::EXTERNAL_ENCODING
26
31
  end
@@ -1,3 +1,3 @@
1
1
  class RemoteTable
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
data/lib/remote_table.rb CHANGED
@@ -5,16 +5,11 @@ end
5
5
 
6
6
  require 'thread'
7
7
 
8
- require 'iconv'
9
- if RUBY_VERSION >= '1.9'
10
- # for an excellent explanation see http://blog.segment7.net/2010/12/17/from-iconv-iconv-to-string-encode
11
- Kernel.warn "[remote_table] Apologies - using iconv because Ruby 1.9.x's String#encode doesn't have transliteration tables (yet)"
12
- end
13
-
14
8
  require 'active_support'
15
9
  require 'active_support/version'
16
10
  if ::ActiveSupport::VERSION::MAJOR >= 3
17
11
  require 'active_support/core_ext'
12
+ require 'active_support/inflector/transliterate'
18
13
  end
19
14
  require 'hash_digest'
20
15
 
@@ -149,8 +144,11 @@ class RemoteTable
149
144
 
150
145
  # The URL of the local or remote file.
151
146
  #
152
- # * Local: "file:///Users/myuser/Desktop/holidays.csv"
153
- # * Remote: "http://data.brighterplanet.com/countries.csv"
147
+ # @example Local
148
+ # file:///Users/myuser/Desktop/holidays.csv
149
+ #
150
+ # @example Remote
151
+ # http://data.brighterplanet.com/countries.csv
154
152
  #
155
153
  # @return [String]
156
154
  attr_reader :url
@@ -347,7 +345,6 @@ class RemoteTable
347
345
  # :pre_select => proc { |row| row['Vehicle Age'].strip =~ /^\d+$/ }
348
346
  def initialize(*args)
349
347
  @download_count_mutex = ::Mutex.new
350
- @iconv_mutex = ::Mutex.new
351
348
  @extend_bang_mutex = ::Mutex.new
352
349
  @errata_mutex = ::Mutex.new
353
350
 
@@ -509,15 +506,9 @@ class RemoteTable
509
506
  !!@fully_cached
510
507
  end
511
508
 
512
- def iconv
513
- @iconv || @iconv_mutex.synchronize do
514
- @iconv ||= ::Iconv.new(EXTERNAL_ENCODING_ICONV, internal_encoding)
515
- end
516
- end
517
-
518
509
  def transliterate_to_utf8(str)
519
510
  if str.is_a?(::String)
520
- [ iconv.iconv(str), iconv.iconv(nil) ].join
511
+ ::ActiveSupport::Inflector.transliterate str
521
512
  end
522
513
  end
523
514
 
@@ -150,4 +150,8 @@ describe RemoteTable do
150
150
  t[4]['col1'].must_equal "Manage Multiple Incentive Programs for Participants"
151
151
  end
152
152
 
153
+ it "doesn't get confused by :format => nil" do
154
+ t = RemoteTable.new :url => 'http://www.fueleconomy.gov/FEG/epadata/00data.zip', :filename => 'G6080900.xls', :format => nil
155
+ t[0]['Class'].must_equal 'TWO SEATERS'
156
+ end
153
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remote_table
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-08 00:00:00.000000000 Z
13
+ date: 2012-05-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -135,6 +135,7 @@ extra_rdoc_files: []
135
135
  files:
136
136
  - .gitattributes
137
137
  - .gitignore
138
+ - .yardopts
138
139
  - CHANGELOG
139
140
  - Gemfile
140
141
  - LICENSE