# RubyTutor

RubyTutor is an irb tool to help new developers and developers new to using Ruby on the fundamentals of the language.

## Installation

### IRB

In order to use it, simply install it:

    $ gem install rubytutor

Then go into irb and require it:

    $ irb
    2.3.3 :001 > require 'rubytutor'
    => true

### Other Uses

While RubyTutor is meant to be an irb tool, far be it from me to disallow others from finding other uses for it.

If you wish to add RubyTutor to a project, add this line to your application's Gemfile:

```ruby
gem 'rubytutor'
```

And then execute:

    $ bundle install

Or install it yourself as:

    $ gem install rubytutor

## Usage

RubyTutor has 4 class methods that can be useful to developers:

* `RubyTutor.explain_full(object)`
* `RubyTutor.explain(object)`
* `RubyTutor.describe(object)`
* `RubyTutor.available_methods(object, filter)`

### explain_full

`explain_full` outputs a list of attributes pertaining to the object passed in.

Here is a sample output:

```ruby
RubyTutor.explain_full 'string'

# >> Instance of Class: String
# >> Value: string
# >> Length: 6
# >> Mutable? Yes
# >> Object ID: 70179170680460
# >> Inhertits From: Comparable, Object, Kernel, BasicObject
# >>
# >> Description:
# >> This object is an instance of the String class.
# >> A String object is an expression that can hold
# >> letters, numbers and all sorts of different characters,
# >> as long as they are surrounded by single ('')
# >> or double ("") quotes.
# >>
# >> Type RubyTutor.available_methods String
# >> to see all of the methods available.
```

### explain/describe

`explain` outputs the first half of `explain_full` while `describe` outputs the second half of `explain_full`.

Examples:

```ruby
RubyTutor.explain 'string'

# >> Instance of Class: String
# >> Value: string
# >> Length: 6
# >> Mutable? Yes
# >> Object ID: 70179170680460
# >> Inhertits From: Comparable, Object, Kernel, BasicObject

RubyTutor.describe 'string'

# >> Description:
# >> This object is an instance of the String class.
# >> A String object is an expression that can hold
# >> letters, numbers and all sorts of different characters,
# >> as long as they are surrounded by single ('')
# >> or double ("") quotes.
# >>
# >> Type RubyTutor.available_methods String
# >> to see all of the methods available.
```

All descriptions were copied and edited from [Ruby-Docs](https://ruby-doc.org/)

Sidenote: When passing in a Hash, use the parentheses notation to avoid an error.

`RubyTutor.explain({a: 1, b: 2, c: 3})`

### available_methods

Lastly, `available_methods` outputs all the available methods for the object passed in. `available_methods` also has an optional filter you can pass in. The filter must be a string and the filter only corresponds to the beginning of the method name. In other words, a filter of `'to'` will return all the methods that begin with `'to'`.

If another object is used for the filter instead of a string, the program will ignore it and return all available methods for the object passed in.

Example output:

```ruby
RubyTutor.available_methods BasicObject

# >> Available Methods:
# >> !
# >> !=
# >> !~
# >> <
# >> <=
# >> <=>
# >> ==
# >> ===
# >> =~
# >> >
# >> >=
# >> __id__
# >> __send__
# >> allocate
# >> ancestors
# >> autoload
# >> autoload?
# >> class
# >> class_eval
# >> class_exec
# >> class_variable_defined?
# >> class_variable_get
# >> class_variable_set
# >> class_variables
#...(truncated for brevity)

RubyTutor.available_methods BasicObject, 'al'

# >> Available Methods:
# >> allocate
```

## Classes Supported

The classes that are currently supported and have descriptions when `RubyTutor.describe` is called are:

* Array
* Bignum
* Class
* FalseClass
* Fixnum
* Float
* Hash
* Module
* NilClass
* Proc
* Range
* Regexp
* String
* Struct
* Symbol
* TrueClass

Any other class will return `No further description available at this time.` as a description.

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also 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`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sunny-b/RubyTutor.


## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).