epodder 0.0.4 → 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ecd79269c9453422ef0c084f210dc069f65c290b
4
+ data.tar.gz: 3fecdad4ad7a39555589713bb6798f26c6906bc2
5
+ SHA512:
6
+ metadata.gz: bb4d61a4fbb044c995646026948546d678cf3c92806d69d2c9871b9cfd60750b500b0e7c58f6b8b17cd2a81cce8be6832929396293a73a21d60130e6076c1ad5
7
+ data.tar.gz: 94c55e0cff2e673c57a2ea998dfa32e7974453287314dccae05f418d753a32ed1a719f6894a08a0b5fde79db85b958aacaef288b515031f85878f3ab775d8816
data/bin/epodder CHANGED
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
- require "bundler/setup"
3
+ require 'bundler/setup'
4
+ require 'require_all'
5
+ require 'cmdparse'
6
+ require 'yell'
7
+
4
8
  require_relative '../lib/epodder'
5
9
 
6
10
  Epodder.run
data/lib/arguments.rb CHANGED
@@ -48,8 +48,6 @@ module Epodder
48
48
  def method_missing(name, value=nil, *args)
49
49
  if @args.has_key? name
50
50
  @args[name]
51
- else
52
- nil
53
51
  end
54
52
  end
55
53
 
@@ -1,6 +1,6 @@
1
1
  #TODO clean up nil!!
2
2
  module Epodder
3
- class Configurator
3
+ class Configurator < Eclass
4
4
  @@default_path = "~/.epodder/"
5
5
  @@db_path = "epodder.db"
6
6
  @@yaml_path = "epodder.yaml"
@@ -62,6 +62,7 @@ module Epodder
62
62
  false
63
63
  end
64
64
 
65
+
65
66
  def start_logging
66
67
  logger = Yell.new :name => 'log' do |l|
67
68
  if @args.log_file.nil?
@@ -1,6 +1,6 @@
1
1
  require 'data_mapper'
2
2
  module Epodder
3
- class Episode
3
+ class Episode < Eclass
4
4
  include DataMapper::Resource
5
5
 
6
6
  property :id, Serial
@@ -1,5 +1,5 @@
1
1
  module Epodder
2
- class Podcast
2
+ class Podcast < Eclass
3
3
  include DataMapper::Resource
4
4
  property :id, Serial
5
5
  property :title, String, :length=> 500
data/lib/epodder.rb CHANGED
@@ -1,33 +1,26 @@
1
1
  module Epodder
2
- require "rubygems"
3
- require "bundler/setup"
4
- require 'require_all'
5
- require 'data_mapper'
6
- require 'cmdparse'
7
- require 'yell'
2
+ require_all File.dirname(File.dirname(__FILE__)) << '/lib'
8
3
 
9
- require_all File.dirname(File.dirname(__FILE__)) << '/lib'
4
+ @@verbose = false
10
5
 
11
- @@verbose = false
6
+ def verbose?
7
+ @@verbose
8
+ end
12
9
 
13
- def verbose?
14
- @@verbose
15
- end
10
+ def verbose= state
11
+ @@verbose = state
12
+ end
16
13
 
17
- def verbose= state
18
- @@verbose = state
19
- end
14
+ def self.do_verb verb, args
15
+ c = Epodder.const_get(verb.to_s.capitalize)
16
+ verb_object = c.send :new
17
+ verb_object.send verb, args
18
+ end
20
19
 
21
- def self.do_verb verb, args
22
- c = Epodder.const_get(verb.to_s.capitalize)
23
- verb_object = c.send :new
24
- verb_object.send verb, args
25
- end
26
-
27
- def self.run
28
- args = Arguments.new
29
- Configurator.new(args)
30
- do_verb args.action, args.arguments
31
- end
20
+ def self.run
21
+ args = Arguments.new
22
+ Configurator.new(args)
23
+ do_verb args.action, args.arguments
24
+ end
32
25
 
33
26
  end
data/lib/verb/catchup.rb CHANGED
@@ -4,16 +4,12 @@ module Epodder
4
4
  if args.empty?
5
5
  podcasts = Podcast.all
6
6
  else
7
- podcasts = args.map {|id| Podcast.get(id)}
7
+ podcasts = args.map {|id| Podcast.get(id.to_i)}
8
8
  end
9
- catchup_podcasts podcasts
10
- end
11
-
12
- def catchup_podcasts podcasts
13
- podcasts.each do |podcast|
9
+ podcasts.each do |podcast|
14
10
  Episode.all(:downloaded => false, :podcast => podcast).update(:downloaded => true)
15
11
  end
16
- end
12
+ end
17
13
  end
18
14
 
19
15
  end
data/lib/verb/clean.rb CHANGED
@@ -8,7 +8,7 @@ module Epodder
8
8
  if args.empty?
9
9
  podcasts = Podcast.all
10
10
  else
11
- podcasts = args.map{|podcast| Podcast.get(podcast)}
11
+ podcasts = args.map{|podcast| Podcast.get(podcast.to_i)}
12
12
  end
13
13
  podcasts.each do |podcast|
14
14
  count = 0
@@ -17,15 +17,13 @@ module Epodder
17
17
  known_episodes = known_episodes.map{|episode| episode.url.to_s}
18
18
  feed_episodes = feed_episodes.map{|episode|@episode = episode; episode.enclosure.url}
19
19
  episodes = (known_episodes - feed_episodes)
20
- puts "know episodes was #{known_episodes.length - feed_episodes.length} longer than feed episodes"
20
+ episodes_length = episodes.length
21
21
  episodes.map{|episode| Episode.all(:url => episode)}.each do |episode|
22
- count += 1
23
- win = episode.destroy
24
- if !win
22
+ if !episode.destroy
25
23
  episode.errors.each {|error| puts error}
26
24
  end
27
25
  end
28
- puts "#{podcast.title} -- cleaned #{count} episodes"
26
+ puts "#{podcast.title} -- cleaned #{episodes_length} episodes"
29
27
  end
30
28
  end
31
29
 
data/lib/verb/download.rb CHANGED
@@ -9,11 +9,12 @@ module Epodder
9
9
  end
10
10
 
11
11
  def download args
12
- look_for_episodes lookup_args(args)
12
+ each_argument(args) do |podcast|
13
+ look_for_episodes podcast
14
+ end
13
15
  end
14
16
 
15
- def look_for_episodes podcasts
16
- podcasts.each do |podcast|
17
+ def look_for_episodes podcast
17
18
  episodes = Episode.all(:downloaded => false, :podcast => podcast)
18
19
  episodes.select{|ep| !ep.nil?}.each do |episode|
19
20
  puts episode.podcast.title
@@ -22,14 +23,13 @@ module Epodder
22
23
  puts "Downloading #{title} - #{episode.title || episode.id}"
23
24
  download_episode episode
24
25
  end
25
- end
26
26
  end
27
27
 
28
28
  def download_episode episode
29
29
  begin
30
30
  @mechanize.get(episode.url).save_as("download/#{episode.podcast.title.strip}/#{episode.url.to_s.match('((?!\/).)*$')}")
31
31
  episode.mark_as_downloaded
32
- rescue Exception => e
32
+ rescue StandardError => e
33
33
  puts e
34
34
  end
35
35
  end
data/lib/verb/remove.rb CHANGED
@@ -6,6 +6,12 @@ module Epodder
6
6
  end
7
7
 
8
8
  def remove args
9
+ each_argument(args) do |podcast|
10
+ input = ask("Remove #{podcast.id} : #{podcast.title}? Type \"YES\" to remove")
11
+ if input == "YES"
12
+ podcast.destroy
13
+ end
14
+ end
9
15
  args.map{|id| Podcast.get(id)}.each do |podcast|
10
16
  input = ask("Remove #{podcast.id} : #{podcast.title}? Type \"YES\" to remove")
11
17
  if input == "YES"
data/lib/verb/update.rb CHANGED
@@ -11,53 +11,52 @@ module Epodder
11
11
  end
12
12
 
13
13
  def update args
14
- check_for_new_episodes lookup_args(args)
14
+ each_argument(args) do |podcast|
15
+ check_for_new_episodes podcast
16
+ end
15
17
  end
16
18
 
17
- def check_for_new_episodes podcasts
18
- podcasts.each do |podcast|
19
- @podcast = podcast
20
- @podcast_urls = @podcast.episodes.map {|episode| episode.url}
19
+ def check_for_new_episodes podcast
21
20
  max_pub = get_max_pubdate podcast
22
21
  open_podcast podcast, max_pub
23
- end
24
22
  end
25
23
 
26
24
  def get_max_pubdate podcast
27
- Episode.max(:pub_date, :conditions => { :podcast => podcast}) || Time.at(0).to_date
25
+ Episode.max(:pub_date, :conditions => { :podcast => podcast }) || Time.at(0).to_date
28
26
  end
29
27
 
30
28
  def open_podcast podcast, max_pub
31
29
  begin
32
30
  @mechanize.get(podcast.uri) do |feed|
33
31
  @log.info "Maximum pubdate for #{podcast.title} - #{podcast.id} is #{max_pub}"
34
- parse_feed feed, max_pub
32
+ parse_feed feed, podcast, max_pub
35
33
  end
36
- rescue Exception => e
37
- puts e
34
+ rescue StandardError => e
35
+ puts "#{podcast.title} - #{e}"
38
36
  end
39
37
  end
40
38
 
41
- def parse_feed feed, max_pub
39
+ def parse_feed feed, database_podcast, max_pub
42
40
  podcast = FeedMe.parse feed.body
43
41
  podcast.emulate_atom!
44
- @count = 0
45
- podcast.items.each do |item|
46
- add_eligable_episodes item, max_pub
47
- end
48
- puts "#{@podcast.title} has #{@count} new episodes" if @count > 0
42
+ pending_episodes = podcast.items.select {|item| is_valid? item, max_pub}
43
+ pending_episodes.each {|pending_episode| add_eligible_episode database_podcast, pending_episode }
44
+ length = pending_episodes.length
45
+ puts "#{database_podcast.title} has #{length} new episodes" if length > 0
46
+ end
47
+
48
+ def is_valid? item, max_pub
49
+ item.enclosure && item.pubdate.to_date > max_pub.to_date
49
50
  end
50
51
 
51
- def add_eligable_episodes item, max_pub
52
- if item.enclosure && item.pubdate.to_date > max_pub.to_date
52
+ def add_eligible_episode podcast, item
53
53
  begin
54
- @count += 1
55
54
  ep = Episode.first_or_create(
56
55
  :title => item.title,
57
56
  :url => item.enclosure.url,
58
57
  :pub_date => item.pubdate.to_date,
59
58
  :downloaded => false,
60
- :podcast => @podcast
59
+ :podcast => podcast
61
60
  )
62
61
  ep.errors.each do |error|
63
62
  @log.error error
@@ -65,8 +64,8 @@ module Epodder
65
64
 
66
65
  rescue Exception => e
67
66
  @log.error e
67
+ raise e
68
68
  end
69
- end
70
69
  end
71
70
 
72
71
  end
data/lib/verb/verb.rb CHANGED
@@ -1,24 +1,37 @@
1
1
  module Epodder
2
- class Verb < Eclass
3
- def verb_struct
4
- super
5
- Struct.new(:name,:description,:block)
6
- end
2
+ class Verb < Eclass
3
+ def verb_struct
4
+ super
5
+ Struct.new(:name,:description,:block)
6
+ end
7
7
 
8
- def add_command (cmd, args)
9
- command = CmdParse::Command.new(@verb.name,false,false)
10
- command.short_desc = @verb.description
11
- command.set_execution_block(&@verb.block)
12
- cmd.add_command(command)
13
- end
8
+ def add_command (cmd, args)
9
+ command = CmdParse::Command.new(@verb.name,false,false)
10
+ command.short_desc = @verb.description
11
+ command.set_execution_block(&@verb.block)
12
+ cmd.add_command(command)
13
+ end
14
14
 
15
- def lookup_args args
16
- if args.empty?
17
- podcasts = Podcast.all
18
- else
19
- podcasts = args.map {|id| Podcast.get(id)}
20
- end
21
- end
15
+ def lookup_args args
16
+ if args.empty?
17
+ podcasts = Podcast.all
18
+ else
19
+ podcasts = args.map {|id| Podcast.get(id.to_i)}
20
+ end
21
+ end
22
22
 
23
- end
23
+ def each_argument args, &block
24
+ podcasts = nil
25
+ if args.empty?
26
+ podcasts = Podcast.all
27
+ else
28
+ podcasts = args.map {|id| Podcast.get(id.to_i)}
29
+ end
30
+ podcasts.each do |podcast|
31
+ yield podcast
32
+ end
33
+ end
34
+
35
+
36
+ end
24
37
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epodder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Eric Bergstrom
@@ -14,145 +13,225 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: feedme
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: mechanize
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: cmdparse
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: data_mapper
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: dm-sqlite-adapter
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: yell
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: highline
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: require_all
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: bundler
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: excellent
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: flog
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: flay
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rspec
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '>='
156
235
  - !ruby/object:Gem::Version
157
236
  version: '0'
158
237
  description:
@@ -163,7 +242,6 @@ extensions: []
163
242
  extra_rdoc_files: []
164
243
  files:
165
244
  - lib/arguments.rb
166
- - lib/configuration/configuration.rb
167
245
  - lib/configuration/configurator.rb
168
246
  - lib/database/episode.rb
169
247
  - lib/database/podcast.rb
@@ -181,26 +259,25 @@ files:
181
259
  - bin/epodder
182
260
  homepage: http://github.com/scribe/epodder
183
261
  licenses: []
262
+ metadata: {}
184
263
  post_install_message:
185
264
  rdoc_options: []
186
265
  require_paths:
187
266
  - lib
188
267
  required_ruby_version: !ruby/object:Gem::Requirement
189
- none: false
190
268
  requirements:
191
- - - ! '>='
269
+ - - '>='
192
270
  - !ruby/object:Gem::Version
193
271
  version: '0'
194
272
  required_rubygems_version: !ruby/object:Gem::Requirement
195
- none: false
196
273
  requirements:
197
- - - ! '>='
274
+ - - '>='
198
275
  - !ruby/object:Gem::Version
199
276
  version: '0'
200
277
  requirements: []
201
278
  rubyforge_project:
202
- rubygems_version: 1.8.25
279
+ rubygems_version: 2.0.3
203
280
  signing_key:
204
- specification_version: 3
281
+ specification_version: 4
205
282
  summary: Ruby re-do of hpodder
206
283
  test_files: []
@@ -1,4 +0,0 @@
1
- module Epodder
2
- module Configuration
3
- end
4
- end