jzimmek-report_me 0.0.2 → 0.0.3

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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Jan Zimmek
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = report_me
2
+
3
+ ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner.
4
+
5
+ == Usage
6
+
7
+ ReportFactory.create do
8
+ report :visits do
9
+ source do |von, bis|
10
+ <<-SQL
11
+ select
12
+ date(v.created_at) as datum,
13
+ channel,
14
+ count(1) as cnt
15
+ from
16
+ visits v
17
+ where
18
+ v.created_at between '#{von}' and '#{bis}'
19
+ group by
20
+ date(v.created_at),
21
+ channel
22
+ SQL
23
+ end
24
+ end
25
+ end
26
+
27
+ == Copyright
28
+
29
+ Copyright (c) 2009 Jan Zimmek. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,19 +1,57 @@
1
- # -*- ruby -*-
1
+ require 'rubygems'
2
+ require 'rake'
2
3
 
3
- $LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "report_me"
8
+ gem.summary = "Ruby wrapper to automate sql reports"
9
+ gem.description = "ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner."
10
+ gem.email = "jan.zimmek@web.de"
11
+ gem.homepage = "http://github.com/jzimmek/report_me"
12
+ gem.authors = ["Jan Zimmek"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
4
15
 
5
- require 'rubygems'
6
- require 'hoe'
7
- require 'report_me'
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
+ end
19
+
20
+ require 'rake/testtask'
21
+ Rake::TestTask.new(:test) do |test|
22
+ test.libs << 'lib' << 'test'
23
+ test.pattern = 'test/**/*_test.rb'
24
+ test.verbose = true
25
+ end
8
26
 
9
- Hoe.new('report_me', ReportMe::Factory::VERSION) do |p|
10
- # p.rubyforge_name = 'report_mex' # if different than lowercase project name
11
- p.developer('jzimmek', 'jan.zimmek@web.de')
27
+ begin
28
+ require 'rcov/rcovtask'
29
+ Rcov::RcovTask.new do |test|
30
+ test.libs << 'test'
31
+ test.pattern = 'test/**/*_test.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :rcov do
36
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
+ end
12
38
  end
13
39
 
14
- task :cultivate do
15
- system "touch Manifest.txt; rake check_manifest | grep -v .git | grep -v \"(in \" | patch"
16
- system "rake debug_gem | grep -v \"(in \" > `basename \\`pwd\\``.gemspec"
40
+
41
+ task :default => :test
42
+
43
+ require 'rake/rdoctask'
44
+ Rake::RDocTask.new do |rdoc|
45
+ if File.exist?('VERSION.yml')
46
+ config = YAML.load(File.read('VERSION.yml'))
47
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
48
+ else
49
+ version = ""
50
+ end
51
+
52
+ rdoc.rdoc_dir = 'rdoc'
53
+ rdoc.title = "report_me #{version}"
54
+ rdoc.rdoc_files.include('README*')
55
+ rdoc.rdoc_files.include('lib/**/*.rb')
17
56
  end
18
57
 
19
- # vim: syntax=Ruby
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,29 @@
1
+ require 'activerecord'
2
+
3
+ module ReportMe
4
+ class Report
5
+
6
+ attr_reader :name
7
+
8
+ def initialize(name)
9
+ @name = name
10
+ end
11
+
12
+ def source(&block)
13
+ @source = block
14
+ end
15
+
16
+ def sql(von, bis)
17
+ @source.call(von, bis)
18
+ end
19
+
20
+ def table_name(period)
21
+ "#{name}_#{period}"
22
+ end
23
+
24
+ def table_exist?(period)
25
+ ActiveRecord::Base.connection.select_value("show tables like '#{table_name(period)}'") != nil
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,142 @@
1
+ require 'activerecord'
2
+ require 'report_me/report'
3
+
4
+ module ReportMe
5
+ class ReportFactory
6
+
7
+ def self.create(&block)
8
+ rme = ReportMe::ReportFactory.new
9
+ rme.instance_eval(&block)
10
+ rme.run
11
+ rme
12
+ end
13
+
14
+ def initialize
15
+ @reports = []
16
+ end
17
+
18
+ def periods(today = DateTime.now)
19
+
20
+ periods = []
21
+
22
+ [:today, :day, :week, :calendar_week, :month, :calendar_month].each do |period|
23
+
24
+ von, bis = case period
25
+ when :today
26
+ [today, today]
27
+ when :day
28
+ [today - 1.day, today - 1.day]
29
+ when :week
30
+ [today - 1.day - 1.week, today - 1.day]
31
+ when :calendar_week
32
+ n = today - 1.day
33
+ [n - n.cwday + 1, n - n.cwday + 7]
34
+ when :month
35
+ [today - 1.day - 1.month, today - 1.day]
36
+ when :calendar_month
37
+ n = today - 1.month
38
+ [n.beginning_of_month, n.end_of_month]
39
+ end
40
+
41
+ periods << {:name => period, :von => von, :bis => bis}
42
+
43
+ end
44
+
45
+ periods
46
+ end
47
+
48
+ def report_information_table_name
49
+ "report_informations"
50
+ end
51
+
52
+ def report_information_table_name_exist?
53
+ ActiveRecord::Base.connection.select_value("show tables like '#{report_information_table_name}'") != nil
54
+ end
55
+
56
+ def report_exists?(name, von, bis)
57
+ ActiveRecord::Base.connection.select_value("select 1 from #{report_information_table_name} where report = '#{name}' and von = '#{von}' and bis = '#{bis}'") != nil
58
+ end
59
+
60
+
61
+ def run
62
+
63
+ debug = true
64
+
65
+ unless report_information_table_name_exist?
66
+ ddl = <<-SQL
67
+ create
68
+ table report_informations
69
+ (
70
+ report varchar(255) not null,
71
+ von datetime not null,
72
+ bis datetime not null,
73
+ created_at datetime not null,
74
+ primary key (report)
75
+ )
76
+ ENGINE=InnoDB default CHARSET=utf8;
77
+ SQL
78
+ ActiveRecord::Base.connection.execute(ddl)
79
+ end
80
+
81
+ if debug
82
+ # just for testing
83
+ ActiveRecord::Base.connection.execute("truncate #{report_information_table_name};")
84
+ end
85
+
86
+ periods.each do |period|
87
+
88
+ @reports.each do |r|
89
+
90
+ von = period[:von].strftime("%Y-%m-%d 00:00:00")
91
+ bis = period[:bis].strftime("%Y-%m-%d 23:59:59")
92
+
93
+ table_name = r.table_name(period[:name])
94
+
95
+ if debug
96
+ # drop and create table while in testing mode
97
+ ActiveRecord::Base.connection.execute("drop table if exists #{table_name};")
98
+ end
99
+
100
+ table_exist = r.table_exist?(period[:name])
101
+ sql = r.sql(von, bis)
102
+ report_exist = report_exists?(table_name, von, bis)
103
+
104
+ puts "report: #{r.name}_#{period[:name]} :: #{report_exist}"
105
+
106
+
107
+ unless table_exist
108
+ ActiveRecord::Base.connection.execute("create table #{table_name} ENGINE=InnoDB default CHARSET=utf8 as #{sql} limit 0;")
109
+ end
110
+
111
+ puts sql
112
+
113
+ if !report_exist || period[:name] == :today
114
+ ActiveRecord::Base.transaction do
115
+ exec("insert into #{report_information_table_name} values ('#{table_name}', '#{von}', '#{bis}', now());") unless report_exist
116
+
117
+ if period[:name] == :today
118
+ exec("truncate #{table_name};")
119
+ end
120
+
121
+ exec("insert into #{table_name} #{sql};")
122
+ end
123
+ end
124
+
125
+
126
+ end
127
+ end
128
+ end
129
+
130
+ def exec(sql)
131
+ ActiveRecord::Base.connection.execute(sql)
132
+ end
133
+
134
+ def report(name, &block)
135
+ r = ReportMe::Report.new(name)
136
+ r.instance_eval(&block)
137
+
138
+ @reports << r
139
+ end
140
+
141
+ end
142
+ end
data/lib/report_me.rb CHANGED
@@ -1 +1 @@
1
- require 'report_me/factory'
1
+ require 'report_me/report_factory'
data/report_me.gemspec ADDED
@@ -0,0 +1,49 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{report_me}
5
+ s.version = "0.0.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Jan Zimmek"]
9
+ s.date = %q{2009-06-23}
10
+ s.description = %q{ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner.}
11
+ s.email = %q{jan.zimmek@web.de}
12
+ s.extra_rdoc_files = [
13
+ "LICENSE",
14
+ "README.rdoc"
15
+ ]
16
+ s.files = [
17
+ ".document",
18
+ ".gitignore",
19
+ "LICENSE",
20
+ "README.rdoc",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/report_me.rb",
24
+ "lib/report_me/report.rb",
25
+ "lib/report_me/report_factory.rb",
26
+ "report_me.gemspec",
27
+ "test/report_me_test.rb",
28
+ "test/test_helper.rb"
29
+ ]
30
+ s.homepage = %q{http://github.com/jzimmek/report_me}
31
+ s.rdoc_options = ["--charset=UTF-8"]
32
+ s.require_paths = ["lib"]
33
+ s.rubygems_version = %q{1.3.4}
34
+ s.summary = %q{Ruby wrapper to automate sql reports}
35
+ s.test_files = [
36
+ "test/report_me_test.rb",
37
+ "test/test_helper.rb"
38
+ ]
39
+
40
+ if s.respond_to? :specification_version then
41
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
+ else
46
+ end
47
+ else
48
+ end
49
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ class ReportMeTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+
7
+ ActiveRecord::Base.connection.execute "drop table if exists employees"
8
+ ActiveRecord::Base.connection.execute <<-SQL
9
+ create
10
+ table employees
11
+ (
12
+ id bigint auto_increment,
13
+ name varchar(255),
14
+ age bigint,
15
+ created_at datetime,
16
+ primary key (id)
17
+ )
18
+ SQL
19
+ end
20
+
21
+ def create_employee_report_factory
22
+
23
+ ReportMe::ReportFactory.create do
24
+ report :employees do
25
+ source do |von, bis|
26
+ <<-SQL
27
+ select
28
+ date(created_at) as datum,
29
+ count(1) as anzahl
30
+ from
31
+ employees
32
+ where
33
+ created_at between '#{von}' and '#{bis}'
34
+ group by
35
+ date(created_at)
36
+ SQL
37
+ end
38
+ end
39
+ end
40
+
41
+ ActiveRecord::Base.connection.execute "truncate #{f.table_name(:number_of_employees)}"
42
+ end
43
+
44
+
45
+ should "probably rename this file and start testing for real" do
46
+ end
47
+ end
data/test/test_helper.rb CHANGED
@@ -1,14 +1,16 @@
1
- $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
-
3
1
  require 'rubygems'
4
- require 'active_support'
5
- require 'active_support/test_case'
6
-
2
+ require 'test/unit'
3
+ require 'shoulda'
7
4
  require 'report_me'
8
5
 
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+
9
+
10
+ class Test::Unit::TestCase
11
+ end
12
+
9
13
  ActiveRecord::Base.establish_connection(:adapter => "mysql", :database => "mysql", :username => "root", :password => "root", :host => "localhost", :port => 3306)
10
14
 
11
15
  ActiveRecord::Base.connection.execute "drop database if exists report_me_test"
12
- ActiveRecord::Base.connection.execute "create database report_me_test"
13
-
14
- require 'test/unit'
16
+ ActiveRecord::Base.connection.execute "create database report_me_test"
metadata CHANGED
@@ -1,54 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jzimmek-report_me
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
- - jzimmek
7
+ - Jan Zimmek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-27 00:00:00 -07:00
12
+ date: 2009-06-23 00:00:00 -07:00
13
13
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: hoe
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.12.2
24
- version:
14
+ dependencies: []
15
+
25
16
  description: ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner.
26
- email:
27
- - jan.zimmek@web.de
17
+ email: jan.zimmek@web.de
28
18
  executables: []
29
19
 
30
20
  extensions: []
31
21
 
32
22
  extra_rdoc_files:
33
- - History.txt
34
- - Manifest.txt
35
- - README.txt
23
+ - LICENSE
24
+ - README.rdoc
36
25
  files:
37
- - History.txt
38
- - Manifest.txt
39
- - README
40
- - README.txt
26
+ - .document
27
+ - .gitignore
28
+ - LICENSE
29
+ - README.rdoc
41
30
  - Rakefile
31
+ - VERSION
42
32
  - lib/report_me.rb
43
- - lib/report_me/factory.rb
33
+ - lib/report_me/report.rb
34
+ - lib/report_me/report_factory.rb
35
+ - report_me.gemspec
36
+ - test/report_me_test.rb
44
37
  - test/test_helper.rb
45
- - test/test_report_me.rb
46
- has_rdoc: true
47
- homepage: http://github.com/jzimmek/report_me/tree/master
38
+ has_rdoc: false
39
+ homepage: http://github.com/jzimmek/report_me
48
40
  post_install_message:
49
41
  rdoc_options:
50
- - --main
51
- - README.txt
42
+ - --charset=UTF-8
52
43
  require_paths:
53
44
  - lib
54
45
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -65,11 +56,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
56
  version:
66
57
  requirements: []
67
58
 
68
- rubyforge_project: report_me
59
+ rubyforge_project:
69
60
  rubygems_version: 1.2.0
70
61
  signing_key:
71
62
  specification_version: 3
72
- summary: ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner.
63
+ summary: Ruby wrapper to automate sql reports
73
64
  test_files:
65
+ - test/report_me_test.rb
74
66
  - test/test_helper.rb
75
- - test/test_report_me.rb
data/History.txt DELETED
@@ -1,8 +0,0 @@
1
- === 0.0.2 / 2009-05-27
2
-
3
- * distribute gem
4
-
5
- === 0.0.1 / 2009-05-27
6
-
7
- * initial developer release
8
-
data/Manifest.txt DELETED
@@ -1,10 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README
4
- README.txt
5
- Rakefile
6
- report_me.gemspec
7
- lib/report_me.rb
8
- lib/report_me/factory.rb
9
- test/test_helper.rb
10
- test/test_report_me.rb
data/README DELETED
@@ -1 +0,0 @@
1
- README
data/README.txt DELETED
@@ -1,42 +0,0 @@
1
- = report_me
2
-
3
- http://github.com/jzimmek/report_me/tree/master
4
-
5
- == DESCRIPTION:
6
-
7
- ReportMe is a thin ruby wrapper around your reporting sql queries which empowers you to automate, historicize, graph and mail them in an easy manner.
8
-
9
- == FEATURES/PROBLEMS:
10
-
11
- == SYNOPSIS:
12
-
13
- == REQUIREMENTS:
14
-
15
- == INSTALL:
16
-
17
- * sudo gem install jzimmek-report_me
18
-
19
- == LICENSE:
20
-
21
- (The MIT License)
22
-
23
- Copyright (c) 2009 Jan Zimmek
24
-
25
- Permission is hereby granted, free of charge, to any person obtaining
26
- a copy of this software and associated documentation files (the
27
- 'Software'), to deal in the Software without restriction, including
28
- without limitation the rights to use, copy, modify, merge, publish,
29
- distribute, sublicense, and/or sell copies of the Software, and to
30
- permit persons to whom the Software is furnished to do so, subject to
31
- the following conditions:
32
-
33
- The above copyright notice and this permission notice shall be
34
- included in all copies or substantial portions of the Software.
35
-
36
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
37
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
38
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
39
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
40
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
41
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
42
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,54 +0,0 @@
1
- require 'rubygems'
2
- require 'active_record'
3
-
4
- module ReportMe
5
- class Factory
6
-
7
- VERSION = '0.0.2'
8
-
9
- @@reports = {}
10
-
11
- def initialize
12
- yield(self)
13
- self
14
- end
15
-
16
- def create_report(name, &block)
17
-
18
- puts "create_report #{name}"
19
-
20
- @@reports[name] = block
21
-
22
- # create the reporting table if not already exists
23
- unless ActiveRecord::Base.connection.table_exists?(table_name(name))
24
- sql = yield(" created_at between '1900-01-01' and timestampadd(second, -1, curdate()) ")
25
- sql = "create table #{table_name(name)} as #{sql} limit 0"
26
- exec(sql)
27
- end
28
-
29
- synchronize(name)
30
-
31
- end
32
-
33
- def table_name(name)
34
- name = name.to_s.downcase.strip
35
- table_name = "report_#{name}"
36
- end
37
-
38
- def synchronize(name)
39
-
40
- block = @@reports[name]
41
-
42
- # fill reporting table
43
- sql = block.call(" created_at between (select ifnull(timestampadd(day, 1, max(datum)), '1900-01-01') from #{table_name(name)}) and timestampadd(second, -1, curdate()) ")
44
- exec("insert into #{table_name(name)}\n #{sql}")
45
- end
46
-
47
- def exec(sql)
48
- puts "exec: #{sql}"
49
- ActiveRecord::Base.connection.execute(sql)
50
- end
51
-
52
-
53
- end
54
- end
@@ -1,131 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestReportMe < ActiveSupport::TestCase
4
-
5
- def setup
6
-
7
- ActiveRecord::Base.connection.execute "drop table if exists employees"
8
- ActiveRecord::Base.connection.execute <<-SQL
9
- create
10
- table employees
11
- (
12
- id bigint auto_increment,
13
- name varchar(255),
14
- age bigint,
15
- created_at datetime,
16
- primary key (id)
17
- )
18
- SQL
19
-
20
-
21
- end
22
-
23
- def create_employee_report_factory
24
-
25
- f = ReportMe::Factory.new do |f|
26
- f.create_report :number_of_employees do |where_condition|
27
- <<-SQL
28
- select
29
- date(created_at) as datum,
30
- count(1) as anzahl
31
- from
32
- employees
33
- where
34
- #{where_condition}
35
- group by
36
- date(created_at)
37
- SQL
38
- end
39
- end
40
-
41
- ActiveRecord::Base.connection.execute "truncate #{f.table_name(:number_of_employees)}"
42
-
43
- return f
44
-
45
- end
46
-
47
- test "creation of ddl without any data" do
48
- f = create_employee_report_factory
49
- assert_equal 0, ActiveRecord::Base.connection.select_one("select count(1) as cnt from #{f.table_name(:number_of_employees)}")["cnt"].to_i
50
- end
51
-
52
- test "should result in a count of 1 in the report table and with anzahl 1" do
53
- f = create_employee_report_factory
54
-
55
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
56
- f.synchronize(:number_of_employees)
57
-
58
- assert_equal 1, ActiveRecord::Base.connection.select_one("select count(1) as cnt from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["cnt"].to_i
59
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
60
- end
61
-
62
- test "should result in a count of 2 in the report table but with anzahl 2" do
63
- f = create_employee_report_factory
64
-
65
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
66
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-01 00:00:00')"
67
- f.synchronize(:number_of_employees)
68
-
69
- assert_equal 1, ActiveRecord::Base.connection.select_one("select count(1) as cnt from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["cnt"].to_i
70
- assert_equal 2, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
71
- end
72
-
73
- test "should be anzahl=1 for 2009-01-01 and anzahl=1 for 2009-01-02 " do
74
- f = create_employee_report_factory
75
-
76
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
77
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-02 00:00:00')"
78
- f.synchronize(:number_of_employees)
79
-
80
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
81
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-02'")["anzahl"].to_i
82
- end
83
-
84
- test "should be anzahl=1 for 2009-01-01 and anzahl=2 for 2009-01-02 " do
85
- f = create_employee_report_factory
86
-
87
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
88
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-02 00:00:00')"
89
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan3', 28, '2009-01-02 00:00:00')"
90
- f.synchronize(:number_of_employees)
91
-
92
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
93
- assert_equal 2, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-02'")["anzahl"].to_i
94
- end
95
-
96
- test "should not update anzahl for already existing dates" do
97
- f = create_employee_report_factory
98
-
99
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
100
- f.synchronize(:number_of_employees)
101
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-01 00:00:00')"
102
- f.synchronize(:number_of_employees)
103
-
104
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
105
- end
106
-
107
- test "should only process entries at least one day older than the latest entry in the report table" do
108
- f = create_employee_report_factory
109
-
110
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan', 28, '2009-01-01 00:00:00')"
111
- f.synchronize(:number_of_employees)
112
-
113
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
114
-
115
- # only 12 hours later but at the same day
116
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-01 12:00:00')"
117
- f.synchronize(:number_of_employees)
118
-
119
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
120
-
121
- # 24 hours later - next day
122
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan2', 28, '2009-01-02 00:00:00')"
123
- ActiveRecord::Base.connection.execute "insert into employees values (null, 'jan3', 28, '2009-01-02 00:00:00')"
124
- f.synchronize(:number_of_employees)
125
-
126
- assert_equal 1, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-01'")["anzahl"].to_i
127
- assert_equal 2, ActiveRecord::Base.connection.select_one("select anzahl from #{f.table_name(:number_of_employees)} where datum = '2009-01-02'")["anzahl"].to_i
128
-
129
- end
130
-
131
- end