Giter Site home page Giter Site logo

museo_1908's Introduction

Museo

Setup

  • Fork this Repository
  • Clone YOUR fork
  • Compete the activity below
  • Commit code every 15 minutes
  • Push your solution to your fork
  • Submit a pull request AT NOON (not before) from your repository to the turingschool-examples repository
    • Make sure to put your name in your PR!

Pay Careful Attention

You must create the methods exactly as described below. You may make additional helper methods if you like, but the interfaces we describe below are expected to be built according to the following interaction patterns. Pay careful attention to the naming of methods, the types of parameters passed, and their return values!

Iteration 1

Use TDD to create a Photograph and an Artist class that respond to the following interaction pattern:

pry(main)> require './lib/photograph'
#=> true

pry(main)> require './lib/artist'
#=> true

pry(main)> attributes = {
  id: "1",
  name: "Rue Mouffetard, Paris (Boy with Bottles)",
  artist_id: "4",
  year: "1954"
}      

pry(main)> photograph = Photograph.new(attributes)
#=> #<Photograph:0x00007fc2d1050c80...>

pry(main)> photograph.id
#=> "1"

pry(main)> photograph.name
#=> "Rue Mouffetard, Paris (Boy with Bottles)"

pry(main)> photograph.artist_id
#=> "4"

pry(main)> photograph.year
#=> "1954"

pry(main)> attributes = {
  id: "2",
  name: "Ansel Adams",
  born: "1902",
  died: "1984",
  country: "United States"
}

pry(main)> artist = Artist.new(attributes)
#=> #<Artist:0x00007fc2d0a6c080...>

pry(main)> artist.id
#=> "2"

pry(main)> artist.name
#=> "Ansel Adams"

pry(main)> artist.born
#=> "1902"

pry(main)> artist.died
#=> "1984"

pry(main)> artist.country
#=> "United States"

Iteration 2

Use TDD to create a Curator class that responds to the following interaction pattern:

pry(main)> require './lib/photograph'
# => true

pry(main)> require './lib/artist'
# => true

pry(main)> require './lib/curator'
# => true

pry(main)> curator = Curator.new    
# => #<Curator:0x00007fb3d9111cc0...>

pry(main)> curator.photographs
# => []

pry(main)> photo_1 = Photograph.new({
     id: "1",      
     name: "Rue Mouffetard, Paris (Boy with Bottles)",      
     artist_id: "1",      
     year: "1954"      
})        
# => #<Photograph:0x00007fb3d8ea1cd8...>

pry(main)> photo_2 = Photograph.new({
     id: "2",      
     name: "Moonrise, Hernandez",      
     artist_id: "2",      
     year: "1941"      
})        
# => #<Photograph:0x00007fb3d8e0bfa8...>

pry(main)> curator.add_photograph(photo_1)

pry(main)> curator.add_photograph(photo_2)

pry(main)> curator.photographs
# => [#<Photograph:0x00007fb3d8ea1cd8...>, #<Photograph:0x00007fb3d8e0bfa8...>]

pry(main)> curator.artists
# => []

pry(main)> artist_1 = Artist.new({
    id: "1",      
    name: "Henri Cartier-Bresson",      
    born: "1908",      
    died: "2004",      
    country: "France"      
})        
# => #<Artist:0x00007fb3d8b4ed60...>

pry(main)> artist_2 = Artist.new({
    id: "2",      
    name: "Ansel Adams",      
    born: "1902",      
    died: "1984",      
    country: "United States"      
})        
# => #<Artist:0x00007fb3d90bb4b0...>

pry(main)> curator.add_artist(artist_1)

pry(main)> curator.add_artist(artist_2)

pry(main)> curator.artists
# => [#<Artist:0x00007fb3d8b4ed60...>, #<Artist:0x00007fb3d90bb4b0...>]

pry(main)> curator.find_artist_by_id("1")
# => #<Artist:0x00007fb3d8b4ed60...>

pry(main)> curator.find_photograph_by_id("2")
# => #<Photograph:0x00007fb3d8e0bfa8...>

Iteration 3

Use TDD to update your Curator class so that is supports the following methods:

  • find_photographs_by_artist(artist) - This method takes an Artist object and returns an Array of all the Artist's photographs. A Photograph is linked to an Artist by its artist_id
  • artists_with_multiple_photographs - This method returns an Array of all Artists who have more than one photograph
  • photographs_taken_by_artists_from(string) - This method takes a String representing a country. It returns an Array of Photographs that were taken by a photographer from that country.

The Curator class should now respond to the following interaction pattern:

pry(main)> require './lib/photograph'
# => true

pry(main)> require './lib/artist'
# => true

pry(main)> require './lib/curator'
# => true

pry(main)> curator = Curator.new
# => #<Curator:0x00007fabc6c2b680...>

pry(main)> photo_1 = Photograph.new({
     id: "1",      
     name: "Rue Mouffetard, Paris (Boy with Bottles)",      
     artist_id: "1",      
     year: "1954"      
})        
# => #<Photograph:0x00007fabc6933180...>

pry(main)> photo_2 = Photograph.new({    
     id: "2",      
     name: "Moonrise, Hernandez",      
     artist_id: "2",      
     year: "1941"      
})        
# => #<Photograph:0x00007fabc6c28e58...>

pry(main)> photo_3 = Photograph.new({    
     id: "3",      
     name: "Identical Twins, Roselle, New Jersey",      
     artist_id: "3",      
     year: "1967"      
})        
# => #<Photograph:0x00007fabc5bb9ef0...>

pry(main)> photo_4 = Photograph.new({    
     id: "4",      
     name: "Monolith, The Face of Half Dome",      
     artist_id: "3",      
     year: "1927"      
})        
# => #<Photograph:0x00007fabc6b931f0...>

pry(main)> artist_1 = Artist.new({    
     id: "1",      
     name: "Henri Cartier-Bresson",      
     born: "1908",      
     died: "2004",      
     country: "France"      
})        
# => #<Artist:0x00007fabc6a52340...>

pry(main)> artist_2 = Artist.new({    
     id: "2",      
     name: "Ansel Adams",      
     born: "1902",      
     died: "1984",      
     country: "United States"      
})        
# => #<Artist:0x00007fabc6c20870...>

pry(main)> artist_3 = Artist.new({    
     id: "3",      
     name: "Diane Arbus",      
     born: "1923",      
     died: "1971",      
     country: "United States"      
})        
# => #<Artist:0x00007fabc5ba0c70...>

pry(main)> curator.add_artist(artist_1)  

pry(main)> curator.add_artist(artist_2)    

pry(main)> curator.add_artist(artist_3)

pry(main)> curator.add_photograph(photo_1)

pry(main)> curator.add_photograph(photo_2)

pry(main)> curator.add_photograph(photo_3)

pry(main)> curator.add_photograph(photo_4)

pry(main)> curator.find_photographs_by_artist(artist_3)
# => [#<Photograph:0x00007fabc5bb9ef0...>, #<Photograph:0x00007fabc6b931f0...>]

pry(main)> curator.artists_with_multiple_photographs
# => [#<Artist:0x00007fabc5ba0c70...>]

pry(main)> curator.photographs_taken_by_artist_from("United States")
# => [#<Photograph:0x00007fabc6c28e58...>, #<Photograph:0x00007fabc5bb9ef0...>, #<Photograph:0x00007fabc6b931f0...>

pry(main)> curator.photographs_taken_by_artist_from("Argentina")
# => []

Iteration 4

Use TDD to add the following methods to your Curator class:

  • load_photographs(file) - This method takes a path to a CSV file containing photographs and adds them to the Curator. You may find the included FileIO class useful.
  • load_artists(file) - This method takes a path to a CSV file containing artists and adds them to the Curator. You may find the included FileIO class useful.
  • photographs_taken_between(range) - This method takes a range and returns an array of all photographs with a year that falls in that range.
  • artists_photographs_by_age(artist)- This method takes an Artist object and return a hash where the keys are the Artists age when they took a photograph, and the values are the names of the photographs.
pry(main)> require './lib/curator'

pry(main)> curator = Curator.new
#=> #<Curator:0x00007fd98685b2b0...>

pry(main)> curator.load_photographs('./data/photographs.csv')

pry(main)> curator.load_artists('./data/artists.csv')

pry(main)> curator.photographs_taken_between(1950..1965)
#=> [#<Photograph:0x00007fd986254740...>, #<Photograph:0x00007fd986254678...>]

pry(main)> diane_arbus = curator.find_artist_by_id("3")    

pry(main)> curator.artists_photographs_by_age(diane_arbus)
=> {44=>"Identical Twins, Roselle, New Jersey", 39=>"Child with Toy Hand Grenade in Central Park"}
```

museo_1908's People

Contributors

iandouglas 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.