newest_kickstarter 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 260bf885f66c1571eb8736820d58d777f93c26b5
4
- data.tar.gz: 0f73ba1c8c290b13a0d090cb3764d931d58776f4
3
+ metadata.gz: 3a9c2ac6553cc98c67a59461b4c72be6672d59d9
4
+ data.tar.gz: 71d7d1c86ce97b8801a0a2b0fd4eff38edde6380
5
5
  SHA512:
6
- metadata.gz: 784970d62ec19afca903de1d004da0ebff9d1f9ed0351a53fecfba2b1d46374b0de8dcccb1812ff031abccfc9c421ad59afed32fae5c6672a29706b02d2abc6b
7
- data.tar.gz: 8eaa092cf11766741804808e00f746e240993a63a297d649f9dc1c70c9d4dcb735e4c84bc2510330f276b5c2afdcd59e58d7b5615b7a60cd1c2a70ed3bbd41d9
6
+ metadata.gz: 0c4f2b50cc0e86772fc47ba2d944915b835f23f325c091b9b98780b9578f4e24ff48732490bdda7c42a89e3756120fee1163ae93d76eb2785f240fda9c445557
7
+ data.tar.gz: b7d96627e5b0059f7c520d173649c136c5c889cd9ed2d2fa7ce51e0692930446725513ddc59310c506eb39e7cb495a58c8f51159f885e10683253724678adef3
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in newest_kickstarter.gemspec
4
- gemspec
5
4
 
5
+ gem 'newest_kickstarter'
6
6
 
data/Gemfile.lock ADDED
@@ -0,0 +1,17 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ mini_portile2 (2.0.0)
5
+ newest_kickstarter (0.1.0)
6
+ nokogiri
7
+ nokogiri (1.6.7.2)
8
+ mini_portile2 (~> 2.0.0.rc2)
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ newest_kickstarter
15
+
16
+ BUNDLED WITH
17
+ 1.11.2
data/NOTES.md ADDED
@@ -0,0 +1,14 @@
1
+ A simple command line interface to access the top 20 newest kickstarter projects, and find basic info on them.
2
+
3
+ source: https://www.kickstarter.com/discover/advanced?recommended=false&sort=newest
4
+
5
+ Files Altered:
6
+ newest-kickstarter
7
+ environment.rb
8
+ newest_kickstarter.rb
9
+ cli.rb
10
+ project.rb
11
+ newest_kickstarter.gemspec
12
+ Notes
13
+ Readme
14
+
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # NewestKickstarter
2
2
 
3
+ https://rubygems.org/gems/newest_kickstarter
4
+
3
5
  This ruby gem is a simple command line interface (CLI) to access the top 20 newest projects on Kickstarter.com.This gem also allows you to recieve basic information about those projects and a link to their project page.
4
6
 
5
7
  ## Installation
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # link to files that include NewestKickstarter::CLI.new.start method
4
+ require_relative '../lib/newest_kickstarter'
5
+
6
+ # Put here to avoid logic in bin folder
7
+ NewestKickstarter::CLI.new.start
@@ -0,0 +1,11 @@
1
+ #This page was setup to make code easier to read and access, using standard folder structure (config) and descriptive file name (environment)
2
+
3
+ require 'pry' # for testing
4
+ require 'nokogiri' # for scraping kickstarter website
5
+ require 'open-uri' # for scraping kickstarter website
6
+
7
+ # require all files in lib directory
8
+ require_relative '../lib/newest_kickstarter/version'
9
+ require_relative '../lib/newest_kickstarter/project'
10
+ require_relative '../lib/newest_kickstarter/cli'
11
+
@@ -0,0 +1,73 @@
1
+ class NewestKickstarter::CLI
2
+
3
+ def start # Dictates the flow and order of my gem
4
+ list # Call Scraping Method
5
+ menu # Call Interactive Method
6
+ goodbye # Call Closing Method
7
+ end
8
+
9
+ def list # Scraping Method
10
+ puts "" #Skips Line
11
+ puts "************* (Top 20) Newest Kickstarter Projects *************" # List Title
12
+ puts "" #Skips Line
13
+ #Call .all method on Project Class, take each with index and puts
14
+ NewestKickstarter::Project.all.each.with_index(1) do |project, i|
15
+ puts "#{i}. #{project.name}"
16
+ #format: 1. blahblah (then skips line, for each project)
17
+ end
18
+ puts "" #Skips Line
19
+ end
20
+
21
+ def menu # Interactive Method
22
+ input = nil # Define input for while method on next line
23
+ while input != "exit" #run this code unless user inputs exit
24
+ # Ask user for specific input
25
+ puts "Enter the number of the project you would like more info on, or type list for projects, or type exit"
26
+ #recieve user input, remove whitespace, and make lowercase
27
+ input = gets.strip.downcase
28
+ # Start Case Method based on user input
29
+ case input
30
+ when "list"
31
+ list # Run list method, then prompt question again
32
+ else #check if its a number, and add if statment
33
+ new_input = nil # Define new_input in case next line breaks
34
+ new_input = input.to_i # make user input a number
35
+ # check if user input a number between 1-20
36
+ if new_input.between?(1,20)
37
+ # take user input and run .find method on Project class
38
+ project = NewestKickstarter::Project.find(new_input)
39
+ # check if user input a number between 1-20 and i so
40
+ #run more_info method with an argument of the project
41
+ more_info(project)
42
+ # Then prompt question again
43
+ else # if user input is not a number between 1-20
44
+ puts "Oops!"
45
+ # Then prompt question again
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def more_info(project)
52
+ puts "" #Skips Line
53
+ # Run .name method on searched project
54
+ puts "-------------- #{project.name} --------------"
55
+ puts "" #Skips Line
56
+ # Run .summary method on searched project
57
+ puts project.summary
58
+ puts "" #Skips Line
59
+ # Run .author method on searched project
60
+ puts "Author: #{project.author}"
61
+ puts "" #Skips Line
62
+ # Run .url method on searched project
63
+ puts "URL: #{project.url}"
64
+ puts "" #Skips Line
65
+ # Then prompt question again
66
+ end
67
+
68
+ def goodbye # Closing Method
69
+ # Signal to the user that CLI has ended
70
+ puts "Thanks for stopping by. See you later for more projects!"
71
+ end
72
+
73
+ end
@@ -0,0 +1,52 @@
1
+ class NewestKickstarter::Project
2
+ attr_accessor :name, :url, :summary, :author
3
+ # reader and writer methods for my project properties
4
+
5
+ # Initialize new projects with a name and url
6
+ # Set to nil if not provided
7
+ def initialize(name = nil, url = nil)
8
+ # Set instance variables for project properties
9
+ @name = name
10
+ @url = url
11
+ end
12
+
13
+ def self.all
14
+ # fetch all projects if available or scrape KS
15
+ @@all ||= scrape_newest_projects
16
+ end
17
+
18
+ def self.find(id)
19
+ # find method that searches all projects by index
20
+ # [id-1] for offset, id starts @ 1, index starts @ 0
21
+ self.all[id-1]
22
+ end
23
+
24
+ def summary
25
+ # fetch summary if available or search doc and retrieve
26
+ @summary ||= doc.search("p.h3").text.strip
27
+ end
28
+
29
+ def author
30
+ # fetch author if available or search doc and retrieve
31
+ @author ||= doc.search('h5.mobile-hide a[data-modal-class="modal_project_by"]').text.strip
32
+ end
33
+
34
+ private
35
+ # scrape method for kickstarter projects
36
+ def self.scrape_newest_projects
37
+ # Set doc variable for all html scraped from KS Page
38
+ doc = Nokogiri::HTML(open('https://www.kickstarter.com/discover/advanced?recommended=false&sort=newest'))
39
+ # Set names variable for all project names scraped from doc
40
+ names = doc.search('h6.project-title a[data-score="null"]')
41
+ # iterate through names variable, collect name text, and url
42
+ # instantiate new project with name text and url for each pair
43
+ names.collect{|e| new(e.text.strip, "https://www.kickstarter.com#{e.attr("href").split("?").first.strip}")}
44
+ # Split at "?", take first part and remove whitespace
45
+ end
46
+
47
+ # Set doc variable for all html scraped from an objects url
48
+ def doc
49
+ @doc ||= Nokogiri::HTML(open(self.url))
50
+ end
51
+
52
+ end
@@ -1,3 +1,3 @@
1
1
  module NewestKickstarter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
Binary file
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{Scrapes top 20 new projects from kickstarter.com, an gives more info on each.}
13
13
  spec.description = %q{This ruby gem is a simple command line interface (CLI) to access the top 20 newest projects on Kickstarter.com.This gem also allows you to recieve basic information about those projects and a link to their project page.}
14
- spec.homepage = "http://IshmaelKhalid.com"
14
+ spec.homepage = "https://github.com/IshmaelKhalid/newest_kickstarter"
15
15
  spec.license = "MIT"
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  end
24
24
 
25
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
- spec.bindir = "exe"
26
+ spec.bindir = "bin"
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
Binary file
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newest_kickstarter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - IshmaelKhalid
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-06-14 00:00:00.000000000 Z
12
12
  dependencies:
@@ -75,18 +75,25 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - ".gitignore"
79
78
  - CODE_OF_CONDUCT.md
80
79
  - Gemfile
80
+ - Gemfile.lock
81
81
  - LICENSE.txt
82
+ - NOTES.md
82
83
  - README.md
83
84
  - Rakefile
84
85
  - bin/console
86
+ - bin/newest-kickstarter
85
87
  - bin/setup
88
+ - config/environment.rb
86
89
  - lib/newest_kickstarter.rb
90
+ - lib/newest_kickstarter/cli.rb
91
+ - lib/newest_kickstarter/project.rb
87
92
  - lib/newest_kickstarter/version.rb
93
+ - newest_kickstarter-0.1.0.gem
88
94
  - newest_kickstarter.gemspec
89
- homepage: http://IshmaelKhalid.com
95
+ - pkg/newest_kickstarter-0.1.0.gem
96
+ homepage: https://github.com/IshmaelKhalid/newest_kickstarter
90
97
  licenses:
91
98
  - MIT
92
99
  metadata:
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/