Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

first import

  • Loading branch information...
commit 2ad93af9b0043c3579943190e0faa27ec2ff6c23 1 parent 34a9a13
Christian Meier authored October 29, 2010

Showing 76 changed files with 11,455 additions and 105 deletions. Show diff stats Hide diff stats

  1. 2  .gitignore
  2. 43  README
  3. 21  README.textile
  4. 4  demo/.gitignore
  5. 34  demo/Gemfile
  6. 194  demo/Gemfile.pom-
  7. 256  demo/README
  8. 7  demo/Rakefile
  9. 3  demo/app/controllers/application_controller.rb
  10. 86  demo/app/controllers/users_controller.rb
  11. 2  demo/app/helpers/application_helper.rb
  12. 2  demo/app/helpers/users_helper.rb
  13. 2  demo/app/models/user.rb
  14. 14  demo/app/views/layouts/application.html.erb
  15. 21  demo/app/views/users/_form.html.erb
  16. 6  demo/app/views/users/edit.html.erb
  17. 23  demo/app/views/users/index.html.erb
  18. 5  demo/app/views/users/new.html.erb
  19. 10  demo/app/views/users/show.html.erb
  20. 4  demo/config.ru
  21. 42  demo/config/application.rb
  22. 22  demo/config/boot.rb
  23. 22  demo/config/database.yml
  24. 5  demo/config/environment.rb
  25. 28  demo/config/environments/development.rb
  26. 49  demo/config/environments/production.rb
  27. 35  demo/config/environments/test.rb
  28. 7  demo/config/initializers/backtrace_silencers.rb
  29. 10  demo/config/initializers/inflections.rb
  30. 5  demo/config/initializers/mime_types.rb
  31. 7  demo/config/initializers/secret_token.rb
  32. 8  demo/config/initializers/session_store.rb
  33. 5  demo/config/locales/en.yml
  34. 60  demo/config/routes.rb
  35. 13  demo/db/migrate/20101028220337_create_users.rb
  36. 21  demo/db/schema.rb
  37. 7  demo/db/seeds.rb
  38. 2  demo/doc/README_FOR_APP
  39. 26  demo/public/404.html
  40. 26  demo/public/422.html
  41. 26  demo/public/500.html
  42. 0  demo/public/favicon.ico
  43. BIN  demo/public/images/rails.png
  44. 316  demo/public/index.html
  45. 2  demo/public/javascripts/application.js
  46. 965  demo/public/javascripts/controls.js
  47. 974  demo/public/javascripts/dragdrop.js
  48. 1,123  demo/public/javascripts/effects.js
  49. 6,001  demo/public/javascripts/prototype.js
  50. 175  demo/public/javascripts/rails.js
  51. 5  demo/public/robots.txt
  52. 0  demo/public/stylesheets/.gitkeep
  53. 56  demo/public/stylesheets/scaffold.css
  54. 6  demo/script/rails
  55. 15  demo/src/main/jetty/override-development-web.xml
  56. 15  demo/src/main/jetty/override-production-web.xml
  57. 37  demo/src/main/webapp/WEB-INF/web.xml
  58. 316  demo/src/main/webapp/index.html
  59. BIN  demo/src/test-/resources/server.keystore
  60. BIN  demo/src/test/resources/server.keystore
  61. 7  demo/test/fixtures/users.yml
  62. 49  demo/test/functional/users_controller_test.rb
  63. 9  demo/test/performance/browsing_test.rb
  64. 13  demo/test/test_helper.rb
  65. 4  demo/test/unit/helpers/users_helper_test.rb
  66. 8  demo/test/unit/user_test.rb
  67. 0  demo/vendor/plugins/.gitkeep
  68. 20  enforce-ssl-gem/MIT-LICENSE
  69. 44  enforce-ssl-gem/README.textile
  70. 47  enforce-ssl-gem/Rakefile
  71. 32  enforce-ssl-gem/enforce-ssl.gemspec
  72. 79  enforce-ssl-gem/lib/enforce-ssl.rb
  73. 0  {test → enforce-ssl-gem/test-disabled}/ssl_requirement_test.rb
  74. 62  lib/ssl_requirement.rb
  75. 15  pom.xml
  76. 0  tasks/.gitkeep b/demo/lib/tasks/.gitkeep
2  .gitignore
... ...
@@ -0,0 +1,2 @@
  1
+target
  2
+*.pom
43  README
... ...
@@ -1,43 +0,0 @@
1  
-SSL Requirement
2  
-===============
3  
-
4  
-SSL requirement adds a declarative way of specifying that certain actions
5  
-should only be allowed to run under SSL, and if they're accessed without it,
6  
-they should be redirected.
7  
-
8  
-Example:
9  
-
10  
-  class ApplicationController < ActiveRecord::Base
11  
-    include SslRequirement
12  
-  end
13  
-
14  
-  class AccountController < ApplicationController
15  
-    ssl_required :signup, :payment
16  
-    ssl_allowed :index
17  
-    
18  
-    def signup
19  
-      # Non-SSL access will be redirected to SSL
20  
-    end
21  
-    
22  
-    def payment
23  
-      # Non-SSL access will be redirected to SSL
24  
-    end
25  
-
26  
-    def index
27  
-      # This action will work either with or without SSL
28  
-    end
29  
-
30  
-    def other
31  
-      # SSL access will be redirected to non-SSL
32  
-    end
33  
-  end
34  
-  
35  
-You can overwrite the protected method ssl_required? to rely on other things
36  
-than just the declarative specification. Say, only premium accounts get SSL.
37  
-
38  
-P.S.: Beware when you include the SslRequirement module. At the time of
39  
-inclusion, it'll add the before_filter that validates the declarations. Some
40  
-times you'll want to run other before_filters before that. They should then be
41  
-declared ahead of including this module.
42  
-
43  
-Copyright (c) 2005 David Heinemeier Hansson, released under the MIT license
21  README.textile
Source Rendered
... ...
@@ -0,0 +1,21 @@
  1
+h1. Enforce SSL for you controllers
  2
+
  3
+p. this is derived from the http://github.org/rails/ssl_requirement:rails/ssl_requirement and adopted a more strict approach: security everything and open where needed.
  4
+
  5
+p. info about the actual gem please look into the directory http://github.org/mkristian/ixtlan-guard/gem:enforce-ssl-gem
  6
+
  7
+h2. demo rails application
  8
+
  9
+p. the http://github.org/mkristian/ixtlan-guard/gem:demo is a sample rails3 application with integration tests. see readme how to start the application and what limitations apply.
  10
+
  11
+h2. run all the tests + integrations-tests in one go
  12
+
  13
+p. first you need jruby for this ! then you need to install
  14
+
  15
+bc.         jruby -S gem 'ruby-maven'
  16
+
  17
+p. which allows to run the integration-tests from the demo with jetty.
  18
+
  19
+p. now you can execute
  20
+
  21
+bc.         rmvn verify
4  demo/.gitignore
... ...
@@ -0,0 +1,4 @@
  1
+.bundle
  2
+db/*.sqlite3
  3
+log/*.log
  4
+tmp/**/*
34  demo/Gemfile
... ...
@@ -0,0 +1,34 @@
  1
+source 'http://rubygems.org'
  2
+
  3
+gem 'rails', '3.0.0'
  4
+
  5
+# Bundle edge Rails instead:
  6
+# gem 'rails', :git => 'git://github.com/rails/rails.git'
  7
+
  8
+gem 'sqlite3-ruby', :require => 'sqlite3' unless defined?(JRUBY_VERSION)
  9
+gem "activerecord-jdbc-adapter" if defined?(JRUBY_VERSION)
  10
+gem "jdbc-sqlite3", :require => false if defined?(JRUBY_VERSION)
  11
+
  12
+# Use unicorn as the web server
  13
+# gem 'unicorn'
  14
+
  15
+# Deploy with Capistrano
  16
+# gem 'capistrano'
  17
+
  18
+# To use debugger
  19
+# gem 'ruby-debug'
  20
+
  21
+# Bundle the extra gems:
  22
+# gem 'bj'
  23
+# gem 'nokogiri'
  24
+# gem 'sqlite3-ruby', :require => 'sqlite3'
  25
+# gem 'aws-s3', :require => 'aws/s3'
  26
+
  27
+# Bundle gems for the local environment. Make sure to
  28
+# put test-only gems in this group so their generators
  29
+# and rake tasks are available in development mode:
  30
+# group :development, :test do
  31
+#   gem 'webrat'
  32
+# end
  33
+
  34
+gem 'enforce-ssl'
194  demo/Gemfile.pom-
... ...
@@ -0,0 +1,194 @@
  1
+<project>
  2
+  <modelVersion>4.0.0</modelVersion>
  3
+  <groupId>rubygems</groupId>
  4
+  <artifactId>demo</artifactId>
  5
+  <version>0.0.0</version>
  6
+  <name>demo - rails application</name>
  7
+  <packaging>war</packaging>
  8
+  <repositories>
  9
+    <repository>
  10
+      <id>rubygems-releases</id>
  11
+      <url>http://gems.saumya.de/releases</url>
  12
+    </repository>
  13
+    <repository>
  14
+      <id>saumya</id>
  15
+      <url>http://mojo.saumya.de/</url>
  16
+      <releases>
  17
+        <enabled>false</enabled>
  18
+      </releases>
  19
+      <snapshots>
  20
+        <enabled>true</enabled>
  21
+        <updatePolicy>never</updatePolicy>
  22
+      </snapshots>
  23
+    </repository>
  24
+    <repository>
  25
+      <id>sonatype-nexus-snapshots</id>
  26
+      <url>http://oss.sonatype.org/content/repositories/snapshots</url>
  27
+      <releases>
  28
+        <enabled>false</enabled>
  29
+      </releases>
  30
+      <snapshots>
  31
+        <enabled>true</enabled>
  32
+      </snapshots>
  33
+    </repository>
  34
+  </repositories>
  35
+  <dependencies>
  36
+    <dependency>
  37
+      <groupId>rubygems</groupId>
  38
+      <artifactId>rails</artifactId>
  39
+      <version>3.0.0</version>
  40
+      <type>gem</type>
  41
+    </dependency>
  42
+    <dependency>
  43
+      <groupId>rubygems</groupId>
  44
+      <artifactId>activerecord-jdbc-adapter</artifactId>
  45
+      <version>[0.0.0,)</version>
  46
+      <type>gem</type>
  47
+    </dependency>
  48
+    <dependency>
  49
+      <groupId>rubygems</groupId>
  50
+      <artifactId>jdbc-sqlite3</artifactId>
  51
+      <version>[0.0.0,)</version>
  52
+      <type>gem</type>
  53
+    </dependency>
  54
+    <dependency>
  55
+      <groupId>org.jruby.rack</groupId>
  56
+      <artifactId>jruby-rack</artifactId>
  57
+      <version>1.0.4.dev-SNAPSHOT</version>
  58
+    </dependency>
  59
+    <dependency>
  60
+      <groupId>org.jruby</groupId>
  61
+      <artifactId>jruby-complete</artifactId>
  62
+      <version>1.5.3</version>
  63
+    </dependency>
  64
+  </dependencies>
  65
+  <properties>
  66
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  67
+    <gem.home>${project.build.directory}/rubygems</gem.home>
  68
+    <gem.path>${project.build.directory}/rubygems</gem.path>
  69
+    <jruby.plugins.version>0.23.0-SNAPSHOT</jruby.plugins.version>
  70
+    <jetty.version>7.1.0.RC1</jetty.version>
  71
+    <rails.env>development</rails.env>
  72
+  </properties>
  73
+  <build>
  74
+    <plugins>
  75
+      <plugin>
  76
+        <groupId>de.saumya.mojo</groupId>
  77
+        <artifactId>rails3-maven-plugin</artifactId>
  78
+        <version>0.23.0-SNAPSHOT</version>
  79
+        <extensions>true</extensions>
  80
+        <executions>
  81
+          <execution>
  82
+            <id>initialize</id>
  83
+            <goals>
  84
+              <goal>initialize</goal>
  85
+            </goals>
  86
+          </execution>
  87
+        </executions>
  88
+      </plugin>
  89
+      <plugin>
  90
+        <artifactId>maven-war-plugin</artifactId>
  91
+        <version>2.1</version>
  92
+        <configuration>
  93
+          <webResources>
  94
+            <resource>
  95
+              <directory>public</directory>
  96
+            </resource>
  97
+            <resource>
  98
+              <directory>.</directory>
  99
+              <targetPath>WEB-INF</targetPath>
  100
+              <includes>
  101
+                <include>app/**</include>
  102
+                <include>config/**</include>
  103
+                <include>lib/**</include>
  104
+                <include>vendor/**</include>
  105
+                <include>Gemfile</include>
  106
+              </includes>
  107
+            </resource>
  108
+            <resource>
  109
+              <directory>${gem.path}</directory>
  110
+              <targetPath>WEB-INF/gems</targetPath>
  111
+            </resource>
  112
+          </webResources>
  113
+        </configuration>
  114
+      </plugin>
  115
+    </plugins>
  116
+  </build>
  117
+  <profiles>
  118
+    <profile>
  119
+      <id>development</id>
  120
+      <activation>
  121
+        <activeByDefault>true</activeByDefault>
  122
+        <property>
  123
+          <name>rails.env</name>
  124
+          <value>development</value>
  125
+        </property>
  126
+      </activation>
  127
+    </profile>
  128
+    <profile>
  129
+      <id>production</id>
  130
+      <activation>
  131
+        <property>
  132
+          <name>rails.env</name>
  133
+          <value>production</value>
  134
+        </property>
  135
+      </activation>
  136
+      <properties>
  137
+        <gem.home>${project.build.directory}/rubygems-production</gem.home>
  138
+        <gem.path>${project.build.directory}/rubygems-production</gem.path>
  139
+      </properties>
  140
+    </profile>
  141
+    <profile>
  142
+      <id>test</id>
  143
+      <activation>
  144
+        <property>
  145
+          <name>rails.env</name>
  146
+          <value>test</value>
  147
+        </property>
  148
+      </activation>
  149
+    </profile>
  150
+    <profile>
  151
+      <id>war</id>
  152
+      <build>
  153
+        <plugins>
  154
+          <plugin>
  155
+            <groupId>org.mortbay.jetty</groupId>
  156
+            <artifactId>jetty-maven-plugin</artifactId>
  157
+            <version>${jetty.version}</version>
  158
+          </plugin>
  159
+        </plugins>
  160
+      </build>
  161
+    </profile>
  162
+    <profile>
  163
+      <id>run</id>
  164
+      <activation>
  165
+        <activeByDefault>true</activeByDefault>
  166
+      </activation>
  167
+      <build>
  168
+        <plugins>
  169
+          <plugin>
  170
+            <groupId>org.mortbay.jetty</groupId>
  171
+            <artifactId>jetty-maven-plugin</artifactId>
  172
+            <version>${jetty.version}</version>
  173
+            <configuration>
  174
+              <webAppConfig>
  175
+                <overrideDescriptor>src/main/jetty/override-${rails.env}-web.xml</overrideDescriptor>
  176
+              </webAppConfig>
  177
+	      <connectors>
  178
+		<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
  179
+		  <port>8080</port>
  180
+		</connector>
  181
+		<connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
  182
+		  <port>8443</port>
  183
+		  <keystore>src/test/resources/server.keystore</keystore>
  184
+		  <keyPassword>123456</keyPassword>
  185
+		  <password>123456</password>
  186
+		</connector>
  187
+	      </connectors>
  188
+            </configuration>
  189
+          </plugin>
  190
+        </plugins>
  191
+      </build>
  192
+    </profile>
  193
+  </profiles>
  194
+</project>
256  demo/README
... ...
@@ -0,0 +1,256 @@
  1
+== Welcome to Rails
  2
+
  3
+Rails is a web-application framework that includes everything needed to create
  4
+database-backed web applications according to the Model-View-Control pattern.
  5
+
  6
+This pattern splits the view (also called the presentation) into "dumb"
  7
+templates that are primarily responsible for inserting pre-built data in between
  8
+HTML tags. The model contains the "smart" domain objects (such as Account,
  9
+Product, Person, Post) that holds all the business logic and knows how to
  10
+persist themselves to a database. The controller handles the incoming requests
  11
+(such as Save New Account, Update Product, Show Post) by manipulating the model
  12
+and directing data to the view.
  13
+
  14
+In Rails, the model is handled by what's called an object-relational mapping
  15
+layer entitled Active Record. This layer allows you to present the data from
  16
+database rows as objects and embellish these data objects with business logic
  17
+methods. You can read more about Active Record in
  18
+link:files/vendor/rails/activerecord/README.html.
  19
+
  20
+The controller and view are handled by the Action Pack, which handles both
  21
+layers by its two parts: Action View and Action Controller. These two layers
  22
+are bundled in a single package due to their heavy interdependence. This is
  23
+unlike the relationship between the Active Record and Action Pack that is much
  24
+more separate. Each of these packages can be used independently outside of
  25
+Rails. You can read more about Action Pack in
  26
+link:files/vendor/rails/actionpack/README.html.
  27
+
  28
+
  29
+== Getting Started
  30
+
  31
+1. At the command prompt, create a new Rails application:
  32
+       <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
  33
+
  34
+2. Change directory to <tt>myapp</tt> and start the web server:
  35
+       <tt>cd myapp; rails server</tt> (run with --help for options)
  36
+
  37
+3. Go to http://localhost:3000/ and you'll see:
  38
+       "Welcome aboard: You're riding Ruby on Rails!"
  39
+
  40
+4. Follow the guidelines to start developing your application. You can find
  41
+the following resources handy:
  42
+
  43
+* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
  44
+* Ruby on Rails Tutorial Book: http://www.railstutorial.org/
  45
+
  46
+
  47
+== Debugging Rails
  48
+
  49
+Sometimes your application goes wrong. Fortunately there are a lot of tools that
  50
+will help you debug it and get it back on the rails.
  51
+
  52
+First area to check is the application log files. Have "tail -f" commands
  53
+running on the server.log and development.log. Rails will automatically display
  54
+debugging and runtime information to these files. Debugging info will also be
  55
+shown in the browser on requests from 127.0.0.1.
  56
+
  57
+You can also log your own messages directly into the log file from your code
  58
+using the Ruby logger class from inside your controllers. Example:
  59
+
  60
+  class WeblogController < ActionController::Base
  61
+    def destroy
  62
+      @weblog = Weblog.find(params[:id])
  63
+      @weblog.destroy
  64
+      logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
  65
+    end
  66
+  end
  67
+
  68
+The result will be a message in your log file along the lines of:
  69
+
  70
+  Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
  71
+
  72
+More information on how to use the logger is at http://www.ruby-doc.org/core/
  73
+
  74
+Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
  75
+several books available online as well:
  76
+
  77
+* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
  78
+* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
  79
+
  80
+These two books will bring you up to speed on the Ruby language and also on
  81
+programming in general.
  82
+
  83
+
  84
+== Debugger
  85
+
  86
+Debugger support is available through the debugger command when you start your
  87
+Mongrel or WEBrick server with --debugger. This means that you can break out of
  88
+execution at any point in the code, investigate and change the model, and then,
  89
+resume execution! You need to install ruby-debug to run the server in debugging
  90
+mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example:
  91
+
  92
+  class WeblogController < ActionController::Base
  93
+    def index
  94
+      @posts = Post.find(:all)
  95
+      debugger
  96
+    end
  97
+  end
  98
+
  99
+So the controller will accept the action, run the first line, then present you
  100
+with a IRB prompt in the server window. Here you can do things like:
  101
+
  102
+  >> @posts.inspect
  103
+  => "[#<Post:0x14a6be8
  104
+          @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
  105
+       #<Post:0x14a6620
  106
+          @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
  107
+  >> @posts.first.title = "hello from a debugger"
  108
+  => "hello from a debugger"
  109
+
  110
+...and even better, you can examine how your runtime objects actually work:
  111
+
  112
+  >> f = @posts.first
  113
+  => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
  114
+  >> f.
  115
+  Display all 152 possibilities? (y or n)
  116
+
  117
+Finally, when you're ready to resume execution, you can enter "cont".
  118
+
  119
+
  120
+== Console
  121
+
  122
+The console is a Ruby shell, which allows you to interact with your
  123
+application's domain model. Here you'll have all parts of the application
  124
+configured, just like it is when the application is running. You can inspect
  125
+domain models, change values, and save to the database. Starting the script
  126
+without arguments will launch it in the development environment.
  127
+
  128
+To start the console, run <tt>rails console</tt> from the application
  129
+directory.
  130
+
  131
+Options:
  132
+
  133
+* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
  134
+  made to the database.
  135
+* Passing an environment name as an argument will load the corresponding
  136
+  environment. Example: <tt>rails console production</tt>.
  137
+
  138
+To reload your controllers and models after launching the console run
  139
+<tt>reload!</tt>
  140
+
  141
+More information about irb can be found at:
  142
+link:http://www.rubycentral.com/pickaxe/irb.html
  143
+
  144
+
  145
+== dbconsole
  146
+
  147
+You can go to the command line of your database directly through <tt>rails
  148
+dbconsole</tt>. You would be connected to the database with the credentials
  149
+defined in database.yml. Starting the script without arguments will connect you
  150
+to the development database. Passing an argument will connect you to a different
  151
+database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
  152
+PostgreSQL and SQLite 3.
  153
+
  154
+== Description of Contents
  155
+
  156
+The default directory structure of a generated Ruby on Rails application:
  157
+
  158
+  |-- app
  159
+  |   |-- controllers
  160
+  |   |-- helpers
  161
+  |   |-- models
  162
+  |   `-- views
  163
+  |       `-- layouts
  164
+  |-- config
  165
+  |   |-- environments
  166
+  |   |-- initializers
  167
+  |   `-- locales
  168
+  |-- db
  169
+  |-- doc
  170
+  |-- lib
  171
+  |   `-- tasks
  172
+  |-- log
  173
+  |-- public
  174
+  |   |-- images
  175
+  |   |-- javascripts
  176
+  |   `-- stylesheets
  177
+  |-- script
  178
+  |   `-- performance
  179
+  |-- test
  180
+  |   |-- fixtures
  181
+  |   |-- functional
  182
+  |   |-- integration
  183
+  |   |-- performance
  184
+  |   `-- unit
  185
+  |-- tmp
  186
+  |   |-- cache
  187
+  |   |-- pids
  188
+  |   |-- sessions
  189
+  |   `-- sockets
  190
+  `-- vendor
  191
+      `-- plugins
  192
+
  193
+app
  194
+  Holds all the code that's specific to this particular application.
  195
+
  196
+app/controllers
  197
+  Holds controllers that should be named like weblogs_controller.rb for
  198
+  automated URL mapping. All controllers should descend from
  199
+  ApplicationController which itself descends from ActionController::Base.
  200
+
  201
+app/models
  202
+  Holds models that should be named like post.rb. Models descend from
  203
+  ActiveRecord::Base by default.
  204
+
  205
+app/views
  206
+  Holds the template files for the view that should be named like
  207
+  weblogs/index.html.erb for the WeblogsController#index action. All views use
  208
+  eRuby syntax by default.
  209
+
  210
+app/views/layouts
  211
+  Holds the template files for layouts to be used with views. This models the
  212
+  common header/footer method of wrapping views. In your views, define a layout
  213
+  using the <tt>layout :default</tt> and create a file named default.html.erb.
  214
+  Inside default.html.erb, call <% yield %> to render the view using this
  215
+  layout.
  216
+
  217
+app/helpers
  218
+  Holds view helpers that should be named like weblogs_helper.rb. These are
  219
+  generated for you automatically when using generators for controllers.
  220
+  Helpers can be used to wrap functionality for your views into methods.
  221
+
  222
+config
  223
+  Configuration files for the Rails environment, the routing map, the database,
  224
+  and other dependencies.
  225
+
  226
+db
  227
+  Contains the database schema in schema.rb. db/migrate contains all the
  228
+  sequence of Migrations for your schema.
  229
+
  230
+doc
  231
+  This directory is where your application documentation will be stored when
  232
+  generated using <tt>rake doc:app</tt>
  233
+
  234
+lib
  235
+  Application specific libraries. Basically, any kind of custom code that
  236
+  doesn't belong under controllers, models, or helpers. This directory is in
  237
+  the load path.
  238
+
  239
+public
  240
+  The directory available for the web server. Contains subdirectories for
  241
+  images, stylesheets, and javascripts. Also contains the dispatchers and the
  242
+  default HTML files. This should be set as the DOCUMENT_ROOT of your web
  243
+  server.
  244
+
  245
+script
  246
+  Helper scripts for automation and generation.
  247
+
  248
+test
  249
+  Unit and functional tests along with fixtures. When using the rails generate
  250
+  command, template test files will be generated for you and placed in this
  251
+  directory.
  252
+
  253
+vendor
  254
+  External libraries that the application depends on. Also includes the plugins
  255
+  subdirectory. If the app has frozen rails, those gems also go here, under
  256
+  vendor/rails/. This directory is in the load path.
7  demo/Rakefile
... ...
@@ -0,0 +1,7 @@
  1
+# Add your own tasks in files placed in lib/tasks ending in .rake,
  2
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
  3
+
  4
+require File.expand_path('../config/application', __FILE__)
  5
+require 'rake'
  6
+
  7
+Demo::Application.load_tasks
3  demo/app/controllers/application_controller.rb
... ...
@@ -0,0 +1,3 @@
  1
+class ApplicationController < ActionController::Base
  2
+  protect_from_forgery
  3
+end
86  demo/app/controllers/users_controller.rb
... ...
@@ -0,0 +1,86 @@
  1
+class UsersController < ApplicationController
  2
+
  3
+  skip_before_filter :enforce_ssl, :only => :index
  4
+
  5
+  # GET /users
  6
+  # GET /users.xml
  7
+  def index
  8
+    @users = User.all
  9
+
  10
+    respond_to do |format|
  11
+      format.html # index.html.erb
  12
+      format.xml  { render :xml => @users }
  13
+    end
  14
+  end
  15
+
  16
+  # GET /users/1
  17
+  # GET /users/1.xml
  18
+  def show
  19
+    @user = User.find(params[:id])
  20
+
  21
+    respond_to do |format|
  22
+      format.html # show.html.erb
  23
+      format.xml  { render :xml => @user }
  24
+    end
  25
+  end
  26
+
  27
+  # GET /users/new
  28
+  # GET /users/new.xml
  29
+  def new
  30
+    @user = User.new
  31
+
  32
+    respond_to do |format|
  33
+      format.html # new.html.erb
  34
+      format.xml  { render :xml => @user }
  35
+    end
  36
+  end
  37
+
  38
+  # GET /users/1/edit
  39
+  def edit
  40
+    @user = User.find(params[:id])
  41
+  end
  42
+
  43
+  # POST /users
  44
+  # POST /users.xml
  45
+  def create
  46
+    @user = User.new(params[:user])
  47
+
  48
+    respond_to do |format|
  49
+      if @user.save
  50
+        format.html { redirect_to(@user, :notice => 'User was successfully created.') }
  51
+        format.xml  { render :xml => @user, :status => :created, :location => @user }
  52
+      else
  53
+        format.html { render :action => "new" }
  54
+        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
  55
+      end
  56
+    end
  57
+  end
  58
+
  59
+  # PUT /users/1
  60
+  # PUT /users/1.xml
  61
+  def update
  62
+    @user = User.find(params[:id])
  63
+
  64
+    respond_to do |format|
  65
+      if @user.update_attributes(params[:user])
  66
+        format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
  67
+        format.xml  { head :ok }
  68
+      else
  69
+        format.html { render :action => "edit" }
  70
+        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
  71
+      end
  72
+    end
  73
+  end
  74
+
  75
+  # DELETE /users/1
  76
+  # DELETE /users/1.xml
  77
+  def destroy
  78
+    @user = User.find(params[:id])
  79
+    @user.destroy
  80
+
  81
+    respond_to do |format|
  82
+      format.html { redirect_to(users_url) }
  83
+      format.xml  { head :ok }
  84
+    end
  85
+  end
  86
+end
2  demo/app/helpers/application_helper.rb
... ...
@@ -0,0 +1,2 @@
  1
+module ApplicationHelper
  2
+end
2  demo/app/helpers/users_helper.rb
... ...
@@ -0,0 +1,2 @@
  1
+module UsersHelper
  2
+end
2  demo/app/models/user.rb
... ...
@@ -0,0 +1,2 @@
  1
+class User < ActiveRecord::Base
  2
+end
14  demo/app/views/layouts/application.html.erb
... ...
@@ -0,0 +1,14 @@
  1
+<!DOCTYPE html>
  2
+<html>
  3
+<head>
  4
+  <title>Demo</title>
  5
+  <%= stylesheet_link_tag :all %>
  6
+  <%= javascript_include_tag :defaults %>
  7
+  <%= csrf_meta_tag %>
  8
+</head>
  9
+<body>
  10
+
  11
+<%= yield %>
  12
+
  13
+</body>
  14
+</html>
21  demo/app/views/users/_form.html.erb
... ...
@@ -0,0 +1,21 @@
  1
+<%= form_for(@user) do |f| %>
  2
+  <% if @user.errors.any? %>
  3
+    <div id="error_explanation">
  4
+      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
  5
+
  6
+      <ul>
  7
+      <% @user.errors.full_messages.each do |msg| %>
  8
+        <li><%= msg %></li>
  9
+      <% end %>
  10
+      </ul>
  11
+    </div>
  12
+  <% end %>
  13
+
  14
+  <div class="field">
  15
+    <%= f.label :name %><br />
  16
+    <%= f.text_field :name %>
  17
+  </div>
  18
+  <div class="actions">
  19
+    <%= f.submit %>
  20
+  </div>
  21
+<% end %>
6  demo/app/views/users/edit.html.erb
... ...
@@ -0,0 +1,6 @@
  1
+<h1>Editing user</h1>
  2
+
  3
+<%= render 'form' %>
  4
+
  5
+<%= link_to 'Show', @user %> |
  6
+<%= link_to 'Back', users_path %>
23  demo/app/views/users/index.html.erb
... ...
@@ -0,0 +1,23 @@
  1
+<h1>Listing users</h1>
  2
+
  3
+<table>
  4
+  <tr>
  5
+    <th>Name</th>
  6
+    <th></th>
  7
+    <th></th>
  8
+    <th></th>
  9
+  </tr>
  10
+
  11
+<% @users.each do |user| %>
  12
+  <tr>
  13
+    <td><%= user.name %></td>
  14
+    <td><%= link_to 'Show', user %></td>
  15
+    <td><%= link_to 'Edit', edit_user_path(user) %></td>
  16
+    <td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %></td>
  17
+  </tr>
  18
+<% end %>
  19
+</table>
  20
+
  21
+<br />
  22
+
  23
+<%= link_to 'New User', new_user_path %>
5  demo/app/views/users/new.html.erb
... ...
@@ -0,0 +1,5 @@
  1
+<h1>New user</h1>
  2
+
  3
+<%= render 'form' %>
  4
+
  5
+<%= link_to 'Back', users_path %>
10  demo/app/views/users/show.html.erb
... ...
@@ -0,0 +1,10 @@
  1
+<p id="notice"><%= notice %></p>
  2
+
  3
+<p>
  4
+  <b>Name:</b>
  5
+  <%= @user.name %>
  6
+</p>
  7
+
  8
+
  9
+<%= link_to 'Edit', edit_user_path(@user) %> |
  10
+<%= link_to 'Back', users_path %>
4  demo/config.ru
... ...
@@ -0,0 +1,4 @@
  1
+# This file is used by Rack-based servers to start the application.
  2
+
  3
+require ::File.expand_path('../config/environment',  __FILE__)
  4
+run Demo::Application
42  demo/config/application.rb
... ...
@@ -0,0 +1,42 @@
  1
+require File.expand_path('../boot', __FILE__)
  2
+
  3
+require 'rails/all'
  4
+
  5
+# If you have a Gemfile, require the gems listed there, including any gems
  6
+# you've limited to :test, :development, or :production.
  7
+Bundler.require(:default, Rails.env) if defined?(Bundler)
  8
+
  9
+module Demo
  10
+  class Application < Rails::Application
  11
+    # Settings in config/environments/* take precedence over those specified here.
  12
+    # Application configuration should go into files in config/initializers
  13
+    # -- all .rb files in that directory are automatically loaded.
  14
+
  15
+    # Custom directories with classes and modules you want to be autoloadable.
  16
+    # config.autoload_paths += %W(#{config.root}/extras)
  17
+
  18
+    # Only load the plugins named here, in the order given (default is alphabetical).
  19
+    # :all can be used as a placeholder for all plugins not explicitly named.
  20
+    # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
  21
+
  22
+    # Activate observers that should always be running.
  23
+    # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
  24
+
  25
+    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
  26
+    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
  27
+    # config.time_zone = 'Central Time (US & Canada)'
  28
+
  29
+    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
  30
+    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
  31
+    # config.i18n.default_locale = :de
  32
+
  33
+    # JavaScript files you want as :defaults (application.js is always included).
  34
+    # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
  35
+
  36
+    # Configure the default encoding used in templates for Ruby 1.9.
  37
+    config.encoding = "utf-8"
  38
+
  39
+    # Configure sensitive parameters which will be filtered from the log file.
  40
+    config.filter_parameters += [:password]
  41
+  end
  42
+end
22  demo/config/boot.rb
... ...
@@ -0,0 +1,22 @@
  1
+#patched my rail3-maven-plugin to allow custom Gemfile names
  2
+require 'rubygems'
  3
+
  4
+gemfile = ''
  5
+if defined?(JRUBY_VERSION)
  6
+  require 'java'
  7
+  ENV['BUNDLE_GEMFILE'] ||= java.lang.System.getProperty("bundle.gemfile")
  8
+  gemfile = ENV['BUNDLE_GEMFILE'].to_s
  9
+  File.delete(gemfile + ".lock") if File.exist?(gemfile + ".lock")
  10
+end
  11
+
  12
+# Set up gems listed in the Gemfile.
  13
+gemfile = File.expand_path('../../Gemfile', __FILE__) unless File.exist?(gemfile)
  14
+begin
  15
+  ENV['BUNDLE_GEMFILE'] = gemfile
  16
+  require 'bundler'
  17
+  Bundler.setup
  18
+rescue Bundler::GemNotFound => e
  19
+  STDERR.puts e.message
  20
+  STDERR.puts "Try running `bundle install`." if defined?(JRUBY_VERSION) && java.lang.System.getProperty("maven.home").nil? || !defined?(JRUBY_VERSION)
  21
+  exit!
  22
+end if File.exist?(gemfile) || ENV['BUNDLE_GEMFILE']
22  demo/config/database.yml
... ...
@@ -0,0 +1,22 @@
  1
+# SQLite version 3.x
  2
+#   gem install sqlite3-ruby (not necessary on OS X Leopard)
  3
+development:
  4
+  adapter: sqlite3
  5
+  database: db/development.sqlite3
  6
+  pool: 5
  7
+  timeout: 5000
  8
+
  9
+# Warning: The database defined as "test" will be erased and
  10
+# re-generated from your development database when you run "rake".
  11
+# Do not set this db to the same as development or production.
  12
+test:
  13
+  adapter: sqlite3
  14
+  database: db/test.sqlite3
  15
+  pool: 5
  16
+  timeout: 5000
  17
+
  18
+production:
  19
+  adapter: sqlite3
  20
+  database: db/production.sqlite3
  21
+  pool: 5
  22
+  timeout: 5000
5  demo/config/environment.rb
... ...
@@ -0,0 +1,5 @@
  1
+# Load the rails application
  2
+require File.expand_path('../application', __FILE__)
  3
+
  4
+# Initialize the rails application
  5
+Demo::Application.initialize!
28  demo/config/environments/development.rb
... ...
@@ -0,0 +1,28 @@
  1
+Demo::Application.configure do
  2
+  # Settings specified here will take precedence over those in config/environment.rb
  3
+
  4
+  # In the development environment your application's code is reloaded on
  5
+  # every request.  This slows down response time but is perfect for development
  6
+  # since you don't have to restart the webserver when you make code changes.
  7
+  config.cache_classes = false
  8
+
  9
+  # Log error messages when you accidentally call methods on nil.
  10
+  config.whiny_nils = true
  11
+
  12
+  # Show full error reports and disable caching
  13
+  config.consider_all_requests_local       = true
  14
+  config.action_view.debug_rjs             = true
  15
+  config.action_controller.perform_caching = false
  16
+
  17
+  # Don't care if the mailer can't send
  18
+  config.action_mailer.raise_delivery_errors = false
  19
+
  20
+  # Print deprecation notices to the Rails logger
  21
+  config.active_support.deprecation = :log
  22
+
  23
+  # Only use best-standards-support built into browsers
  24
+  config.action_dispatch.best_standards_support = :builtin
  25
+
  26
+  config.ssl_port = 8443
  27
+end
  28
+
49  demo/config/environments/production.rb
... ...
@@ -0,0 +1,49 @@
  1
+Demo::Application.configure do
  2
+  # Settings specified here will take precedence over those in config/environment.rb
  3
+
  4
+  # The production environment is meant for finished, "live" apps.
  5
+  # Code is not reloaded between requests
  6
+  config.cache_classes = true
  7
+
  8
+  # Full error reports are disabled and caching is turned on
  9
+  config.consider_all_requests_local       = false
  10
+  config.action_controller.perform_caching = true
  11
+
  12
+  # Specifies the header that your server uses for sending files
  13
+  config.action_dispatch.x_sendfile_header = "X-Sendfile"
  14
+
  15
+  # For nginx:
  16
+  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
  17
+
  18
+  # If you have no front-end server that supports something like X-Sendfile,
  19
+  # just comment this out and Rails will serve the files
  20
+
  21
+  # See everything in the log (default is :info)
  22
+  # config.log_level = :debug
  23
+
  24
+  # Use a different logger for distributed setups
  25
+  # config.logger = SyslogLogger.new
  26
+
  27
+  # Use a different cache store in production
  28
+  # config.cache_store = :mem_cache_store
  29
+
  30
+  # Disable Rails's static asset server
  31
+  # In production, Apache or nginx will already do this
  32
+  config.serve_static_assets = false
  33
+
  34
+  # Enable serving of images, stylesheets, and javascripts from an asset server
  35
+  # config.action_controller.asset_host = "http://assets.example.com"
  36
+
  37
+  # Disable delivery errors, bad email addresses will be ignored
  38
+  # config.action_mailer.raise_delivery_errors = false
  39
+
  40
+  # Enable threaded mode
  41
+  # config.threadsafe!
  42
+
  43
+  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  44
+  # the I18n.default_locale when a translation can not be found)
  45
+  config.i18n.fallbacks = true
  46
+
  47
+  # Send deprecation notices to registered listeners
  48
+  config.active_support.deprecation = :notify
  49
+end
35  demo/config/environments/test.rb
... ...
@@ -0,0 +1,35 @@
  1
+Demo::Application.configure do
  2
+  # Settings specified here will take precedence over those in config/environment.rb
  3
+
  4
+  # The test environment is used exclusively to run your application's
  5
+  # test suite.  You never need to work with it otherwise.  Remember that
  6
+  # your test database is "scratch space" for the test suite and is wiped
  7
+  # and recreated between test runs.  Don't rely on the data there!
  8
+  config.cache_classes = true
  9
+
  10
+  # Log error messages when you accidentally call methods on nil.
  11
+  config.whiny_nils = true
  12
+
  13
+  # Show full error reports and disable caching
  14
+  config.consider_all_requests_local       = true
  15
+  config.action_controller.perform_caching = false
  16
+
  17
+  # Raise exceptions instead of rendering exception templates
  18
+  config.action_dispatch.show_exceptions = false
  19
+
  20
+  # Disable request forgery protection in test environment
  21
+  config.action_controller.allow_forgery_protection    = false
  22
+
  23
+  # Tell Action Mailer not to deliver emails to the real world.
  24
+  # The :test delivery method accumulates sent emails in the
  25
+  # ActionMailer::Base.deliveries array.
  26
+  config.action_mailer.delivery_method = :test
  27
+
  28
+  # Use SQL instead of Active Record's schema dumper when creating the test database.
  29
+  # This is necessary if your schema can't be completely dumped by the schema dumper,
  30
+  # like if you have constraints or database-specific column types
  31
+  # config.active_record.schema_format = :sql
  32
+
  33
+  # Print deprecation notices to the stderr
  34
+  config.active_support.deprecation = :stderr
  35
+end
7  demo/config/initializers/backtrace_silencers.rb
... ...
@@ -0,0 +1,7 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
  4
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
  5
+
  6
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
  7
+# Rails.backtrace_cleaner.remove_silencers!
10  demo/config/initializers/inflections.rb
... ...
@@ -0,0 +1,10 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Add new inflection rules using the following format
  4
+# (all these examples are active by default):
  5
+# ActiveSupport::Inflector.inflections do |inflect|
  6
+#   inflect.plural /^(ox)$/i, '\1en'
  7
+#   inflect.singular /^(ox)en/i, '\1'
  8
+#   inflect.irregular 'person', 'people'
  9
+#   inflect.uncountable %w( fish sheep )
  10
+# end
5  demo/config/initializers/mime_types.rb
... ...
@@ -0,0 +1,5 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Add new mime types for use in respond_to blocks:
  4
+# Mime::Type.register "text/richtext", :rtf
  5
+# Mime::Type.register_alias "text/html", :iphone
7  demo/config/initializers/secret_token.rb
... ...
@@ -0,0 +1,7 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Your secret key for verifying the integrity of signed cookies.
  4
+# If you change this key, all old signed cookies will become invalid!
  5
+# Make sure the secret is at least 30 characters and all random,
  6
+# no regular words or you'll be exposed to dictionary attacks.
  7
+Demo::Application.config.secret_token = 'fa7fc2f652af28fa6ff2ecbfc17e518ddc011b5978fc0349910f149e9158312a49cf99b58fac1e49928d38f6c1ed24944a48768d6e92ff3dca08e897a070334a'
8  demo/config/initializers/session_store.rb
... ...
@@ -0,0 +1,8 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+Demo::Application.config.session_store :cookie_store, :key => '_demo_session'
  4
+
  5
+# Use the database for sessions instead of the cookie-based default,
  6
+# which shouldn't be used to store highly confidential information
  7
+# (create the session table with "rake db:sessions:create")
  8
+# Demo::Application.config.session_store :active_record_store
5  demo/config/locales/en.yml
... ...
@@ -0,0 +1,5 @@
  1
+# Sample localization file for English. Add more files in this directory for other locales.
  2
+# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
  3
+
  4
+en:
  5
+  hello: "Hello world"
60  demo/config/routes.rb
... ...
@@ -0,0 +1,60 @@
  1
+Demo::Application.routes.draw do
  2
+  resources :users
  3
+
  4
+  # The priority is based upon order of creation:
  5
+  # first created -> highest priority.
  6
+
  7
+  # Sample of regular route:
  8
+  #   match 'products/:id' => 'catalog#view'
  9
+  # Keep in mind you can assign values other than :controller and :action
  10
+
  11
+  # Sample of named route:
  12
+  #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
  13
+  # This route can be invoked with purchase_url(:id => product.id)
  14
+
  15
+  # Sample resource route (maps HTTP verbs to controller actions automatically):
  16
+  #   resources :products
  17
+
  18
+  # Sample resource route with options:
  19
+  #   resources :products do
  20
+  #     member do
  21
+  #       get 'short'
  22
+  #       post 'toggle'
  23
+  #     end
  24
+  #
  25
+  #     collection do
  26
+  #       get 'sold'
  27
+  #     end
  28
+  #   end
  29
+
  30
+  # Sample resource route with sub-resources:
  31
+  #   resources :products do
  32
+  #     resources :comments, :sales
  33
+  #     resource :seller
  34
+  #   end
  35
+
  36
+  # Sample resource route with more complex sub-resources