Skip to content

Instantly share code, notes, and snippets.

@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 / 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 / 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 / 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 / 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 / main.rb
Last active August 29, 2015 13:59
08: MailService RedisContainer
# services/mail_service/main.rb
require 'barrister-redis'
opts = {
database_url: ENV['OPENREDIS_URL'],
list_name: 'mail_service'
}
Barrister::RedisContainer.new('./interface.json', MailService.new, opts).start
@laser
laser / main.rb
Created April 14, 2014 17:42
09: UserService Redis container
# services/user_service/main.rb
require 'activerecord'
require 'barrister-redis'
# establish a connection to the database
db_config = YAML.load(ERB.new(File.read('../../config/database.yml')).result)
ActiveRecord::Base.establish_connection db_config[ENV['RACK_ENV'] || 'development']
# create our MailService proxy
@laser
laser / services.rb
Created April 14, 2014 17:43
10: Rails client using Redis
# config/initializers/services.rb
require 'barrister-rails'
require 'barrister-redis'
class Services
# ...
def self.proxy_services
@laser
laser / Procfile
Created April 14, 2014 17:44
11: Procfile for Redis
# Procfile
web: bundle exec rails s -p $PORT
mail_service: sh -c 'cd services/mail_service; ./main.rb'
user_service: sh -c 'cd services/user_service; ./main.rb'
@laser
laser / main.rb
Last active August 29, 2015 13:59
12: MailService Sinatra container
# services/mail_service/main.rb
require 'barrister-sinatra'
opts = {
mount_path: '/api',
port: ENV['PORT']
}
Barrister::SinatraContainer.new('./interface.json', MailService.new, opts).start