Coder Social home page Coder Social logo

soa_flip_flap's Introduction

FlipFlap HW

###Overview

This homework assignment asks you to create two files (a module and a class) that are needed to run the two command lines applications you are given.

###Installing Basic HW files

First, make sure you have git installed (see our class notes) on your machine.

Then, install the files needed to start this homework project:

$ git clone https://github.com/ISS-SOA/FlipFlap_HW.git

This will create a directory called FlipFlap_HW in your current directory.

DO NOT FORK THIS REPO because you will not submit your solution as pull requests! You may, however, fork the repo if you wish to submit pull requests that fix typos, etc.

Second, link the repo in your new folder with Github:

  • create a new repo in your Github account (call it SOA_flip_flap for example), and copy the SSH URL
  • cd into your local directory FlipFlap_HW
  • set your new Github repo as the remote origin repo: $ git remote add origin [email protected]/YOURACCOUNT/YOURREPO.git

When working on your solution, keep adding changes, commiting, and pushing to Github.

Files Given

You are given two complete code files: tsv_to_yml.rb and yml_to_tsv.rb. These files are command line applications that convert between TSV and Yaml formats. However, they require two more more code files that you must create in this assignment: flip_flap.rb and tsv_buddy.rb.

You are also given two data files to play with: survey.tsv and survey.yml

###Assignment:

Your task is to get tsv_to_yml.rb and yml_to_tsv.rb to work, without making any modifications to these files. Please study their code now.

They both require a file called flip_flap.rb that should contain a class called FlipFlap. On of your tasks is to create a complete class FlipFlap. However, to complete FlipFlap, you must first create a complete module called TsvBuddy in a file called tsv_buddy.rb

1. tsv_buddy.rb

This file already contains an instance variable called @data that will contain a data structure to hold information loaded from TSV files. For example, you may want to make this data strcuture an Array of Hashes that looks something like this:

[{"date"=>"9/12/2014 20:20:55",
  "student_id"=>"3452",
  "languages"=>"Java, C , HTML , JavaScript , ",
  "best_language"=>"Java",
  "app_experience"=>"Native GUI applications, Database Driven Applications",
  "tech_experience"=>
   "Unix-based OS, Database"},

      <more hashes here>

]

You must fill out two methods:

def take_tsv(tsv) : this method should take a String called tsv and convert it into a data structure to store in @data.

def to_tsv : this method should take any data in @data and return a String in TSV format.

Note that modules cannot be made into object instances (i.e., you cannot do mymod = TsvBuddy.new. So to test this module while you are developing it, you can do something like this:

  class Tester
    include TsvBuddy
  end

  t = Tester.new.take_tsv(File.read('./data/survey.tsv'))

That should show you if take_tsv is creating the right structure for example.

2. flip_flap.rb

This class should mixin (using include) TsvBuddy. That will give it access to TsvBuddy's @data member variable and to its two methods take_tsv and to_tsv.

This class should then implement two methods (not provided):

def take_yaml(yml) : this method takes a Yaml string and create a data structure to put into @data. You should be able to do this with one line of code using the yaml library's load method.

def to_yaml : this method should return @data in Yaml format.

And that's it!

Verifying Your Solution

If your solution works, then you should be able to convert TSV files into Yaml, and back into TSV with no change in information.

Test your code out by running the spec (test) that is provided:

$ ruby flip_flap_spec.rb

Also, take a peek into flip_flap_spec.rb to see how it works -- you will soon start writing your own specs!

Submission

Please submit the URL of your Github repo.

What Did We Learn?

This assignment shows you the power of mixins in Ruby's object model. You have created a class (FlipFlap) that can in the future incorporate code to parse or create any kind of data format (CSV, Excel, etc.). To keep FlipFlap short and uncomplicated, we can make modules (like TsvBuddy) for other formats (CsvBuddy, ExcelBuddy, etc.) and simply include them into FlipFlap. This cleanly seperates our code by keeping the logic for parsing (the XyzBuddy modules) away from the code needed by applications to handle the data (class FlipFlap).

Feel free to ask more questions on our Canvas board, and we will of course discuss this in class!

soa_flip_flap's People

Contributors

soumyaray avatar crazyplum avatar

Watchers

 avatar

Forkers

richohan

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.