Skip to content

Instantly share code, notes, and snippets.

# Service module
#
# Example usage :
# ```
# class SayHello
# include Service
#
# attr_accessor :name
#
# def call

Klaxit

Klaxit est une plateforme d’action pour révolutionner la mobilité quotidienne grâce au covoiturage domicile-travail. C’est l’application #1 du covoiturage courte distance, avec plus de 300 entreprises clientes dont la moitié des sociétés du CAC40 et 30 collectivités locales partenaires.

Mission

Votre mission sera de prendre la responsabilité d’une équipe de 3-5 développeurs :

How to keep it clean, for years

Paris.rb 2020, Cyrille Courtière, CTO @Klaxit

https://github.com/klaxit

Presentation slides

You will find here a full version of my presentation (including things I said but didn't write during my talk) :

# Module used to build a service.
#
# Example usage :
# ```
# class SayHello
# include Service
# attr_accessor :name
#
# def call
# puts "Hello #{name} !"
# This module allows to have an after_commit callback
# on a single AR instance. This is really useful in services.
#
# Usage example :
# mate = Mate.first
# mate.after_commit { |m| notify_first_name_changed(m) }
# mate.update_attributes!(first_name: "Gunter")
#
module ActiveRecord::InstanceCallbacks
def has_transactional_callbacks?
class AddIndexToUsersOnName < ActiveRecord::Migration
disable_ddl_transaction!
def change
add_index :users, :name, algorithm: :concurrently
end
end
class User < ActiveRecord::Base
...
# << REMOVE ON NEXT RELEASE
def new_column
read_attribute(:new_column) if has_attribute?(:new_column)
end
def new_column=(value)
write_attribute(:new_column, value) if has_attribute?(:new_column)
end
class ChangeUsersNewColumnNull < ActiveRecord::Migration
def change
change_column_null :users, :new_column, false
end
end
class PopulateUsersNewColumnDefaultValue < ActiveRecord::Migration
disable_ddl_transaction!
def up
User.find_in_batches do |users|
User.where(id: users.map(&:id), new_column: nil)
.update_all(new_column: "default_value")
end
end
end
class AddNewColumnToUsers < ActiveRecord::Base
def change
add_column :users, :new_column, :text
end
end