Skip to content

Commit

Permalink
fix spec about user with Mongoid/Rails3/Rspec2
Browse files Browse the repository at this point in the history
  • Loading branch information
shingara committed May 26, 2010
1 parent 08e5eaf commit 5e16511
Show file tree
Hide file tree
Showing 30 changed files with 647 additions and 614 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -21,3 +21,4 @@ bin
gems
config/email.yml
.bundle
config/mongoid.yml
2 changes: 1 addition & 1 deletion Gemfile
Expand Up @@ -8,7 +8,7 @@ gem 'haml'
gem 'responders', :git => 'http://github.com/plataformatec/responders.git'
gem 'rails3-generators'
gem 'inherited_resources', '1.1.2'
gem 'bson_ext'
gem 'bson_ext', :require => 'bson'
gem 'RedCloth', :require => 'redcloth'

group :test do
Expand Down
8 changes: 0 additions & 8 deletions app/controllers/application_controller.rb
Expand Up @@ -3,14 +3,6 @@ class ApplicationController < ActionController::Base
protect_from_forgery
layout 'application'

rescue_from Mongo::InvalidObjectID do
return_404
end

rescue_from MongoMapper::DocumentNotFound do
return_404
end

private

def need_admin
Expand Down
6 changes: 3 additions & 3 deletions app/models/attachment.rb
@@ -1,9 +1,9 @@
class Attachment
include MongoMapper::EmbeddedDocument
include Mongoid::Document

#class << self

#include CarrierWave::Mount
#include CarrierWave::Mount

#def mount_uploader(column, uploader, options={}, &block)

Expand Down
27 changes: 14 additions & 13 deletions app/models/event.rb
@@ -1,32 +1,33 @@
class Event

include MongoMapper::Document
include Mongoid::Document
include Mongoid::Timestamps

### PROPERTY ###

key :user_name, String
key :event_type, String
key :event_title, String
field :user_name, :type => String
field :event_type, :type => String
field :event_title, :type => String

### Association ###

key :user_id, ObjectId
key :project_id, ObjectId
ensure_index :project_id
field :user_id, :type => BSON::ObjectID
field :project_id, :type => BSON::ObjectID
index :project_id

# Polymorphic event
key :eventable_type, String
key :eventable_id, ObjectId
field :eventable_type, :type => String
field :eventable_id, :type => BSON::ObjectID

belongs_to :user
belongs_to :project
belongs_to :eventable, :polymorphic => true, :dependent => :destroy
belongs_to_related :user
belongs_to_related :project
belongs_to_related :eventable, :polymorphic => true, :dependent => :destroy

before_save :update_event_title
before_save :update_user_name

# TODO: need test about created_at/updated_at needed
timestamps!
#timestamps!

##
# get the class eventable in string pluralize
Expand Down
10 changes: 7 additions & 3 deletions app/models/function.rb
Expand Up @@ -3,11 +3,15 @@
#
class Function

include MongoMapper::Document
include Mongoid::Document

# TODO: need test validation of required name and uniqueness of name
key :name, String, :required => true, :unique => true
key :project_admin, Boolean
field :name, :type => String
validates_uniqueness_of :name
validates_presence_of :name
field :project_admin, :type => Boolean

has_many_related :project_members


# TODO: when a function is delete
Expand Down
23 changes: 12 additions & 11 deletions app/models/milestone.rb
@@ -1,21 +1,22 @@
class Milestone

include MongoMapper::Document
include Mongoid::Document

key :name, String, :required => true
key :description, String
key :expected_at, Date
field :name, :type => String, :required => true
field :description, :type => String
field :expected_at, :type => Date

# denormalisation
key :nb_tickets_open, Integer, :default => 0
key :nb_tickets_closed, Integer, :default => 0
key :nb_tickets, Integer, :default => 0
key :tag_counts, Hash
field :nb_tickets_open, :type => Integer, :default => 0
field :nb_tickets_closed, :type => Integer, :default => 0
field :nb_tickets, :type => Integer, :default => 0
field :tag_counts, :type => Hash

many :tickets
has_many_related :tickets

key :project_id, ObjectId, :required => true
belongs_to :project
field :project_id, :type => BSON::ObjectID
validates_presence_of :project_id
belongs_to_related :project

after_save :check_current_milestone

Expand Down
8 changes: 5 additions & 3 deletions app/models/priority.rb
@@ -1,8 +1,10 @@
class Priority

include MongoMapper::Document

key :name, String, :required => true, :unique => true
include Mongoid::Document

field :name, :type => String
validates_presence_of :name
validates_uniqueness_of :name

before_destroy :only_without_ticket

Expand Down
49 changes: 27 additions & 22 deletions app/models/project.rb
@@ -1,43 +1,40 @@
class Project

include MongoMapper::Document
include Mongoid::Document
include Mongoid::Timestamps

### PROPERTY ###

key :name, String, :unique => true
field :name, :type => String
validates_uniqueness_of :name
alias_method :title, :name
key :description, String
field :description, :type => String

# callbacks
key :num_ticket, Integer
key :tag_counts, Hash
key :current_milestone_name, String
field :num_ticket, :type => Integer
field :tag_counts, :type => Hash
field :current_milestone_name, :type => String

# TODO: need test about created_at and updated_at needed
timestamps!
#timestamps!

### EmbeddedDocument ###

many :project_members
include_errors_from :project_members
embeds_many :project_members
#include_errors_from :project_members

### Other Documents ###

many :milestones, :dependent => :destroy
many :tickets, :dependent => :destroy
many :events, :dependent => :destroy
has_many_related :milestones, :dependent => :destroy
has_many_related :tickets, :dependent => :destroy
has_many_related :events, :dependent => :destroy

key :current_milestone_id, ObjectId
field :current_milestone_id, :type => BSON::ObjectID

### VALIDATIONS ###

validates_true_for :project_members,
:logic => lambda { have_one_admin },
:message => 'need an admin'

validates_true_for :same_project_members,
:logic => lambda { only_once_each_member },
:message => 'not several same member in project'
validate :have_one_admin
validate :only_once_each_member

validates_presence_of :name

Expand All @@ -46,8 +43,8 @@ class Project
### Callback ###

# Callback about ProjectMember
before_validation :update_project_admin
before_validation :update_user_name
before_validate :update_project_admin
before_validate :update_user_name

before_save :update_current_milestone

Expand Down Expand Up @@ -208,6 +205,10 @@ def new_with_admin_member(attributes, user)
##
# Check if project has one member define like admin
def have_one_admin

# validates_true_for :project_members,
# :logic => lambda { have_one_admin },
# :message => 'need an admin'
project_members.any? {|m| m.project_admin?}
end

Expand Down Expand Up @@ -256,6 +257,10 @@ def update_user_name
end

def only_once_each_member

# validates_true_for :same_project_members,
# :logic => lambda { only_once_each_member },
# :message => 'not several same member in project'
project_members.map(&:user_id).uniq!.nil?
end

Expand Down
22 changes: 14 additions & 8 deletions app/models/project_member.rb
@@ -1,20 +1,26 @@
class ProjectMember

include MongoMapper::EmbeddedDocument
include Mongoid::Document

# TODO: need test about required user_name and function_name
key :user_id, ObjectId
key :function_id, ObjectId
field :user_id, :type => BSON::ObjectID
field :function_id, :type => BSON::ObjectID

# update by callback
key :user_name, String, :required => true
key :function_name, String, :required => true
key :project_admin, Boolean
field :user_name, :type => String, :required => true
validates_presence_of :user_name

field :function_name, :type => String, :required => true
validates_presence_of :function_name

field :project_admin, :type => Boolean
validates_presence_of :project_admin

# Update field is made on master document

belongs_to :user
belongs_to :function
belongs_to_related :user
belongs_to_related :function
embedded_in :project, :inverse_of => :project_members

validates_presence_of :function_id
validates_presence_of :user_id
Expand Down
8 changes: 5 additions & 3 deletions app/models/state.rb
@@ -1,9 +1,11 @@
class State

include MongoMapper::Document
include Mongoid::Document

key :name, String, :required => true, :unique => true #, :nullable => false, :unique => true
key :closed, Boolean, :default => false
field :name, :type => String, :required => true, :unique => true #, :nullable => false, :unique => true
validates_uniqueness_of :name
validates_presence_of :name
field :closed, :type => Boolean, :default => false

class << self
def closed
Expand Down

0 comments on commit 5e16511

Please sign in to comment.