Skip to content

Instantly share code, notes, and snippets.

Avatar

Andrey Novikov Envek

View GitHub Profile
@Envek
Envek / true_money.rb
Last active Jun 24, 2020
Example of “true money” PostgreSQL composite type including both amoiunt and currency and how to work with it in Ruby on Rails
View true_money.rb
# Example of custom PostgreSQL composite type support
# Works with Rails 6.0, also should work with Rails 5.2
# Place this file to config/initializers/
gem "money"
require "money"
# Subclass Money class just to get pretty output in rails console
class TrueMoney < Money
def inspect
@Envek
Envek / Dockerfile
Created Feb 13, 2019
Minimal image to be used as Kubernetes default backend as maintenance page
View Dockerfile
FROM nginx:stable-alpine
COPY default.conf /etc/nginx/conf.d/default.conf
COPY maintenance.html /usr/share/nginx/html/
View .rubocop.yml
AllCops:
TargetRubyVersion: 2.5
Style/AsciiComments:
Enabled: false
Metrics/LineLength:
Max: 120
@Envek
Envek / rescue-from-git-push-force.md
Last active Nov 25, 2020
Откат ошибочной команды git push --force
View rescue-from-git-push-force.md

Откат ошибочной команды git push --force

Иногда при работе с несколькими удалёнными репозиториями в git, может произойти страшное: git push --force в не тот remote и/или не в ту ветку.

Такое может случиться, например, если вы используете [Deis], в котором деплой запускается при git push нужного коммита в сборщик, когда при отладке деплоя после очередного git commit --amend по запарке вместо git push deis master --force делается просто git push --force. Упс.

Как результат, последние коммиты коллег безвозвратно потеряны, и вы чувствуете неотвратимость их ярости…

Но это git, а значит всё можно починить!

@Envek
Envek / rails_time_with_offset_test.rb
Last active Sep 2, 2015
Bug report of incorrect parsing of time when assigning to time attributes.
View rails_time_with_offset_test.rb
# For Ruby on Rails master branch
begin
require 'bundler/inline'
rescue LoadError => e
$stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
raise e
end
gemfile(true) do
@Envek
Envek / keybase.md
Created May 26, 2015
Identity proof for keybase.io
View keybase.md

Keybase proof

I hereby claim:

  • I am Envek on github.
  • I am envek (https://keybase.io/envek) on keybase.
  • I have a public key whose fingerprint is 5439 E3DC F03F 4317 524E E679 301A D540 0512 05A2

To claim this, I am signing this object:

@Envek
Envek / dnsmaster-update.sh
Last active Aug 12, 2017
Updates A and/or AAAA DNS records in DNS Master provider of Dynamic DNS. Works on Linux and OS X.
View dnsmaster-update.sh
#!/bin/sh
usage() {
echo "DNS Master DynDNS update script. Updates A and/or AAAA records with public IPs that you have on your interfaces."
echo "Usage: $0 -h hostname[,hostname…] -u username -p password"
}
if [ $# -eq 0 ]; then usage; exit 1; fi
USERNAME=""
@Envek
Envek / Gemfile
Created Feb 3, 2015
Temporary script to get GLONASS/GPS data from Skuapso PSQL module: https://github.com/skuapso/psql
View Gemfile
source "https://rubygems.org"
gem "pg"
gem "activesupport"
@Envek
Envek / timezones.ru.rb
Last active Jul 16, 2019
Full list of russian time zones for Ruby on Rails
View timezones.ru.rb
# Full list of Russian Federation time zones with helper to get this list.
# Place this file in config/initializers/timezones.ru.rb
class ActiveSupport::TimeZone
@country_zones = ThreadSafe::Cache.new
def self.country_zones(country_code)
code = country_code.to_s.upcase
@country_zones[code] ||=
TZInfo::Country.get(code).zone_identifiers.select do |tz_id|
@Envek
Envek / pg_interval_support_4_1.rb
Last active Nov 11, 2020
Enables PostgreSQL interval datatype support (as ActiveSupport::Duration) in Ruby on Rails from 4.1 to 6.0
View pg_interval_support_4_1.rb
# Enables PostgreSQL interval datatype support (as ActiveSupport::Duration) in Ruby on Rails 4.1.
# Based on https://gist.github.com/clarkdave/6529610
require 'active_support/duration'
# add a native DB type of :interval
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:interval] = { name: 'interval' }
# add the interval type to the simplified_type list. because this method is a case statement
# we can't inject anything into it, so we create an alias around it so calls to it will call
You can’t perform that action at this time.