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
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
240
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
410
Foundation Models frameworkで画像分析
ryodeveloper
1
620
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
130
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.2k
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
980
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
940
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
160
FDEが実現するAI駆動経営の現在地
gonta
2
280
VibeCodingからAgenticWorkflowへ
starfish719
0
560
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.7k
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
470
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How STYLIGHT went responsive
nonsquared
100
6.2k
Between Models and Reality
mayunak
4
390
Designing for humans not robots
tammielis
254
26k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Claude Code のすすめ
schroneko
67
230k
Navigating Weather and Climate Data
rabernat
0
480
Amusing Abliteration
ianozsvald
1
250
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
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