news_reader_cli 0.1.2 → 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
  SHA256:
3
- metadata.gz: 880b95a69ff20a7a2ae3931a34ffc7f894939626533875bf43c9cedbc4030539
4
- data.tar.gz: 560ab6f114804d3ea56aa51e40a159e9db1e2bfc3e9cf4f8f60ad7ebd690b796
3
+ metadata.gz: 1ed81ae14dd7eea58d2bf48038ed725445805b665c912220b979a4178c5596c9
4
+ data.tar.gz: 00c22455934a4258b613511cbbd36032fc2edb2c2e5eb350fd37a31c8db53467
5
5
  SHA512:
6
- metadata.gz: aee2bce849d2059642ec85046b95a316c53c784dc33b94fdf5757675e871defae4524da2619ca435fca7d431fe73d40955b06eca4eb5df4bbb4dc2625ad246b2
7
- data.tar.gz: 59f564d2d0b33b548491b74b675271dc06e7dbf284a5e292509c9d9f8284b5b859ed5fa743f30340ffa8e0d65009d833e192f137b458fa946b9c6c9182e94e05
6
+ metadata.gz: 0f1a7d0f461b6910ebebd551e78f302022127462c4e6e6e07332bf5a1e00d9bf7783d46ffaf5bbe571aabe4cf05047c5b652dd6cc6d61b503ee32751def63f68
7
+ data.tar.gz: 2e42c7d7c11bf0c418ae7da8cc052dc465fde97e96bd464dd8c457e1b621b393a6a7846bcfbf5e8e9de6d4f49b3d2e289d5f05526cc487ead6b990667c6aeaef
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- news_reader_cli (0.1.2)
4
+ news_reader_cli (0.2.0)
5
5
  dotenv
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/news_reader_cli`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
5
- This Ruby Gem provides a CLI to view 36 live breaking headlines and contents from a variety of top US major publishers.
5
+ This Ruby Gem provides a command Line interface to view live breaking headlines and contents from a variety of top US major publishers.
6
6
 
7
7
  ## Installation
8
8
 
@@ -39,7 +39,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
39
39
 
40
40
  ## Contributing
41
41
 
42
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/news_reader_cli. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
42
+ Bug reports and pull requests are welcome on GitHub at https://github.com/hankeliu2015/news_reader_cli. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
43
43
 
44
44
  ## License
45
45
 
@@ -47,4 +47,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
47
47
 
48
48
  ## Code of Conduct
49
49
 
50
- Everyone interacting in the NewsReaderCli project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/news_reader_cli/blob/master/CODE_OF_CONDUCT.md).
50
+ Everyone interacting in the NewsReaderCli project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hankeliu2015/news_reader_cli/blob/master/CODE_OF_CONDUCT.md).
@@ -1,11 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/ usr/bin/env ruby
2
2
  require_relative "../lib/news_reader_cli"
3
-
4
- # myapikey = open(File.expand_path(".newsapi.rb", "~/Development/m1/news_reader_cli")).read.strip
5
- # binding.pry
6
-
7
- # NewsReaderCli::ApiKeyValidate.new.key_validate
8
-
9
- # binding.pry
10
- # Dotenv.load # defaul will looking for ('.env')
11
- NewsReaderCli::CLI.new.start
3
+ cli = NewsReaderCli::CLI.new
4
+ cli.start
@@ -5,12 +5,8 @@ require_relative "./news_reader_cli/version" #require "news_reader_cli/version"
5
5
  require_relative "./news_reader_cli/cli"
6
6
  require_relative "./news_reader_cli/api_service"
7
7
  require_relative "./news_reader_cli/article"
8
- require_relative "./news_reader_cli/api_key_input_validate"
9
8
  require_relative "./news_reader_cli/api_key_validate"
10
9
 
11
- # Bundler.require(*Rails.groups)
12
- # Dotenv::Railtie.load
13
- # HOSTNAME = ENV['HOSTNAME']
14
10
 
15
11
  module NewsReaderCli
16
12
  # Your code goes here...
@@ -1,39 +1,24 @@
1
1
  class NewsReaderCli::ApiKeyValidate
2
2
  def key_validate
3
- # verify if the file .env exist.
4
- # File.expand_path if return true, the file exist. if not, File.new create a file.
5
- # if not create one. Let user input the key.
6
- # if .env exists, load the file.
3
+
7
4
  if !File.exist?(".env")
8
- key_file = File.new(".env", "w+")
9
5
  puts "please type in API Key from API News:"
10
-
11
- # a condition verify key value is AES 128 Hex string 32 chars
12
-
13
6
  key = gets.chomp.strip
14
- #
15
- # while !key.match(/([0-9]|\w){32}/) do
16
- #
17
- # break if key == "exit"
18
- # # need to get out of the loop and remove the file .env
19
- #
20
- # puts <<-HEREDOC
21
- #
22
- # Your API keys value shows invalid.
23
- # Please check verify your API Key and type in again.
24
- #
25
- # HEREDOC
26
- #
27
- # key = gets.chomp.strip
28
- # end
29
7
 
8
+ url = 'https://newsapi.org/v2/top-headlines?'\
9
+ 'country=us&'\
10
+ "apiKey=#{key}&"\
11
+ 'pageSize=100'
12
+ begin
13
+ req = open(url)
14
+ rescue
15
+ puts "You API Key is not valid, please try again."
16
+ return self.key_validate
17
+ end
30
18
 
31
- #key = key_instance.validated_key
19
+ key_file = File.new(".env", "w+")
32
20
  key_file.puts("key = #{key}")
33
21
  key_file.close
34
-
35
- #binding.pry
36
22
  end
37
-
38
23
  end
39
24
  end
@@ -2,20 +2,21 @@ class NewsReaderCli::ApiService
2
2
 
3
3
  def self.newsapi
4
4
  #url = "https://newsapi.org/v2/top-headlines?country=us&apiKey=(put key here)&pageSize=100"
5
+ Dotenv.load
5
6
  assigned_api_key = ENV['key'].strip
6
- #binding.pry
7
+
7
8
  url = 'https://newsapi.org/v2/top-headlines?'\
8
9
  'country=us&'\
9
10
  "apiKey=#{assigned_api_key}&"\
10
11
  'pageSize=100'
11
12
  req = open(url)
13
+
12
14
  response_body = req.read
13
15
  json = JSON.parse(response_body)
14
16
 
15
17
  json["articles"].each do |article|
16
18
  NewsReaderCli::Article.new(article)
17
19
  end
18
- #binding.pry
19
20
 
20
21
  end
21
22
 
@@ -1,16 +1,13 @@
1
1
  class NewsReaderCli::Article
2
2
 
3
3
  attr_accessor :source, :author, :title, :description, :url, :urltoimage, :publishedAt, :content
4
-
5
4
  @@all = []
6
5
 
7
6
  def initialize(article_hash)
8
-
9
7
  article_hash.each do |method, article_data|
10
8
  self.send("#{method}=", article_data) if self.respond_to?("#{method}=")
11
9
  end
12
10
  @@all << self
13
-
14
11
  end
15
12
 
16
13
  def self.all
@@ -19,44 +16,22 @@ class NewsReaderCli::Article
19
16
 
20
17
  #list all the articlels titles (in alphabat )
21
18
  def self.list_all_titles
22
- self.all.each.with_index(1) do |article, index|
23
- puts "#{index}. #{article.title}"
19
+ self.all.collect.with_index(1) do |article, index|
20
+ "#{index}. #{article.title}"
24
21
  end
25
22
  end
26
23
 
27
24
  #find the article instance by article index number
28
25
  def self.find_article_by_article_index(number)
29
- self.all.find.with_index(1) do |article, index|
30
- index == number
31
- end
32
- end
26
+ self.all[number - 1]
33
27
 
34
- # pick an article to show the content
35
- # def self.find_content_by_article_index(number)
36
- # self.all.find.with_index(1) do |article, index|
37
- # index == number
38
- # #binding.pry
39
- # end.content
40
- # end
28
+ end
41
29
 
42
- # find an article's URL
30
+ # find an article's URL by using iterations
43
31
  def self.find_url_by_article_index(number)
44
32
  self.all.find.with_index(1) do |article, index|
45
33
  index == number
46
34
  end.url
47
35
  end
48
36
 
49
- # def self.find_source_name_by_article_index(number)
50
- # self.all.find.with_index(1) do |article, index|
51
- # index == number
52
- # end.source["name"]
53
- # end
54
-
55
- # def self.find_pub_date_by_article_index(number)
56
- # self.all.find.with_index(1) do |article, index|
57
- # index == number
58
- # end.publishedAt
59
- # end
60
-
61
-
62
37
  end #end of class
@@ -2,57 +2,22 @@
2
2
  class NewsReaderCli::CLI
3
3
 
4
4
  def start
5
-
6
-
7
- # key_instance = NewsReaderCli::ApiKeyInputValidate.new
8
- # key_instance.key_input_validate
9
-
10
5
  NewsReaderCli::ApiKeyValidate.new.key_validate
11
- Dotenv.load
12
- #
13
- # if !File.exist?(".env")
14
- # key_file = File.new(".env", "w+")
15
- # key = key_instance.validated_key
16
- # key_file.puts("key = #{key}")
17
- # key_file.close
18
-
19
- # end
20
-
21
- #compare input key with env variable
22
- #if they are equal, keep going. if not change the value.
23
-
24
- # if key_instance.validated_key != ENV['key']#.strip
25
- # key = key_instance.validated_key
26
- # key_file.puts("key = #{key}")
27
- # key_file.close
28
- #
29
- # end
30
-
31
- # assigned_api_key = ENV['key'].strip
32
- #
33
- # if assigned_api_key == 'exit'
34
- # puts "Goodbye"
35
- # return
36
- # end
37
-
38
6
  NewsReaderCli::ApiService.newsapi
39
7
  puts "Welcome to the News Reader CLI!!!"
40
8
  menu
41
9
  goodbye
42
-
43
10
  end
44
11
 
45
12
  def menu
46
-
47
13
  help_menu
48
-
49
14
  input = ""
50
15
 
51
16
  while input != "exit" do
52
17
  input = gets.chomp.strip
53
18
 
54
19
  if input == "list"
55
- NewsReaderCli::Article.list_all_titles
20
+ puts NewsReaderCli::Article.list_all_titles
56
21
 
57
22
  elsif input.slice(0) == "a" && (1..(NewsReaderCli::Article.all.length)).include?(input.gsub(/[a]/, '').to_i)
58
23
  found_article_instance = NewsReaderCli::Article.find_article_by_article_index(input.gsub(/[a]/, '').to_i)
@@ -64,6 +29,14 @@ class NewsReaderCli::CLI
64
29
  puts "Published Date: #{found_article_instance.publishedAt}"
65
30
  puts "Publisher: #{found_article_instance.source["name"]}"
66
31
  puts "Article URL: #{found_article_instance.url}"
32
+ puts "To open article's URL, type 'y'. Any key return to user menu}"
33
+
34
+ input_for_url = gets.chomp.strip
35
+ if input_for_url == "y"
36
+ found_url = NewsReaderCli::Article.find_url_by_article_index(input.gsub(/[a]/, '').to_i) #[a] instead of [u]
37
+ puts "Please check your browser, your article is opening now."
38
+ system("open", "#{found_url}")
39
+ end
67
40
 
68
41
  elsif input.slice(0) == "u" && (1..(NewsReaderCli::Article.all.length)).include?(input.gsub(/[u]/, '').to_i)
69
42
  found_url = NewsReaderCli::Article.find_url_by_article_index(input.gsub(/[u]/, '').to_i)
@@ -72,20 +45,12 @@ class NewsReaderCli::CLI
72
45
  system("open", "#{found_url}")
73
46
 
74
47
  elsif input == "exit"
75
- #not output here. need to end the inner loop.
48
+
76
49
  else
77
50
  puts "Sorry! input is not valid. Please follow instructions."
78
51
  end
79
52
 
80
53
  self.help_menu
81
-
82
- # puts <<-HEREDOC
83
- #
84
- # 1. Please type 'list' for a list of today's news headlines.
85
- # 2. To read an article, please type 'a' follow by index number.
86
- # 3. To open an article url, please type 'u' follow by index number.
87
- # 4. To Exit, type 'exit'.
88
- # HEREDOC
89
54
  end
90
55
  end
91
56
 
@@ -95,32 +60,15 @@ class NewsReaderCli::CLI
95
60
 
96
61
  def help_menu
97
62
  puts <<-HEREDOC
63
+
64
+
98
65
  1. Please type 'list' for a list of today's news headlines.
99
66
  2. To read an article, please type 'a' follow by index number.
67
+ For Example, to read article 1, type in a1.
100
68
  3. To open an article's url from publisher's website, please type 'u' follow by index number.
69
+ For example, to open url for article 1, type in u1.
101
70
  4. To Exit, type 'exit'.
102
71
  HEREDOC
103
72
  end
104
73
 
105
74
  end #end of class
106
-
107
- # input2 = ""
108
- # input2 = gets.chomp.strip
109
- #
110
- # if input2.slice!(0) == "a" && (1..(NewsReaderCli::Article.all.length)).include?(input2.to_i)
111
- # found_content = NewsReaderCli::Article.find_content_by_article_index(input2.to_i)
112
- # puts "#{found_content}"
113
- # puts "Please type in 'l' to get today's news headlines"
114
- # puts "To Exit, pease type 'exit'."
115
- #
116
- # elsif input2.slice!(0) == "u" && (1..(NewsReaderCli::Article.all.length)).include?(input2.to_i)
117
- # found_url = NewsReaderCli::Article.find_url_by_article_index(input2.to_i)
118
- # puts "#{found_url}"
119
- # puts "Please type in 'l' to get today's news headlines"
120
- # puts "To Exit, pease type 'exit'."
121
- # elsif
122
- # puts "It is not a valid input article number, please follow instructions."
123
- # end
124
- # else
125
- # puts "Please type 'l' today's news headlines."
126
- # puts "To Exit, type 'exit'."
@@ -1,3 +1,3 @@
1
1
  module NewsReaderCli
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: news_reader_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-01 00:00:00.000000000 Z
11
+ date: 2019-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -101,7 +101,6 @@ files:
101
101
  - bin/news_reader_cli
102
102
  - bin/setup
103
103
  - lib/news_reader_cli.rb
104
- - lib/news_reader_cli/api_key_input_validate.rb
105
104
  - lib/news_reader_cli/api_key_validate.rb
106
105
  - lib/news_reader_cli/api_service.rb
107
106
  - lib/news_reader_cli/article.rb
@@ -1,30 +0,0 @@
1
- class NewsReaderCli::ApiKeyInputValidate
2
-
3
- # def key_input_validate
4
- # puts "please type in API Key from API News:"
5
- #
6
- # @key = gets.chomp.strip
7
- #
8
- # while !@key.match(/([0-9]|\w){32}/) do
9
- #
10
- # break if @key == "exit"
11
- # # need to get out of the loop and remove the file .env
12
- #
13
- # puts <<-HEREDOC
14
- #
15
- # Your API keys value might missing digits or contain invalid Charactors.
16
- # Please verify your API Key and try again. Thanks!
17
- #
18
- # HEREDOC
19
- #
20
- # @key = gets.chomp.strip
21
- # end
22
- #
23
- # end #end of method
24
- #
25
- #
26
- # def validated_key
27
- # @key
28
- # end
29
-
30
- end #end of class