Skip to content

Instantly share code, notes, and snippets.

View mxgrn's full-sized avatar

Max Gorin mxgrn

View GitHub Profile
var gulp = require('gulp'),
gutil = require('gulp-util'),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
clean = require('gulp-clean'),

Deploy Rails app to digitalocean with nginx, unicorn, capistrano & postgres

Create droplet of your liking (ubuntu 12.10 x32)

ssh to root in terminal with your server ip

ssh root@123.123.123.123

Add ssh fingerprint and enter password provided in email

/*
CheckColumn plugin from the "Editable Grid" example on http://extjs.com/deploy/dev/examples/
The problem with it is that when a new record is added to the store, the corresponding field value
is set to an empty string, instead of being set to false. Here's the fix for it.
*/
Ext.grid.CheckColumn = function(config){
Ext.apply(this, config);
if(!this.id){
this.id = Ext.id();
}
module Netzke
class TreeNavigator < BorderLayoutPanel
# BorderLayoutPanel's regions
def initial_aggregatees
{
:west => {
:widget_class_name => "TreePanel",
:data_class_name => config[:tree_data_class_name],
:region_config => {
class Netzke::TreePanel < Netzke::Base
api :get_children
def self.js_base_class
"Ext.tree.TreePanel"
end
def self.js_extend_properties
{
:root => {:text => '/', :id => 'source'}
# Example of Netzke Helper
module Netzke::Helpers::GridPanelClerk
# which model's methods should be used as virtual column, along with configuration
def self.virtual_attributes
[:name]
end
# preconfigure some columns
def self.attributes_config
{

= General suggestions:

  • In the beginning, keep the current method naming to avoid confusion (and to be able to search on method names), but mark in the comments what's probably to be renamed.
  • In most cases it would be hard to simplify things without a deep refactor. I may forget why I did something one way or another, but each time I decide "this should not be needed", sooner or later it proves needed in a specific scenario... Tests would be of great help here.

= Core

  • Class-level configuration:
    • Netzke::Base.config and Netzke::GridPanel.config are decoupled.
  • Example of usage:
module Netzke
class FileUploader < FormPanel
INITIAL_UPLOAD_FIELDS_NUMBER = 5
# Extra javascripts
def self.include_js
[
"#{File.dirname(__FILE__)}/file_uploader_extras/file_uploader.js"
]
end
// in grid_panel_pre.js:
// React on before edit event to set the recordId property in the editor
this.on('beforeedit', function(e){
e.grid.getColumnModel().getCellEditor(e.column, e.record).field.recordId = e.record.id;
});
@mxgrn
mxgrn / gist:638919
Created October 21, 2010 17:30
Wrong scope of yield?
# (Ruby version: 1.9.2)
#
##### A million-dollar question: why the following isn't working?
#
#
class A
def self.metamethod(name)
define_method(name) do
yield