graffable 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e68f6c232ecbb7293cc71a1abc7435e98b6e3b0f
4
- data.tar.gz: d2059c65cfa780aec4164843ecc664d046cd9c69
3
+ metadata.gz: 46adff9ed7f91eaf984f65e4dea871ce51de43df
4
+ data.tar.gz: 18c69537813f8d22bcceec67793f6377b1937f1f
5
5
  SHA512:
6
- metadata.gz: 54b73fd518fe5249903dd32b7dcd6c5ed47b645d3ad9a45b0b9002e12ffd964667a3e88e17b750a7c789fe4ed4a3e52cc0ff707ce5e249c3401cc57e31d28777
7
- data.tar.gz: 9d1c0e3058e8c2d35e62b4b882f6ea06004557d88bb39682281b326b84a3721018d250bff26036678e85330947f13f727e64cbcf1915dd7cdca9a680192cf8d8
6
+ metadata.gz: 29fd8acb103da34e6674e26d2c0e6f43087de388d46a5dd7d5dac7c99e0eb574ceee77f7bdc6996d1a781b62dcff8be2ba22170a3af1d14018c0e75cde9f2eae
7
+ data.tar.gz: c690f97cb951290a6380a8a1ae30613617891172c9f6fee5b2828df41bd8658d1f704c183c883a1eedc372bd7e916ba1c7e721b842e0b5e7a41d9dd410689bcc
data/CHANGES.md CHANGED
@@ -2,6 +2,13 @@
2
2
  Graffable Changes
3
3
  =================
4
4
 
5
+ 2014-02-06 Graffable v0.0.2
6
+ ---------------------------
7
+ * `Graffable::Database.connect()` now connects to `ENV['DATABASE_URL']` (was `ENV['GRAFFABLE_DATABASE_URL']`)
8
+ * Fix bug `Graffable::App#return_csv` when `max` is set
9
+ * Fix bug `Graffable::App#return_json` when `max` is set
10
+
11
+
5
12
  2014-01-29 Graffable v0.0.1
6
13
  ---------------------------
7
14
  First release of Sinatra-based data charting application.
data/lib/graffable/app.rb CHANGED
@@ -21,10 +21,11 @@ module Graffable
21
21
 
22
22
 
23
23
  before do
24
- @db = Graffable::Database.connect # Sequel.connect settings.database_url
24
+ @db = Graffable::Database.connect
25
25
  @groups = @db[:groups].order(:name)
26
26
  end
27
27
 
28
+
28
29
  # /:group/:report/:year/:month.json
29
30
  get %r{/(.+)/(.+)/(\d{4})/(\d{2}).(csv|json)} do |group_name, report_name, year, month, extension|
30
31
  group = assert_group group_name
@@ -182,17 +183,24 @@ module Graffable
182
183
  defaults = { max: -1 }
183
184
  opts = defaults.merge params
184
185
 
185
- data = [ %w( date label value ).to_csv ]
186
+ data = [ %w( date label value ).to_csv ]
187
+ values = {}
186
188
  dataset.each do |row|
187
- date = %i( year month day hour ).collect { |k| row[k] }.compact.join('-')
188
- label = row[:label] || ''
189
- value = row[:value].to_i
190
- data << [ date, label, value ].to_csv
189
+ date = %i( year month day hour ).collect { |k| row[k] }.compact.join('-')
190
+ label = row[:label] || ''
191
+ value = row[:value].to_i
192
+
193
+ values[date] ||= {}
194
+ values[date][label] = value
191
195
  end
192
196
 
193
- if opts[:max] > -1
194
- headers = data.shift
195
- data = [ headers, data.reverse.slice( 0 .. ( opts[:max] - 1 ) ).reverse ].flatten
197
+ values = values.sort.reverse.slice( 0 .. opts[:max] - 1 ).reverse if opts[:max] > - 1
198
+ values.each do |tuple|
199
+ date = tuple.first
200
+ pairs = tuple.last
201
+ pairs.each_pair do |label, value|
202
+ data << [ date, label, value ].to_csv
203
+ end
196
204
  end
197
205
 
198
206
  content_type :text
@@ -203,22 +211,30 @@ module Graffable
203
211
  defaults = { max: -1 }
204
212
  opts = defaults.merge params
205
213
 
206
- data = {}
214
+ data = {}
215
+ date_mapping = {}
216
+ values = {}
207
217
  dataset.each do |row|
208
- date = opts[:date_formatter].call row[:year], row[:month], row[:day], row[:hour]
218
+ date = %i( year month day hour ).collect { |k| row[k] }.compact.join('-')
209
219
  label = row[:label] || ''
210
220
  value = row[:value].to_i
221
+
222
+ date_mapping[date] = opts[:date_formatter].call row[:year], row[:month], row[:day], row[:hour] unless date_mapping.key?(date)
211
223
 
212
- unless data.key?(label)
213
- data[label] = { data: [] }
214
- data[label][:label] = label unless label.empty?
215
- end
216
- data[label][:data].push [ date, value ]
224
+ values[date] ||= {}
225
+ values[date][label] = value
217
226
  end
218
227
 
219
- if opts[:max] > -1
220
- data.each_pair do |label, values|
221
- data[label][:data] = data[label][:data].reverse.slice( 0 .. ( opts[:max] - 1 ) ).reverse
228
+ values = values.sort.reverse.slice( 0 .. opts[:max] - 1 ).reverse if opts[:max] > - 1
229
+ values.each do |tuple|
230
+ date = date_mapping[ tuple.first ]
231
+ pairs = tuple.last
232
+ pairs.each_pair do |label, value|
233
+ unless data.key?(label)
234
+ data[label] = { data: [] }
235
+ data[label][:label] = label unless label.empty?
236
+ end
237
+ data[label][:data].push [ date, value ]
222
238
  end
223
239
  end
224
240
 
@@ -4,7 +4,7 @@ module Graffable
4
4
 
5
5
  class Database
6
6
  def self.connect
7
- key = 'GRAFFABLE_DATABASE_URL'
7
+ key = 'DATABASE_URL'
8
8
  raise "ERROR: #{key} not defined" unless ENV.key?(key)
9
9
  Sequel.connect ENV[key]
10
10
  end
@@ -8,18 +8,19 @@ module Graffable
8
8
  def initialize
9
9
 
10
10
  Sequel.extension :migration
11
- db = Graffable::Database.connect
12
11
  namespace = 'graffable:migrate'
13
12
  migrations = File.join( File.dirname(__FILE__), '../../db/migrations' )
14
13
 
15
14
  desc 'Perform migration down (erase all data)'
16
15
  task "#{namespace}:down" do
16
+ db = Graffable::Database.connect
17
17
  Sequel::Migrator.run db, migrations, target: 0
18
18
  puts "<= #{namespace}:down executed"
19
19
  end
20
20
 
21
21
  desc 'Perform migration reset (full erase and migration up)'
22
22
  task "#{namespace}:reset" do
23
+ db = Graffable::Database.connect
23
24
  Sequel::Migrator.run db, migrations, target: 0
24
25
  Sequel::Migrator.run db, migrations
25
26
  puts "<= #{namespace}:reset executed"
@@ -27,6 +28,7 @@ module Graffable
27
28
 
28
29
  desc 'Perform migration down (erase all data)'
29
30
  task "#{namespace}:down" do
31
+ db = Graffable::Database.connect
30
32
  Sequel::Migrator.run db, migrations, target: 0
31
33
  puts "<= #{namespace}:down executed"
32
34
  end
@@ -35,12 +37,15 @@ module Graffable
35
37
  task "#{namespace}:to" do
36
38
  version = ENV['VERSION'].to_i
37
39
  raise 'No VERSION was provided' if version.nil?
40
+
41
+ db = Graffable::Database.connect
38
42
  Sequel::Migrator.run db, migrations, target: version
39
43
  puts "<= #{namespace}:to version=[#{version}] executed"
40
44
  end
41
45
 
42
46
  desc 'Perform migration to latest migration available'
43
47
  task "#{namespace}:up" do
48
+ db = Graffable::Database.connect
44
49
  Sequel::Migrator.run db, migrations
45
50
  puts "<= #{namespace}:up executed"
46
51
  end
@@ -7,12 +7,12 @@ module Graffable
7
7
 
8
8
  def initialize
9
9
 
10
- db = Graffable::Database.connect
11
- namespace = 'graffable'
10
+ namespace = 'graffable'
12
11
 
13
- desc 'Load Graffable seed data from GRAFFABLE_SEED_FILE'
12
+ desc 'Load Graffable seed data from SEED_FILE'
14
13
  task "#{namespace}:seed" do
15
- key = 'GRAFFABLE_SEED_FILE'
14
+ db = Graffable::Database.connect
15
+ key = 'SEED_FILE'
16
16
  seed = ENV[key]
17
17
  raise "No #{key} was provided" if seed.nil?
18
18
  load seed
@@ -1,4 +1,4 @@
1
1
  module Graffable
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
4
4
 
@@ -8,6 +8,10 @@
8
8
  %a{ href: url(@next) }
9
9
  %span.glyphicon.glyphicon-chevron-right
10
10
 
11
+ #content{ style: 'align: center; margin: auto; padding: 1em; width: 95%;' }
12
+ #placeholder{ style: 'align: center; height: 75%; margin: auto; padding: 1em; width: 95%;' }
13
+ #legend{ style: 'padding-bottom: 1em;' }
14
+
11
15
  :javascript
12
16
  data_url = "#{ url(@data_url) }";
13
17
 
@@ -20,6 +24,9 @@
20
24
  grid: {
21
25
  hoverable: true
22
26
  },
27
+ legend: {
28
+ container: $('#legend')
29
+ },
23
30
  points: {
24
31
  show: true
25
32
  },
@@ -57,7 +64,4 @@
57
64
 
58
65
  });
59
66
 
60
- -# FIXME
61
- #content{ style: 'align: center; margin: auto; padding: 1em; width: 95%;' }
62
- #placeholder{ style: 'align: center; height: 75%; margin: auto; padding: 1em; width: 95%;' }
63
67
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graffable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - blair christensen.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-29 00:00:00.000000000 Z
11
+ date: 2014-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml