{"id":13400372,"url":"https://github.com/pry/pry","last_synced_at":"2025-12-27T06:42:10.264Z","repository":{"id":424339,"uuid":"1145832","full_name":"pry/pry","owner":"pry","description":"A runtime developer console and IRB alternative with powerful introspection capabilities.","archived":false,"fork":false,"pushed_at":"2025-04-21T14:55:30.000Z","size":8640,"stargazers_count":6800,"open_issues_count":130,"forks_count":604,"subscribers_count":113,"default_branch":"master","last_synced_at":"2025-09-05T09:02:25.015Z","etag":null,"topics":["console","debugger","introspection","irb","pry","reflection","ruby","runtime"],"latest_commit_sha":null,"homepage":"http://pry.github.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":"","scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pry.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2010-12-07T08:10:47.000Z","updated_at":"2025-09-04T13:48:26.000Z","dependencies_parsed_at":"2024-02-25T03:23:26.808Z","dependency_job_id":"27d47a08-e5e7-4742-a77c-c4cc62170659","html_url":"https://github.com/pry/pry","commit_stats":{"total_commits":3823,"total_committers":221,"mean_commits":17.29864253393665,"dds":0.717499346063301,"last_synced_commit":"52d1489b8912c208366730004c65bb05cabf2e2a"},"previous_names":[],"tags_count":78,"template":false,"template_full_name":null,"purl":"pkg:github/pry/pry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pry%2Fpry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pry%2Fpry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pry%2Fpry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pry%2Fpry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pry","download_url":"https://codeload.github.com/pry/pry/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pry%2Fpry/sbom","scorecard":{"id":747670,"data":{"date":"2025-08-11","repo":{"name":"github.com/pry/pry","commit":"80816f596774d00afdc81a555724b0819bf26782"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Code-Review","score":2,"reason":"Found 3/12 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/pry/pry/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/pry/pry/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/pry/pry/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/pry/pry/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:latest to ubuntu:latest@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T19:19:17.598Z","repository_id":424339,"created_at":"2025-08-22T19:19:17.599Z","updated_at":"2025-08-22T19:19:17.599Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273774884,"owners_count":25165740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","debugger","introspection","irb","pry","reflection","ruby","runtime"],"created_at":"2024-07-30T19:00:51.289Z","updated_at":"2025-12-27T06:42:10.189Z","avatar_url":"https://github.com/pry.png","language":"Ruby","readme":"Pry\n===\n\n[![Pry Build Status](https://github.com/pry/pry/workflows/pry/badge.svg)](https://github.com/pry/pry/actions)\n[![Code Climate](https://codeclimate.com/github/pry/pry.svg)](https://codeclimate.com/github/pry/pry)\n[![Gem Version](https://badge.fury.io/rb/pry.svg)](https://badge.fury.io/rb/pry)\n[![Documentation Status](https://inch-ci.org/github/pry/pry.svg?branch=master)](https://inch-ci.org/github/pry/pry)\n[![Downloads](https://img.shields.io/gem/dt/pry.svg?style=flat)](https://rubygems.org/gems/pry)\n\n![Pry logo](https://www.dropbox.com/s/zp8o63kquby2rln/pry_logo_350.png?raw=1)\n\n© John Mair ([banisterfiend](https://twitter.com/banisterfiend)) 2010\u003cbr\u003e (Creator)\n\n© Kyrylo Silin ([kyrylosilin](https://twitter.com/kyrylosilin)) 2010\u003cbr\u003e (Maintainer)\n\n**Alumni:**\n\n* Conrad Irwin\n* Ryan Fitzgerald\n* Robert Gleeson\n\n**Links:**\n\n* https://pry.github.io/\n* [YARD API documentation](https://www.rubydoc.info/gems/pry)\n* [Wiki](https://github.com/pry/pry/wiki)\n\nTable of Contents\n=================\n\n* [Introduction](#introduction)\n* [Key features](#key-features)\n* [Installation](#installation)\n* [Overview](#overview)\n   * [Commands](#commands)\n   * [Navigating around state](#navigating-around-state)\n   * [Runtime invocation](#runtime-invocation)\n   * [Command Shell Integration](#command-shell-integration)\n   * [Code Browsing](#code-browsing)\n   * [Documentation Browsing](#documentation-browsing)\n   * [Edit methods](#edit-methods)\n   * [Live Help System](#live-help-system)\n   * [Use Pry as your Rails Console](#use-pry-as-your-rails-console)\n   * [Syntax Highlighting](#syntax-highlighting)\n* [Supported Rubies](#supported-rubies)\n* [Contact](#contact)\n* [License](#license)\n* [Contributors](#contributors)\n\nIntroduction\n------------\n\nPry is a runtime developer console and IRB alternative with powerful\nintrospection capabilities. Pry aims to be more than an IRB replacement. It is\nan attempt to bring REPL driven programming to the Ruby language.\n\nKey features\n------------\n\n* Source code browsing (including core C source with the pry-doc gem)\n* Documentation browsing\n* Live help system\n* Open methods in editors (`edit Class#method`)\n* Syntax highlighting\n* Command shell integration (start editors, run git, and rake from within Pry)\n* Gist integration\n* Navigation around state (`cd`, `ls` and friends)\n* Runtime invocation (use Pry as a developer console or debugger)\n* Exotic object support (BasicObject instances, IClasses, ...)\n* A powerful and flexible command system\n* Ability to view and replay history\n* Many convenience commands inspired by IPython, Smalltalk and other advanced\n  REPLs\n* A wide-range number of\n  [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide\n  remote sessions, full debugging functionality, and more.\n\nInstallation\n------------\n\n### Bundler\n\n```ruby\ngem 'pry', '~\u003e 0.15.0'\n```\n\n### Manual\n\n```sh\ngem install pry\n```\n\nOverview\n--------\n\nPry is fairly flexible and allows significant user\n[customization](https://github.com/pry/pry/wiki/Customization-and-configuration).\nIt is trivial to read from any object that has a `readline` method and\nwrite to any object that has a `puts` method. Many other aspects of Pry are\nalso configurable, making it a good choice for implementing custom shells.\n\nPry comes with an executable so it can be invoked at the command line. Just\nenter `pry` to start. A `pryrc` file in `$XDG_CONFIG_HOME/pry/` or the user's\nhome directory will be loaded if it exists. Type `pry --help` at the command\nline for more information.\n\n### Commands\n\nNearly every piece of functionality in a Pry session is implemented as a\ncommand. Commands are not methods and must start at the beginning of a line,\nwith no whitespace in between. Commands support a flexible syntax and allow\n'options' in the same way as shell commands, for example the following Pry\ncommand will show a list of all private instance methods (in scope) that begin\nwith 'pa'\n\n```ruby\npry(YARD::Parser::SourceParser):5\u003e ls -Mp --grep ^pa\nYARD::Parser::SourceParser#methods: parse  parser_class  parser_type  parser_type=  parser_type_for_filename\n```\n\n### Navigating around state\n\nPry allows us to pop in and out of different scopes (objects) using the `cd`\ncommand. This enables us to explore the run-time view of a program or\nlibrary. To view which variables and methods are available within a particular\nscope we use the versatile [ls\ncommand.](https://gist.github.com/c0fc686ef923c8b87715)\n\nHere we will begin Pry at top-level, then Pry on a class and then on an instance\nvariable inside that class:\n\n```ruby\npry(main)\u003e class Hello\npry(main)*   @x = 20\npry(main)* end\n=\u003e 20\npry(main)\u003e cd Hello\npry(Hello):1\u003e ls -i\ninstance variables: @x\npry(Hello):1\u003e cd @x\npry(20):2\u003e self + 10\n=\u003e 30\npry(20):2\u003e cd ..\npry(Hello):1\u003e cd ..\npry(main)\u003e cd ..\n```\n\nThe number after the `:` in the pry prompt indicates the nesting level. To\ndisplay more information about nesting, use the `nesting` command. E.g\n\n```ruby\npry(\"friend\"):3\u003e nesting\nNesting status:\n0. main (Pry top level)\n1. Hello\n2. 100\n3. \"friend\"\n=\u003e nil\n```\n\nWe can then jump back to any of the previous nesting levels by using the\n`jump-to` command:\n\n```ruby\npry(\"friend\"):3\u003e jump-to 1\n=\u003e 100\npry(Hello):1\u003e\n```\n\n### Runtime invocation\n\nPry can be invoked in the middle of a running program. It opens a Pry session at\nthe point it's called and makes all program state at that point available. It\ncan be invoked on any object using the `my_object.pry` syntax or on the current\nbinding (or any binding) using `binding.pry`. The Pry session will then begin\nwithin the scope of the object (or binding). When the session ends the program\ncontinues with any modifications you made to it.\n\nThis functionality can be used for such things as: debugging, implementing\ndeveloper consoles and applying hot patches.\n\ncode:\n\n```ruby\n# test.rb\nrequire 'pry'\n\nclass A\n  def hello() puts \"hello world!\" end\nend\n\na = A.new\n\n# start a REPL session\nbinding.pry\n\n# program resumes here (after pry session)\nputs \"program resumes here.\"\n```\n\nPry session:\n\n```ruby\npry(main)\u003e a.hello\nhello world!\n=\u003e nil\npry(main)\u003e def a.goodbye\npry(main)*   puts \"goodbye cruel world!\"\npry(main)* end\n=\u003e :goodbye\npry(main)\u003e a.goodbye\ngoodbye cruel world!\n=\u003e nil\npry(main)\u003e exit\n\nprogram resumes here.\n```\n\n### Command Shell Integration\n\nA line of input that begins with a '.' will be forwarded to the command\nshell. This enables us to navigate the file system, spawn editors, and run git\nand rake directly from within Pry.\n\nFurther, we can use the `shell-mode` command to incorporate the present working\ndirectory into the Pry prompt and bring in (limited at this stage, sorry) file\nname completion.  We can also interpolate Ruby code directly into the shell by\nusing the normal `#{}` string interpolation syntax.\n\nIn the code below we're going to switch to `shell-mode` and edit the `pryrc`\nfile. We'll then cat its contents and reload the file.\n\n```ruby\npry(main)\u003e shell-mode\npry main:/home/john/ruby/projects/pry $ .cd ~\npry main:/home/john $ .emacsclient .pryrc\npry main:/home/john $ .cat .pryrc\ndef hello_world\n  puts \"hello world!\"\nend\npry main:/home/john $ load \".pryrc\"\n=\u003e true\npry main:/home/john $ hello_world\nhello world!\n```\n\nWe can also interpolate Ruby code into the shell. In the example below we use\nthe shell command `cat` on a random file from the current directory and count\nthe number of lines in that file with `wc`:\n\n```ruby\npry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l\n44\n```\n\n### Code Browsing\n\nYou can browse method source code with the `show-source` command. Nearly all\nRuby methods (and some C methods, with the pry-doc gem) can have their source\nviewed. Code that is longer than a page is sent through a pager (such as less),\nand all code is properly syntax highlighted (even C code).\n\nThe `show-source` command accepts two syntaxes, the typical ri `Class#method`\nsyntax and also simply the name of a method that's in scope. You can optionally\npass the `-l` option to `show-source` to include line numbers in the output.\n\nIn the following example we will enter the `Pry` class, list the instance\nmethods beginning with 'se' and display the source code for the `set_last_result` method:\n\n```ruby\npry(main)\u003e cd Pry\npry(Pry):1\u003e ls -M --grep se\nPry#methods: raise_up  raise_up!  raise_up_common  reset_eval_string  select_prompt  set_last_result\npry(Pry):1\u003e show-source set_last_result -l\n\nFrom: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb:405:\nOwner: Pry\nVisibility: public\nSignature: set_last_result(result, code=?)\nNumber of lines: 6\n\n405: def set_last_result(result, code = \"\")\n406:   @last_result_is_exception = false\n407:   @output_ring \u003c\u003c result\n408:\n409:   self.last_result = result unless code =~ /\\A\\s*\\z/\n410: end\n```\n\nNote that we can also view C methods (from Ruby Core) using the\n`pry-doc` plugin; we also show off the alternate syntax for\n`show-source`:\n\n```ruby\npry(main)\u003e show-source Array#select\n\nFrom: array.c in Ruby Core (C Method):\nNumber of lines: 15\n\nstatic VALUE\nrb_ary_select(VALUE ary)\n{\n    VALUE result;\n    long i;\n\n    RETURN_ENUMERATOR(ary, 0, 0);\n    result = rb_ary_new2(RARRAY_LEN(ary));\n    for (i = 0; i \u003c RARRAY_LEN(ary); i++) {\n        if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {\n            rb_ary_push(result, rb_ary_elt(ary, i));\n        }\n    }\n    return result;\n}\n```\n\n### Documentation Browsing\n\nOne use-case for Pry is to explore a program at run-time by `cd`-ing in and out\nof objects and viewing and invoking methods. In the course of exploring it may\nbe useful to read the documentation for a specific method that you come\nacross. `show-source` command supports two syntaxes - the\nnormal `ri` syntax as well as accepting the name of any method that is currently\nin scope.\n\nThe Pry documentation system does not rely on pre-generated `rdoc` or `ri`,\ninstead it grabs the comments directly above the method on demand. This results\nin speedier documentation retrieval and allows the Pry system to retrieve\ndocumentation for methods that would not be picked up by `rdoc`. Pry also has a\nbasic understanding of both the rdoc and yard formats and will attempt to syntax\nhighlight the documentation appropriately.\n\nNonetheless, the `ri` functionality is very good and has an advantage over Pry's\nsystem in that it allows documentation lookup for classes as well as\nmethods. Pry therefore has good integration with `ri` through the `ri`\ncommand. The syntax for the command is exactly as it would be in command-line -\nso it is not necessary to quote strings.\n\nIn our example we will enter the `Gem` class and view the documentation for the\n`try_activate` method:\n\n```ruby\npry(main)\u003e cd Gem\npry(Gem):1\u003e show-source try_activate -d\n\nFrom: /Users/john/rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems.rb:194:\nOwner: #\u003cClass:Gem\u003e\nVisibility: public\nSignature: try_activate(path)\nNumber of lines: 28\n\nTry to activate a gem containing path. Returns true if\nactivation succeeded or wasn't needed because it was already\nactivated. Returns false if it can't find the path in a gem.\n\ndef self.try_activate(path)\n  # finds the _latest_ version... regardless of loaded specs and their deps\n  # if another gem had a requirement that would mean we shouldn't\n  # activate the latest version, then either it would already be activated\n  # or if it was ambiguous (and thus unresolved) the code in our custom\n  # require will try to activate the more specific version.\n\n  spec = Gem::Specification.find_by_path path\npry(Gem):1\u003e\n```\n\nWe can also use `ri` in the normal way:\n\n```ruby\npry(main) ri Array#each\n----------------------------------------------------------- Array#each\n     array.each {|item| block }   -\u003e   array\n------------------------------------------------------------------------\n     Calls _block_ once for each element in _self_, passing that element\n     as a parameter.\n\n        a = [ \"a\", \"b\", \"c\" ]\n        a.each {|x| print x, \" -- \" }\n\n     produces:\n\n        a -- b -- c --\n```\n\n### Edit methods\n\nYou can use `edit Class#method` or `edit my_method` (if the method is in scope)\nto open a method for editing directly in your favorite editor. Pry has knowledge\nof a few different editors and will attempt to open the file at the line the\nmethod is defined.\n\nYou can set the editor to use by assigning to the `Pry.editor`\naccessor. `Pry.editor` will default to `$EDITOR` or failing that will use `nano`\nas the backup default. The file that is edited will be automatically reloaded\nafter exiting the editor - reloading can be suppressed by passing the\n`--no-reload` option to `edit`\n\nIn the example below we will set our default editor to \"emacsclient\" and open\nthe `Pry#repl` method for editing:\n\n```ruby\npry(main)\u003e Pry.editor = \"emacsclient\"\npry(main)\u003e edit Pry#repl\n```\n\n### Live Help System\n\nMany other commands are available in Pry; to see the full list type `help` at\nthe prompt. A short description of each command is provided with basic\ninstructions for use; some commands have a more extensive help that can be\naccessed via typing `command_name --help`. A command will typically say in its\ndescription if the `--help` option is available.\n\n### Use Pry as your Rails Console\n\nYou can run a Pry console in your app's environment using Pry's `-r` flag:\n\n```sh\npry -r ./config/environment\n```\n\nOr start the rails console (`bin/rails console`) and then type `pry`.\n\nIt's also possible to use Pry as your Rails console by adding [the pry-rails\ngem](https://github.com/pry/pry-rails) to your Gemfile. This replaces the\ndefault console with Pry, in addition to loading the Rails console helpers and\nadding some useful Rails-specific commands.\n\n**Note that `pry-rails` is not currently maintained.**\n\nAlso check out the\n[wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)\nfor more information about integrating Pry with Rails.\n\n### Syntax Highlighting\n\nSyntax highlighting is on by default in Pry. If you want to change the colors,\ncheck out the [pry-theme](https://github.com/kyrylo/pry-theme) gem.\n\nYou can toggle the syntax highlighting on and off in a session by using the\n`toggle-color` command. Alternatively, you can turn it off permanently by\nputting the line `Pry.color = false` in your `pryrc` file.\n\nSupported Rubies\n----------------\n\n* CRuby \u003e= 2.0.0\n* JRuby \u003e= 9.0\n\nContact\n-------\n\nIn case you have a problem, question or a bug report, feel free to:\n\n* ask a question on IRC (#pry on Freenode)\n* [file an issue](https://github.com/pry/pry/issues)\n* [tweet at us](https://twitter.com/pryruby)\n\nLicense\n-------\n\nThe project uses the MIT License. See LICENSE.md for details.\n\nContributors\n------------\n\nPry is primarily the work of [John Mair (banisterfiend)](https://github.com/banister), for full list\nof contributors see the\n[contributors graph](https://github.com/pry/pry/graphs/contributors).\n","funding_links":[],"categories":["Ruby","Developer Tools","Tools","Misc","Ruby Tools","Ruby Tools and Frameworks","IRB","Python Frameworks and Tools","WebSocket","Middlewares"],"sub_categories":["irb Alternatives","Interfaces","E-Books","Mesh networks","JavaScript Libraries for Machine Learning"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpry%2Fpry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpry%2Fpry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpry%2Fpry/lists"}