2. Overview
Why this Talk?
Ruby on Rails
Fast prototyping (demo)
Integrating with Apache httpd
Integrating with Oracle
Maybe demo
3. Why this Talk?
Node.js, MongoDB, and Express were cool
Lots of Rapid Prototyping Environments
• Ruby on Rails (Digital Collections)
• ColdFusion (many things)
• php (Cake)
Secure, Reliable, Transparent Data
Integration
4. Why Ruby on Rails?
How I started: a great application
MVC
• Rapid prototyping
• Separation of Concerns
• Generators
Unit and Integration Testing
Security is built-in
Community
Library of “gems”
5. Ruby Overview
General Purpose
Innovative Class and Object model
Domain Specific Languages
Lamdas (function objects), Blocks, and Mixins
JRuby
6. Class and Object model
•Everything is an Object
•Module – namespace, interface, behavior
•Class – inheritance, instantiation
7. Ruby - Domain Specific Languages
Implicit Hash, no parents
doit first, second, :k1 => v1, :k2 => v2
doit first, second, k1: v1, k2: v2
Comes from Functional Programming
(FORTH, Tcl, Ruby, Python)
Examples Today
• Gemfile
• Routing
• Rspec Tests (BDD)
8. Ruby - Lambdas and Blocks
Lambdas – function objects
l = lambda ( “There is no try” )
Puts l.call
Blocks – are implicit arguments
def implicit_block(number)
puts yield(number)
end
implicit_block(7) { |number| number + 1 }
Blocks – sometimes explicit
def explicit_block (number, &block)
9. Ruby - Mixins
Can include a module
class AccountController
include AccountHelpers
…
Can extend a module
bar = Bar.new
bar.extend Foo
Can re-open objects
class String
def empty?
end
Changes API Design
10. Ruby - jruby
ruby is like perl – C with links to libs
jruby is JVM implementation
jruby starts slow, gets fast
Not quite transparent
• Some “gems” implemented differently
• Some “gems” not available
• Cannot call SWT/Swing from ruby!
• Higher bar to start
11. Rails - Generators
Application
rails new demoapp
Model
rails generate User name:string
email:string password_hash:string
Migration
rails g migration AddRoleToUser
Controller
rails g controller Users all view edit
Integration Test
rails g integration_test AccountSettings
12. Ruby - Gemfile
Tracks dependencies (like Ivy, Maven)
Example of Domain Specific Language
Easy
# Use jquery as the JavaScript library
gem 'jquery-rails', '~> 3.1.0'
gem 'jquery-datatables-rails'
13. Rails - Routing
config/routes.rb
Nedtable::Application.routes.draw do
get ‘users’, to: ‘users#all’
post ‘users’, to: ‘users#create’
get ‘users/:id’, to: ‘users#view’
get ‘users/:id/edit’, to: ‘users#edit’
post ‘users/:id’, to: ‘users#update’
end
See it in web
See it on the console
14. Rails - rspec
Behavioral Driven Testing
Easy to read
describe MarcExporter do
it { should respond_to :to_marc }
it { should respond_to :reader }
…
describe "for NLM UI 1589530" do
…
its(:to_xml) { should == xmldata }
its(:to_marc) { should == mrcdata }
end
“Mock” network connections
15. Rails - security
CSRF
• automatically adds to form
• Automatically checks
Injection
• You never have to write SQL
• Automatically wraps SQL/XML
CSS - Safe by default
<%= “<br/>”.html_safe() %>
16. Rails - So much more
Asset Pipeline
Layouts
Engines
“gems” and more “gems”
17. Why Apache2? Why Oracle?
Good Tools give you:
Shoulders to stand on (powerful abstractions)
Without compromising flexibility
Good Architecture:
Same thing at Project level
Good Standards:
Same thing at Organizational Level
23. Cheat sheet #1
Create Application
rails new allhands –T
cd allhands
Update Gemfile and get dependencies
vim Gemfile
bundle update
bundle install
Integrate dependencies through generators
rails g devise:install
rails g active_admin:install
rake db:migrate
24. Cheat sheet #2
Create Models
rails g model Person …
rails g model OrgUnit …
rake db:migrate
rails g active_admin:resource Person
rails g active_admin:resource OrgUnit
Fix Saving the Data
Fix “associations”, e.g. foreign keys
Add graphviz integration
How much code did I write?
25. Takeaways - Learning
Ms. Frizzle
• Make mistakes
• Try things
• Get messy
Learning is Fun
• Cold Fusion MVC frameworks?
• Call Java libraries from CFML?
• Call jruby libs from CFML?