entable 0.0.5 → 0.0.6

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 609673674c17a5213a7a6d95c459d59b677c50fd
4
+ data.tar.gz: 51d597be22a0c96111c3c484b977f71da253d1f8
5
+ SHA512:
6
+ metadata.gz: ca52a7d6598679effea65ed57e911dbdacd8549aebf94caa0440059fe2324c37fc3b119da8174f11c234fb374328ec09840298769207b4aa05dfbfb8d1c4653a
7
+ data.tar.gz: 1386e92b1dc23c1be2e5937a4dc6ae1536fedde71489b612d5c50cb5c32c01dd1af3c322348b216016ca1d0e37e92957b24c6c7ffbab79fd9d4aa63cbed65d33
data/README.md CHANGED
@@ -78,6 +78,22 @@ Or, similarly,
78
78
  collection.order("full_name ASC")
79
79
  end
80
80
 
81
+ You can pass any object that responds to #call:
82
+
83
+ Entable.add_transformer :sort_by_full_name, OrderApplication("full_name ASC")
84
+
85
+ where
86
+
87
+ class OrderApplication
88
+ def initialize(expr)
89
+ @expr = expr
90
+ end
91
+
92
+ def call(collection)
93
+ collection.order(@expr)
94
+ end
95
+ end
96
+
81
97
 
82
98
  Wrappers are not strictly necessary; you could apply a wrapper inside a transformer.
83
99
  Separating the two frees you to apply each independently.
@@ -93,11 +109,16 @@ dates.
93
109
 
94
110
  To install a wrapper, call Entable#add_wrapper
95
111
 
96
- Entable.add_wrapper :contact_export do |item, *args|
97
- ContactTable.new item, *args
112
+ Entable.add_wrapper :contact_export do |contact, *args|
113
+ ContactTable.new contact, *args
98
114
  end
99
115
 
100
- In this example, the _item_ is the object to be wrapped, and _*args_ are the arguments passed to #to_xls earlier. This allows you pass any extra parameters to your wrapper that you might need in order to render each item as a row in a spreadsheet.
116
+ In this example, the _contact_ is the object to be wrapped, and _*args_ are the arguments passed to #to_xls earlier. This allows you pass any extra parameters to your wrapper that you might need in order to render each item as a row in a spreadsheet.
117
+
118
+ You can also supply a Class directly - this example is equivalent to the example above:
119
+
120
+ Entable.add_wrapper :contact_export, ContactTable
121
+
101
122
 
102
123
 
103
124
 
@@ -6,7 +6,7 @@ module Entable::HtmlBuilder
6
6
 
7
7
  str = str.strip.gsub(/%\{[^}]*\}/) { |match|
8
8
  attr = match.gsub(/^%\{/, '').gsub(/\}$/, '').gsub(/-/, '_').strip
9
- if attr.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)
9
+ if attr.match(/^[a-zA-Z_][a-zA-Z0-9_\.]*$/)
10
10
  "%{item.#{attr}}"
11
11
  else
12
12
  errors << "prohibited attribute #{match}"
@@ -1,3 +1,3 @@
1
1
  module Entable
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -7,18 +7,19 @@ describe Entable do
7
7
  it "should generate a very simple table with one row per item" do
8
8
  config = {
9
9
  "columns" => [
10
- { "title" => "First", "content" => "%{firstname}" },
11
- { "title" => "Last", "content" => "%{lastname}" },
12
- { "title" => "Phone", "content" => "%{phone}" },
13
- { "title" => "Postcode", "content" => "%{postcode}" },
10
+ { "title" => "First", "content" => "%{firstname}" },
11
+ { "title" => "Last", "content" => "%{lastname}" },
12
+ { "title" => "Phone", "content" => "%{phone}" },
13
+ { "title" => "Postcode", "content" => "%{postcode}" },
14
+ { "title" => "Org", "content" => "%{org.name}" },
14
15
  ]
15
16
  }
16
17
  Exporter.new(config).to_xls(CONTACTS).should == %{<html><head><meta content='application/vnd.ms-excel;charset=UTF-8' http-equiv='Content-Type'><meta content='UTF-8' http-equiv='Encoding'></head><body><table>
17
- <tr><td>First</td> <td>Last</td> <td>Phone</td> <td>Postcode</td></tr>
18
- <tr><td>Conan</td> <td>Dalton</td> <td>01234567</td> <td>75020</td></tr>
19
- <tr><td>Zed</td> <td>Zenumbra</td> <td>999999</td> <td>99999</td></tr>
20
- <tr><td>Abraham</td> <td>Aardvark</td> <td>0000000</td> <td>0</td></tr>
21
- <tr><td>James</td> <td>Joyce</td> <td>3647583</td> <td>75001</td></tr>
18
+ <tr><td>First</td> <td>Last</td> <td>Phone</td> <td>Postcode</td> <td>Org</td></tr>
19
+ <tr><td>Conan</td> <td>Dalton</td> <td>01234567</td> <td>75020</td> <td>Softify</td></tr>
20
+ <tr><td>Zed</td> <td>Zenumbra</td> <td>999999</td> <td>99999</td> <td>Ericsson</td></tr>
21
+ <tr><td>Abraham</td> <td>Aardvark</td> <td>0000000</td> <td>0</td> <td>Nokia</td></tr>
22
+ <tr><td>James</td> <td>Joyce</td> <td>3647583</td> <td>75001</td> <td>Nortel</td></tr>
22
23
  </table></body></html>}
23
24
  end
24
25
 
@@ -175,7 +176,7 @@ describe Entable do
175
176
  Proc.new { Exporter.new(config).to_xls(CONTACTS) }.should raise_error(StandardError, "Unknown wrapper name :not_configured")
176
177
  end
177
178
 
178
- it "should generate an error for a nonexistent wrapper" do
179
+ it "should generate an error for a nonexistent transform" do
179
180
  config = {
180
181
  "preprocess" => {
181
182
  "transform" => "not_configured"
@@ -18,13 +18,14 @@ RSpec.configure do |config|
18
18
  config.order = 'random'
19
19
  end
20
20
 
21
- Contact = Struct.new :firstname, :lastname, :phone, :postcode
21
+ Org = Struct.new :name
22
+ Contact = Struct.new :firstname, :lastname, :phone, :postcode, :org
22
23
 
23
24
  CONTACTS = []
24
- CONTACTS << Contact.new("Conan", "Dalton", "01234567", "75020")
25
- CONTACTS << Contact.new("Zed", "Zenumbra", "999999", "99999")
26
- CONTACTS << Contact.new("Abraham", "Aardvark", "0000000", "0")
27
- CONTACTS << Contact.new("James", "Joyce", "3647583", "75001")
25
+ CONTACTS << Contact.new("Conan", "Dalton", "01234567", "75020", Org.new("Softify"))
26
+ CONTACTS << Contact.new("Zed", "Zenumbra", "999999", "99999", Org.new("Ericsson"))
27
+ CONTACTS << Contact.new("Abraham", "Aardvark", "0000000", "0", Org.new("Nokia"))
28
+ CONTACTS << Contact.new("James", "Joyce", "3647583", "75001", Org.new("Nortel"))
28
29
 
29
30
  class ContactUpper
30
31
  def firstname; contact.firstname.upcase; end
@@ -113,4 +114,3 @@ class Exporter
113
114
  build_interpreter(config).to_xls items, *args
114
115
  end
115
116
  end
116
-
metadata CHANGED
@@ -1,33 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Conan Dalton
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-24 00:00:00.000000000 Z
11
+ date: 2014-09-10 00:00:00.000000000 Z
13
12
  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
21
19
  version: '2.9'
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: '2.9'
30
- description: ! 'Generate HTML tables which popular spreadsheet software packages know
27
+ description: 'Generate HTML tables which popular spreadsheet software packages know
31
28
  how to read '
32
29
  email:
33
30
  - conan@conandalton.net
@@ -35,8 +32,8 @@ executables: []
35
32
  extensions: []
36
33
  extra_rdoc_files: []
37
34
  files:
38
- - .gitignore
39
- - .rspec
35
+ - ".gitignore"
36
+ - ".rspec"
40
37
  - Gemfile
41
38
  - LICENSE.txt
42
39
  - README.md
@@ -52,27 +49,26 @@ files:
52
49
  - spec/spec_helper.rb
53
50
  homepage: https://github.com/conanite/entable
54
51
  licenses: []
52
+ metadata: {}
55
53
  post_install_message:
56
54
  rdoc_options: []
57
55
  require_paths:
58
56
  - lib
59
57
  required_ruby_version: !ruby/object:Gem::Requirement
60
- none: false
61
58
  requirements:
62
- - - ! '>='
59
+ - - ">="
63
60
  - !ruby/object:Gem::Version
64
61
  version: '0'
65
62
  required_rubygems_version: !ruby/object:Gem::Requirement
66
- none: false
67
63
  requirements:
68
- - - ! '>='
64
+ - - ">="
69
65
  - !ruby/object:Gem::Version
70
66
  version: '0'
71
67
  requirements: []
72
68
  rubyforge_project:
73
- rubygems_version: 1.8.24
69
+ rubygems_version: 2.2.2
74
70
  signing_key:
75
- specification_version: 3
71
+ specification_version: 4
76
72
  summary: LibreOffice and Microsoft Office are both able to open a HTML file and interpret
77
73
  the contents of the <table> element as a worksheet. This gem generates such a HTML
78
74
  file, given a collection and a configuration. For each column, the configuration