Skip to content

Instantly share code, notes, and snippets.

@laser
laser / users_controller.rb
Created April 14, 2014 17:33
07: UsersController modifications
class UsersController < ApplicationController
# ...
def create
Services.user_service.create_user user_params
redirect_to action: 'index'
end
# ...
@laser
laser / services.rb
Created April 14, 2014 17:33
06: First Rails client initializer
# config/initializers/services.rb
require 'barrister-rails'
class Services
def self.user_service
@@services ||= proxy_services
@@services[:user_service]
end
@laser
laser / user.rb
Created April 14, 2014 17:32
05: User model modifications
# services/user_service/models/user.rb
class UserService
class User < ActiveRecord::Base
validates :email, uniqueness: true
end
end
@laser
laser / implementation.rb
Created April 14, 2014 17:31
04: UserService implementation
# services/user_service/implementation.rb
class UserService
USER_ATTRIBUTES = %w(id full_name email phone_number)
def initialize(mail_service)
@mail_service = mail_service
end
@laser
laser / implementation.rb
Created April 14, 2014 17:30
04: MailService Implementation
# services/mail_service/implementation.rb
class MailService
def send_email(from, to, subject, body)
opts = { from: from, to: to, subject: subject, body: body }
mail = ActionMailer::Base.mail opts
!!mail.deliver # return true if we're g2g
end
@laser
laser / interface.idl
Created April 14, 2014 17:29
03: UserService IDL
// services/user_service/interface.idl
struct UserProperties {
email string
full_name string
phone_number string [optional]
}
struct User extends UserProperties {
id int
@laser
laser / interface.idl
Created April 14, 2014 17:28
02: MailService IDL
// services/mail_service/interface.idl
interface MailService {
send_email(from string, to string, subject string, body string) bool
}
@laser
laser / users_controller.rb
Created April 14, 2014 17:25
01: UsersController
class UsersController < ApplicationController
def index
@users = User.all
end
def new; end
def create
User.new(user_params).save!
@laser
laser / user.rb
Created April 14, 2014 17:24
00: UserModel
class User < ActiveRecord::Base
after_create :notify_added
validates :email, uniqueness: true
def notify_added
UserMailer.email(self).deliver
end
end
@laser
laser / 00_user_model.rb
Created April 14, 2014 17:22
Microservices
class User < ActiveRecord::Base
after_create :notify_added
validates :email, uniqueness: true
def notify_added
UserMailer.email(self).deliver
end
end