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
Nando Sousa
July 25, 2015
Programming
120
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
280
Yet another introduction to concurrency
nandosousafr
4
230
5 basic tips for RubyOnRails projects
nandosousafr
1
460
Robust search with Searchkick
nandosousafr
0
80
Workshop Git para o DevInSanta meetup.
nandosousafr
0
77
Other Decks in Programming
See All in Programming
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
980
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
200
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
110
VibeCodingからAgenticWorkflowへ
starfish719
0
560
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
290
仕様駆動開発の消費期限
watany
20
8.5k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
950
今さら聞けない .NET CLI
htkym
0
200
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
260
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.8k
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
630
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
440
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Automating Front-end Workflow
addyosmani
1369
210k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
エンジニアに許された特別な時間の終わり
watany
108
250k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Cult of Friendly URLs
andyhume
79
7k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
470
Believing is Seeing
oripsolob
1
190
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