- Интересно было бы послушать чем отличается переезд с хероку от обычного деплоя на новый сервер, если чем-то отличается.
- перенос БД (mongodump/mongorestore)
- изменение способа хранения настроек
- настройка почты (Google Apps)
- А так же какие может возникли интересные моменты или какие-нибудь хитрые штуки применял.
- восстановление прав на домен
- capistrano recipes
- Интересно, что выбрал в качестве рельсового сервера, ставил ли какие нибудь дополнительные плюшки.
- Ну что-то в общем в таком ключе :)
- BusinessLogic -> AR
# spec/models/dynamic_messages_spec.rb
#
# DynamicMessages.message("message-key").hide_from(user)
# DynamicMessages.message("message-key").hidden_from?(user)
#
require File.expand_path('../../app/models/dynamic_messages', File.dirname(__FILE__))
describe DynamicMessages do
let(:user) { stub :user }
let(:message) { DynamicMessages.message("key") }
let(:storage) { stub :storage }
describe ".message" do
subject { DynamicMessages.message("key") }
it { should be_a DynamicMessages::Message }
its(:key) { should == "key" }
its(:storage) { should == DynamicMessages.storage }
end
describe "::Message" do
before { message.stub storage: storage }
describe "#hidden_from?" do
it "asks storage about self" do
storage.should_receive(:message_hidden_from?).with(message, user).and_return(true)
message.should be_hidden_from(user)
end
end
describe "hide_from" do
let(:message) { DynamicMessages.message("key") }
it "delegates hiding to storage" do
storage.should_receive(:hide_message_from).with(message, user)
message.hide_from(user)
end
end
end
end
# spec/models/dynamic_message_spec.rb
#
# DB storage
require 'spec_helper'
describe DynamicMessage do
describe ".message_hidden_from?" do
let(:message) { stub :message, key: "key" }
let(:viewer) { stub :viewer, id: 1, class: OpenStruct.new(name: "Viewer") }
it "returns true if message with key, viewer_id and viewer_type exists and has hidden field set to true" do
relation.stub exists?: true
DynamicMessage.should_receive(:where).with(key: "key", viewer_id: 1, viewer_type: "Viewer").and_return(relation)
DynamicMessage.message_hidden_from?(message, viewer).should == !relation.exists?
end
end
end
# config/initializers/dynamic_messaging.rb
DynamicMessages.storage = DynamicMessage
# app/models/dynamic_messages.rb
class DynamicMessages
class << self
attr_accessor :storage
def message(key)
return Message.new(key, storage)
end
end
class Message
attr_reader :key, :storage
def initialize(key, storage)
@key = key
@storage = storage
end
def hidden_from?(somebody)
storage.message_hidden_from?(self, somebody)
end
def hide_from(somebody)
storage.hide_message_from(self, somebody)
end
end
end
# app/models/dynamic_message.rb
class DynamicMessage < ActiveRecord::Base
def self.message_hidden_from?(message, viewer)
where(key: message.key, viewer_id: viewer.id, viewer_type: viewer.class.name, hidden: true).exists?
end
end