punchcard 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,7 +1,8 @@
1
- ## MAC OS
2
1
  .DS_Store
2
+
3
3
  .bundle
4
4
  .sass-cache
5
+ *.sqlite*
5
6
 
6
7
  ## TEXTMATE
7
8
  *.tmproj
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source :rubygems
2
2
 
3
- gemspec
4
- gem 'sinatra-mongoid', :require => 'sinatra/mongoid', :git => 'https://github.com/robertoles/sinatra-mongoid.git'
3
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,63 +1,60 @@
1
- GIT
2
- remote: https://github.com/robertoles/sinatra-mongoid.git
3
- revision: f0d04640b84306a5d1e08569c9d12e9841e908b1
4
- specs:
5
- sinatra-mongoid (0.0.2)
6
- mongo_ext
7
- mongoid
8
- sinatra
9
-
10
1
  PATH
11
2
  remote: .
12
3
  specs:
13
- punchcard (0.1.2)
4
+ punchcard (0.1.4)
5
+ activerecord (~> 3.0.0)
14
6
  bson_ext
15
7
  gravtastic
16
8
  haml (>= 3.0.24)
17
- mongoid
18
9
  sass (>= 3.0.0)
19
10
  sinatra (>= 1.0.0)
20
11
 
21
12
  GEM
22
13
  remote: http://rubygems.org/
23
14
  specs:
24
- activesupport (2.3.10)
25
- bson (1.0.9)
15
+ activemodel (3.0.3)
16
+ activesupport (= 3.0.3)
17
+ builder (~> 2.1.2)
18
+ i18n (~> 0.4)
19
+ activerecord (3.0.3)
20
+ activemodel (= 3.0.3)
21
+ activesupport (= 3.0.3)
22
+ arel (~> 2.0.2)
23
+ tzinfo (~> 0.3.23)
24
+ activesupport (3.0.3)
25
+ arel (2.0.6)
26
26
  bson_ext (1.1.4)
27
- durran-validatable (2.0.1)
27
+ builder (2.1.2)
28
+ ffi (1.0.1)
29
+ rake (>= 0.8.7)
28
30
  gravtastic (3.1.0)
29
31
  haml (3.0.24)
30
- mongo (1.0.9)
31
- bson (>= 1.0.5)
32
- mongo_ext (0.19.3)
33
- mongoid (1.9.2)
34
- activesupport (< 3.0.0)
35
- bson (~> 1.0.1)
36
- durran-validatable (>= 2.0.1)
37
- mongo (~> 1.0.1)
38
- will_paginate (< 2.9)
32
+ i18n (0.5.0)
39
33
  rack (1.2.1)
40
34
  rack-test (0.5.6)
41
35
  rack (>= 1.0)
36
+ rake (0.8.7)
42
37
  sass (3.1.0.alpha.200)
43
38
  shoulda (2.10.3)
44
39
  sinatra (1.1.0)
45
40
  rack (~> 1.1)
46
41
  tilt (~> 1.1)
42
+ sqlite3 (0.1.1)
43
+ ffi (>= 0.6.3)
47
44
  tilt (1.1)
48
- will_paginate (2.3.15)
45
+ tzinfo (0.3.23)
49
46
 
50
47
  PLATFORMS
51
48
  ruby
52
49
 
53
50
  DEPENDENCIES
51
+ activerecord (~> 3.0.0)
54
52
  bson_ext
55
53
  gravtastic
56
54
  haml (>= 3.0.24)
57
- mongoid
58
55
  punchcard!
59
56
  rack-test (>= 0.5.6)
60
57
  sass (>= 3.0.0)
61
58
  shoulda (= 2.10.3)
62
59
  sinatra (>= 1.0.0)
63
- sinatra-mongoid!
60
+ sqlite3
data/README.rdoc CHANGED
@@ -2,42 +2,56 @@
2
2
 
3
3
  A simple Sinatra app that lets you track who is and has been in the office at what times.
4
4
 
5
- == Setup (theory)
6
-
7
- Create a folder for your app, add a Gemfile:
5
+ == Bootstrap
8
6
 
7
+ Create a directory to hold your app, then create a Gemfile:
8
+
9
9
  source :rubygems
10
- gem 'punchcard'
10
+ gem 'pg'
11
+ # gem 'sqlite3' # if you want to run using sqlite or test locally
12
+ gem 'punchcard', ">= 0.1.3", :path => '../github/punchcard'
13
+
14
+ Create a Rakefile:
15
+
16
+ require 'bundler'
17
+ require 'rake'
18
+ Bundler.require
11
19
 
12
- Run bundle install. You'll also need a config.ru that looks like this:
20
+ require 'punchcard/tasks'
21
+
22
+ Create a config.ru for rack:
13
23
 
14
24
  require 'bundler'
15
25
  Bundler.require
16
- Punchcard.set :mongo_db, 'punchcard'
26
+
27
+ # You'll surely want to secure your punch card from general web access. The simplest way to do so is by
28
+ # using the rack auth middleware, defining it somewhere in your config.ru:
29
+ Punchcard.use Rack::Auth::Basic do |username, password|
30
+ [username, password] == ['someuser', 'secret']
31
+ end
32
+
17
33
  run Punchcard
18
34
 
19
- Now running rackup should launch punchcard.
20
-
21
- == Setup (for real on Heroku)
35
+ To run locally, make sure you have a proper ENV['DATABASE_URL'] configured or the sqlite3 gem installed
36
+ with your bundle. Then:
37
+
38
+ $ bundle install
39
+ $ rake db:migrate
40
+ $ rackup
41
+
42
+ Open http://localhost:9292
43
+
44
+ == Hosting on Heroku
22
45
 
23
- Same as above, but you can ditch the mongo_db setup line. Initialize a git repo in your folder
46
+ Starting from the initial bootstrap above, make sure you have the pg gem in your bundle, then do the
47
+ following in the terminal:
24
48
 
25
49
  $ git init
26
- $ git commit -a -m "Initial commit"
50
+ $ git commit -am "Initial commit"
27
51
  $ heroku create [APPNAME] --stack bamboo-mri-1.9.2
28
- $ heroku addons:add mongohq:free
29
52
  $ git push heroku master
30
53
 
31
- Now head over to your app's url! Please also check out the next two sections for auth and adding people.
32
-
33
- == Authentication
34
-
35
- You'll surely want to secure your punch card from general web access. The simplest way to do so is by
36
- using the rack auth middleware by defining it somewhere in your config.ru:
37
-
38
- Punchcard.use Rack::Auth::Basic do |username, password|
39
- [username, password] == ['admin', 'admin']
40
- end
54
+ Now head over to your app's url! You'll still need to add users, see below.
41
55
 
42
56
  == Adding people
43
57
 
data/Rakefile CHANGED
@@ -5,8 +5,8 @@ begin
5
5
  require 'jeweler'
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "punchcard"
8
- gem.summary = %Q{Simple sinatra/mongodb app for tracking time when people have been in the office}
9
- gem.description = %Q{Simple sinatra/mongodb app for tracking time when people have been in the office}
8
+ gem.summary = %Q{Simple sinatra/activerecord based app for tracking time when people have been in the office}
9
+ gem.description = %Q{Simple sinatra/activerecord based app for tracking time when people have been in the office}
10
10
  gem.email = "christoph at olszowka de"
11
11
  gem.homepage = "http://github.com/colszowka/punchcard"
12
12
  gem.authors = ["Christoph Olszowka"]
@@ -14,10 +14,11 @@ begin
14
14
  gem.add_dependency 'bson_ext', '>= 0'
15
15
  gem.add_dependency 'haml', '>= 3.0.24'
16
16
  gem.add_dependency 'sass', '>= 3.0.0'
17
- gem.add_dependency 'mongoid', '>= 0'
17
+ gem.add_dependency 'activerecord', '~> 3.0.0'
18
18
  gem.add_dependency 'gravtastic', '>= 0'
19
19
  gem.add_development_dependency "shoulda", "2.10.3"
20
20
  gem.add_development_dependency "rack-test", ">= 0.5.6"
21
+ gem.add_development_dependency 'sqlite3', '>= 0'
21
22
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
22
23
  end
23
24
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -0,0 +1,13 @@
1
+ class CreatePeople < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :people do |t|
4
+ t.string :name, :null => false
5
+ t.string :email, :null => false
6
+ t.timestamps
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :people
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class CreatePunches < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :punches do |t|
4
+ t.integer :person_id, :null => false
5
+ t.datetime :checked_in_at, :null => false
6
+ t.datetime :checked_out_at, :default => nil
7
+ t.timestamps
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :people
13
+ end
14
+ end
@@ -1,12 +1,5 @@
1
- class Person
2
- include Mongoid::Document
3
-
4
- field :name
5
- field :email
6
-
7
- index :name, :unique => true
8
-
9
- embeds_many :punches
1
+ class Person < ActiveRecord::Base
2
+ has_many :punches
10
3
 
11
4
  validates_presence_of :name, :email
12
5
 
@@ -15,14 +8,14 @@ class Person
15
8
 
16
9
  # Returns the currently pending punch when present, nil otherwise
17
10
  def pending?
18
- punches.pending.first
11
+ punches.pending.count > 0 ? punches.pending.first : nil
19
12
  end
20
13
 
21
14
  # Punches in when no punches pending, punches out when a pending punch exists!
22
15
  # When punching in, checks whether a recently finished punch exists and reopens if so instead
23
16
  # of creating a new punch
24
17
  def punch!
25
- if punch = punches.pending.first
18
+ if punch = pending?
26
19
  punch.punch_out!
27
20
  else
28
21
  if recently_finished = punches.recently_finished.first
@@ -1,16 +1,12 @@
1
- class Punch
2
- include Mongoid::Document
3
- field :checked_in_at, :type => Time
4
- field :checked_out_at, :type => Time
5
-
6
- embedded_in :person, :inverse_of => :punches
7
-
8
- scope :pending, where(:checked_out_at.exists => false)
9
- scope :finished, where(:checked_out_at.exists => true, :checked_in_at.exists => true)
10
- scope :recently_finished, where(:checked_out_at.gt => 30.minutes.ago)
11
-
1
+ class Punch < ActiveRecord::Base
2
+ belongs_to :person
3
+
12
4
  validates_presence_of :checked_in_at
13
5
 
6
+ scope :pending, where("checked_out_at IS NULL").order("checked_in_at ASC")
7
+ scope :finished, where("checked_in_at IS NOT NULL AND checked_out_at IS NOT NULL").order('checked_out_at DESC')
8
+ scope :recently_finished, where("checked_out_at > ?", 30.minutes.ago).order('checked_out_at DESC')
9
+
14
10
  before_validation do |p|
15
11
  p.checked_in_at ||= Time.now
16
12
  end
@@ -19,6 +15,13 @@ class Punch
19
15
  p.errors.add :person, "Person already has a pending punch!" if p.person.pending? and p.person.pending? != p
20
16
  end
21
17
 
18
+ after_save do |p|
19
+ # Destroy punches shorter than 5 minutes
20
+ if p.checked_out_at.present? and (p.checked_out_at - p.checked_in_at) < 5.minutes
21
+ p.destroy
22
+ end
23
+ end
24
+
22
25
  # Punches this punch out when pending
23
26
  def punch_out!
24
27
  return false if checked_out_at.present?
@@ -0,0 +1,11 @@
1
+ # Rake tasks for punchcard, import with require 'punchcard/tasks'
2
+
3
+ namespace :db do
4
+ desc "Migrate the database"
5
+ task(:migrate) do
6
+ require 'logger'
7
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
8
+ ActiveRecord::Migration.verbose = false
9
+ ActiveRecord::Migrator.migrate(File.join(File.dirname(__FILE__), "../db/migrate"))
10
+ end
11
+ end
data/lib/punchcard.rb CHANGED
@@ -2,9 +2,14 @@ require 'bundler'
2
2
  Bundler.setup(:default)
3
3
 
4
4
  require 'sinatra'
5
- require 'sinatra/mongoid'
6
5
  require 'gravtastic'
7
- require 'mongoid'
6
+ require 'active_record'
7
+
8
+ require 'logger'
9
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
10
+ ActiveRecord::Base.logger.level = Logger::WARN
11
+ ActiveRecord::Migration.verbose = false
12
+ ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || {:adapter => 'sqlite3', :database => "punchcard_#{ENV['RACK_ENV'] || 'development'}.sqlite3"})
8
13
 
9
14
  require 'punchcard/person'
10
15
  require 'punchcard/punch'
@@ -18,7 +23,7 @@ class Punchcard < Sinatra::Base
18
23
  end
19
24
 
20
25
  get '/status.json' do
21
- Person.order_by(:name).all.to_json
26
+ Person.order('name ASC').map(&:payload).to_json
22
27
  end
23
28
 
24
29
  post '/punch/:id' do
data/punchcard.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{punchcard}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christoph Olszowka"]
12
- s.date = %q{2010-12-08}
13
- s.description = %q{Simple sinatra/mongodb app for tracking time when people have been in the office}
12
+ s.date = %q{2010-12-09}
13
+ s.description = %q{Simple sinatra/activerecord based app for tracking time when people have been in the office}
14
14
  s.email = %q{christoph at olszowka de}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
@@ -26,12 +26,15 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "config.ru",
29
+ "lib/db/migrate/01_create_people.rb",
30
+ "lib/db/migrate/02_create_punches.rb",
29
31
  "lib/public/cardbg.png",
30
32
  "lib/public/css/blueprint.css",
31
33
  "lib/public/js/app.js",
32
34
  "lib/punchcard.rb",
33
35
  "lib/punchcard/person.rb",
34
36
  "lib/punchcard/punch.rb",
37
+ "lib/punchcard/tasks.rb",
35
38
  "lib/views/index.haml",
36
39
  "lib/views/layout.haml",
37
40
  "lib/views/screen.sass",
@@ -44,7 +47,7 @@ Gem::Specification.new do |s|
44
47
  s.rdoc_options = ["--charset=UTF-8"]
45
48
  s.require_paths = ["lib"]
46
49
  s.rubygems_version = %q{1.3.7}
47
- s.summary = %q{Simple sinatra/mongodb app for tracking time when people have been in the office}
50
+ s.summary = %q{Simple sinatra/activerecord based app for tracking time when people have been in the office}
48
51
  s.test_files = [
49
52
  "test/helper.rb",
50
53
  "test/test_database.rb",
@@ -60,29 +63,32 @@ Gem::Specification.new do |s|
60
63
  s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
61
64
  s.add_runtime_dependency(%q<haml>, [">= 3.0.24"])
62
65
  s.add_runtime_dependency(%q<sass>, [">= 3.0.0"])
63
- s.add_runtime_dependency(%q<mongoid>, [">= 0"])
66
+ s.add_runtime_dependency(%q<activerecord>, ["~> 3.0.0"])
64
67
  s.add_runtime_dependency(%q<gravtastic>, [">= 0"])
65
68
  s.add_development_dependency(%q<shoulda>, ["= 2.10.3"])
66
69
  s.add_development_dependency(%q<rack-test>, [">= 0.5.6"])
70
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
67
71
  else
68
72
  s.add_dependency(%q<sinatra>, [">= 1.0.0"])
69
73
  s.add_dependency(%q<bson_ext>, [">= 0"])
70
74
  s.add_dependency(%q<haml>, [">= 3.0.24"])
71
75
  s.add_dependency(%q<sass>, [">= 3.0.0"])
72
- s.add_dependency(%q<mongoid>, [">= 0"])
76
+ s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
73
77
  s.add_dependency(%q<gravtastic>, [">= 0"])
74
78
  s.add_dependency(%q<shoulda>, ["= 2.10.3"])
75
79
  s.add_dependency(%q<rack-test>, [">= 0.5.6"])
80
+ s.add_dependency(%q<sqlite3>, [">= 0"])
76
81
  end
77
82
  else
78
83
  s.add_dependency(%q<sinatra>, [">= 1.0.0"])
79
84
  s.add_dependency(%q<bson_ext>, [">= 0"])
80
85
  s.add_dependency(%q<haml>, [">= 3.0.24"])
81
86
  s.add_dependency(%q<sass>, [">= 3.0.0"])
82
- s.add_dependency(%q<mongoid>, [">= 0"])
87
+ s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
83
88
  s.add_dependency(%q<gravtastic>, [">= 0"])
84
89
  s.add_dependency(%q<shoulda>, ["= 2.10.3"])
85
90
  s.add_dependency(%q<rack-test>, [">= 0.5.6"])
91
+ s.add_dependency(%q<sqlite3>, [">= 0"])
86
92
  end
87
93
  end
88
94
 
data/test/helper.rb CHANGED
@@ -1,17 +1,23 @@
1
+ ENV['RACK_ENV'] = 'test'
1
2
  require 'rubygems'
2
3
  require 'bundler'
3
4
  Bundler.require
4
5
  require 'test/unit'
5
6
  require 'shoulda'
7
+ require 'rack/test'
6
8
 
7
9
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
10
  $LOAD_PATH.unshift(File.dirname(__FILE__))
9
11
  require 'punchcard'
10
12
 
11
- Punchcard.set :mongo_db, 'punchcard_test'
13
+ # DB setup
14
+ require 'logger'
15
+ system 'rm ./punchcard_test.sqlite3'
16
+ ActiveRecord::Migrator.migrate(File.join(File.dirname(__FILE__), "../lib/db/migrate"))
12
17
 
13
18
  class Test::Unit::TestCase
14
19
  def setup
15
20
  Person.delete_all
21
+ Punch.delete_all
16
22
  end
17
23
  end
@@ -21,19 +21,22 @@ class TestDatabase < Test::Unit::TestCase
21
21
  assert_nil @person.pending?
22
22
  end
23
23
 
24
- context "that gets punched" do
24
+ context "that got punched 2 hours ago" do
25
25
  setup do
26
26
  assert @person.punch!.instance_of?(Punch), "Should have been able to get punched and have returned a Punch"
27
+ punch = @person.pending?
28
+ punch.checked_in_at = 2.hours.ago
29
+ punch.save!
27
30
  end
28
31
 
29
32
  should "have one pending punch" do
30
33
  assert_equal Punch, @person.pending?.class
31
- assert_equal 1, @person.punches.pending.length
32
- assert_equal 0, @person.punches.finished.length
34
+ assert_equal 1, @person.punches.pending.count
35
+ assert_equal 0, @person.punches.finished.count
33
36
  end
34
37
 
35
38
  should "not allow to create another pending punch" do
36
- assert_raise Mongoid::Errors::Validations do
39
+ assert_raise ActiveRecord::RecordInvalid do
37
40
  @person.punches.create!
38
41
  end
39
42
  end
@@ -53,8 +56,8 @@ class TestDatabase < Test::Unit::TestCase
53
56
 
54
57
  should "have one punch and no pending punches" do
55
58
  assert_equal 1, @person.punches.count
56
- assert_equal 0, @person.punches.pending.length
57
- assert_equal 1, @person.punches.finished.length
59
+ assert_equal 0, @person.punches.pending.count
60
+ assert_equal 1, @person.punches.finished.count
58
61
  end
59
62
 
60
63
  context "and gets punched yet again" do
@@ -68,17 +71,19 @@ class TestDatabase < Test::Unit::TestCase
68
71
 
69
72
  should "have 1 punch by having reopened the old one" do
70
73
  assert_equal 1, @person.punches.count
71
- assert_equal 1, @person.punches.pending.length
72
- assert_equal 0, @person.punches.finished.length
74
+ assert_equal 1, @person.punches.pending.count
75
+ assert_equal 0, @person.punches.finished.count
73
76
  end
74
77
  end
75
78
 
76
79
  context "and gets punched yet again 2 hours later" do
77
80
  setup do
78
81
  # Fake the timestamp so reopening does not get triggered
79
- punch = @person.punches.first
82
+ punch = @person.punches.finished.first
83
+ punch.checked_in_at = 3.hours.ago
80
84
  punch.checked_out_at = 2.hours.ago
81
85
  punch.save!
86
+ assert_nil @person.pending?
82
87
  assert @person.punch!.instance_of?(Punch), "Should have been able to get punched and have returned a Punch"
83
88
  end
84
89
 
@@ -88,13 +93,33 @@ class TestDatabase < Test::Unit::TestCase
88
93
 
89
94
  should "have 2 punches and one pending punch" do
90
95
  assert_equal 2, @person.punches.count
91
- assert_equal 1, @person.punches.pending.length
92
- assert_equal 1, @person.punches.finished.length
96
+ assert_equal 1, @person.punches.pending.count
97
+ assert_equal 1, @person.punches.finished.count
93
98
  end
94
99
  end
95
100
  end
96
101
  end
97
102
 
103
+ context "that punched in just now" do
104
+ setup do
105
+ @person.punch!
106
+ end
107
+
108
+ should "be punched in" do
109
+ assert @person.pending?
110
+ end
111
+
112
+ context "and punches out shortly after that" do
113
+ setup do
114
+ @person.punch!
115
+ end
116
+
117
+ should "not have any punches because of the automatic deletion of too-short punches" do
118
+ assert_equal 0, @person.punches.count
119
+ end
120
+ end
121
+ end
122
+
98
123
  context "that punched in yesterday" do
99
124
  setup do
100
125
  @person.punch!
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestPunchcard < Test::Unit::TestCase
4
+ # TODO
4
5
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Christoph Olszowka
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-08 00:00:00 +01:00
17
+ date: 2010-12-09 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -76,16 +76,18 @@ dependencies:
76
76
  type: :runtime
77
77
  version_requirements: *id004
78
78
  - !ruby/object:Gem::Dependency
79
- name: mongoid
79
+ name: activerecord
80
80
  prerelease: false
81
81
  requirement: &id005 !ruby/object:Gem::Requirement
82
82
  none: false
83
83
  requirements:
84
- - - ">="
84
+ - - ~>
85
85
  - !ruby/object:Gem::Version
86
86
  segments:
87
+ - 3
87
88
  - 0
88
- version: "0"
89
+ - 0
90
+ version: 3.0.0
89
91
  type: :runtime
90
92
  version_requirements: *id005
91
93
  - !ruby/object:Gem::Dependency
@@ -131,7 +133,20 @@ dependencies:
131
133
  version: 0.5.6
132
134
  type: :development
133
135
  version_requirements: *id008
134
- description: Simple sinatra/mongodb app for tracking time when people have been in the office
136
+ - !ruby/object:Gem::Dependency
137
+ name: sqlite3
138
+ prerelease: false
139
+ requirement: &id009 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ type: :development
148
+ version_requirements: *id009
149
+ description: Simple sinatra/activerecord based app for tracking time when people have been in the office
135
150
  email: christoph at olszowka de
136
151
  executables: []
137
152
 
@@ -150,12 +165,15 @@ files:
150
165
  - Rakefile
151
166
  - VERSION
152
167
  - config.ru
168
+ - lib/db/migrate/01_create_people.rb
169
+ - lib/db/migrate/02_create_punches.rb
153
170
  - lib/public/cardbg.png
154
171
  - lib/public/css/blueprint.css
155
172
  - lib/public/js/app.js
156
173
  - lib/punchcard.rb
157
174
  - lib/punchcard/person.rb
158
175
  - lib/punchcard/punch.rb
176
+ - lib/punchcard/tasks.rb
159
177
  - lib/views/index.haml
160
178
  - lib/views/layout.haml
161
179
  - lib/views/screen.sass
@@ -194,7 +212,7 @@ rubyforge_project:
194
212
  rubygems_version: 1.3.7
195
213
  signing_key:
196
214
  specification_version: 3
197
- summary: Simple sinatra/mongodb app for tracking time when people have been in the office
215
+ summary: Simple sinatra/activerecord based app for tracking time when people have been in the office
198
216
  test_files:
199
217
  - test/helper.rb
200
218
  - test/test_database.rb