mirror of
https://github.com/TracksApp/tracks.git
synced 2026-02-01 13:41:48 +01:00
Nearly there...
I've removed my experiment with lib/math as it was throwing an error. git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@97 a4c988fc-2ded-0310-b66e-134b36920a42
This commit is contained in:
parent
78c118181c
commit
7af463c3f8
6 changed files with 3 additions and 459 deletions
189
tracks/README
189
tracks/README
|
|
@ -1,189 +0,0 @@
|
|||
== Welcome to Rails
|
||||
|
||||
Rails is a web-application and persistance framework that includes everything
|
||||
needed to create database-backed web-applications according to the
|
||||
Model-View-Control pattern of separation. This pattern splits the view (also
|
||||
called the presentation) into "dumb" templates that are primarily responsible
|
||||
for inserting pre-build 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 a 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/activerecord/README.html.
|
||||
|
||||
The controller and view is 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/actionpack/README.html.
|
||||
|
||||
|
||||
== Requirements
|
||||
|
||||
* Database and driver (MySQL, PostgreSQL, or SQLite)
|
||||
* Rake[http://rake.rubyforge.org] for running tests and the generating documentation
|
||||
|
||||
== Optionals
|
||||
|
||||
* Apache 1.3.x or 2.x or lighttpd 1.3.11+ (or any FastCGI-capable webserver with a
|
||||
mod_rewrite-like module)
|
||||
* FastCGI (or mod_ruby) for better performance on Apache
|
||||
|
||||
== Getting started
|
||||
|
||||
1. Run the WEBrick servlet: <tt>ruby script/server</tt>
|
||||
(run with --help for options)
|
||||
2. Go to http://localhost:3000/ and get "Congratulations, you've put Ruby on Rails!"
|
||||
3. Follow the guidelines on the "Congratulations, you've put Ruby on Rails!" screen
|
||||
|
||||
|
||||
== Example for Apache conf
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName rails
|
||||
DocumentRoot /path/application/public/
|
||||
ErrorLog /path/application/log/server.log
|
||||
|
||||
<Directory /path/application/public/>
|
||||
Options ExecCGI FollowSymLinks
|
||||
AllowOverride all
|
||||
Allow from all
|
||||
Order allow,deny
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
|
||||
NOTE: Be sure that CGIs can be executed in that directory as well. So ExecCGI
|
||||
should be on and ".cgi" should respond. All requests from 127.0.0.1 goes
|
||||
through CGI, so no Apache restart is necessary for changes. All other requests
|
||||
goes through FCGI (or mod_ruby) that requires restart to show changes.
|
||||
|
||||
|
||||
== Example for lighttpd conf (with FastCGI)
|
||||
|
||||
server.port = 8080
|
||||
server.bind = "127.0.0.1"
|
||||
# server.event-handler = "freebsd-kqueue" # needed on OS X
|
||||
|
||||
server.modules = ( "mod_rewrite", "mod_fastcgi" )
|
||||
|
||||
url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
|
||||
server.error-handler-404 = "/dispatch.fcgi"
|
||||
|
||||
server.document-root = "/path/application/public"
|
||||
server.errorlog = "/path/application/log/server.log"
|
||||
|
||||
fastcgi.server = ( ".fcgi" =>
|
||||
( "localhost" =>
|
||||
(
|
||||
"min-procs" => 1,
|
||||
"max-procs" => 5,
|
||||
"socket" => "/tmp/application.fcgi.socket",
|
||||
"bin-path" => "/path/application/public/dispatch.fcgi",
|
||||
"bin-environment" => ( "RAILS_ENV" => "development" )
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
== Debugging Rails
|
||||
|
||||
Have "tail -f" commands running on both the server.log, production.log, and
|
||||
test.log files. 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.
|
||||
|
||||
|
||||
== Breakpoints
|
||||
|
||||
Breakpoint support is available through the script/breakpointer client. This
|
||||
means that you can break out of execution at any point in the code, investigate
|
||||
and change the model, AND then resume execution! Example:
|
||||
|
||||
class WeblogController < ActionController::Base
|
||||
def index
|
||||
@posts = Post.find_all
|
||||
breakpoint "Breaking out from the list"
|
||||
end
|
||||
end
|
||||
|
||||
So the controller will accept the action, run the first line, then present you
|
||||
with a IRB prompt in the breakpointer window. Here you can do things like:
|
||||
|
||||
Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint'
|
||||
|
||||
>> @posts.inspect
|
||||
=> "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
|
||||
#<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
|
||||
>> @posts.first.title = "hello from a breakpoint"
|
||||
=> "hello from a breakpoint"
|
||||
|
||||
...and even better is that you can examine how your runtime objects actually work:
|
||||
|
||||
>> f = @posts.first
|
||||
=> #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
|
||||
>> f.
|
||||
Display all 152 possibilities? (y or n)
|
||||
|
||||
Finally, when you're ready to resume execution, you press CTRL-D
|
||||
|
||||
|
||||
== 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. Start the script without arguments to see the options.
|
||||
|
||||
|
||||
== Description of contents
|
||||
|
||||
app
|
||||
Holds all the code that's specific to this particular application.
|
||||
|
||||
app/controllers
|
||||
Holds controllers that should be named like weblog_controller.rb for
|
||||
automated URL mapping. All controllers should descend from
|
||||
ActionController::Base.
|
||||
|
||||
app/models
|
||||
Holds models that should be named like post.rb.
|
||||
Most models will descent from ActiveRecord::Base.
|
||||
|
||||
app/views
|
||||
Holds the template files for the view that should be named like
|
||||
weblog/index.rhtml for the WeblogController#index action. All views uses eRuby
|
||||
syntax. This directory can also be used to keep stylesheets, images, and so on
|
||||
that can be symlinked to public.
|
||||
|
||||
app/helpers
|
||||
Holds view helpers that should be named like weblog_helper.rb.
|
||||
|
||||
config
|
||||
Configuration files for the Rails environment, the routing map, the database, and other dependencies.
|
||||
|
||||
components
|
||||
Self-contained mini-applications that can bundle controllers, models, and views together.
|
||||
|
||||
lib
|
||||
Application specific libraries. Basically, any kind of custom code that doesn't
|
||||
belong controllers, models, or helpers. This directory is in the load path.
|
||||
|
||||
public
|
||||
The directory available for the web server. Contains sub-directories for images, stylesheets,
|
||||
and javascripts. Also contains the dispatchers and the default HTML files.
|
||||
|
||||
script
|
||||
Helper scripts for automation and generation.
|
||||
|
||||
test
|
||||
Unit and functional tests along with fixtures.
|
||||
|
||||
vendor
|
||||
External libraries that the application depend on. This directory is in the load path.
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
# Likewise will all the methods added be available for all controllers.
|
||||
|
||||
require_dependency "login_system"
|
||||
require_dependency "math/statistics"
|
||||
|
||||
require 'date'
|
||||
|
||||
|
|
@ -31,17 +30,4 @@ class ApplicationController < ActionController::Base
|
|||
error_messages_for( obj ) unless instance_eval("@#{obj}").nil?
|
||||
end
|
||||
|
||||
def av_completed
|
||||
completed = Todo.find(:all, :conditions => "done=1")
|
||||
days = []
|
||||
completed.each do |i|
|
||||
days << (i.completed - i.created).to_f
|
||||
end
|
||||
return days.average, days.max
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Array
|
||||
include Math::Statistics
|
||||
end
|
||||
|
|
@ -17,7 +17,7 @@ class ProjectController < ApplicationController
|
|||
#
|
||||
def list
|
||||
@page_title = "TRACKS::List Projects"
|
||||
@projects = Project.find(:all, :conditions => nil, :order => "done ASC, position ASC")
|
||||
@projects = Project.find(:all, :conditions => nil, :order => "position ASC")
|
||||
end
|
||||
|
||||
# Filter the projects to show just the one passed in the URL
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<%
|
||||
@context = context_form
|
||||
%>
|
||||
<!-- %= error_messages_for 'context' % -->
|
||||
<%= error_messages_for 'context' %>
|
||||
<div class="position">
|
||||
<%= @context.position %>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<%
|
||||
@project = project_form
|
||||
%>
|
||||
<!-- %= error_messages_for 'project' % -->
|
||||
<%= error_messages_for 'project' %>
|
||||
<div class="position">
|
||||
<%= @project.position %>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,253 +0,0 @@
|
|||
=begin
|
||||
= module Math::Statistics
|
||||
|
||||
== SYNOPSIS
|
||||
|
||||
----
|
||||
require "math/statistics"
|
||||
|
||||
class Array
|
||||
include Math::Statistics
|
||||
end
|
||||
|
||||
a = [-2,-1,1,2]
|
||||
p a.sum
|
||||
p a.avg
|
||||
p a.var
|
||||
p a.std
|
||||
p a.Min
|
||||
p a.Max
|
||||
----
|
||||
|
||||
produces
|
||||
|
||||
----
|
||||
0.0
|
||||
0.0
|
||||
2.5
|
||||
1.58113883
|
||||
-2
|
||||
2
|
||||
----
|
||||
|
||||
For hashes,
|
||||
|
||||
----
|
||||
require "math/statistics"
|
||||
|
||||
class Hash
|
||||
include Math::Statistics
|
||||
Hash::default_block = lambda{|i,j| j}
|
||||
end
|
||||
|
||||
h = {'alice'=>-2, 'bob'=>-1, 'cris'=>1, 'diana'=>2}
|
||||
p h.sum
|
||||
p h.avg
|
||||
p h.var
|
||||
p h.std
|
||||
p h.Min
|
||||
p h.Max
|
||||
----
|
||||
|
||||
produces
|
||||
|
||||
----
|
||||
0.0
|
||||
0.0
|
||||
2.5
|
||||
1.58113883
|
||||
-2
|
||||
2
|
||||
----
|
||||
|
||||
== DESCRIPTION
|
||||
|
||||
(({Math::Statistics})) provides basic statistical methods, i.e.,
|
||||
sum, average, variance, standard deviation, min and max.
|
||||
This module can be used after including to the target class.
|
||||
The target class must be Enumerable, more precisely, this module
|
||||
uses each, size, min, and max.
|
||||
|
||||
== CLASS METHOD
|
||||
|
||||
: default_block= aProc
|
||||
|
||||
Sets default block of the class. This block will be used by the methods.
|
||||
|
||||
: default_block
|
||||
|
||||
Returns default block for class if defined. Otherwise nil will be returnd.
|
||||
|
||||
== METHOD
|
||||
|
||||
: default_block= aProc
|
||||
|
||||
Sets default block of the object. This block will be used by the methods.
|
||||
Priority of the blocks is in the other: in-place given block,
|
||||
object's default then class's default.
|
||||
|
||||
: default_block
|
||||
|
||||
Returns default block if defined. Otherwise nil will be returnd.
|
||||
|
||||
: sum
|
||||
: sum{...}
|
||||
|
||||
Returns sum. When a block is given, summation is taken over the
|
||||
each result of block evaluation. The role of blocks in the below
|
||||
are same to this one.
|
||||
|
||||
: average
|
||||
: average{...}
|
||||
: avg
|
||||
: avg{...}
|
||||
|
||||
Returns average.
|
||||
|
||||
: variance
|
||||
: variance{...}
|
||||
: var
|
||||
: var{...}
|
||||
|
||||
Returns variance.
|
||||
|
||||
: standard_deviation
|
||||
: standard_deviation{...}
|
||||
: std
|
||||
: std{...}
|
||||
|
||||
Returns standard deviation.
|
||||
|
||||
: Min
|
||||
: Min{...}
|
||||
|
||||
Returns minimum.
|
||||
|
||||
: Max
|
||||
: Max{...}
|
||||
|
||||
Returns maximam.
|
||||
|
||||
== AUTHORS
|
||||
|
||||
Gotoken
|
||||
|
||||
== HISTORY
|
||||
|
||||
2001-02-28 created (gotoken#notwork.org)
|
||||
|
||||
=end
|
||||
|
||||
module Math
|
||||
module Statistics
|
||||
VERSION = "2001_02_18"
|
||||
|
||||
def self.append_features(mod)
|
||||
unless mod < Enumerable
|
||||
raise TypeError,
|
||||
"`#{self}' can't be included non Enumerable (#{mod})"
|
||||
end
|
||||
|
||||
def mod.default_block= (blk)
|
||||
self.const_set("STAT_BLOCK", blk)
|
||||
end
|
||||
|
||||
def mod.default_block
|
||||
defined?(self::STAT_BLOCK) && self::STAT_BLOCK
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def default_block
|
||||
@stat_block || type.default_block
|
||||
end
|
||||
|
||||
def default_block=(blk)
|
||||
@stat_block = blk
|
||||
end
|
||||
|
||||
def sum
|
||||
sum = 0.0
|
||||
if block_given?
|
||||
each{|i| sum += yield(i)}
|
||||
elsif default_block
|
||||
each{|i| sum += default_block[*i]}
|
||||
else
|
||||
each{|i| sum += i}
|
||||
end
|
||||
sum
|
||||
end
|
||||
|
||||
def average(&blk)
|
||||
sum(&blk)/size
|
||||
end
|
||||
|
||||
def variance(&blk)
|
||||
sum2 = if block_given?
|
||||
sum{|i| j=yield(i); j*j}
|
||||
elsif default_block
|
||||
sum{|i| j=default_block[*i]; j*j}
|
||||
else
|
||||
sum{|i| i**2}
|
||||
end
|
||||
sum2/size - average(&blk)**2
|
||||
end
|
||||
|
||||
def standard_deviation(&blk)
|
||||
Math::sqrt(variance(&blk))
|
||||
end
|
||||
|
||||
def Min(&blk)
|
||||
if block_given?
|
||||
if min = find{|i| i}
|
||||
min = yield(min)
|
||||
each{|i|
|
||||
j = yield(i)
|
||||
min = j if min > j
|
||||
}
|
||||
min
|
||||
end
|
||||
elsif default_block
|
||||
if min = find{|i| i}
|
||||
min = default_block[*min]
|
||||
each{|i|
|
||||
j = default_block[*i]
|
||||
min = j if min > j
|
||||
}
|
||||
min
|
||||
end
|
||||
else
|
||||
min()
|
||||
end
|
||||
end
|
||||
|
||||
def Max(&blk)
|
||||
if block_given?
|
||||
if max = find{|i| i}
|
||||
max = yield(max)
|
||||
each{|i|
|
||||
j = yield(i)
|
||||
max = j if max < j
|
||||
}
|
||||
max
|
||||
end
|
||||
elsif default_block
|
||||
if max = find{|i| i}
|
||||
max = default_block[*max]
|
||||
each{|i|
|
||||
j = default_block[*i]
|
||||
max = j if max > j
|
||||
}
|
||||
max
|
||||
end
|
||||
else
|
||||
max()
|
||||
end
|
||||
end
|
||||
|
||||
alias avg average
|
||||
alias std standard_deviation
|
||||
alias var variance
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue