Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tirando Proveito das Rails Engines
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nando Sousa
July 25, 2015
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tirando Proveito das Rails Engines
Nando Sousa
July 25, 2015
More Decks by Nando Sousa
See All by Nando Sousa
Metaprogramming in Elixir
nandosousafr
0
270
Yet another introduction to concurrency
nandosousafr
4
230
5 basic tips for RubyOnRails projects
nandosousafr
1
440
Robust search with Searchkick
nandosousafr
0
79
Workshop Git para o DevInSanta meetup.
nandosousafr
0
74
Other Decks in Programming
See All in Programming
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
750
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
290
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
The NotImplementedError Problem in Ruby
koic
1
960
はてなアカウント基盤 State of the Union
cockscomb
1
920
Agentic UI
manfredsteyer
PRO
0
200
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
140
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
7.4k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
220
JavaDoc 再入門
nagise
1
420
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
250
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
ラッコキーワード サービス紹介資料
rakko
1
3.8M
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
740
Into the Great Unknown - MozCon
thekraken
41
2.6k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
The Cost Of JavaScript in 2023
addyosmani
55
10k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Amusing Abliteration
ianozsvald
1
210
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
Transcript
Tirando proveito das Rails Engines
@nandosousafr
None
Ship It! resultadosdigitais.com.br shiptit.resultadosdigitais.com.br
Microserviços tem se tornado um tema bastante popular
"Conjunto de serviços que podem ser deployados de forma independente"
Rails App Example Loja Aplicações Monolíticas Processamento de Pagamento Nota
Fiscal Processamento de Envio
Loja Nota fiscal Processamento de Pagamento Processamento de Envio Rails
App Example Microserviços
Microservices Premature Adoption vs
None
The problem of Rails with large codebases
Rails Engines
3.0 3.1 Introdução Mountable Initializers Asset pipeline Versions
Engines can be considered miniature applications that provide functionality to
their host applications
None
Spree commerce
Rails App Example Processamento de Pagamento Processamento de Envio Loja
Nota Fiscal
Processamento de Pagamento Checkout Gateway App Eventos Gateway Area do
Clientes Flow
$ rails plugin new payment —mountable
create create README.rdoc create Rakefile create payment.gemspec create MIT-LICENSE create
.gitignore create Gemfile create app create app/controllers/payment/application_controller.rb create app/helpers/payment/application_helper.rb create app/mailers create app/models create app/views/layouts/payment/application.html.erb create app/assets/images/payment create app/assets/images/payment/.keep create config/routes.rb create lib/payment.rb create lib/tasks/payment_tasks.rake create lib/payment/version.rb create lib/payment/engine.rb create app/assets/stylesheets/payment/application.css create app/assets/javascripts/payment/application.js create bin create bin/rails create test/test_helper.rb create test/payment_test.rb append Rakefile create test/integration/navigation_test.rb vendor_app test/dummy
# lib/payment/engine.rb module Payment class Engine < ::Rails::Engine isolate_namespace Payment
end end
gemspec $:.push File.expand_path("../lib", __FILE__) # Maintain your gem's version: require
"payment/version" # Describe your gem and declare its dependencies: Gem::Specification.new do |s| s.name = "payment" s.version = Payment::VERSION s.authors = ["Nando Sousa"] s.email = ["
[email protected]
"] s.homepage = "TODO" s.summary = "TODO: Summary of Payment." s.description = "TODO: Description of Payment." s.license = "MIT" s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] s.test_files = Dir["test/**/*"] s.add_dependency "rails", "~> 4.2.2" s.add_development_dependency "sqlite3" end
gem 'payment', github: 'org/repo' Main APP Gemfile
Rails.application.routes.draw do root 'home#index' mount Payment::Engine => 'payment' end 24
Routes
➜ HostApp bundle exec rake routes Prefix Verb URI Pattern
Controller#Action root GET / home#index payment /payment Payment::Engine Routes for Payment::Engine: root GET / payment/instructions#index notification POST /notification(.:format) payment/notification#process
billing.notification_url Rails.application.routes.draw do root 'home#index' mount Payment::Engine => ‘payment’, as:
:billing end payment.notification_url URL Helper main app
main_app.root_url notification_url URL Helper engine
invoke active_record create db/migrate/20150725085246_create_payment_invoices.rb create app/models/payment/invoice.rb invoke test_unit create test/models/payment/invoice_test.rb
create test/fixtures/payment/invoices.yml $ rails g model Invoice amount Migrations engine
$ rake payment:install:migrations Copied migration 20150725110510_create_payment_invoices.payment.rb from payment $ rake
railties:install:migrations Migrations engine multiple engines
class CreatePaymentInvoices < ActiveRecord::Migration def change create_table :payment_invoices do |t|
t.string :amount t.timestamps null: false end end end
Payment::Engine.load_seed Seed data
app/views/payment/invoices/show.html.erb <%= @invoice.amount %> Main App app/views/payment/invoices/show.html.erb <%= @invoice.amount %>
<%= @invoice.status %> Overiding engine
Load Assets <%= stylesheet_link_tag “payment/style” %>
None
Obrigado @nandosousafr
[email protected]
shipit.resultadosdigitais.com.br Thanks! Nando Sousa @nandosousafr
[email protected]
shipit.resultadosdigitais.com.br
we’re hiring