Module: PoormansTrends::HomeHelper
- Defined in:
- app/helpers/poormans_trends/home_helper.rb
Instance Method Summary collapse
- #data_for(klass, colname, start_at, end_at = 1.day.ago) ⇒ Object
- #group_by_date_sql(colname) ⇒ Object
- #tables_to_classes(table_names) ⇒ Object
- #tables_with_col(colname, conn = ActiveRecord::Base.connection) ⇒ Object
Instance Method Details
#data_for(klass, colname, start_at, end_at = 1.day.ago) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/helpers/poormans_trends/home_helper.rb', line 26 def data_for(klass, colname, start_at, end_at = 1.day.ago) timezone_offset = nil db = klass.where("#{colname} >= ?", start_at).group(group_by_date_sql(colname)).count.inject({}) do |sum,(k,v)| timezone_offset ||= k.to_time.beginning_of_day - Time.zone.parse(k.to_s).beginning_of_day sum.merge(k.to_time.to_i * 1000 => v) end array = [] while start_at <= end_at t = (start_at.to_i + timezone_offset.to_i) * 1000 array.push([t, db[t] || 0]) start_at += 24.hours end array end |
#group_by_date_sql(colname) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'app/helpers/poormans_trends/home_helper.rb', line 15 def group_by_date_sql(colname) case ActiveRecord::Base.connection when ActiveRecord::ConnectionAdapters::PostgreSQLAdapter "#{colname}::date" when ActiveRecord::ConnectionAdapters::MysqlAdapter "DATE(#{colname})" else raise Exception.new("Unsupported adapter: #{ActiveRecord::Base.connection.class.name}") end end |
#tables_to_classes(table_names) ⇒ Object
7 8 9 10 11 12 13 |
# File 'app/helpers/poormans_trends/home_helper.rb', line 7 def tables_to_classes(table_names) table_names.collect {|t| Class.new(ActiveRecord::Base) do self.table_name = t end }.sort {|a,b| b.count <=> a.count} end |
#tables_with_col(colname, conn = ActiveRecord::Base.connection) ⇒ Object
3 4 5 |
# File 'app/helpers/poormans_trends/home_helper.rb', line 3 def tables_with_col(colname, conn = ActiveRecord::Base.connection) conn.tables.select {|t| conn.columns(t).find {|x| x.name == colname } } end |