This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Method::Chain | |
def initialize(descriptor, **options) | |
@descriptor, @options = descriptor, options | |
end | |
def self.define(context, *methods, &block) | |
instance = new Definition.new(&block) | |
instance.apply context, *methods | |
instance | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# app/controllers/feeds_controller.rb | |
class FeedsController < ApplicationController | |
before_action :set_feed | |
def show | |
# Not sure if I like this but there could be something similar to interactors? | |
action do | |
_1.success.html { redirect_to @feed, notice: "Success" } | |
_1.success.json | |
_1.unprocessible { render :new } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Add a module builder that'll mask each class method? | |
def self.required_condition_via(scopes) | |
prepend RequiredCondition.new(scopes) | |
end | |
module RequiredCondition | |
def initialize(scopes) | |
@scopes = scopes | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# All these requires are just for running via `irb`, if using `bin/rails console` you probably just need the method. | |
require "active_support/all" # Got an inflector NoMethodError, so I'm just being lazy here. | |
require "action_dispatch" | |
require "action_dispatch/routing/route_set" | |
require "action_dispatch/routing/inspector" | |
require "action_controller" # For the ActionController::Parameters autoload, which any route helper uses. | |
# Console helper play around with the routing DSL and tweak an individual route you're building. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# In Active Record, class method scopes have to remember to return `all` otherwise they're break the call chain. | |
# | |
# def self.some_scope = nil # Assume more complex conditions that would result in a branch that accidentally didn't return `all`. | |
# | |
# User.some_scope.first # => raises NoMethodError `first' for NilClass | |
# | |
# Note: Active Record ensures a `scope :some_scope, -> { nil }` returns `all` via `|| all` here: | |
# https://github.com/rails/rails/blob/c704da66de59262f4e88824589ae4eddefb6ed4a/activerecord/lib/active_record/scoping/named.rb#L181 | |
# | |
# Now, this extension allows you to mark a class method as a scope, so you don't have to remember and the code is more clearly demarcated too. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Ruby's Enumerable has `partition` to split it into true and false groups. | |
evens, odds = 1.upto(5).partition(&:even?) | |
evens # => [ 2, 4 ] | |
odds # => [ 1, 3, 5 ] | |
# But what if you have more than 2 segments? Well, here I'm playing with one way to do it. | |
# Respectively outputs: | |
# [[:first, :first], [:second, :second], [:third, :third]] | |
# [[:first, :first], [:second, :third, :second, :third]] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# minitest uses Gem.find_files, so this should be somewhere on the load path: | |
# $LOAD_PATH/minitest/after_runnable_plugin.rb | |
class Minitest | |
class AfterRunnableReporter < AbstractReporter | |
def initialize(after_runnable, methods) | |
@after_runnable, @methods = after_runnable, methods | |
end | |
def prerecord(klass, name) | |
@methods[klass].delete(name) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Download this to your Rails app directory and run with: | |
# bin/rails runner upgrade_encrypted_secrets.rb | |
# Everything below here is private API and not something your app should use. | |
Rails::Secrets.singleton_class.prepend Module.new { | |
def decrypt(data) | |
cipher = OpenSSL::Cipher.new("aes-256-cbc").decrypt | |
cipher.key = key | |
cipher.update(data) << cipher.final | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This: | |
class String | |
def to_proc | |
split('.').to_proc | |
end | |
end | |
class Array | |
def to_proc | |
lambda do |obj| |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "Event.h" | |
#import "AFNetworking.h" // it does not depend of AFNetworking at the moment, so I'd delete it | |
@implementation Event | |
// change the id here to instancetype, read more here http://nshipster.com/instancetype/ | |
- (id)init | |
{ | |
return [self initWithTitle:@"defaultTitle" detail:@"defaultDetail"]; // don't need to assign self | |
} |