news_reader 0.1.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.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +5 -0
  5. data/.vscode/settings.json +3 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +97 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +41 -0
  11. data/Rakefile +6 -0
  12. data/bin/console +14 -0
  13. data/bin/news-reader +6 -0
  14. data/bin/setup +8 -0
  15. data/fixtures/.DS_Store +0 -0
  16. data/fixtures/blog/index.html +200 -0
  17. data/fixtures/blog/index_files/Box.css +29 -0
  18. data/fixtures/blog/index_files/Java_Box.js +89 -0
  19. data/fixtures/blog/index_files/ModuleStyleSheets.css +1655 -0
  20. data/fixtures/blog/index_files/black.css +11 -0
  21. data/fixtures/blog/index_files/blog-jive.jpg +0 -0
  22. data/fixtures/blog/index_files/blog-musolfs.jpg +0 -0
  23. data/fixtures/blog/index_files/blog-poolpak.jpg +0 -0
  24. data/fixtures/blog/index_files/blog-portalaudit.png +0 -0
  25. data/fixtures/blog/index_files/blog-semicolon1.jpg +0 -0
  26. data/fixtures/blog/index_files/blog-semicolon2.jpg +0 -0
  27. data/fixtures/blog/index_files/blog-spa1.jpg +0 -0
  28. data/fixtures/blog/index_files/blog-spa2.jpg +0 -0
  29. data/fixtures/blog/index_files/blog-statera.jpg +0 -0
  30. data/fixtures/blog/index_files/blue.css +11 -0
  31. data/fixtures/blog/index_files/common.js +149 -0
  32. data/fixtures/blog/index_files/dark.css +31 -0
  33. data/fixtures/blog/index_files/featherlight.min.css +8 -0
  34. data/fixtures/blog/index_files/featherlight.min.js +8 -0
  35. data/fixtures/blog/index_files/font-awesome.min.css +4 -0
  36. data/fixtures/blog/index_files/green.css +11 -0
  37. data/fixtures/blog/index_files/isotope.css +64 -0
  38. data/fixtures/blog/index_files/jquery-ui.min.js +5 -0
  39. data/fixtures/blog/index_files/jquery.carouFredSel-6.2.1-packed.js +16 -0
  40. data/fixtures/blog/index_files/jquery.contentcarousel.js +137 -0
  41. data/fixtures/blog/index_files/jquery.easing.1.3.js +205 -0
  42. data/fixtures/blog/index_files/jquery.form.js +1121 -0
  43. data/fixtures/blog/index_files/jquery.hoverdir.js +220 -0
  44. data/fixtures/blog/index_files/jquery.inview.js +60 -0
  45. data/fixtures/blog/index_files/jquery.isotope.min.js +11 -0
  46. data/fixtures/blog/index_files/jquery.magnific-popup.js +2046 -0
  47. data/fixtures/blog/index_files/jquery.mb.YTPlayer.js +1041 -0
  48. data/fixtures/blog/index_files/jquery.min.js +5 -0
  49. data/fixtures/blog/index_files/jquery.nav.js +223 -0
  50. data/fixtures/blog/index_files/jquery.smoothwheel.js +153 -0
  51. data/fixtures/blog/index_files/jquery.sticky.js +129 -0
  52. data/fixtures/blog/index_files/jquery.superslides.js +656 -0
  53. data/fixtures/blog/index_files/jquery.validate.js +1231 -0
  54. data/fixtures/blog/index_files/jquery.vegas.css +34 -0
  55. data/fixtures/blog/index_files/js +201 -0
  56. data/fixtures/blog/index_files/loading.gif +0 -0
  57. data/fixtures/blog/index_files/magnific-popup.css +365 -0
  58. data/fixtures/blog/index_files/main.css +301 -0
  59. data/fixtures/blog/index_files/main.js +26 -0
  60. data/fixtures/blog/index_files/modernizr-2.6.2.min.js +4 -0
  61. data/fixtures/blog/index_files/normalize.css +533 -0
  62. data/fixtures/blog/index_files/ohp3fra.js +44 -0
  63. data/fixtures/blog/index_files/orange.css +11 -0
  64. data/fixtures/blog/index_files/paralax.js +525 -0
  65. data/fixtures/blog/index_files/paralaxNEW4.css +2730 -0
  66. data/fixtures/blog/index_files/plugins.js +221 -0
  67. data/fixtures/blog/index_files/portfolio.js +142 -0
  68. data/fixtures/blog/index_files/purple.css +11 -0
  69. data/fixtures/blog/index_files/red.css +11 -0
  70. data/fixtures/blog/index_files/responsive3.css +329 -0
  71. data/fixtures/blog/index_files/superslides.css +65 -0
  72. data/fixtures/blog/index_files/turquoise.css +11 -0
  73. data/fixtures/blog/index_files/util.js +287 -0
  74. data/fixtures/blog/index_files/yellow.css +11 -0
  75. data/lib/news_reader/article.rb +60 -0
  76. data/lib/news_reader/cli.rb +41 -0
  77. data/lib/news_reader/scraper.rb +17 -0
  78. data/lib/news_reader/version.rb +3 -0
  79. data/lib/news_reader.rb +4 -0
  80. data/news_reader.gemspec +40 -0
  81. metadata +209 -0
@@ -0,0 +1,11 @@
1
+ @charset "UTF-8";
2
+ /* Color yellow CSS */
3
+ .yellow .prev-featured:hover,.yellow .next-featured:hover,.yellow .s-ico,.yellow .sl-ico,.yellow .progress-bar .skill-in,.yellow .ch-grid,.yellow .f-ico,.yellow .car-prev,.yellow .car-next,.yellow .car-prev-2,.yellow .car-next-2,.yellow .scrollup,.yellow .list-dot,.yellow .p-two {background-color: #f1d301;}
4
+ .yellow .menu a:hover,.yellow #nav .current a,.yellow .f-image .f-category,.yellow .t-photo .f-category,.yellow .half-content a,.yellow .contour-btn:hover, .yellow .second-title span {color: #f1d301 !important;}
5
+ .yellow .f-image .f-category{background-position: -308px 0;}
6
+ .yellow .t-photo .f-category {background-position: -308px -44px;}
7
+ .yellow .f-single:hover .f-info,.yellow .btn-featured,.yellow .spacer,.yellow .folio-btn:hover,.yellow .p-roll,.yellow .contour-btn,.yellow .folio-btn.selected,.yellow .t-spacer,.yellow .t-element:hover .t-data,.yellow .logo span em{background: #f1d301;}
8
+ .yellow .logo span{background: #f1d301; background: rgba(241,211,1,0.5);}
9
+ .yellow .controller ul li:hover,.yellow .selected,.yellow .controller-2 ul li:hover,.yellow .controller-3 ul li:hover{border: 2px solid #f1d301 !important; background: #f1d301 !important;}
10
+ .yellow .buy-logo{border-color: #f1d301;}
11
+ .yellow ::selection{background-color: #f1d301;}
@@ -0,0 +1,60 @@
1
+ class NewsReader::Article
2
+ attr_accessor :title, :date, :url, :text
3
+ @@all = []
4
+
5
+ def initialize article
6
+ article.each do |key, value|
7
+ self.send("#{key}=", value)
8
+ end
9
+ @@all << self
10
+ end
11
+
12
+ def add_attributes attributes
13
+ attributes.each do |key, value|
14
+ self.send("#{key}=", value)
15
+ end
16
+ end
17
+
18
+ def self.import collection
19
+ collection.each do |article|
20
+ NewsReader::Article.new article
21
+ end
22
+ end
23
+
24
+ def self.list
25
+ puts "--------- Blog Articles ---------"
26
+ @@all.each.with_index(1) do |article, index|
27
+ puts " - #{index}. #{article.title}"
28
+ end
29
+ end
30
+
31
+ def self.read
32
+ self.list
33
+ self.menu
34
+ input = nil
35
+ while input != "menu"
36
+ input = gets.strip
37
+
38
+ index = input.to_i - 1
39
+ if !index.between?(0, self.all.size - 1)
40
+ puts "(-_-) You must choose an article that exists in our database"
41
+ else
42
+ article = self.all[index]
43
+ puts "------ #{article.title} ------"
44
+ puts "-- Date Published: #{article.date}"
45
+ puts "-- Article Text: #{article.text}"
46
+ puts "-- Ctr/Alt + click #{article.url} to go to the article page."
47
+ puts "------ ------ ------ ------ ------"
48
+ self.menu
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.menu
54
+ puts "Please choose an article from 1 to #{self.all.size} to read"
55
+ puts "Type `menu` to go to the main menu"
56
+ end
57
+ def self.all
58
+ @@all
59
+ end
60
+ end
@@ -0,0 +1,41 @@
1
+ class NewsReader::CLI
2
+ APP_NAME = "News Reader CLI"
3
+ def self.start
4
+ NewsReader::Article.import(NewsReader::Scraper.fetch_articles)
5
+
6
+ puts "----- Welcome to the News Reader CLI app! ----"
7
+ puts "--"
8
+
9
+ input = nil
10
+ while input != "exit"
11
+ menu
12
+ input = gets.strip
13
+
14
+ case input
15
+ when 'list'
16
+ NewsReader::Article.list
17
+ when 'read'
18
+ NewsReader::Article.read
19
+ when 'about'
20
+ about
21
+ end
22
+ end
23
+
24
+ puts "Thanks for using the #{APP_NAME} app!"
25
+ end
26
+
27
+ def self.menu
28
+ puts "\n"
29
+ puts "------- Menu --------"
30
+ puts "Please choose an option from the menu below:"
31
+ puts " - Type `list` to list all the articles"
32
+ puts " - Type `read` to read an article"
33
+ puts " - Type `about` to know more about #{APP_NAME}"
34
+ puts " - Type `exit` to exit the app."
35
+ puts "-"
36
+ end
37
+
38
+ def self.about
39
+ puts "News Reader CLI app by JGB Solutions. Visit https://jgb.solutions for more."
40
+ end
41
+ end
@@ -0,0 +1,17 @@
1
+ require 'open-uri'
2
+ require 'nokogiri'
3
+ require 'pry'
4
+
5
+ class NewsReader::Scraper
6
+ def self.fetch_articles
7
+ doc = Nokogiri::HTML(open("./fixtures/blog/index.html"))
8
+ doc.css(".blog-post").map do |post|
9
+ {
10
+ title: post.css("h2").text,
11
+ date: post.css(".post-details").text.split("|")[0].split(":")[1].strip,
12
+ url: post.css("h2 a").attribute("href").value,
13
+ text: post.css("p").text
14
+ }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module NewsReader
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ require "news_reader/version"
2
+ require_relative "./news_reader/cli"
3
+ require_relative "./news_reader/article"
4
+ require_relative "./news_reader/scraper"
@@ -0,0 +1,40 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "news_reader/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "news_reader"
8
+ spec.version = NewsReader::VERSION
9
+ spec.authors = ["Jean Gérard Bousiquot"]
10
+ spec.email = ["jgbneatdesign@gmail.com"]
11
+
12
+ spec.summary = "News Reader allows you to get a list of articles and get more details for any of the them"
13
+ # spec.description = %q{TODO: Write a longer description or delete this line.}
14
+ spec.homepage = "https://github.com/jgb-solutions/news-reader-gem"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ f.match(%r{^(test|spec|features)/})
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.16"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "rspec", "~> 3.0"
36
+ spec.add_development_dependency "pry"
37
+ spec.add_development_dependency "jekyll"
38
+
39
+ spec.add_dependency 'nokogiri'
40
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: news_reader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jean Gérard Bousiquot
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-10-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jekyll
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: nokogiri
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ - jgbneatdesign@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
+ - ".vscode/settings.json"
108
+ - CODE_OF_CONDUCT.md
109
+ - Gemfile
110
+ - Gemfile.lock
111
+ - LICENSE.txt
112
+ - README.md
113
+ - Rakefile
114
+ - bin/console
115
+ - bin/news-reader
116
+ - bin/setup
117
+ - fixtures/.DS_Store
118
+ - fixtures/blog/index.html
119
+ - fixtures/blog/index_files/Box.css
120
+ - fixtures/blog/index_files/Java_Box.js
121
+ - fixtures/blog/index_files/ModuleStyleSheets.css
122
+ - fixtures/blog/index_files/black.css
123
+ - fixtures/blog/index_files/blog-jive.jpg
124
+ - fixtures/blog/index_files/blog-musolfs.jpg
125
+ - fixtures/blog/index_files/blog-poolpak.jpg
126
+ - fixtures/blog/index_files/blog-portalaudit.png
127
+ - fixtures/blog/index_files/blog-semicolon1.jpg
128
+ - fixtures/blog/index_files/blog-semicolon2.jpg
129
+ - fixtures/blog/index_files/blog-spa1.jpg
130
+ - fixtures/blog/index_files/blog-spa2.jpg
131
+ - fixtures/blog/index_files/blog-statera.jpg
132
+ - fixtures/blog/index_files/blue.css
133
+ - fixtures/blog/index_files/common.js
134
+ - fixtures/blog/index_files/dark.css
135
+ - fixtures/blog/index_files/featherlight.min.css
136
+ - fixtures/blog/index_files/featherlight.min.js
137
+ - fixtures/blog/index_files/font-awesome.min.css
138
+ - fixtures/blog/index_files/green.css
139
+ - fixtures/blog/index_files/isotope.css
140
+ - fixtures/blog/index_files/jquery-ui.min.js
141
+ - fixtures/blog/index_files/jquery.carouFredSel-6.2.1-packed.js
142
+ - fixtures/blog/index_files/jquery.contentcarousel.js
143
+ - fixtures/blog/index_files/jquery.easing.1.3.js
144
+ - fixtures/blog/index_files/jquery.form.js
145
+ - fixtures/blog/index_files/jquery.hoverdir.js
146
+ - fixtures/blog/index_files/jquery.inview.js
147
+ - fixtures/blog/index_files/jquery.isotope.min.js
148
+ - fixtures/blog/index_files/jquery.magnific-popup.js
149
+ - fixtures/blog/index_files/jquery.mb.YTPlayer.js
150
+ - fixtures/blog/index_files/jquery.min.js
151
+ - fixtures/blog/index_files/jquery.nav.js
152
+ - fixtures/blog/index_files/jquery.smoothwheel.js
153
+ - fixtures/blog/index_files/jquery.sticky.js
154
+ - fixtures/blog/index_files/jquery.superslides.js
155
+ - fixtures/blog/index_files/jquery.validate.js
156
+ - fixtures/blog/index_files/jquery.vegas.css
157
+ - fixtures/blog/index_files/js
158
+ - fixtures/blog/index_files/loading.gif
159
+ - fixtures/blog/index_files/magnific-popup.css
160
+ - fixtures/blog/index_files/main.css
161
+ - fixtures/blog/index_files/main.js
162
+ - fixtures/blog/index_files/modernizr-2.6.2.min.js
163
+ - fixtures/blog/index_files/normalize.css
164
+ - fixtures/blog/index_files/ohp3fra.js
165
+ - fixtures/blog/index_files/orange.css
166
+ - fixtures/blog/index_files/paralax.js
167
+ - fixtures/blog/index_files/paralaxNEW4.css
168
+ - fixtures/blog/index_files/plugins.js
169
+ - fixtures/blog/index_files/portfolio.js
170
+ - fixtures/blog/index_files/purple.css
171
+ - fixtures/blog/index_files/red.css
172
+ - fixtures/blog/index_files/responsive3.css
173
+ - fixtures/blog/index_files/superslides.css
174
+ - fixtures/blog/index_files/turquoise.css
175
+ - fixtures/blog/index_files/util.js
176
+ - fixtures/blog/index_files/yellow.css
177
+ - lib/news_reader.rb
178
+ - lib/news_reader/article.rb
179
+ - lib/news_reader/cli.rb
180
+ - lib/news_reader/scraper.rb
181
+ - lib/news_reader/version.rb
182
+ - news_reader.gemspec
183
+ homepage: https://github.com/jgb-solutions/news-reader-gem
184
+ licenses:
185
+ - MIT
186
+ metadata:
187
+ allowed_push_host: https://rubygems.org
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.7.7
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: News Reader allows you to get a list of articles and get more details for
208
+ any of the them
209
+ test_files: []