Rails Console Utils
ConsoleUtils gem provides several handy tools to use in Rails Console. It includes following modules:
- RequestUtils the collection of methods to make either local or remote JSON API requests. Provides response body formatting and auto-token authentication feature (currently supports only params tokens).
- BenchUtils benchmark shorthands
- ActiveRecordUtils useful console methods for ActiveRecord::Base models
- OtherUtils uncategorized methods
The gem was collected from several very (very-very) raw modules used in different projects in different time. The code was refactored, but currently there are no specs or complete docs (sowwy ^_^), but they are coming soon.
Installation
Add this lines to your application's Gemfile.
Note: when using with pry-rails gem, make sure to depend it before this gem.
group :development do
## to enable inspecting procs' sources, uncomment next lines:
# gem 'term-ansicolor', '1.1.5'
# gem 'sourcify', '~> 0.6.0.rc4', require: false
## when using `pry-rails`, it should be somewhere here:
# gem 'pry-rails'
gem 'console_utils'
endAnd then execute:
$ bundle
Configuration
Parameters are changable by the config.console_utils key inside the app's configuration block. It is also available as ConsoleUtils.configure(&block) in the custom initializer file.
Example part of config/environments/development.rb:
Rails.application.configure do
# ...
if config.console_utils
config.console_utils.json_formatter = :jq
config.console_utils.remote_endpoint = Settings.base_url
end
endOptions:
-
curl_bin- Binary path to curl (using in remote requests). (default:"curl") -
curl_silence- Disable print out generated curl command with remote requests. (default:false) -
default_token- A plain string of the default token used to authorize user (default:nil) -
default_uid- ID of the user which will be used by default in requests (default:1) -
disabled_modules- An array of disabled modules' names (default:[]) -
jq_command- Command for jq json formatter (default:"jq . -C") -
json_formatter- JSON formatter used in API request helpers (:defaultor:jq) -
logger- Output logger (Rails.logger by default) -
remote_endpoint- Remote endpoint used in remote API request helpers (default:"http://example.com") -
token_param- A name of the request parameter used to authorize user by a token (default::token) -
user_model_name- A name of user's model (default::User) -
user_primary_key- A primary key of user's model (default::id) -
user_token_column- A column name with a user's token. Using by request tools. (default::auth_token) -
request_auto_auth- Enable the auth automator with theexap(default:true) -
auth_automator- Specifies a callable object, which will hook requests with credentials. There are two built-in implementations: the default oneConsoleUtils::RequestUtils::DefaultAuthAutomatorand theConsoleUtils::RequestUtils::SimpleTokenAutomator, which is useful when using thesimple_token_automatorgem.
RequestUtils
Includes requesters to a local (exap) or a remote (remo) project's API. There are many customizable settings in configuration, so it's better to check them before playing with this feature.
The following examples are actual to both of requesters - just swap exap to remo and it will work.
Appends auth token of default user to params, makes request and prints formatted response:
exap.get("api/posts.json").previewAuthorize user #42, also copy formatted response to the pasteboard:
exap.get("api/posts.json", 42).preview(&:pbcopy)Authorize random user:
exap.get("api/comments.json", :any).previewUse additional request params (skip the second parameter to use default user), don't print response body:
exap.put("api/account.json", 42, user: { name: "Anton" })Skip auto-fetching user's token:
exap.post("api/signup.json", nil, user: { name: "Guest" }).previewNote: The remo requester supports the auto-token feature, but still fetchs tokens from a local DB.
BenchUtils
Access to globally shared Benchmark.ips object, which works out of a block and allows to change the stack “on the fly” and to keep the result during the work.
Just add reports:
chips.("merge") { the_hash.merge(other_hash) }
chips.("merge!") { the_hash.merge!(other_hash) }
# => x.report(..) { ... }... and compare!
chips.compare! # compares two reports: "merge" and "merge!"And add more reports after:
chips.("deep_merge") { the_hash.deep_merge(other_hash) }... or change the existing one:
chips.("merge!") { the_hash.deep_merge!(other_hash) }... and compare again!
chips.compare! # compare three reports: "merge", changed "merge!" and new "deep_merge"You can remove report by a label:
chips.del("merge!")Split to a separate Chips object:
other_chips = chips.split!("deep_merge") # split reports to separate hashWell, to be honest, it is just a delegator of a reports hash, so:
chips # => { "merge" => proc { ... }, ... }
chips["merge"] # => proc { ... }
chips.clear # clear all reportsActiveRecordUtils
Includes methods to query a random record:
User.random # => reorder("RANDOM()")
User.anyone # get a random record (like [].sample method)
User.active.anyone # works under a scope - get a random active record
User.anyid # get an id of some existing recordAlso provides shorthand to find any user by id: usr(id)
OtherUtils
clr()
Pastel shorthand
shutting(:engine_key[, to: logger_level]) {}
Shuts up the logger of a specified Rails engine for a given key (:rails, :record, :controller or :view).
shutting(:view, to: :warn) do
ActionView.logger.info("not printed")
ActionView.logger.warn("printed")
Rails.logger.info("printed")
end
shutting(:rails, to: Logger::INFO) { ... }
shutting(:record, to: 1) { ... }Array#to_proc
Oh no, core class extension!
Converts array to proc with chained calls of items. Every item can be either a method name or an array containing a method name and args.
the_hash = { :one => "One", :two => "Two", :three => 3, :four => nil }
the_hash.select(&[[:[], 1], [:is_a?, String]])
# => { :one => "One", :two => "Two" }Pretty good, huh? ;)
See again:
mapping = { "one" => "1", "two" => "2", "" => "0" }
the_hash.values.map(&[:to_s, :downcase, [:sub, /one|two|$^/, mapping]])
# => ["1", "2", "3", "0"]Avoid to use it in production, seriously.
AwesomePrint::Proc
Just prints proc's source when inspecting proc. Sourcify is required, see the Installation section for notes.
Development
After checking out the repo, run bin/setup to install dependencies. Then, run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release to create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
- Fork it ( https://github.com/estum/console_utils/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request