retro_casts 0.1.1 → 0.1.2

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: 8d43bc520b1bbae95a02495d407e2ef2fe1539c9
4
- data.tar.gz: 8c0c7dba1d25cf34b0ec5d484d4b8360901e828f
3
+ metadata.gz: 0887e40856e01457973f7ed69e1a87de193486ff
4
+ data.tar.gz: 85c8c20e982647e25aeeecc5aed2220b0f2806bc
5
5
  SHA512:
6
- metadata.gz: ac33f07eba501505315d9d51998e6b155b4a5938b91703d7222da251760ab5e5a255e0f7fb85f1c5b35211c6039adb5b69b5fe527b5b8d0297074d6b7577ddc9
7
- data.tar.gz: 53422a890ff8a35b0d1aa36f4a9c62b3ec04266d2420d4518ab2130b99fdb1c920db0a2e9faa3bdb41e8045e07a5cd8fb18f3e21f1c3e864097c84588ac0daff
6
+ metadata.gz: 67c77b0e69c56f4761da8ad0379e07a52ce9e038af18d646fd070ea8a49ac107238ef4287f762209facffd93d024180de378e2412730c27fe45b9fd4a91ead20
7
+ data.tar.gz: abcbfd8f394adf23e6eefd6979614a26f32bfef9e2c2be333478afd6487d56e65ca379d2b5c65838428adf46e97e32a0ddc32a642e400c1b21422c49d336eeed
@@ -1,6 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require 'retro_casts'
3
+ require_relative '../lib/retro_casts'
4
4
 
5
5
  RetroCasts.start
6
6
 
@@ -1,12 +1,12 @@
1
1
  require "nokogiri"
2
2
  require "open-uri"
3
3
 
4
- require "retro_casts/version"
5
- require "retro_casts/rails_casts"
6
- require "retro_casts/episode"
7
- require "retro_casts/website"
8
- require "retro_casts/null_website"
9
- require "retro_casts/CLI"
4
+ require_relative "./retro_casts/version"
5
+ require_relative "./retro_casts/rails_casts"
6
+ require_relative "./retro_casts/episode"
7
+ require_relative "./retro_casts/website"
8
+ require_relative "./retro_casts/null_website"
9
+ require_relative "./retro_casts/CLI"
10
10
 
11
11
  require 'pry'
12
12
 
@@ -24,8 +24,11 @@ module RetroCasts
24
24
  end
25
25
 
26
26
  message = ""
27
+ exit_all_loops = false
27
28
 
28
29
  loop do
30
+ break if exit_all_loops
31
+
29
32
  display("#" * 50)
30
33
  site.list_episodes
31
34
 
@@ -44,16 +47,19 @@ module RetroCasts
44
47
  episode = site.episode(command.to_i)
45
48
  site.show_episode_detail(command.to_i)
46
49
 
47
- puts "Type 'back' to go back or 'open' to open the episode in your browser."
50
+ puts "Type 'back' to go back, 'open' to open the episode in your browser, or 'exit' to exit."
48
51
  print ">"
49
52
 
50
53
  case $stdin.gets.chomp.downcase
54
+ when "exit"
55
+ exit_all_loops = true
56
+ break
51
57
  when "back"
52
58
  break
53
59
  when "open"
54
- `open #{site.host}/#{episode.link}`
60
+ `open #{episode.link}`
55
61
  else
56
- puts "Please choose 'exit' or 'open'."
62
+ puts "Please choose 'back' or 'open'."
57
63
  print ">"
58
64
  end
59
65
  end
@@ -63,16 +69,16 @@ module RetroCasts
63
69
  case command.downcase
64
70
  when "home"
65
71
  puts "Going back to the homepage..."
66
- site = site.get_search(nil)
72
+ site.get_search(nil)
67
73
  when "search"
68
74
  puts "Searching for \"#{argument}\"..."
69
- site = site.get_search(argument)
75
+ site.get_search(argument)
70
76
  when "next"
71
77
  puts "Opening page #{site.page + 1}..."
72
- site = site.next_page
78
+ site.next_page
73
79
  when "back"
74
80
  puts "Opening page #{site.page - 1}..."
75
- site = site.prev_page
81
+ site.prev_page
76
82
  when "exit"
77
83
  break
78
84
  else
@@ -1,6 +1,15 @@
1
1
  module RetroCasts
2
2
  class Episode
3
3
  attr_accessor :title, :number, :date, :length, :link, :description
4
+
5
+ def initialize(attributes = {})
6
+ @title = attributes[:title]
7
+ @number = attributes[:number]
8
+ @date = attributes[:date]
9
+ @length = attributes[:length]
10
+ @link = attributes[:link]
11
+ @description = attributes[:description]
12
+ end
4
13
 
5
14
  def date
6
15
  @date.strftime("%b %-d, %Y")
@@ -14,10 +14,7 @@ module RetroCasts
14
14
  @search = search
15
15
  @website = website
16
16
 
17
- @url = build_url
18
-
19
- nodeset = website.get_list(url, filter)
20
- @episodes = parse_episodes(nodeset)
17
+ update
21
18
  end
22
19
 
23
20
  def episode?(number)
@@ -33,20 +30,19 @@ module RetroCasts
33
30
  end
34
31
 
35
32
  def get_search(search_term)
36
- self.class.new(search: search_term, website: website)
33
+ @search = search_term
34
+ update
37
35
  end
38
36
 
39
37
  def next_page
40
- self.class.new(search: search,
41
- page: page + 1,
42
- website: website)
38
+ @page += 1
39
+ update
43
40
  end
44
41
 
45
42
  def prev_page
46
43
  if page > 1
47
- self.class.new(search: search,
48
- page: page - 1,
49
- website: website)
44
+ @page -= 1
45
+ update
50
46
  else
51
47
  self
52
48
  end
@@ -68,6 +64,11 @@ module RetroCasts
68
64
  end
69
65
 
70
66
  private
67
+ def update
68
+ @url = build_url
69
+ @episodes = parse_episodes(website.get_list(url, filter))
70
+ end
71
+
71
72
  def build_url
72
73
  attributes = {}
73
74
 
@@ -96,42 +97,20 @@ module RetroCasts
96
97
  end
97
98
 
98
99
  def create_episode(node)
99
- episode = Episode.new
100
- episode.title = title(node)
101
- episode.number = number(node)
102
- episode.date = date(node)
103
- episode.length = length(node)
104
- episode.link = link(node)
105
- episode.description = description(node)
106
- return episode
107
- end
108
-
109
- def title(node)
110
- node.css(".main h2 a").text
111
- end
112
-
113
- def number(node)
114
- text = node.css(".number").text
115
- text.match(/\d+/).to_s.to_i
116
- end
117
-
118
- def date(node)
119
- text = node.css(".published_at").text
120
- Date.parse(text)
121
- end
122
-
123
- def length(node)
124
- text = node.css(".stats").text
125
- text.match(/\d+/).to_s.to_i
126
- end
127
-
128
- def link(node)
129
- node.css(".screenshot a").first.attributes["href"].value
130
- end
131
-
132
- def description(node)
133
- text = node.css(".description").text
134
- text.sub(/\(\d+ minutes\)/, '').delete("\n").strip
100
+ Episode.new({
101
+ title: node.css(".main h2 a").text,
102
+ number: extract_integer(node.css(".number")),
103
+ date: Date.parse(node.css(".published_at").text),
104
+ length: extract_integer(node.css(".stats")),
105
+ link: host + node.css(".screenshot a").first.attributes["href"].value,
106
+ description: node.css(".description")
107
+ .text.sub(/\(\d+ minutes\)/, '')
108
+ .delete("\n").strip
109
+ })
110
+ end
111
+
112
+ def extract_integer(data)
113
+ data.text.match(/\d+/).to_s.to_i
135
114
  end
136
115
  end
137
116
  end
@@ -1,3 +1,3 @@
1
1
  module RetroCasts
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retro_casts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Savage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-17 00:00:00.000000000 Z
11
+ date: 2016-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler