excelerate 0.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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,76 @@
1
+ Excelerate
2
+ ==========
3
+
4
+ Excelerate is a gem that adds a modern Ruby API to the classic
5
+ ParseExcel library. ParseExcel does a wonderful job of pulling the data
6
+ out of an Excel file, but its usability is lacking. Excelerate is
7
+ intended to address those woes.
8
+
9
+ Installation
10
+ ------------
11
+
12
+ Install via standard gem installation:
13
+
14
+ gem install excelerate
15
+
16
+ Add to `Gemfile`:
17
+
18
+ gem 'excelerate'
19
+
20
+ Usage
21
+ -----
22
+
23
+ Open a file via URL:
24
+
25
+ Excelerate.open 'http://example.com/example.xls'
26
+
27
+ Open a local file:
28
+
29
+ Excelerate.open 'example.xls'
30
+
31
+ Select a worksheet:
32
+
33
+ workbook = Excelerate.open(file)
34
+ first_sheet = workbook.first
35
+ second_sheet = workbook[1]
36
+
37
+ Get column headers:
38
+
39
+ first_sheet.column_headers
40
+
41
+ Loop through all cells:
42
+
43
+ first_sheet.each_cell { |cell| puts cell }
44
+
45
+ Loop through rows or columns:
46
+
47
+ first_sheet.rows.each { |row| puts row }
48
+ first_sheet.columns.each { |row| puts columns }
49
+
50
+ Grab an individual row or column:
51
+
52
+ first_sheet.row(4)
53
+ first_sheet.column(4)
54
+
55
+ Other Features
56
+ --------
57
+
58
+ * `attr_reader` for instance variables
59
+ * Can open files, strings, or URLs
60
+
61
+ To do
62
+ -----
63
+
64
+ * Make it work on Heroku by default
65
+
66
+ Contributing
67
+ ------------
68
+
69
+ Just issue a pull request!
70
+
71
+ License
72
+ -------
73
+
74
+ Released under the MIT license:
75
+
76
+ * http://www.opensource.org/licenses/MIT
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "excelerate/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "excelerate"
7
+ s.version = Excelerate::VERSION
8
+ s.authors = ["Matthew Culpepper"]
9
+ s.email = ["culpepper.matthew@gmail.com"]
10
+ s.homepage = "http://github.com/mculp/excelerate"
11
+ s.summary = %q{An extension to ParseExcel}
12
+ s.description = %q{An extension to ParseExcel with an updated, simple-to-use API}
13
+
14
+ s.rubyforge_project = "excelerate"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'parseexcel'
22
+ s.add_development_dependency 'rspec'
23
+ end
@@ -0,0 +1,18 @@
1
+ require "excelerate/version"
2
+ require "excelerate/util"
3
+ require "excelerate/parent_reader"
4
+
5
+ require "delegate"
6
+
7
+ require "excelerate/workbook"
8
+ require "excelerate/worksheet"
9
+ require "parseexcel"
10
+
11
+ module Excelerate
12
+ def self.open(args)
13
+ spreadsheet_file = Util::parse_args(args)
14
+ workbook = Spreadsheet::ParseExcel.parse(spreadsheet_file)
15
+
16
+ Workbook.new(:workbook => workbook)
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Excelerate
2
+ module ParentReader
3
+ def parent_reader(*args)
4
+ args.each do |arg|
5
+ class_eval <<-READER, __FILE__, __LINE__ + 1
6
+ def #{arg}
7
+ __getobj__.instance_variable_get(:@#{arg})
8
+ end
9
+ READER
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module Excelerate
2
+ module Util
3
+ def self.parse_args(args)
4
+ case args
5
+ when /^https?:\/\//
6
+ open_url(args)
7
+ when args.respond_to?(:seek)
8
+ args
9
+ when String
10
+ File.open(args, 'rb+')
11
+ end
12
+ end
13
+
14
+ def self.open_url(args)
15
+ require 'open-uri'
16
+ open(args)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module Excelerate
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ module Excelerate
2
+ class Workbook < SimpleDelegator
3
+ def initialize(options = {})
4
+ __setobj__ options[:workbook]
5
+ end
6
+
7
+ def first
8
+ Worksheet.new(:worksheet => __getobj__.worksheet(0))
9
+ end
10
+
11
+ def worksheet(index)
12
+ Worksheet.new(:worksheet => __getobj__.worksheet(index))
13
+ end
14
+ alias_method :[], :worksheet
15
+
16
+ end
17
+ end
@@ -0,0 +1,48 @@
1
+ module Excelerate
2
+ class Worksheet < SimpleDelegator
3
+ extend ParentReader
4
+
5
+ AS_CELL = proc { |cell| Cell.new(:cell => cell) }
6
+
7
+ parent_reader :cells, :min_row, :max_row, :min_col, :max_col
8
+
9
+ def initialize(options = {})
10
+ __setobj__ options[:worksheet]
11
+ end
12
+
13
+ def each_cell(&block)
14
+ cells.flatten.map(&AS_CELL).each &block
15
+ end
16
+
17
+ def columns
18
+ cells.transpose.map { |c| c.map(&AS_CELL) }
19
+ end
20
+
21
+ def column(index)
22
+ columns[index]
23
+ end
24
+
25
+ def rows
26
+ cells.map { |c| c.map(&AS_CELL) }
27
+ end
28
+
29
+ def row(index)
30
+ rows[index]
31
+ end
32
+
33
+ def column_headers
34
+ rows.first.map(&AS_CELL)
35
+ end
36
+
37
+ class Cell < SimpleDelegator
38
+ def initialize(options = {})
39
+ __setobj__ options[:cell]
40
+ end
41
+
42
+ def value
43
+ __getobj__.value.delete("\x00")
44
+ end
45
+ alias_method :to_s, :value
46
+ end
47
+ end
48
+ end
Binary file
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Excelerate::Util do
4
+ it "should open a local file" do
5
+ file_name = File.join(File.dirname(__FILE__), '..', '..', 'assets', 'example.xls')
6
+ file = Excelerate::Util.parse_args(file_name)
7
+
8
+ file.should respond_to(:seek)
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Excelerate::Workbook do
4
+ let(:workbook) {
5
+ file_name = File.join(File.dirname(__FILE__), '..', '..', 'assets', 'example.xls')
6
+ Excelerate.open(file_name)
7
+ }
8
+
9
+ it "should provide a method to get a workbook index" do
10
+ workbook.worksheet(0).should be_a_kind_of(Excelerate::Worksheet)
11
+ end
12
+
13
+ it "should provide a helper method to get first worksheet" do
14
+ workbook.first.should be_a_kind_of(Excelerate::Worksheet)
15
+ workbook.first.to_s.should == workbook.worksheet(0).to_s
16
+ end
17
+ end
18
+
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Excelerate::Worksheet do
4
+ let(:workbook) {
5
+ file_name = File.join(File.dirname(__FILE__), '..', '..', 'assets', 'example.xls')
6
+ Excelerate.open(file_name)
7
+ }
8
+
9
+ let(:worksheet) { workbook.first }
10
+
11
+ context "Cell" do
12
+ it "should provide a value without null bytes" do
13
+ worksheet.column_headers.first.should be_a_kind_of(Excelerate::Worksheet::Cell)
14
+ worksheet.column_headers.first.value.should == 'VOTER'
15
+ end
16
+ end
17
+
18
+ it "should provide an array of column headers" do
19
+ worksheet.column_headers.first.value.should == 'VOTER'
20
+ end
21
+
22
+ it "should provide an array of all columns" do
23
+ worksheet.columns.size.should == 7
24
+ end
25
+
26
+ it "should provide a way to get a specific column" do
27
+ worksheet.column(0).to_s.should == worksheet.columns[0].to_s
28
+ end
29
+
30
+ it "should provide an array of all rows" do
31
+ worksheet.rows.size.should == 50
32
+ end
33
+
34
+ it "should provide a way to get a specific row" do
35
+ worksheet.row(0).to_s.should == worksheet.rows[0].to_s
36
+ end
37
+
38
+ it "should provide an enumerator for each cell" do
39
+ worksheet.each_cell.to_a.size.should == 350
40
+ end
41
+ end
42
+
43
+
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ Bundler.require
5
+
6
+ RSpec.configure do |config|
7
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: excelerate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matthew Culpepper
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: parseexcel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !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
+ description: An extension to ParseExcel with an updated, simple-to-use API
47
+ email:
48
+ - culpepper.matthew@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - README.md
56
+ - Rakefile
57
+ - excelerate.gemspec
58
+ - lib/excelerate.rb
59
+ - lib/excelerate/parent_reader.rb
60
+ - lib/excelerate/util.rb
61
+ - lib/excelerate/version.rb
62
+ - lib/excelerate/workbook.rb
63
+ - lib/excelerate/worksheet.rb
64
+ - spec/assets/example.xls
65
+ - spec/lib/excelerate/util_spec.rb
66
+ - spec/lib/excelerate/workbook_spec.rb
67
+ - spec/lib/excelerate/worksheet_spec.rb
68
+ - spec/spec_helper.rb
69
+ homepage: http://github.com/mculp/excelerate
70
+ licenses: []
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project: excelerate
89
+ rubygems_version: 1.8.22
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: An extension to ParseExcel
93
+ test_files:
94
+ - spec/assets/example.xls
95
+ - spec/lib/excelerate/util_spec.rb
96
+ - spec/lib/excelerate/workbook_spec.rb
97
+ - spec/lib/excelerate/worksheet_spec.rb
98
+ - spec/spec_helper.rb