diff --git a/rails_root/.rvmrc b/rails_root/.rvmrc new file mode 100644 index 0000000..f73d5d7 --- /dev/null +++ b/rails_root/.rvmrc @@ -0,0 +1 @@ +rvm 1.9.2 diff --git a/rails_root/app/helpers/calendars_helper.rb b/rails_root/app/helpers/calendars_helper.rb index c919e6d..e8f5c0c 100644 --- a/rails_root/app/helpers/calendars_helper.rb +++ b/rails_root/app/helpers/calendars_helper.rb @@ -11,7 +11,7 @@ def draw_plan(plan) end plan.executions.each do |execution| - result << %(
 
#{execution.date.day}
) + result << %(
 
#{execution.date.day}
) end result += %() diff --git a/rails_root/app/models/execution.rb b/rails_root/app/models/execution.rb index 0b57a67..d60c531 100644 --- a/rails_root/app/models/execution.rb +++ b/rails_root/app/models/execution.rb @@ -1,4 +1,31 @@ class Execution < ActiveRecord::Base belongs_to :plan has_many :activities + has_many :habits, :through => :plan + + def act!(habit_id) + self.activities.create!(:habit_id => habit_id) + end + + class Status + GREAT = 'great' + GOOD = 'good' + BAD = 'bad' + UNKNOWN = 'unknown' + end + + def status + return Status::UNKNOWN if self.date > Date.today + acted_habits = self.habits.select{|habit| acted?(habit) } + if acted_habits.blank? + return self.date == Date.today ? Status::UNKNOWN : Status::BAD + end + return Status::GREAT if acted_habits.size == self.habits.size + return Status::GOOD + end + + private + def acted?(habit) + not self.activities.find_by_habit_id(habit).blank? + end end diff --git a/rails_root/app/models/habit.rb b/rails_root/app/models/habit.rb index 88afb63..f14e5ca 100644 --- a/rails_root/app/models/habit.rb +++ b/rails_root/app/models/habit.rb @@ -1,4 +1,4 @@ class Habit < ActiveRecord::Base belongs_to :plan - has_many :activities + has_many :activities end diff --git a/rails_root/app/models/plan.rb b/rails_root/app/models/plan.rb index 44a83a3..efb6707 100644 --- a/rails_root/app/models/plan.rb +++ b/rails_root/app/models/plan.rb @@ -5,6 +5,10 @@ class Plan < ActiveRecord::Base after_create :create_executions + def execution_on(date) + executions.detect{|execution| execution.date == date} + end + class Status ACTIVE = 'active' ABANDONED = 'abandoned' diff --git a/rails_root/db/migrate/20110124121153_insert_test_data.rb b/rails_root/db/migrate/20110124121153_insert_test_data.rb index 0b3de67..ccc6a0f 100644 --- a/rails_root/db/migrate/20110124121153_insert_test_data.rb +++ b/rails_root/db/migrate/20110124121153_insert_test_data.rb @@ -3,7 +3,7 @@ def self.up return unless RAILS_ENV == 'development' user = User.create!(:email => 'user@test.com', :password => 'password') - user.create_plan!(Date.today, ['Gym', 'Drawing', 'Djembe']) + user.create_plan!((Date.today - 10), ['Gym', 'Drawing', 'Djembe']) User.create!(:email => 'empty.user@test.com', :password => 'password') end diff --git a/rails_root/doc/design.key b/rails_root/doc/design.key new file mode 100644 index 0000000..3d32192 Binary files /dev/null and b/rails_root/doc/design.key differ diff --git a/rails_root/public/images/grid-bad.png b/rails_root/public/images/grid-bad.png new file mode 100644 index 0000000..69ccc1b Binary files /dev/null and b/rails_root/public/images/grid-bad.png differ diff --git a/rails_root/public/images/grid-good.png b/rails_root/public/images/grid-good.png new file mode 100644 index 0000000..4f60973 Binary files /dev/null and b/rails_root/public/images/grid-good.png differ diff --git a/rails_root/public/images/grid-great.png b/rails_root/public/images/grid-great.png new file mode 100644 index 0000000..9fc0aaf Binary files /dev/null and b/rails_root/public/images/grid-great.png differ diff --git a/rails_root/public/stylesheets/ohfy.css b/rails_root/public/stylesheets/ohfy.css index 7921719..082e6ce 100644 --- a/rails_root/public/stylesheets/ohfy.css +++ b/rails_root/public/stylesheets/ohfy.css @@ -63,6 +63,10 @@ a:hover { background-image: url("/images/grid-unknown.png"); } +.calendar .bad { + background-image: url("/images/grid-bad.png"); +} + .sticker { margin: 0 auto; overflow: hidden; diff --git a/rails_root/spec/models/execution_spec.rb b/rails_root/spec/models/execution_spec.rb index 118911b..04099c6 100644 --- a/rails_root/spec/models/execution_spec.rb +++ b/rails_root/spec/models/execution_spec.rb @@ -1,5 +1,43 @@ require 'spec_helper' describe Execution do - + before(:each) do + @user = create_test_user + @plan = @user.create_plan!((Date.today - 3), ['Drawing', 'Guitar', 'Gym']) + end + + describe :status do + it "returns GREAT if all habits are acted" do + date = Date.today - 3 + execution = @plan.execution_on(date) + + lambda do + execution.habits.each{|habit| execution.act!(habit.id) } + end.should change(Activity, :count).by(3) + + execution.status.should == Execution::Status::GREAT + end + + it "returns GOOD if some habits are acted" do + execution = @plan.execution_on(Date.today - 2) + execution.act!(execution.habits.first) + execution.status.should == Execution::Status::GOOD + end + + it "returns BAD if no habit is acted" do + @plan.execution_on(Date.today - 1).status.should == Execution::Status::BAD + end + + it "returns UNKNOWN for future dates" do + @plan.execution_on(Date.tomorrow).status.should == Execution::Status::UNKNOWN + end + + it "returns UNKNOWN if no habit is acted for today" do + execution = @plan.execution_on(Date.today) + execution.status.should == Execution::Status::UNKNOWN + + execution.act!(execution.habits.first) + execution.status.should == Execution::Status::GOOD + end + end end diff --git a/rails_root/spec/models/plan_spec.rb b/rails_root/spec/models/plan_spec.rb index 64188d1..8bef737 100644 --- a/rails_root/spec/models/plan_spec.rb +++ b/rails_root/spec/models/plan_spec.rb @@ -1,4 +1,18 @@ require 'spec_helper' describe Plan do + describe :execution_on do + before(:each) do + @user = create_test_user + @plan = @user.create_plan!((Date.today - 3), ['Drawing', 'Guitar', 'Gym']) + end + + it "returns execution on given date" do + @plan.execution_on(Date.today).date.should == Date.today + end + + it "returns nil if given date is out of range" do + @plan.execution_on(Date.today - 10).should be_nil + end + end end diff --git a/rails_root/thoughtworkers-validator.pem b/rails_root/thoughtworkers-validator.pem new file mode 100644 index 0000000..2031902 --- /dev/null +++ b/rails_root/thoughtworkers-validator.pem @@ -0,0 +1,81 @@ + + + + + + + Opscode Management + + + + + + + + + +
+ +
+
+
+ +
+

Page not found.

+
+
+
+
+ +
+ +
+
+ +
+ +