aboutsummaryrefslogtreecommitdiffstats
path: root/lib/roo/spreadsheet.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/roo/spreadsheet.rb')
-rw-r--r--lib/roo/spreadsheet.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/roo/spreadsheet.rb b/lib/roo/spreadsheet.rb
new file mode 100644
index 0000000..1eef58d
--- /dev/null
+++ b/lib/roo/spreadsheet.rb
@@ -0,0 +1,33 @@
+require 'uri'
+
+module Roo
+ class Spreadsheet
+ class << self
+ def open(path, options = {})
+ path = path.respond_to?(:path) ? path.path : path
+ extension = extension_for(path, options)
+
+ begin
+ Roo::CLASS_FOR_EXTENSION.fetch(extension).new(path, options)
+ rescue KeyError
+ raise ArgumentError,
+ "Can't detect the type of #{path} - please use the :extension option to declare its type."
+ end
+ end
+
+ def extension_for(path, options)
+ case (extension = options.delete(:extension))
+ when ::Symbol
+ options[:file_warning] = :ignore
+ extension
+ when ::String
+ options[:file_warning] = :ignore
+ extension.tr('.', '').downcase.to_sym
+ else
+ res = ::File.extname((path =~ /\A#{::URI.regexp}\z/) ? ::URI.parse(::URI.encode(path)).path : path)
+ res.tr('.', '').downcase.to_sym
+ end
+ end
+ end
+ end
+end