newest_kickstarter 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/