Skip to content

Instantly share code, notes, and snippets.

@samlandfried
Last active February 21, 2017 16:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samlandfried/df9d3658342201e65c8db0d1d860b01b to your computer and use it in GitHub Desktop.
Save samlandfried/df9d3658342201e65c8db0d1d860b01b to your computer and use it in GitHub Desktop.

Module 1 Week 4 Diagnostic

This exercise is intended to help you assess your progress with the concepts and techniques we've covered during the week.

For these questions, write a short description or snippet of code that meets the requirement. In cases where the question mentions a "given" data value, use the variable given to refer to it (instead of re-writing the information).

1. Give one difference between Modules and Classes.

You can instantiate instances of classes but not modules.

2. Defining Modules

First, create a module Doughy which defines a method has_carbs? that always returns true. Then, given the following Pizza class, update Pizza to use your new Doughy module to gain the defined has_carbs? behavior.

module Doughy
  def has_carbs?
    true
  end
end

class Pizza
  include Doughy
  def tasty?
    true
  end
end
3. What are two benefits modules provide us in Ruby? Elaborate on each.
  1. Modules allow us to lump related classes together via the namespacing technique. This helps us better organize our code.

  2. Modules allow us to "mix-in" methods to a class, which is helpful for DRY and organization.

4. What values in Ruby evaluate as "falsy"?

false nil

5. Give 3 examples of "truthy" values in Ruby.

true 0 "false"

6. List 3 HTTP Verbs

GET POST DELETE

7. HTTP Parsing: given the following HTTP Request, identify the following:
  • HTTP Verb POST
  • Request Path /students
  • Query Parameters name=horace
POST /students?name=horace HTTP/1.1
Host: 127.0.0.1:9292
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

What is the full request URL?

/students?name=horace
8. Git and Branches: give a git command to accomplish each of the following:
  • Switch to an existing branch iteration-1 git checkout iteration-1
  • Create a new branch iteration-2 git branch iteration-2
  • Push a branch iteration-2 to a remote origin git push origin iteration-2
  • Merge a branch iteration-1 into a branch master (assume you are not on master to begin with)
git checkout master
git merge iteration-1
9. Load Paths and Requires

Given a project with the following directory structure, give 2 ways that we could require file_one from file_two.

. <you are here>
├── lib
│  │── file_one.rb
│  └── file_two.rb

require './lib/file_one'
require_relative 'file_one'
10. Refactoring: given the following snippet of code, show 2 refactorings you might make to improve the design of this code.
class Encryptor
  def date_offset
    date = Time.now.strftime("%d%m%y").to_i
    date_squared = date ** 2
    last_four_digits = date_squared.to_s[-4..-1]
    [last_four_digits[-4].to_i,
    last_four_digits[-3].to_i,
    last_four_digits[-2].to_i,
    last_four_digits[-1].to_i]
  end
end

Encryptor.new.date_offset

Refactor 1

class Encryptor
  def date_offset
    date = Time.now.strftime("%d%m%y").to_i
    date_squared = date ** 2
    last_four_digits = date_squared.to_s[-4..-1]
    last_four_digits.map!(&:to_i)
  end
end

Encryptor.new.date_offset

Refactor 2

class Encryptor
  def date_offset
    date_squared = square_date
    last_four_digits = date_squared.to_s[-4..-1]
    last_four_digits.map!(&:to_i)
  end
  
  def square_date
    date = Time.now.strftime("%d%m%y").to_i
    date ** 2
  end
end

Encryptor.new.date_offset
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment