table_setter 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -14,11 +14,12 @@ begin
14
14
  gem.add_development_dependency "rspec", ">= 1.2.9"
15
15
  gem.add_dependency "rack", ">= 1.1.0"
16
16
  gem.add_dependency "thin", ">= 1.2.5"
17
- gem.add_dependency "table_fu", ">= 0.1.1"
17
+ gem.add_dependency "table_fu", ">= 0.2.1"
18
18
  gem.add_dependency "sinatra", ">= 1.0.0"
19
19
  gem.add_dependency "sinatra-static-assets", ">= 0.5.0"
20
20
  gem.add_dependency "emk-sinatra-url-for", ">= 0.2.1"
21
21
  gem.add_dependency "curb", ">= 0.6.6.0"
22
+ gem.add_dependency "rdiscount", ">= 1.6.3.1"
22
23
  gem.executables << "table-setter"
23
24
  end
24
25
 
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :minor: 1
3
3
  :build:
4
- :patch: 7
4
+ :patch: 8
5
5
  :major: 0
data/index.html CHANGED
@@ -8,7 +8,7 @@
8
8
  </head>
9
9
  <body>
10
10
  <a href="http://www.propublica.org" class="propublica">&nbsp;</a>
11
- <h1>TableSetter <small>&ndash; Version: 0.1.6</small></h1>
11
+ <h1>TableSetter <small>&ndash; Version: 0.1.7</small></h1>
12
12
  <p><a href="https://github.com/propublica/table-setter">TableSetter</a> is a Ruby app that provides an easy way to present CSVs hosted locally or remotely (e.g. on google, etc) in custom HTML. TableSetter in the wild: <a href="http://projects.propublica.org/tables/failed-banks">a list of all stimulus projects from last year</a>, <a href="http://projects.propublica.org/tables/stimulus-spending-progress">the stimulus spending progress</a>, or <a href="http://projects.propublica.org/tables/failed-banks">a list of failed banks due to the last recession</a>.</p>
13
13
  <p>Each table is filterable and sortable on multiple columns. Also each column can be formatted in one of many different styles. In production mode, <strong>TableSetter</strong> provides valid expires headers and can be coupled with an upstream cache like <a href="http://rtomayko.github.com/rack-cache/">Rack::Cache</a> or varnish for speedy presentation.</p>
14
14
  <h2><a id="toc">Table of Contents</a></h2>
@@ -15,7 +15,7 @@ Usage:
15
15
  commands:
16
16
  start run the development server, for deployment use config.ru
17
17
  install copy the table-setter assets into the the directory
18
- build statically build tables in the ./out/
18
+ build statically build tables in the ./out/ directory
19
19
 
20
20
  options:
21
21
  EOB
@@ -98,6 +98,7 @@ options:
98
98
 
99
99
  def build_tables(request)
100
100
  TableSetter::Table.all.each do |table|
101
+ return if !table.live
101
102
  puts "Building #{table.slug}"
102
103
  install_file(request.request("GET", "/#{@prefix}/#{table.slug}/").body,
103
104
  File.join(@out_dir, table.slug, "index.html"))
@@ -100,7 +100,7 @@ module TableSetter
100
100
  # A convienence method to return the sort array for table setter.
101
101
  def sort_array
102
102
  @data.sorted_by.inject([]) do |memo, (key, value)|
103
- memo << [@data.columns.index(key), value == 'descending' ? 0 : 1]
103
+ memo << [@data.columns.index(key), value == 'descending' ? 1 : 0]
104
104
  end
105
105
  end
106
106
 
@@ -222,5 +222,19 @@ class TableFu::Formatting
222
222
  end
223
223
  "<div class=\"bar\" style=\"width:#{percent}%\">#{percent}%</div>"
224
224
  end
225
+ # markdown formatting in tablefu cells
226
+ def markdown(cell)
227
+ RDiscount.new(cell).to_html
228
+ end
229
+ # format as a link, if the href is empty don't make the link active
230
+ def link(linkname, href)
231
+ title = linkname.to_s.gsub(/(["])/, "'")
232
+ if !href.value.nil? && !href.value.empty?
233
+ "<a href=\"#{href}\" title=\"#{title}\">#{linkname}</a>"
234
+ else
235
+ "<a title=\"#{title}\">#{linkname}</a>"
236
+ end
237
+ end
238
+
225
239
  end
226
240
  end
data/lib/table_setter.rb CHANGED
@@ -8,6 +8,7 @@ autoload :Thin, 'thin'
8
8
  autoload :ERB, 'erb'
9
9
  autoload :FasterCSV, 'FasterCSV'
10
10
  autoload :Curb, 'curb'
11
+ autoload :RDiscount, 'rdiscount'
11
12
 
12
13
  module TableSetter
13
14
  # autoload internals
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TableSetter::Command do
4
+ INSTALL_DIRECTORY = File.join "/", "tmp", "table-setter-test", "/"
5
+ TABLE_SETTER = File.join File.dirname(__FILE__), "..", "bin", "table-setter"
6
+ TEMPLATE_DIR = File.join TableSetter::ROOT, "template"
7
+
8
+ def cleanup
9
+ if File.exists? INSTALL_DIRECTORY
10
+ FileUtils.rm_r INSTALL_DIRECTORY
11
+ end
12
+ end
13
+
14
+ def install
15
+ `#{TABLE_SETTER} install #{INSTALL_DIRECTORY}`
16
+ end
17
+
18
+ after(:each) do
19
+ cleanup
20
+ end
21
+
22
+ before(:each) do
23
+ install
24
+ end
25
+
26
+ it 'should install the configuration directory in a custom spot' do
27
+ Dir["#{TEMPLATE_DIR}/**/*"].each do |template_file|
28
+ File.exists?(template_file.gsub(TEMPLATE_DIR, INSTALL_DIRECTORY)).should be_true
29
+ end
30
+ end
31
+
32
+ def build_and_test(prefix="")
33
+ prefix_option = "-p #{prefix}" if prefix.length > 0
34
+ `#{TABLE_SETTER} build #{INSTALL_DIRECTORY} #{prefix_option}`
35
+ Dir["#{TEMPLATE_DIR}/public/*"].each do |asset|
36
+ corrected_path = asset.gsub(File.join(TEMPLATE_DIR, "public"), File.join(INSTALL_DIRECTORY, "out", "#{prefix}"))
37
+
38
+ File.exists?(corrected_path).should be_true
39
+ end
40
+ end
41
+
42
+ it 'should build the tables and install the assets in the correct folder with prefix' do
43
+ build_and_test "test"
44
+ end
45
+
46
+ it 'should build the tables and install the assets in the correct folder without prefix' do
47
+ build_and_test
48
+ end
49
+
50
+ it 'should build a table' do
51
+ `#{TABLE_SETTER} build #{INSTALL_DIRECTORY}`
52
+ File.exists?("#{INSTALL_DIRECTORY}/out/example/index.html").should be_true
53
+ end
54
+
55
+ end
@@ -157,7 +157,7 @@ end
157
157
 
158
158
  describe TableSetter::Table, "group fetchers" do
159
159
  it "should return live tables" do
160
- TableSetter::Table.all.length.should eql 4
160
+ TableSetter::Table.all.length.should eql 1
161
161
  end
162
162
  end
163
163
 
@@ -167,7 +167,7 @@ describe TableSetter::Table, "with urls and google bars" do
167
167
  end
168
168
 
169
169
  it "should have a link row" do
170
- @table.data.rows[1].column_for('Agency Webpage').to_s.should eql "<a href='http://www.hhs.gov/recovery/' title='Health and Human Services'>Health and Human Services</a>"
170
+ @table.data.rows[1].column_for('Agency Webpage').to_s.should eql "<a href=\"http://www.hhs.gov/recovery/\" title=\"Health and Human Services\">Health and Human Services</a>"
171
171
  end
172
172
 
173
173
  it 'should show a bar' do
data/table_setter.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{table_setter}
8
- s.version = "0.1.7"
8
+ s.version = "0.1.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeff Larson"]
12
- s.date = %q{2010-05-03}
12
+ s.date = %q{2010-05-13}
13
13
  s.description = %q{A sinatra based app for rendering CSVs hosted on google docs or locally in custom HTML}
14
14
  s.email = %q{thejefflarson@gmail.com}
15
15
  s.executables = ["table-setter", "table-setter"]
@@ -99,6 +99,7 @@ Gem::Specification.new do |s|
99
99
  "spec/spec.opts",
100
100
  "spec/spec_helper.rb",
101
101
  "spec/table-setter-app_spec.rb",
102
+ "spec/table-setter-command_spec.rb",
102
103
  "spec/table-setter_spec.rb",
103
104
  "table_setter.gemspec",
104
105
  "template/config.ru",
@@ -131,6 +132,7 @@ Gem::Specification.new do |s|
131
132
  s.test_files = [
132
133
  "spec/spec_helper.rb",
133
134
  "spec/table-setter-app_spec.rb",
135
+ "spec/table-setter-command_spec.rb",
134
136
  "spec/table-setter_spec.rb"
135
137
  ]
136
138
 
@@ -142,30 +144,33 @@ Gem::Specification.new do |s|
142
144
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
143
145
  s.add_runtime_dependency(%q<rack>, [">= 1.1.0"])
144
146
  s.add_runtime_dependency(%q<thin>, [">= 1.2.5"])
145
- s.add_runtime_dependency(%q<table_fu>, [">= 0.1.1"])
147
+ s.add_runtime_dependency(%q<table_fu>, [">= 0.2.1"])
146
148
  s.add_runtime_dependency(%q<sinatra>, [">= 1.0.0"])
147
149
  s.add_runtime_dependency(%q<sinatra-static-assets>, [">= 0.5.0"])
148
150
  s.add_runtime_dependency(%q<emk-sinatra-url-for>, [">= 0.2.1"])
149
151
  s.add_runtime_dependency(%q<curb>, [">= 0.6.6.0"])
152
+ s.add_runtime_dependency(%q<rdiscount>, [">= 1.6.3.1"])
150
153
  else
151
154
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
152
155
  s.add_dependency(%q<rack>, [">= 1.1.0"])
153
156
  s.add_dependency(%q<thin>, [">= 1.2.5"])
154
- s.add_dependency(%q<table_fu>, [">= 0.1.1"])
157
+ s.add_dependency(%q<table_fu>, [">= 0.2.1"])
155
158
  s.add_dependency(%q<sinatra>, [">= 1.0.0"])
156
159
  s.add_dependency(%q<sinatra-static-assets>, [">= 0.5.0"])
157
160
  s.add_dependency(%q<emk-sinatra-url-for>, [">= 0.2.1"])
158
161
  s.add_dependency(%q<curb>, [">= 0.6.6.0"])
162
+ s.add_dependency(%q<rdiscount>, [">= 1.6.3.1"])
159
163
  end
160
164
  else
161
165
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
162
166
  s.add_dependency(%q<rack>, [">= 1.1.0"])
163
167
  s.add_dependency(%q<thin>, [">= 1.2.5"])
164
- s.add_dependency(%q<table_fu>, [">= 0.1.1"])
168
+ s.add_dependency(%q<table_fu>, [">= 0.2.1"])
165
169
  s.add_dependency(%q<sinatra>, [">= 1.0.0"])
166
170
  s.add_dependency(%q<sinatra-static-assets>, [">= 0.5.0"])
167
171
  s.add_dependency(%q<emk-sinatra-url-for>, [">= 0.2.1"])
168
172
  s.add_dependency(%q<curb>, [">= 0.6.6.0"])
173
+ s.add_dependency(%q<rdiscount>, [">= 1.6.3.1"])
169
174
  end
170
175
  end
171
176
 
@@ -23,5 +23,5 @@ table:
23
23
  Cong. District: descending
24
24
  faceting:
25
25
  facet_by: State
26
- live: true
26
+ live: false
27
27
 
@@ -24,4 +24,4 @@ table:
24
24
  Agency Webpage:
25
25
  method: link
26
26
  arguments: [Agency, Source]
27
- live: true
27
+ live: false
@@ -24,4 +24,4 @@ table:
24
24
  ARRA Funds Obligated: currency
25
25
  hard_paginate: true
26
26
  per_page: 250
27
- live: true
27
+ live: false
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 7
9
- version: 0.1.7
8
+ - 8
9
+ version: 0.1.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeff Larson
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-03 00:00:00 -04:00
17
+ date: 2010-05-13 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -68,9 +68,9 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  segments:
70
70
  - 0
71
+ - 2
71
72
  - 1
72
- - 1
73
- version: 0.1.1
73
+ version: 0.2.1
74
74
  type: :runtime
75
75
  version_requirements: *id004
76
76
  - !ruby/object:Gem::Dependency
@@ -130,6 +130,21 @@ dependencies:
130
130
  version: 0.6.6.0
131
131
  type: :runtime
132
132
  version_requirements: *id008
133
+ - !ruby/object:Gem::Dependency
134
+ name: rdiscount
135
+ prerelease: false
136
+ requirement: &id009 !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ segments:
141
+ - 1
142
+ - 6
143
+ - 3
144
+ - 1
145
+ version: 1.6.3.1
146
+ type: :runtime
147
+ version_requirements: *id009
133
148
  description: A sinatra based app for rendering CSVs hosted on google docs or locally in custom HTML
134
149
  email: thejefflarson@gmail.com
135
150
  executables:
@@ -222,6 +237,7 @@ files:
222
237
  - spec/spec.opts
223
238
  - spec/spec_helper.rb
224
239
  - spec/table-setter-app_spec.rb
240
+ - spec/table-setter-command_spec.rb
225
241
  - spec/table-setter_spec.rb
226
242
  - table_setter.gemspec
227
243
  - template/config.ru
@@ -277,4 +293,5 @@ summary: A sinatra based app for rendering CSVs in custom HTML
277
293
  test_files:
278
294
  - spec/spec_helper.rb
279
295
  - spec/table-setter-app_spec.rb
296
+ - spec/table-setter-command_spec.rb
280
297
  - spec/table-setter_spec.rb