Skip to content

Instantly share code, notes, and snippets.

@mrbongiolo
Created October 22, 2015 17:33
Show Gist options
  • Save mrbongiolo/34a0cf9a3367b63c60a4 to your computer and use it in GitHub Desktop.
Save mrbongiolo/34a0cf9a3367b63c60a4 to your computer and use it in GitHub Desktop.
Rack + Lotus Router + Trailblazer

Rack + Lotus Router + Trailblazer

Testing some stuff...

bundle install
bundle exec passenger start -p 3000

Right now it only return JSON POST params.

require 'rubygems'
require 'bundler/setup'
require 'lotus/router'
require 'lotus/validations'
require 'trailblazer'
require 'trailblazer/operation/representer'
require 'reform/form/lotus'
require 'roar/json/hal'
require 'ostruct'
Reform::Form.class_eval do
include Reform::Form::Lotus
end
class Song < OpenStruct
end
module Trailblazer::Operation::Rackaware
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def call(env)
request = ::Rack::Request.new( env )
res, op = self.run( request.body.read )
[ 200, {}, op.to_json ]
end
end
end
module TrailblazedRack
module Home
class Index < Trailblazer::Operation
include Representer
include Rackaware
contract do
property :title
property :album
end
representer do
include Roar::JSON::HAL
link(:self) { 'meself' }
end
def process(params)
@model = Song.new
validate(params, model)
end
end
end
class Application
def initialize
@router = Lotus::Router.new do
get '/', to: Home::Index
get '/:id', to: Home::Index
post '/post', to: Home::Index
end
end
def call(env)
@router.call(env)
end
end
end
run TrailblazedRack::Application.new
source 'https://rubygems.org'
ruby "2.2.3"
gem 'rack'
gem 'lotus-router'
gem 'lotus-validations'
gem 'trailblazer'
gem 'roar'
gem 'multi_json'
# gem 'rom'
# gem 'rom-sql'
gem 'passenger'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment