Code Monkey home page Code Monkey logo

effrb's Introduction

Effective Ruby Source Code

Source code for the book Effective Ruby by Peter J. Jones [].

Effective Ruby

Introduction

Virtually all of the code from the book is implemented as unit tests using MiniTest. I used a makefile and some scripts to convert the book from Markdown to the format used by my publisher, Addison-Wesley. During this process all of the tests are run and snippets of code are automatically extracted from the tests and inserted into the final document.

Running the Tests

If you just want to run the tests against your currently installed version of Ruby:

bundle install && rake test

On the other hand, if you have rbenv [] installed and want to test against all the versions listed in the ruby-versions.txt file:

./runtests.sh

That script will install all of the necessary Ruby versions and then test against each one of them.

Issues and Pull Requests

There are several reasons you might want to open an issue:

  • You get the tests to pass on a version or implementation of Ruby not listed below. In that case, I'll update this file and reference you and the issue.

  • You get the tests to fail. Please provide as much detail in the issue description. Worst case I'll update this file and reference the issue and any workarounds.

  • You don't like one of my examples or disagree with the approach taken. Write a good issue description, include an alternate approach, and if I like it I'll reference it in this file.

Please do not submit pull requests. If there ever happens to be a new edition of the book then I don't want to have to track down every contributor in order to sign a release. I'm lazy. Plus, come on, this is just example code.

Directory/Chapter Layout

The source code in this repository includes all of the code shown in the book Effective Ruby along with the snippets of code used to produce the IRB sessions. It also includes several source code files that did not appear in the book. First, let's take a look at the directories that correspond to chapters in the book.

  • ruby: Chapter 1: Accustoming Yourself to Ruby.

  • oop: Chapter 2: Classes, Objects, and Modules.

  • collections: Chapter 3: Collections.

  • exceptions: Chapter 4: Exceptions.

  • meta: Chapter 5: Metaprogramming.

  • testing: Chapter 6: Testing.

  • tools: Chapter 7: Tools and Libraries.

  • performance: Chapter 8: Memory Management and Performance.

The remaining directories contain the following:

  • assumptions: General tests created to ensure that statements given in the book are accurate.

  • benchmarks: Various benchmarks to compare the performance of core classes or Ruby programming techniques.

  • coverage: Example project for the test code coverage metrics given in chapter 6.

  • data: CSV files used by the tests along with profiling output used in chapter 8.

  • fuzz: Example of using FuzzBert from chapter 6.

  • irb: All of the scripts used to generate the IRB output in the book, organized by chapter.

  • lib: Code used in the book for both examples and also by the IRB scripts.

Ruby Version

Unless otherwise noted, all of the code in this repository works with the following Ruby versions:

  • 1.9.3 (Official Ruby)
  • 2.0.0 (Official Ruby)
  • 2.1.0 (Official Ruby)
  • 2.1.1 (Official Ruby)
  • 2.1.2 (Official Ruby)

Where:

Official Ruby: ~ The original and official implementation of the Ruby interpreter and language by the Ruby Core team (MRI).

Files that only work with a specific version of Ruby will have a version specifier in their name. For example:

patching_2_1_test.rb

This file will only work with Ruby 2.1 or greater. The Rakefile ensures that files are omitted from testing if the version of the Ruby interpreter isn't appropriate.

Contacting the Author

If you want to contact the author about the source code in this repository please look at the Issues and Pull Requests section above. For non-source code related topics, you can reach the author through his website.

The author tweets Ruby tips at @EffectiveRuby and personal junk at @contextualdev.

effrb's People

Contributors

pjones avatar

Watchers

Philippe Rigovanov avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.