Projects
Open source projects I maintain across various platforms. For an interactive presentation of this list with useful filters, head over to galtzo.com.
activerecord-tablefree
ActiveRecord Tablefree Models provides a simple mixin for creating models that are not bound to the database. Take advantage of ActiveRecord features like validation, relationships, and nested_attributes.
View activerecord-tablefree blog →activerecord-transactionable
Getting transactions right is hard, and this gem makes it easier.
View activerecord-transactionable blog →activesupport-broadcast_logger
Rails v8 ActiveSupport::BroadcastLogger, fixed & backported to Rails v5.2+ & Ruby 2.7+
View activesupport-broadcast_logger blog →activesupport-logger
Rails v8 ActiveSupport::Logger backported to Rails v5.2+ & Ruby 2.7+
View activesupport-logger blog →activesupport-tagged_logging
Rails v8 ActiveSupport::TaggedLogging, fixed & backported to Rails v5.2+ & Ruby 2.7+
View activesupport-tagged_logging blog →anonymous_active_record
Replacement for broken Class.new(ActiveRecord::Base)
View anonymous_active_record blog →skywalking-eyes
A full-featured license tool to check and fix license headers and resolve dependencies' licenses. I added compatibility with rubygems and bundler. Enhanced the license checker dataset to include all licenses on spdx.org. Added configurations for ASF Category A and B licenses. Enabled specification of FSF Free/Libre and OSI Approved requirements. Learn how to add it to your project!
View skywalking-eyes blog →appraisal2
Appraisal2 integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals."
View appraisal2 blog →archivist-client
archivist-client queries archive.org for book data and downloads some things.
View archivist-client blog →awesome-sponsorships
💖 An Open Source Funding How To Awesome List: checklist and inspiration to earn more as a FLOSS developer
View awesome-sponsorships blog →cacheable_flash
Allows caching of pages with flash messages by rendering flash messages from a cookie using JavaScript, instead of statically in your Rails view template. Flash contents are converted to JSON and placed in a cookie by an after_filter (default) or a Rack Middleware (option).
View cacheable_flash blog →capistrano_mailer
Capistrano Deployment Email Notification. Keep the whole team informed of each release!
View capistrano_mailer blog →celluloid-io-pg-listener
Asynchronously LISTEN for Postgresql NOTIFY messages with payloads and Do Something
View celluloid-io-pg-listener blog →controller_validator
Use the familiar ActiveModel::Errors pattern for controller validations
View controller_validator blog →csv_pirate
CsvPirate is the easy way to create a CSV of essentially anything in Ruby, in full pirate regalia. It works better if you are wearing a tricorne!
View csv_pirate blog →debug_logging
Unobtrusive debug logging for Ruby. NO LITTERING. Automatically log selected methods and their arguments as they are called at runtime!
View debug_logging blog →destination_errors
Useful when a presenter deals with multiple objects that may enter into error states, and the errors need to be collected at a single point.
View destination_errors blog →dry_views
Provides extensions to ActionView::Helpers::CaptureHelper: content_for_with_default, no_content_for, and an enhanced content_for that plays nice with friends
View dry_views blog →dynamoid
Dynamoid is an ORM for Amazon's DynamoDB that supports offline development, associations, querying, and everything else you'd expect from an ActiveRecord-style replacement.
View dynamoid blog →flag_shih_tzu
Bit fields for ActiveRecord - store multiple boolean flags in a single integer column
View flag_shih_tzu blog →floss_funding
Help overlooked open source projects - the ones at the bottom of the stack, and the dev dependencies - by funding them.
View floss_funding blog →gem_bench
* Benchmark different versions of same or similar gems * Copy & Re-namespace any gem to benchmark side-by-side with `benchmarks-ips` * Enforce Gemfile version constraints * Regex search across all installed gem's source code to find issues quickly * Trim down app load times by keeping your worst players on the bench (useful for beating Heroku slug load time cutoff)
View gem_bench blog →gitmoji-regex
😜 A regular expression matching Gitmoji (a subset of Unicode Emoji) symbolsFund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View gitmoji-regex blog →humorous_log_formatter
Humorous Log Levels and Color For Rails. Customizable!
View humorous_log_formatter blog →include_with_respect
Find out if your Module include/extend hooks are misbehaving!
View include_with_respect blog →kettle-dev
🍲 Kettle::Dev is a meta tool from kettle-rb to streamline development and testing. Acts as a shim dependency, pulling in many other dependencies, to give you OOTB productivity with a RubyGem, or Ruby app project. Configures a complete set of Rake tasks, for all the libraries is brings in, so they arrive ready to go. Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View kettle-dev blog →kettle-soup-cover
A Covered Kettle of Test Coverage SOUP (Software of Unknown Provenance) Four-line SimpleCov config, w/ curated, opinionated, pre-configured, dependencies for every CI platform, batteries included.
View kettle-soup-cover blog →kettle-test
🍲 Kettle::Test is a meta tool from kettle-rb to streamline testing. Acts as a shim dependency, pulling in many other dependencies, to give you OOTB productivity with a RubyGem, or Ruby app project. Configures RSpec w/ syntactic sugar to make writing tests, and testing more scenarios, easier.Configures each dependency library for proper use in the test suite, so they arrive ready to go. Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View kettle-test blog →letter_group
Organize data results from raw sql queries (as with PGresult, or Dossier) intelligently.
View letter_group blog →library_tree
Builds a tree of module inclusion of a target module into other modules
View library_tree blog →logos
🪵 A resource for logos, with proper attribution information, including license and copyright, for open source projects I care about.
View logos blog →masq
Masq supports OpenID 2.0 and supports SReg, AX (fetch and store requests) and PAPE as well as some custom additions like multi-factor authentication using a yubikey
View masq blog →omniauth-identity
Traditional username/password based authentication system for OmniAuth
View omniauth-identity blog →omniauth-jwt2
Originally a fork. Has been merged back to the original gem.
View omniauth-jwt2 blog →open_id_authentication
Provides a thin wrapper around the excellent rack-openid2 gem.
View open_id_authentication blog →pretty_feed
PrettyFeed provides a modulizer you can include in a job, worker, class, rake task, etc, which allows for simple pass/fail logging colorization. Defaults are `truthy: 'green'` and `falsey: 'red'`.
View pretty_feed blog →rack-insight
Debugging toolbar for Rack applications implemented as middleware. Based on logical-insight and rack-bug.
View rack-insight blog →rack-toolbar
Provides an easy way to create Rack Middleware that injects things into the response body. Extracted from rack-insight.
View rack-toolbar blog →rails_env_local
If existing infrastructure for deployed environments has names that conflict with Rails' default non-deployed environments, e.g., "development" and "test", this gem allows renaming them locally. You can rename "development" to "localdev", for example, to prevent confusion. But before using this gem, consider whether renaming your existing environments to remove the conflict might be a better long-term solution.
View rails_env_local blog →react-rails-benchmark_renderer
Concern::Instrumentation Plugin for React::Rails Render Benchmarking with a reference implementation
View react-rails-benchmark_renderer blog →require_bench
Ruby app loading slowly, or never? Discover bootstrapping issues in Ruby by logging/benchmarking/timing-out/rescuing 'Kernel.require' & 'load'
View require_bench blog →resque
Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later.
View resque blog →resque-lonely_job
Ensures that for a given queue, only one worker is working on a job at any given time. Example: require 'resque/plugins/lonely_job' class StrictlySerialJob extend Resque::Plugins::LonelyJob @queue = :serial_work def self.perform # only one at a time in this block, no parallelism allowed for this # particular queue end end
View resque-lonely_job blog →resque-unique_at_runtime
Ensures that for a given queue, only one worker is working on a job at any given time. Example: require 'resque/plugins/unique_at_runtime' class StrictlySerialJob include Resque::Plugins::UniqueAtRuntime @queue = :serial_work def self.perform # only one at a time in this block, no parallelism allowed for this # particular queue end end
View resque-unique_at_runtime blog →resque-unique_by_arity
Configure resque-unique_in_queue and resque-unique_at_runtime uniqueness by arity of perform method, with automated cleanup tools
View resque-unique_by_arity blog →resque-unique_in_queue
A resque plugin that ensures job uniqueness at enqueue time.
View resque-unique_in_queue blog →rots
Ruby OpenID Test Server (ROTS) provides a basic OpenID server made in top of the Rack gem. With this small server, you can make dummy OpenID request for testing purposes, the success of the response will depend on a parameter given on the URL of the authentication request.
View rots blog →rspec-block_is_expected
subject { Integer(nil) }; it('raises') { block_is_expected.to raise_error(TypeError) }
View rspec-block_is_expected blog →rspec-pending_for
⏳️ Mark specs pending or skipped for specific Ruby engine (e.g. MRI or JRuby) & versions, or version ranges. Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View rspec-pending_for blog →rspec-stubbed_env
Stub or hide environment variables in a scoped context for testing stub_env('REDIS_URL' => 'redis://localhost:6379/') hide_env('SESSION_SECRET')
View rspec-stubbed_env blog →rubocop-lts
Configure RuboCop + a bevy of friends to gradually lint Ruby code
View rubocop-lts blog →rubocop-ruby1_8
Configure RuboCop + a bevy of friends to gradually lint Ruby 1.8 code
View rubocop-ruby1_8 blog →rubocop-ruby1_9
Configure RuboCop + a bevy of friends to gradually lint Ruby 1.9 code
View rubocop-ruby1_9 blog →rubocop-ruby2_0
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.0 code
View rubocop-ruby2_0 blog →rubocop-ruby2_1
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.1 code
View rubocop-ruby2_1 blog →rubocop-ruby2_2
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.2 code
View rubocop-ruby2_2 blog →rubocop-ruby2_3
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.3 code
View rubocop-ruby2_3 blog →rubocop-ruby2_4
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.4 code
View rubocop-ruby2_4 blog →rubocop-ruby2_5
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.5 code
View rubocop-ruby2_5 blog →rubocop-ruby2_6
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.6 code
View rubocop-ruby2_6 blog →rubocop-ruby2_7
Configure RuboCop + a bevy of friends to gradually lint Ruby 2.7 code
View rubocop-ruby2_7 blog →rubocop-ruby3_0
Configure RuboCop + a bevy of friends to gradually lint Ruby 3.0 code
View rubocop-ruby3_0 blog →rubocop-ruby3_1
Configure RuboCop + a bevy of friends to gradually lint Ruby 3.1 code
View rubocop-ruby3_1 blog →rubocop-ruby3_2
Configure RuboCop + a bevy of friends to gradually lint Ruby 3.2 code
View rubocop-ruby3_2 blog →sanitize_email
Email Condom for your Ruby Server. In Rails, Sinatra, et al, or simply the mail gem: Aids in development, testing, qa, and production troubleshooting of email issues without worrying that emails will get sent to actual live addresses.
View sanitize_email blog →service_actor-promptable
TTY Prompt plugin for your service objects for your application logic
View service_actor-promptable blog →shields-badge
Shields::Badge.gem_total_downloads(path_parameters: {gem: 'rails'}) => "[](https://rubygems.org/gems/rails)"
View shields-badge blog →shiftable
Move single records (has_one) or collections (has_many) from one parent (belongs_to) to another
View shiftable blog →silent_stream
🔕 (formerly) ActiveSupport Kernel Reporting Detritus with a few enhancementsFund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View silent_stream blog →simple_column-scopes
Dynamic modules which define dynamic methods for scopes based on a dynamic array of column names
View simple_column-scopes blog →spyke-connection_lambda
Dynamic Spyke API connection plugin for the Enterprise Cloud
View spyke-connection_lambda blog →stackable_flash
Allows flashes to stack intelligently, while preserving existing behavior of the Rails FlashHash
View stackable_flash blog →standard-rubocop-lts
Enables Ruby projects to more confidently support even the most finely-aged Rubies. Part of the rubocop-lts family.
View standard-rubocop-lts blog →status_tag
Provides content_tag_for method signature to create customizable and logic-gated labels from objects. Also includes a presenter base class to allow any Ruby web framework to create logic around HTML tags
View status_tag blog →stone_checksums
🗿 Generate both SHA256 & SHA512 checksums into the checksums directory, and git commit them. gem install stone_checksums Then, use the rake task or the script: rake build:generate_checksums gem_checksums Control options with ENV variables! Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View stone_checksums blog →strict_states
Safely access state machine states with guarantee that there are no typos. Compatible with all Ruby state machine libraries.
View strict_states blog →super_exception_notifier
In the Rails v2 era, this was a popular fork of exception_notification, with many extra features. It is now deprecated in favor of the original gem.
View super_exception_notifier blog →timecop-rspec
⌚️ Timecop::Rspec provides Timecop time-machines for RSpec that allow youto time-travel test examples, context/describes, and/or your entire test suite. Find out how your code will behave... in the future! Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev
View timecop-rspec blog →undrive_google
🏴 Liberate files from your Google Drive with transformations
View undrive_google blog →warden_oauth
warden_oauth will help you create oauth authentication strategies using the oauth helper method on the Warden::Manager config setup
View warden_oauth blog →