Skip to content

Instantly share code, notes, and snippets.

View razorcd's full-sized avatar

Cristian Dugacicu razorcd

View GitHub Profile
<!--
HTML5 data- attributes using RESTful approach
HTML5 specifies extensible attributes like data-foo=“bar” (or as in Twitter Bootstrap data-toggle=“modal”), which poses two problems for Rails.
First, if you’re using symbol notation in link_to (for instance) to specify attributes, this fails (dash is not a valid symbol character), so:
-->
<% link_to('Edit', '../main.html', :class => "btn", :data-toggle => "modal") %> <!-- INVALID!! -->
<!--
There are two solutions:
bm = ->(counter=1) {
Benchmark.measure do
counter.times do |i|
Sponsorship.joins(:sponsor, :orphan).
where("sponsor_id = ?",1).
select("orphans.name as orphans_name, orphans.date_of_birth as orphans_date_of_birth, orphans.gender as orphans_gender").
to_a
# puts i
end
end
@razorcd
razorcd / custom_model_validator.rb
Created March 11, 2015 18:36
Custom model validators in Rails
#app/models/validators/valid_date_presence_validator.rb
class ValidDatePresenceValidator < ActiveModel::EachValidator
include DateHelpers
def validate_each(record, attribute, value)
unless valid_date? value
record.errors[attribute] << ('is not a valid date')
end
end
@razorcd
razorcd / rspec_custojm_matcher.rb
Created March 11, 2015 18:38
Rspec custom matcher
#spec/support/model_helpers.rb
# use like this:
# it { is_expected.to have_validation ValidDatePresenceValidator,
# :on => :start_date,
# :options => [:allow_blank, :allow_nil]
# }
RSpec::Matchers.define :have_validation do |validator, params|
match do |model|
my_validators = model.class.validators.select { |v| v.class == validator and v.attributes.include? params[:on] }
my_validators = validators.select { |v| params[:options].all? { |po| v.options.any? { |vo| vo == po } } } if params[:options]
@razorcd
razorcd / restore_pg_dump.sh
Last active August 29, 2015 14:17
restore PG db dump
pg_restore -vwc -U postgres -d database_name file.dump
@razorcd
razorcd / gist:3722a9e8683f416c0aed
Last active August 29, 2015 14:20
Class Specialisations (Composition + Dependency injection) by Sandi Metz
# Class Specialisations (Composition + Dependency injection)
class House
DATA = [1,2,3,4,5,6]
attr_reader :data
def initialize(orderer: DefaultOrderer.new, formatter: DefaultFormatter.new)
# @data = formatter.format(orderer.order(DATA))
formatted_data = formatter.format(DATA)
@data = orderer.order(formatted_data)
@razorcd
razorcd / gist:a5d803b4b4abd55edfba
Created September 7, 2015 18:27
Swap on ubuntu
Check free mem:
free -m
Add swap:
```
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
```
1. install openjdk
`sudo apt-get install openjdk-7-jdk`
2. install `android sdk`
# download android sdk
wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
tar -xvf android-sdk_r24.2-linux.tgz
cd android-sdk-linux/tools
//simple
var var1 = 1;
var func1 = function(input) {
//var var2 = 2;
return input + var1; // + var2;
}
console.log(func1(1));
console.dir(func1);
@razorcd
razorcd / gist:ccaf14eb319be6ba1e80b7605683b6e7
Last active June 12, 2016 23:15
SOLID Class Principles
- Single Responsability - classes and methods should handle/do only one thing. Methods max 5 lines long, classes max 100 lines long.
- Open Closed - classes should be open for extension and closed for change
- Liskov Substitution - Having a main class and a subclass. Anywhere we use the main we should get same result by using the subclass.
- Interface Segragation - no client should be forced to depend on methods it does not use. Maybe class does not do only one thing? Split the class in more classes (and maybe add a facade).
- Dependency Inversion - Dont tight couple the classes by creating one instance inside another class. Inject them as dependencies when calling the method outside the class.
Use `A.new(b: B.new(5))` instead of `A.new(5)` where `class A; def initialize(i); @b= B.new(i); end`
- Law of Demeter - don't chain methods that could be changed in future. (except when methods returns self)
- Don't repeat yourself - reuse code