retro_casts 0.1.1 → 0.1.2

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