Ruby on Rails All Hands Meeting
-
Upload
dan-davis -
Category
Technology
-
view
114 -
download
2
description
Transcript of Ruby on Rails All Hands Meeting
Overview
Why this Talk? Ruby on Rails Fast prototyping (demo) Integrating with Apache httpd Integrating with Oracle Maybe demo
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
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”
Ruby Overview
General Purpose Innovative Class and Object model Domain Specific Languages Lamdas (function objects), Blocks, and Mixins JRuby
Class and Object model
•Everything is an Object•Module – namespace, interface, behavior•Class – inheritance, instantiation
Ruby - Domain Specific Languages
Implicit Hash, no parentsdoit first, second, :k1 => v1, :k2 => v2doit first, second, k1: v1, k2: v2
Comes from Functional Programming(FORTH, Tcl, Ruby, Python)
Examples Today• Gemfile• Routing• Rspec Tests (BDD)
Ruby - Lambdas and Blocks
Lambdas – function objectsl = lambda ( “There is no try” )Puts l.call
Blocks – are implicit argumentsdef implicit_block(number) puts yield(number)endimplicit_block(7) { |number| number + 1 }
Blocks – sometimes explicitdef explicit_block (number, &block)
Ruby - Mixins
Can include a moduleclass AccountController
include AccountHelpers…
Can extend a modulebar = Bar.newbar.extend Foo
Can re-open objectsclass Stringdef empty? end
Changes API Design
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
Rails - Generators
Applicationrails new demoapp
Modelrails generate User name:string \ email:string password_hash:string
Migrationrails g migration AddRoleToUser
Controllerrails g controller Users all view edit
Integration Testrails g integration_test AccountSettings
Ruby - Gemfile
Tracks dependencies (like Ivy, Maven) Example of Domain Specific Language Easy
# Use jquery as the JavaScript librarygem 'jquery-rails', '~> 3.1.0'gem 'jquery-datatables-rails'
Rails - Routing
config/routes.rbNedtable::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
Rails - rspec
Behavioral Driven Testing Easy to read
describe MarcExporter doit { 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
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() %>
Rails - So much more
Asset Pipeline Layouts Engines “gems” and more “gems”
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
Apache2 - Context
Apache2 – nlm.conf<Location /solr>
ProxyPass ajp://localhost:8009/solrProxyPassReverse ajp://localhost:8009/solrOptions -MultiViewsOrder allow,denyAllow from 130.14.160.225/24
AuthType CASAuthName "NLM Login"CASScope /Require user davisda4 butlerj pantrCASAuthNHeader REMOTE_USER
</Location>
Oracle - Benefits
Reliable Secure XMLDB is included Transparent – SQL Developer/Toad Oracle Support in OSS evaluation
• Measures maturity• Measures Enterprise readiness
Oracle – link to Rails Gemfile
gem 'ruby-oci8', '~> 2.1.0'gem 'activerecord-oracle_enhanced-adapter’
config/database.ymldevelopment:
adapter: oracle_enhanceddatabase: 'oltp01_dev'username: 'discovery'password: ‘cleartext’
Integrating getDBPasswordpassword: <% `getDBPassword …` %>
Multiple Databasesestablish_connection :serials
Let’s Build Something
ER Diagram
Navigational State Diagram
Cheat sheet #1
Create Applicationrails new allhands –Tcd allhands
Update Gemfile and get dependenciesvim Gemfilebundle updatebundle install
Integrate dependencies through generatorsrails g devise:installrails g active_admin:installrake db:migrate
Cheat sheet #2
Create Modelsrails g model Person …rails g model OrgUnit …rake db:migraterails g active_admin:resource Personrails g active_admin:resource OrgUnit
Fix Saving the Data Fix “associations”, e.g. foreign keys Add graphviz integration How much code did I write?
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?
Questions?