Only in agility-gitorial: .git
Only in agility-gitorial: .gitignore
Only in agility-gitorial: .gitmodules
diff -r agility-gitorial/README agility/README
1c1
< # Agility
---
> == Welcome to Rails
3,4c3,4
< This is the source code to accompany the [Agility gitorial for
< Hobo](http://cookbook.hobocentral.net/gitorials/agility).
---
> Rails is a web-application framework that includes everything needed to create
> database-backed web applications according to the Model-View-Control pattern.
6,23c6,243
< Agility is a simple "Agile Development" application – Agility. The
< application tracks projects which consist of a number of user
< stories. Stories have a status (e.g. accepted, under development…) as
< well as a number of associated tasks. Tasks can be assigned to users,
< and each user can see a heads-up of all the tasks they’ve been
< assigned to on their home page.
<
< To keep the gitorial clean, updates to the gitorial **rewrite
< history**. That means that you cannot `git pull`. If you wish to
< update to a later version, you must `git clone` the repository again
< and move any changes you have made from your old clone to the new one.
<
< The "real" history is kept in our [source
< repository](http://github.com/bryanlarsen/agility-gitorial-patches/tree/master).
<
< There is a [version of
< agility](http://github.com/tablatom/agility/tree/master) that is not
< in gitorial format. This tree is mainly used for integration testing Hobo.
---
> This pattern splits the view (also called the presentation) into "dumb" templates
> that are primarily responsible for inserting pre-built data in between HTML tags.
> The model contains the "smart" domain objects (such as Account, Product, Person,
> Post) that holds all the business logic and knows how to persist themselves to
> a database. The controller handles the incoming requests (such as Save New Account,
> Update Product, Show Post) by manipulating the model and directing data to the view.
>
> In Rails, the model is handled by what's called an object-relational mapping
> layer entitled Active Record. This layer allows you to present the data from
> database rows as objects and embellish these data objects with business logic
> methods. You can read more about Active Record in
> link:files/vendor/rails/activerecord/README.html.
>
> The controller and view are handled by the Action Pack, which handles both
> layers by its two parts: Action View and Action Controller. These two layers
> are bundled in a single package due to their heavy interdependence. This is
> unlike the relationship between the Active Record and Action Pack that is much
> more separate. Each of these packages can be used independently outside of
> Rails. You can read more about Action Pack in
> link:files/vendor/rails/actionpack/README.html.
>
>
> == Getting Started
>
> 1. At the command prompt, start a new Rails application using the rails command
> and your application name. Ex: rails myapp
> 2. Change directory into myapp and start the web server: script/server (run with --help for options)
> 3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
> 4. Follow the guidelines to start developing your application
>
>
> == Web Servers
>
> By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails
> with a variety of other web servers.
>
> Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
> suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
> getting up and running with mongrel is as easy as: gem install mongrel.
> More info at: http://mongrel.rubyforge.org
>
> Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or
> Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use
> FCGI or proxy to a pack of Mongrels/Thin/Ebb servers.
>
> == Apache .htaccess example for FCGI/CGI
>
> # General Apache options
> AddHandler fastcgi-script .fcgi
> AddHandler cgi-script .cgi
> Options +FollowSymLinks +ExecCGI
>
> # If you don't want Rails to look in certain directories,
> # use the following rewrite rules so that Apache won't rewrite certain requests
> #
> # Example:
> # RewriteCond %{REQUEST_URI} ^/notrails.*
> # RewriteRule .* - [L]
>
> # Redirect all requests not available on the filesystem to Rails
> # By default the cgi dispatcher is used which is very slow
> #
> # For better performance replace the dispatcher with the fastcgi one
> #
> # Example:
> # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
> RewriteEngine On
>
> # If your Rails application is accessed via an Alias directive,
> # then you MUST also set the RewriteBase in this htaccess file.
> #
> # Example:
> # Alias /myrailsapp /path/to/myrailsapp/public
> # RewriteBase /myrailsapp
>
> RewriteRule ^$ index.html [QSA]
> RewriteRule ^([^.]+)$ $1.html [QSA]
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
>
> # In case Rails experiences terminal errors
> # Instead of displaying this message you can supply a file here which will be rendered instead
> #
> # Example:
> # ErrorDocument 500 /500.html
>
> ErrorDocument 500 "
Application error
Rails application failed to start properly"
>
>
> == Debugging Rails
>
> Sometimes your application goes wrong. Fortunately there are a lot of tools that
> will help you debug it and get it back on the rails.
>
> First area to check is the application log files. Have "tail -f" commands running
> on the server.log and development.log. Rails will automatically display debugging
> and runtime information to these files. Debugging info will also be shown in the
> browser on requests from 127.0.0.1.
>
> You can also log your own messages directly into the log file from your code using
> the Ruby logger class from inside your controllers. Example:
>
> class WeblogController < ActionController::Base
> def destroy
> @weblog = Weblog.find(params[:id])
> @weblog.destroy
> logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
> end
> end
>
> The result will be a message in your log file along the lines of:
>
> Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
>
> More information on how to use the logger is at http://www.ruby-doc.org/core/
>
> Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
>
> * The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
> * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
>
> These two online (and free) books will bring you up to speed on the Ruby language
> and also on programming in general.
>
>
> == Debugger
>
> Debugger support is available through the debugger command when you start your Mongrel or
> Webrick server with --debugger. This means that you can break out of execution at any point
> in the code, investigate and change the model, AND then resume execution!
> You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
> Example:
>
> class WeblogController < ActionController::Base
> def index
> @posts = Post.find(:all)
> debugger
> end
> end
>
> So the controller will accept the action, run the first line, then present you
> with a IRB prompt in the server window. Here you can do things like:
>
> >> @posts.inspect
> => "[#nil, \"body\"=>nil, \"id\"=>\"1\"}>,
> #\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
> >> @posts.first.title = "hello from a debugger"
> => "hello from a debugger"
>
> ...and even better is that you can examine how your runtime objects actually work:
>
> >> f = @posts.first
> => #nil, "body"=>nil, "id"=>"1"}>
> >> f.
> Display all 152 possibilities? (y or n)
>
> Finally, when you're ready to resume execution, you enter "cont"
>
>
> == Console
>
> You can interact with the domain model by starting the console through script/console.
> Here you'll have all parts of the application configured, just like it is when the
> application is running. You can inspect domain models, change values, and save to the
> database. Starting the script without arguments will launch it in the development environment.
> Passing an argument will specify a different environment, like script/console production.
>
> To reload your controllers and models after launching the console run reload!
>
> == dbconsole
>
> You can go to the command line of your database directly through script/dbconsole.
> You would be connected to the database with the credentials defined in database.yml.
> Starting the script without arguments will connect you to the development database. Passing an
> argument will connect you to a different database, like script/dbconsole production.
> Currently works for mysql, postgresql and sqlite.
>
> == Description of Contents
>
> app
> Holds all the code that's specific to this particular application.
>
> app/controllers
> Holds controllers that should be named like weblogs_controller.rb for
> automated URL mapping. All controllers should descend from ApplicationController
> which itself descends from ActionController::Base.
>
> app/models
> Holds models that should be named like post.rb.
> Most models will descend from ActiveRecord::Base.
>
> app/views
> Holds the template files for the view that should be named like
> weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
> syntax.
>
> app/views/layouts
> Holds the template files for layouts to be used with views. This models the common
> header/footer method of wrapping views. In your views, define a layout using the
> layout :default and create a file named default.html.erb. Inside default.html.erb,
> call <% yield %> to render the view using this layout.
>
> app/helpers
> Holds view helpers that should be named like weblogs_helper.rb. These are generated
> for you automatically when using script/generate for controllers. Helpers can be used to
> wrap functionality for your views into methods.
>
> config
> Configuration files for the Rails environment, the routing map, the database, and other dependencies.
>
> db
> Contains the database schema in schema.rb. db/migrate contains all
> the sequence of Migrations for your schema.
>
> doc
> This directory is where your application documentation will be stored when generated
> using rake doc:app
>
> lib
> Application specific libraries. Basically, any kind of custom code that doesn't
> belong under controllers, models, or helpers. This directory is in the load path.
>
> public
> The directory available for the web server. Contains subdirectories for images, stylesheets,
> and javascripts. Also contains the dispatchers and the default HTML files. This should be
> set as the DOCUMENT_ROOT of your web server.
>
> script
> Helper scripts for automation and generation.
>
> test
> Unit and functional tests along with fixtures. When using the script/generate scripts, template
> test files will be generated for you and placed in this directory.
>
> vendor
> External libraries that the application depends on. Also includes the plugins subdirectory.
> If the app has frozen rails, those gems also go here, under vendor/rails/.
> This directory is in the load path.
diff -r agility-gitorial/app/controllers/projects_controller.rb agility/app/controllers/projects_controller.rb
6c6
<
---
>
11,14c11
< @stories =
< @project.stories.apply_scopes(:search => [params[:search], :title],
< :status_is => params[:status],
< :order_by => parse_sort_param(:title, :status))
---
> @stories = @project.stories.apply_scopes(:search => [params[:search], :title], :status_is => params[:status], :order_by => parse_sort_param(:title_status))
17c14
< end
---
> end
\ No newline at end of file
diff -r agility-gitorial/app/controllers/stories_controller.rb agility/app/controllers/stories_controller.rb
6d5
<
diff -r agility-gitorial/app/controllers/tasks_controller.rb agility/app/controllers/tasks_controller.rb
6c6
<
---
>
8d7
<
diff -r agility-gitorial/app/controllers/users_controller.rb agility/app/controllers/users_controller.rb
6c6
<
---
>
11,17c11,12
< if this.errors.blank?
< flash[:notice] << "You must activate your account before you can log in. Please check your email."
<
< # FIXME: remove these two lines after you get email working reliably
< # and before your application leaves its sandbox...
< secret_path = user_activate_path :id=>this.id, :key => this.lifecycle.key
< flash[:notice] << "The 'secret' link that was just emailed was: #{secret_path}."
---
> if(this.errors.blank?)
> flash[:notice] << "You must activate your account before you log in. Please check your email."
20c15
< end
---
> end
diff -r agility-gitorial/app/models/project.rb agility/app/models/project.rb
13c13
<
---
>
16,23d15
< has_many :contributor_memberships, :class_name => "ProjectMembership", :scope => :contributor
< has_many :contributors, :through => :contributor_memberships, :source => :user
<
< # permission helper
< def accepts_changes_from?(user)
< user.administrator? || user == owner || user.in?(contributors)
< end
<
31c23
< accepts_changes_from?(acting_user) && !owner_changed?
---
> acting_user.administrator? || (owner_is?(acting_user) && !owner_changed?)
diff -r agility-gitorial/app/models/project_membership.rb agility/app/models/project_membership.rb
6d5
< contributor :boolean, :default => false
16c15
< acting_user.administrator? || project.owner_is?(acting_user)
---
> acting_user.administrator?
20c19
< acting_user.administrator? || project.owner_is?(acting_user)
---
> acting_user.administrator?
24c23
< acting_user.administrator? || project.owner_is?(acting_user)
---
> acting_user.administrator?
diff -r agility-gitorial/app/models/story.rb agility/app/models/story.rb
7c7
< body :markdown # or :textile
---
> body :string
13d12
<
diff -r agility-gitorial/app/models/task.rb agility/app/models/task.rb
11c11
<
---
>
13,14c13,14
< has_many :users, :through => :task_assignments, :accessible => true, :dependent => :destroy
<
---
> has_many :users, :through => :task_assignments, :accessible => :true, :dependent => :destroy
>
16c16
<
---
>
diff -r agility-gitorial/app/models/task_assignment.rb agility/app/models/task_assignment.rb
23c23
< task.destroyable_by?(acting_user)
---
> acting_user.administrator?
27c27
< task.viewable_by?(acting_user)
---
> true
diff -r agility-gitorial/app/models/user.rb agility/app/models/user.rb
6c6
< name :string, :unique
---
> name :string, :required, :unique
12c12,14
< validates_presence_of :name
---
> # This gives admin rights to the first sign-up.
> # Just remove it if you don't want that
> before_create { |user| user.administrator = true if !Rails.env.test? && count == 0 }
19,23c21
<
< # This gives admin rights to the first sign-up.
< # Just remove it if you don't want that
< before_create { |user| user.administrator = true if !Rails.env.test? && count == 0 }
<
---
>
27a26
>
33,38c32,35
< :become => :inactive, :new_key => true do
< UserMailer.deliver_activation(self, lifecycle.key) unless email_address.blank?
< end
<
< transition :activate, { :inactive => :active }, :available_to => :key_holder
<
---
> :become => :inactive, :new_key => :true do
> UserMailer.deliver_activation(self, lifecycle.key) unless(email_address.blank?)
> end
>
48a46,47
>
> transition :activate, { :inactive => :active }, :available_to => :key_holder
diff -r agility-gitorial/app/viewhints/project_hints.rb agility/app/viewhints/project_hints.rb
0a1
>
4c5
<
---
>
diff -r agility-gitorial/app/viewhints/project_membership_hints.rb agility/app/viewhints/project_membership_hints.rb
3c3,6
<
---
> # model_name "My Model"
> # field_names :field1 => "First Field", :field2 => "Second Field"
> # field_help :field1 => "Enter what you want in this field"
> # children :primary_collection1, :aside_collection1, :aside_collection2
diff -r agility-gitorial/app/viewhints/story_hints.rb agility/app/viewhints/story_hints.rb
2c2
<
---
>
4c4
<
---
>
diff -r agility-gitorial/app/views/front/index.dryml agility/app/views/front/index.dryml
26,32c26,31
<
Your Projects
<
<
< New Project
<
<
Projects you have joined
<
---
>
Your Projects
>
> New Project
>
>
Projects you have joined
>
Only in agility/app/views: layouts
Only in agility/app/views: project_memberships
diff -r agility-gitorial/app/views/projects/show.dryml agility/app/views/projects/show.dryml
2,26c2,25
<
<
<
<