Skip to content

Instantly share code, notes, and snippets.

Avatar
😀

Jim Gay saturnflyer

😀
View GitHub Profile
@saturnflyer
saturnflyer / the_world_of_foos.rb
Last active Jul 16, 2019 — forked from zdennis/the_world_of_foos.rb
Given the below hierarchy how many ways can you think of to wrap the `Parent#foo` implementation so that `Grandchild1` and `Grandchild2` can have their own unique logic that executes after all of the mixin `foo`(s) but before the `Parent#foo` executes?
View the_world_of_foos.rb
module N
def foo
puts "N: foo"
super
end
end
module O
def foo
puts "O: foo"
@saturnflyer
saturnflyer / json-generator.rb
Last active May 24, 2017
Using casting to apply different behaviors to an object for generating JSON
View json-generator.rb
require 'json'
require 'casting'
module Names
def names
"names here"
end
end
module Secrets
@saturnflyer
saturnflyer / prepended.rb
Last active May 11, 2017 — forked from cmar/prepended.rb
example of prepended class methods
View prepended.rb
class Foo
def self.say
p "hello from Foo"
end
end
module Bar
def say
super
p "hello from Bar"
View modulemethods.rb
module Foo1
def self.bar
"Yolo"
end
end
"Foo1.bar => #{Foo1.bar}" # => "Foo1.bar => Yolo"
module Foo2
def bar # !> previous definition of bar was here
"Yolo"
@saturnflyer
saturnflyer / namespace.rb
Last active Jan 13, 2016
ability to create classes and modules in a namespace
View namespace.rb
module Namespace
class Manager
def initialize(namespace)
@managed = namespace
end
def create_module(name, &block)
mod = Module.new(&block)
@managed.const_set(name, mod)
mod
View model_feature.rb
# This is designed to be used in cell classes but will work with any class
# which has a 'model' method.
#
# Example:
#
# class UserCell < Cell::ViewModel
# extend ModelFeature
#
# model_feature :name
# end
View gist:37d892231b1e89516257
class Something
def self.protector(name, &block)
begin
call_mod = self.const_get(:ExternalSystemCalls, false)
rescue NameError
call_mod = Module.new
const_set(:ExternalSystemCalls, call_mod)
include call_mod
end
begin
View gist:a11515249e8d49c9bc38
<div rel="warning-record">
<p>Warning text... <span rel="which-field">1</span> of 3</p>
</div>
View gist:2ead89f0cb8b5b1f1d41
require 'resolv'
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if Resolv::DNS.new.getresources(value.split("@").last, Resolv::DNS::Resource::IN::MX).empty?
record.errors[attribute] << (options[:message] || "does not have a valid domain")
end
rescue Resolv::ResolvError, Resolv::ResolvTimeout
record.errors[attribute] << (options[:message] || "does not have a valid domain")
end
View meta.rb
mod = Module.new
mod.module_eval %{
def fill_out_#{name}(value)
checkbox = find(:#{name})
if (#{name}_checked_values.include?(value) && !checkbox.selected?) ||
(#{name}_unchecked_values.include?(value) && checkbox.selected?)
checkbox.click
end
end