After modifying an object and after saving to the database, or within after_save:
| Rails <= 5 | Rails >= 5.1 |
|---|---|
| attribute_changed? | saved_change_to_attribute? |
| changed? | saved_changes? |
| changes | saved_changes |
| attribute_was | attribute_before_last_save |
| def real_csrf_token(token) | |
| Base64.strict_decode64(token) | |
| end | |
| def xor_byte_strings(s1, s2) | |
| s2_bytes = s2.bytes | |
| s1.each_byte.with_index { |c1, i| s2_bytes[i] ^= c1 } | |
| s2_bytes.pack("C*") | |
| end |
| #!/bin/bash | |
| sudo kextunload /System/Library/Extensions/AppleHDA.kext | |
| sudo kextload /System/Library/Extensions/AppleHDA.kext |
| # If you get "Inappropriate ioctl for device" when decrypting | |
| # Thanks to https://github.com/keybase/keybase-issues/issues/2798 | |
| export GPG_TTY=$(tty) | |
| #!/bin/bash | |
| parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill |
| # From https://github.com/rails/rails/issues/20606#issuecomment-113323102 | |
| # Almost good, but I don't think it handles the case of promoting an | |
| # existing location to being the primary location correctly in some cases | |
| class Organization < ActiveRecord::Base | |
| has_many :locations, dependent: :destroy, autosave: true # autosave necessary for the importer | |
| has_one :primary_location, -> { where(locations: { primary: true }) }, class_name: "Location", autosave: true | |
| # Override getter to fix issue with Rails not reloading the primary_location after resetting it to nil | |
| def primary_location |
| http://stackoverflow.com/questions/22667401/postgres-json-data-type-rails-query | |
| http://stackoverflow.com/questions/40702813/query-on-postgres-json-array-field-in-rails | |
| #payload: [{"kind"=>"person"}] | |
| Segment.where("payload @> ?", [{kind: "person"}].to_json) | |
| #data: {"interest"=>["music", "movies", "programming"]} | |
| Segment.where("data @> ?", {"interest": ["music", "movies", "programming"]}.to_json) | |
| Segment.where("data #>> '{interest, 1}' = 'movies' ") | |
| Segment.where("jsonb_array_length(data->'interest') > 1") |
| module Where | |
| class <<self | |
| attr_accessor :editor | |
| def is_proc(proc) | |
| source_location(proc) | |
| end | |
| def is_method(klass, method_name) | |
| source_location(klass.method(method_name)) |
| /** | |
| * Retrieves all the rows in the active spreadsheet that contain data and logs the | |
| * values for each row. | |
| * For more information on using the Spreadsheet API, see | |
| * https://developers.google.com/apps-script/service_spreadsheet | |
| */ | |
| function readRows() { | |
| var sheet = SpreadsheetApp.getActiveSheet(); | |
| var rows = sheet.getDataRange(); | |
| var numRows = rows.getNumRows(); |