Skip to content

Instantly share code, notes, and snippets.

@laser
laser / service.rb
Last active January 4, 2016 10:19
service.rb
# app/utils/calculator.rb
class StatelessCalculator
def self.add(x, y)
x + y
end
# ...subtract, divide, multiply, etc.
end
# app/services/calculation_isolate.rb
@laser
laser / unnecessarily.rb
Last active January 4, 2016 15:19
unnecessarily introducing mutable state
class RssImporter
attr_writer :articles
attr_reader :result
def import
@result = articles.map do |article|
RssContent.create { url: article.url, text: article.body }
end
end
end
@laser
laser / bad.rb
Last active January 4, 2016 15:28
more bad
# our first import
importer = RssImporter.new
importer.articles = a_bunch_of_rss_content
importer.import
imported = importer.result
# second import, same instance of RssImporter
importer.articles = other_rss_content
importer.result # same value as "imported" on line 5
@laser
laser / less_state.rb
Created January 26, 2014 23:04
RSS Importer - less state
class RssImporter
def self.import(articles)
articles.map do |article|
RssContent.create { url: article.url, text: article.body }
end
end
end
# somewhere in your codebase...
imported = RssImporter.import a_bunch_of_rss_content
@laser
laser / module.rb
Created January 27, 2014 20:05
module as namespace
# app/utils/calculator.rb
module StatelessCalculator
def add(x, y)
x + y
end
module_function :add
end
@laser
laser / asset_service.rb
Last active August 29, 2015 13:55
Asset Service
class AssetService
def prune_stale_images
Prunable.from_assets(Image.all).each do |image|
S3Object.delete image.s3_object_name, image.s3_bucket_name
image.destroy
end
end
end
@laser
laser / asset_service_under_test.rb
Last active August 29, 2015 13:55
AssetService, under test
class AssetService
def prune_stale_images
--hard_coded_return_value--.each do |image|
S3Object.delete image.s3_object_name, image.s3_bucket_name
image.destroy
end
end
end
@laser
laser / ui.js
Last active August 29, 2015 13:55
UI toolbox
x = {
createCheckbox: function (o) {
var t = '';
t += '<label class="checkbox {{class}}">';
t += helpers.viewUtil.createBareCheckbox(o);
t += '</label>';
return Mustache.to_html(t, o);
},
createBareCheckbox: function (o) {
@laser
laser / zip_in_state.coffee
Created February 6, 2014 20:05
zip in state validation
# in some shared file
SomeNamespace.isZipInState = (zip, state) ->
ranges = STATE_RANGES[state]
return true if ! ranges? || ! zip
zip = value.match(/^\D*(\d\D*){5}/)[0]
zip = parseInt zip.replace(/\D/g,'') if zip
return true if ! zip
results = []
for range in ranges
do (range) ->
require 'active_record'
require 'barrister'
require 'pry'
require 'redis'
require 'erb'
# App
require './models.rb'
require './service.rb'