wduck 0.1.2 → 0.1.3

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: 8c7073a84f233c73cf2b99d9665f951b6461e181
4
- data.tar.gz: 6cbc80688ada7c246acc4fa9d5b34cee716f0d7d
3
+ metadata.gz: a748a3abea56ff5c89d3809a5cead09d1c56ef79
4
+ data.tar.gz: a577e6afd96eb4a5dd1a14935fb572646332f022
5
5
  SHA512:
6
- metadata.gz: dc6d721d28011293a99e3713e118609f8cd446470384a82cb38b68e7d75e285d1457b4987c2cad1412de40e2529714620eb6a7fcb19fcfb598f6a0786c990e34
7
- data.tar.gz: 70a777a34f896d818bfb908ce957f62546ddc764c2392d0a70d8a0dec334634ae0c1ce6168df66b7d02cef9cae402d690faf431a31101d2dac6269ab39b9ea67
6
+ metadata.gz: 5d1daea712b6d485697941a8ec45698a55104718b1c6a25e2925e9dd544a7ba20aa55c9611fd3daa8c65ced24475ae1cd4885eed7d0aa85b8faf28b7f4d336b9
7
+ data.tar.gz: 434dd0d45f2ce43f4753d3082dde24e2dd2c96c98f0d6a241c1ba30d4f6ac657b95a78ab482e66e0f14f2b3d46379df3d2355f817f003bd74cb5e820bac2a8e1
@@ -7,25 +7,17 @@ module Wduck
7
7
  include Wduck::DuckHelper
8
8
 
9
9
  def initialize(query)
10
- @parsed_data = get_json_data(query)
10
+ @search_data = DuckHelper::SearchData.new(query)
11
11
  end
12
12
 
13
13
  def result
14
- heading(@parsed_data)
15
- source(@parsed_data)
14
+ @search_data.heading # eg: Linus Torvalds
15
+ @search_data.source # eg: Wikipedia
16
16
 
17
- if @parsed_data["Answer"].empty?
18
- abstract_text(@parsed_data)
19
-
20
- if @parsed_data["AbstractText"].empty?
21
- @parsed_data["RelatedTopics"].each_with_index do |result, index|
22
- result_text(index, result)
23
- end
24
- end
25
-
26
- else
27
- answer(@parsed_data)
28
- end
17
+ @search_data.answer # Helsiniki Kernel Hacker
18
+ # when results has too options like Ruby: a lang, a gem etc
19
+ @search_data.abstract
20
+ @search_data.topics_result #the all related results/topics
29
21
  end
30
22
 
31
23
  end
@@ -7,45 +7,74 @@ module Wduck
7
7
  module DuckHelper
8
8
 
9
9
  API_URL = "https://api.duckduckgo.com/"
10
- FORMAT = "json"
10
+ FORMAT = "json"
11
11
 
12
- def get_json_data(query)
13
- http = HTTPClient.new(agent_name: "ddg.rb")
14
- args = { q: query, format: FORMAT }
15
- data = http.get_content(API_URL, args )
16
- JSON.parse data
17
- end
12
+ class SearchData
18
13
 
19
- def make_sane(value)
20
- # remove html tags, convert to proper utf codes
14
+ attr_reader :answer_data
15
+ def initialize(query)
16
+ @parsed_data = get_json_data(query)
17
+ @answer_data = check_data("Answer")
18
+ @abstract_text = check_data("AbstractText")
19
+ @related_topics = check_data("RelatedTopics")
20
+ @heading = check_data("Heading")
21
+ @abstract_source = check_data("AbstractSource")
22
+ end
21
23
 
22
- coder = HTMLEntities.new
23
- re = /<("[^"]*"|'[^']*'|[^'">])*>/
24
- coder.decode(value.gsub(re, '')) #remove html tags, then make proper unicode conversion
25
- end
24
+ def heading
25
+ puts "Heading".color(:cyan).underline
26
+ display(@heading, :red )
27
+ puts ""
28
+ end
26
29
 
27
- def heading(parsed_data)
28
- unless parsed_data["Heading"].empty?
29
- puts make_sane(parsed_data["Heading"]).foreground(:red).background(:white)
30
+ def source
31
+ display(@abstract_source, :yellow)
32
+ puts " "
30
33
  end
31
- end
32
34
 
33
- def source(parsed_data)
34
- unless parsed_data["AbstractSource"].empty?
35
- puts "Source: #{make_sane(parsed_data["AbstractSource"])}".color(:yellow)
35
+ def abstract
36
+ display(@abstract_text, :green)
36
37
  end
37
- end
38
38
 
39
- def abstract_text(parsed_data)
40
- puts make_sane(parsed_data["AbstractText"]).color(:green)
41
- end
39
+ def topics_result
40
+ if @related_topics
41
+ puts ""
42
+ puts "Related Topics".color(:white).underline
43
+ puts ""
44
+ @related_topics.each do |result|
45
+ puts "#{display(result["Text"], :green)}" if result["Text"]
46
+ end
47
+ end
48
+ end
42
49
 
43
- def result_text(index, result)
44
- puts "#{(index + 1)}, #{make_sane(result["Text"]).color(:green)}" if result["Text"]
45
- end
50
+ def answer
51
+ display(@answer_text, :yellow)
52
+ end
53
+
54
+ private
55
+
56
+ def get_json_data(query)
57
+ http = HTTPClient.new(agent_name: "ddg.rb")
58
+ args = { q: query, format: FORMAT }
59
+ data = http.get_content(API_URL, args )
60
+ JSON.parse data
61
+ end
62
+
63
+ def check_data(data)
64
+ @parsed_data[data].empty? ? nil : @parsed_data[data]
65
+ end
66
+
67
+ def display(type, color)
68
+ puts make_sane(type).color(color) if type
69
+ end
70
+
71
+ def make_sane(value)
72
+ # remove html tags, convert to proper utf codes
73
+ coder = HTMLEntities.new
74
+ re = /<("[^"]*"|'[^']*'|[^'">])*>/
75
+ coder.decode(value.gsub(re, '')) #remove html tags, then make proper unicode conversion
76
+ end
46
77
 
47
- def answer(parsed_data)
48
- puts make_sane(parsed_data["Answer"]).color(:green)
49
78
  end
50
79
  end
51
80
 
@@ -1,3 +1,3 @@
1
1
  module Wduck
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wduck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vysakh Sreeenivasan
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rdoc
28
+ name: httpclient
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: aruba
42
+ name: htmlentities
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '>='
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: httpclient
56
+ name: rainbow
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -67,27 +67,27 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: htmlentities
70
+ name: gli
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
75
+ version: 2.7.0
76
+ type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 2.7.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: rainbow
84
+ name: httpclient
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
- type: :development
90
+ type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: gli
98
+ name: htmlentities
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '='
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
- version: 2.7.0
103
+ version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
- version: 2.7.0
110
+ version: '0'
111
111
  description: A command line tool to get instant zero click result from ddg
112
112
  email: diplomatv@gmail.com
113
113
  executables: