Commit faa5fe494a6e301116068a38c061a3ad36a698b7

added files

Commit diff

camping/events.rb

 
1require 'rubygems'
2require 'camping'
3
4Camping.goes :Events
5
6module Events::Models
7 class Event < Base; end
8
9 class CreateTheBasics < V 1.0
10 def self.up
11 create_table :events_events do |t|
12 t.string :name
13 t.string :url
14 t.text :description
15 end
16
17 Event.create! :name => 'RubyFools', :url => 'http://rubyfools.com/', :description => 'Ruby in CPH and Oslo'
18 end
19
20 def self.down
21 drop_table :events
22 end
23 end
24end
25
26module Events::Controllers
27 class Events < R '/events'
28 def get
29 @events = Event.find(:all)
30 render :events
31 end
32 end
33
34 class Stylesheet < R '/stylesheet.css'
35 def get
36 IO.read('../sinatra/stylesheet.css')
37 end
38 end
39end
40
41module Events::Views
42 def layout
43 html do
44 head do
45 title 'blog'
46 link :rel => 'stylesheet', :type => 'text/css',
47 :href => '/stylesheet.css', :media => 'screen'
48 end
49 body do
50 div.content do
51 self << yield
52 end
53 end
54 end
55 end
56
57 def events
58 if @events.empty?
59 p 'No events found'
60 else
61 table do
62 caption 'Events'
63 tr :class => 'odd' do
64 th 'Name', :class => 'name', :scope => 'col'
65 end
66 c = 'odd'
67 @events.each do |e|
68 tr(:class => (c == 'even' ? c = 'odd' : c = 'even')) do
69 td :class => 'name' do
70 a e.name, :href => e.url
71 e.description
72 end
73 end
74 end
75 end
76 end
77 end
78end
79
80def Events.create
81 Events::Models.create_schema :assume => (Events::Models::Event.table_exists? ? 1.0 : 0.0)
82end
toggle raw diff

presentation.key/Contents/PkgInfo

 
1????????
toggle raw diff

presentation.key/QuickLook/Thumbnail.jpg

 
toggle raw diff

presentation.key/droppedImage.pdf

 
toggle raw diff

presentation.key/index.apxl.gz

 
toggle raw diff

presentation.key/thumbs/st0.tiff

 
toggle raw diff

presentation.key/thumbs/st1.tiff

 
toggle raw diff

presentation.key/thumbs/st2.tiff

 
toggle raw diff

presentation.key/thumbs/st3.tiff

 
toggle raw diff

presentation.key/thumbs/st4.tiff

 
toggle raw diff

presentation.key/thumbs/st5.tiff

 
toggle raw diff

presentation.key/thumbs/st6.tiff

 
toggle raw diff

sinatra/events.html

 
1<html>
2 <head>
3 <title>Events</title>
4 <link href='/stylesheet.css' media='screen' rel='stylesheet' type='text/css' />
5 <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
6 </head>
7 <body>
8 <table>
9 <caption>Events</caption>
10 <tr class='odd'>
11 <th class='name' scope='col'>Name</th>
12 </tr>
13 <tr class='even'>
14 <td class='name'>
15 <a href='http://rubyfools.com'>RubyFools</a>
16 Ruby conference in Copenhagen and Oslo
17 </td>
18 </tr>
19 <tr class='odd'>
20 <td class='name'>
21 <a href='http://rubyconf.org'>RubyConf</a>
22 THE Ruby conference
23 </td>
24 </tr>
25 </table>
26 <form action='/events' method='POST'>
27 <fieldset>
28 <legend>New Event</legend>
29
30 <label for='name'>Name</label>
31 <input id='name' name='name' size='30' type='text' />
32 <br />
33
34 <label for='url'>Homepage</label>
35 <input id='url' name='url' size='30' type='text' />
36 <br />
37
38 <label for='description'>Description</label>
39 <textarea cols='30' id='description' name='description' rows='4' type='description'>
40 </textarea>
41 <br />
42
43 <input class='submit' name='foo[bar]' type='submit' value='Create' />
44 </fieldset>
45 </form>
46 </body>
47
48</html>
toggle raw diff

sinatra/events.rb

 
2525get('/stylesheet.css') { Sass::Engine.new(File.read(__FILE__).gsub(/.*__END__/m, '')).render }
2626
2727get '/events' do
28 puts Event.all.inspect
2928 @events = Event.all
3029 haml(layout('Events', %q{
3130 - if @events.empty?
3838 - @events.each do |e|
3939 %tr{:class => (c == 'even' ? c = 'odd' : c = 'even') }
4040 %td{:class => 'name'}
41 %a{:href => '#'}= e.name
41 %a{:href => e.url}= e.name
4242 = e.description
4343 %form{:action => '/events', :method => 'POST'}
4444 %fieldset
4545 %legend New Event
46
4746 %label{:for => 'name'} Name
4847 %input{:type => 'text', :name => 'name', :id => 'name', :size => 30}
4948 %br
5049
50 %label{:for => 'url'} Homepage
51 %input{:type => 'text', :name => 'url', :id => 'url', :size => 30}
52 %br
53
5154 %label{:for => 'description'} Description
5255 %textarea{:type => 'description', :name => 'description', :id => 'description', :cols => 30, :rows => 4}
5356 %br
6565 redirect '/events'
6666end
6767
68
6968def layout(title, content)
7069 %Q(
7170%html
toggle raw diff

sinatra/stylesheet.css

 
1body {
2 background:#B5B5B5 none repeat scroll 0%;
3 font-family:Verdana,Arial,"Bitstream Vera Sans",Helvetica,sans-serif;
4 line-height:160%;
5 margin:0pt;
6 padding:30px;
7 }
8h1 {
9 display:block;
10 padding-bottom:5px;
11 }
12a {
13 color:black;
14 }
15form label {
16 float:left;
17 font-weight:bold;
18 width:120px;
19 }
20form input, form textarea {
21 margin-bottom:5px;
22 width:180px;
23 }
24form input.submit {
25 margin-left:120px;
26 margin-top:5px;
27 width:90px;
28 }
29form br {
30 clear:left;
31 }
32table {
33 background:#FFFFFF none repeat scroll 0%;
34 border:1px solid #000000;
35 border-collapse:collapse;
36 width:100%;
37 }
38table caption {
39 background:#FFFFFF none repeat scroll 0%;
40 border-color:#000000 rgb(0, 0, 0) -moz-use-text-color;
41 border-style:solid solid none;
42 border-width:1px 1px medium;
43 margin:0pt;
44 padding:8px 20px;
45 text-align:left;
46 }
47table th, table td {
48 border-bottom:1px solid #B5B5B5;
49 margin:0pt;
50 padding:8px 20px;
51 text-align:center;
52 }
53table th.name, table td.name {
54 text-align:left;
55 }
56table th {
57 color:#999999;
58 }
59table tr.odd {
60 background:#E6E6E6 none repeat scroll 0%;
61 }
62table tr.even {
63 background:#F1F1F1 none repeat scroll 0%;
64 }
65table td a {
66 display:block;
67 font-weight:bold;
68 }
toggle raw diff

waves/events/Rakefile

 
1require 'waves'
2Waves::Console.load
3%w( schema cluster generate ).each { |task| require "lib/tasks/#{task}.rb" }
4
toggle raw diff

waves/events/configurations/default.rb

 
1module Events
2 module Configurations
3 class Default < Waves::Configurations::Default
4 database :host => host, :adapter => 'mysql', :database => 'events',
5 :user => 'root', :password => ''
6 end
7 end
8end
toggle raw diff

waves/events/configurations/development.rb

 
1module Events
2 module Configurations
3 class Development < Default
4
5 host '127.0.0.1'
6
7 port 3000
8
9 reloadable [ Events ]
10
11 log :level => :debug
12
13 application do
14 use Rack::ShowExceptions
15 run Waves::Dispatchers::Default.new
16 end
17
18 end
19 end
20end
21
22
toggle raw diff

waves/events/configurations/mapping.rb

 
1module Events
2
3 module Configurations
4
5 module Mapping
6 extend Waves::Mapping
7 # your custom rules go here
8 include Waves::Mapping::PrettyUrls::RestRules
9 include Waves::Mapping::PrettyUrls::GetRules
10 end
11
12 end
13
14end
toggle raw diff

waves/events/configurations/production.rb

 
1module Events
2
3 module Configurations
4
5 class Production < Default
6
7 host '0.0.0.0'
8
9 port 80
10
11 reloadable []
12
13 log :level => :error,
14 :output => ( :log / "waves.#{$$}" ),
15 :rotation => :weekly
16
17 application do
18 run Waves::Dispatchers::Default.new
19 end
20
21 end
22
23 end
24
25end
toggle raw diff

waves/events/controllers/default.rb

 
1module Events
2
3 module Controllers
4
5 class Default
6
7 include Waves::Controllers::Mixin
8
9 def attributes; params[model_name.singular.intern]; end
10
11 def all; model.all; end
12
13 def find( name ); model[ :name => name ] or not_found; end
14
15 def create; model.create( attributes ); end
16
17 def update( name )
18 instance = find( name )
19 instance.set( attributes )
20 instance.save_changes
21 end
22
23 def delete( name ); find( name ).destroy; end
24
25 end
26
27 end
28
29end
toggle raw diff

waves/events/doc/EMTPY

waves/events/helpers/default.rb

 
1module Events
2 module Helpers
3 module Default
4 attr_reader :request, :content
5 include Waves::ResponseMixin
6 include Waves::Helpers::Common
7 include Waves::Helpers::Formatting
8 include Waves::Helpers::Model
9 include Waves::Helpers::View
10 include Waves::Helpers::Form
11 end
12 end
13end
toggle raw diff

waves/events/lib/events.rb

 
1require 'sequel'
2module Events
3
4 extend Autocreate; extend Autoload; extend Reloadable
5 autoload true; directories :lib
6
7 [ :Configurations, :Models, :Views, :Controllers, :Helpers ].each do | name |
8 autocreate( name, Module.new ) do
9
10 # dynamically access module constants
11 def self.[]( cname )
12 eval("#{name}::#{cname.to_s.camel_case}")
13 end
14
15 # first try to load and only create if that fails
16 # which means install autoload *after* autocreate
17 extend Autocreate; extend Autoload
18
19 # autoload any files in appropriately named directories
20 # exampe: models/blog.rb for Blog
21 autoload true; directories name.to_s.snake_case
22
23 # autocreate declarations ...
24 case name
25 # don't autocreate configs
26 when :Configurations then nil
27 # set the dataset for Models
28 when :Models
29 autocreate true, eval("Events::Models::Default") do
30 set_dataset Events.database[ basename.snake_case.plural.intern ]
31 end
32 # everything else just use the exemplar
33 else
34 autocreate true, eval("Events::#{name}::Default")
35 end
36
37 end
38
39 end
40
41 # accessor methods for modules and other key application objects ...
42 class << self
43 def config ; Waves::Server.config rescue nil || Waves::Console.config ; end
44 def database ; @database ||= Sequel.mysql( config.database ) ; end
45 def configurations ; Events::Configurations ; end
46 def controllers ; Events::Controllers ; end
47 def models ; Events::Models ; end
48 def helpers ; Events::Helpers ; end
49 def views ; Events::Views ; end
50 end
51
52end
toggle raw diff

waves/events/lib/startup.rb

 
1require 'lib/events'
2Waves << Events
toggle raw diff

waves/events/lib/tasks/cluster.rb

 
1namespace :cluster do
2
3 desc 'Start a cluster of waves applications.'
4 task :start do |task|
5 ( Waves::Console.config.ports || [ Waves::Console.config.port ] ).each do |port|
6 cmd = "waves-server -p #{port} -c #{ENV['mode']||'development'} -d"
7 puts cmd ; `#{cmd}`
8 end
9 end
10
11 desc 'Stop a cluster of waves applications.'
12 task :stop do |task|
13 Dir[ :log / '*.pid' ].each do |path|
14 pid = File.basename(path,'.pid').to_i
15 puts "Stopping process #{pid} ..."
16 Process.kill( 'INT', pid ) rescue nil
17 end
18 end
19
20 desc 'Restart a cluster of waves applications.'
21 task :restart => [ :stop, :start ] do |task|
22 end
23
24end
toggle raw diff

waves/events/lib/tasks/generate.rb

 
1namespace :generate do
2 desc 'Generate a new model'
3 task :model do |task|
4 template = File.read :models / 'default.rb'
5 File.write( :models / ENV['name'] + '.rb',
6 template.gsub('class Default < Sequel::Model',
7 "class #{ENV['name'].camel_case} < Sequel::Model(:#{ENV['name'].plural})") )
8 end
9 desc 'Generate a new controller'
10 task :controller do |task|
11 template = File.read :controllers / 'default.rb'
12 File.write( :controllers / ENV['name'] + '.rb',
13 template.gsub('class Default',"class #{ENV['name'].camel_case}") )
14 end
15end
toggle raw diff

waves/events/lib/tasks/schema.rb

 
1require 'sequel'
2namespace :schema do
3
4 desc 'Create a new Sequel Migration using name.'
5 task :migration do |task|
6
7 version = ( ENV['version'].nil? ?
8 Sequel::Migrator.get_current_migration_version( Blog.database ) :
9 ENV['version'].to_i ) + 1
10
11 name = ENV['name'] || 'migration'
12 class_name = name.camel_case
13
14 template = ( ENV['template'] || 'empty' ) + '.rb.erb'
15 source = :schema / :migrations / :templates / template
16 destination = :schema / :migrations / "#{'%03d' % version}_#{name}.rb"
17 code = Erubis::Eruby.new( File.read( source ) ).result( binding )
18 File.write( destination, code )
19
20 end
21
22 desc 'Performs migration from version, to version.'
23 task :migrate do |task|
24 version = ENV['version']; version = version.to_i unless version.nil?
25 Sequel::Migrator.apply( Waves.application.database, :schema / :migrations , version )
26 end
27
28end
29
toggle raw diff

waves/events/models/default.rb

 
1module Events
2
3 module Models
4
5 class Default < Sequel::Model
6 before_save do
7 set(:updated_on => Time.now) if columns.include? :updated_on
8 end
9 end
10
11 end
12
13end
toggle raw diff

waves/events/schema/migrations/templates/empty.rb.erb

 
1class <%= class_name %> < Sequel::Migration
2
3 def up
4 end
5
6 def down
7 end
8
9end
toggle raw diff

waves/events/templates/errors/not_found_404.mab

 
1h1 '404'
2p %q( That URL does not exist on this server. )
toggle raw diff

waves/events/templates/errors/server_error_500.mab

 
1h1 '500'
2p %q( Internal server error. Sorry, but your request could not be processed. )
toggle raw diff

waves/events/templates/layouts/default.mab

 
1doctype :html4_strict
2
3html do
4
5 head do
6 title @title
7 end
8
9 body do
10 layout_content
11 end
12
13end
14
toggle raw diff

waves/events/views/default.rb

 
1module Events
2
3 module Views
4
5 class Default
6
7 include Waves::Views::Mixin
8
9 end
10
11 end
12
13end
toggle raw diff