wduck 0.1.2 → 0.1.3

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: 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: