Ruby on Rails All Hands Meeting

Post on 22-Nov-2014

114 views 2 download

description

Presentation on Ruby on Rails at a ColdFusion Oracle shop.

Transcript of Ruby on Rails All Hands Meeting

Ruby on Rails, Apache httpd, and Oracle

Dan Davisdavisda4@mail.nlm.nih.gov

B1N14Q

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?