in_our_time 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/iot +0 -1
  4. data/in_our_time.gemspec +1 -1
  5. data/lib/iot/iot.rb +42 -32
  6. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de87e4265e1b9d635849b956423654b7757c1909
4
- data.tar.gz: a030c2d3ad061950dab3163fe6b7875a9436538d
3
+ metadata.gz: 3bff39b611f74f1253f1da6118e7a345c0411948
4
+ data.tar.gz: ecb0cb3c1a64b4d8907088d0fa1d902c35da18f7
5
5
  SHA512:
6
- metadata.gz: 7f91d8ae75f12e7ea71448b45f451063b865ad1799e3f38cb60a3bb36654d4018696056ca07ed3fc592c35be447935a2c9bd3b98f1b85df0d0070fc593ac1564
7
- data.tar.gz: 4f9d01aa37e96d6416b16b37f7e5a11f4e281aee87a55646f6a4e5722d028cb9d738de4b704535fab8b673e261896f7150307a934d92d97d11cfd451cb21c345
6
+ metadata.gz: 457064a6748fa01c21fb0d544a17217188f644d44195abc958251c6929053fbb6dd63eaad579acbee66d6f911e13d674b9b4b574323e31cc3a5c798d1cd96e3e
7
+ data.tar.gz: 07091b59590287984bc3d62ec8018e6d1df762307189c5c257b5dd22897f067f1165e979a3c1ab914f652d0471994e8671d76670e906d0e7e656058e2c8938ce
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
data/bin/iot CHANGED
@@ -1,4 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- puts Dir.pwd
4
3
  require 'in_our_time'
data/in_our_time.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.require_paths = ["lib"]
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
- spec.add_runtime_dependency 'nokogiri', '>= 1.6.8'
21
+ spec.add_runtime_dependency 'oga', '~> 2.2'
22
22
  spec.add_runtime_dependency 'colorize', '>= 0.8.1'
23
23
  spec.add_development_dependency 'version', '>= 1.0.0'
24
24
  end
data/lib/iot/iot.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'nokogiri'
2
1
  require 'rss'
3
2
  require 'open-uri'
4
3
  require 'net/http'
@@ -6,6 +5,7 @@ require 'open-uri'
6
5
  require 'yaml'
7
6
  require 'fileutils'
8
7
  require 'colorize'
8
+ require 'oga'
9
9
 
10
10
  class InOurTime
11
11
 
@@ -247,19 +247,17 @@ class InOurTime
247
247
 
248
248
  def parse_rss
249
249
  rss_files.each do |file|
250
- @doc = Nokogiri::XML(File.open(file))
251
- titles = @doc.xpath("//item//title")
252
- descs = @doc.xpath("//item//description")
253
- subtitles = @doc.xpath("//item//itunes:subtitle")
254
- summarys = @doc.xpath("//item//itunes:summary")
255
- durations = @doc.xpath("//item//itunes:duration")
256
- dates = @doc.xpath("//item//pubDate")
257
- links = @doc.xpath("//item//link")
250
+ @doc = Oga.parse_xml(File.open(file))
251
+ titles = @doc.xpath('rss/channel/item/title')
252
+ subtitles = @doc.xpath('rss/channel/item/itunes:subtitle')
253
+ summarys = @doc.xpath('rss/channel/item/itunes:summary')
254
+ durations = @doc.xpath('rss/channel/item/itunes:duration')
255
+ dates = @doc.xpath('rss/channel/item/pubDate')
256
+ links = @doc.xpath('rss/channel/item/link')
258
257
 
259
258
  0.upto (titles.length - 1) do |idx|
260
259
  program = {}
261
260
  program[:title] = titles[idx].text
262
- # program[:description] = descs[idx]
263
261
  program[:subtitle] = subtitles[idx].text
264
262
  program[:summary] = summarys[idx].text
265
263
  program[:duration] = durations[idx].text
@@ -284,8 +282,7 @@ class InOurTime
284
282
  def sort_titles
285
283
  @sorted_titles = []
286
284
  @sorted_titles = @programs.collect { |pr| pr[:title] }
287
- # @sorted_titles = @sorted_titles.uniq{|x| x.downcase}
288
- @sorted_titles = @sorted_titles.sort unless @config[:sort] == :age
285
+ @sorted_titles.sort! unless @config[:sort] == :age
289
286
  end
290
287
 
291
288
  def date
@@ -350,14 +347,13 @@ class InOurTime
350
347
  end
351
348
 
352
349
  def print_playing_maybe
353
- iot_puts ''
354
350
  if @playing
355
- iot_puts "Playing '#{@playing}'", @selection_colour
351
+ iot_puts "\nPlaying '#{@playing}'", @selection_colour
356
352
  elsif @started.nil?
357
353
  @started = true
358
- iot_puts "? or h for instructions", @text_colour
354
+ iot_puts "\n? or h for instructions", @text_colour
359
355
  else
360
- iot_puts ''
356
+ iot_puts "\n"
361
357
  end
362
358
  end
363
359
 
@@ -451,33 +447,48 @@ class InOurTime
451
447
  end
452
448
 
453
449
  def reformat info
454
- info.gsub('With ', "\nWith ")
455
- .gsub('With: ', "\nWith: ")
456
- .gsub('Producer', "- Producer")
450
+ ['With','Guests',
451
+ 'Producer','Contributors'].map do | x|
452
+ [' ', ':'].map do |y|
453
+ [x, x.upcase].map do |z|
454
+ info = info.gsub(z + y, "\n" + z + y)
455
+ end
456
+ end
457
+ end
458
+ info
459
+ end
460
+
461
+ def top_space info
462
+ info.length - info.lstrip.length
463
+ end
464
+
465
+ def bottom_space? bottom
466
+ bottom == ' '
467
+ end
468
+
469
+ def last_line? info, top
470
+ info[top..-1].length < @config[:page_width]
457
471
  end
458
472
 
459
473
  def justify info
460
474
  pages = [[],[]]
461
475
  page, top, bottom = 0, 0, @config[:page_width]
462
476
  loop do
463
- if(bottom >= info.length)
464
- pages[page] << info[top..-1].strip
465
- break
466
- end
467
- loop do
468
- break unless info[top] == ' '
469
- top += 1 ; bottom += 1
470
- end
477
+ shift = top_space info[top..bottom]
478
+ top, bottom = top + shift, bottom + shift
471
479
  loop do
472
480
  if idx = info[top..bottom].index("\n")
473
481
  pages[page] << info[top..top + idx]
474
482
  page,bottom,top = 1,top + idx + @config[:page_width] + 1, top + idx + 1
475
- next
476
483
  else
477
- break if (info[bottom] == ' ')
484
+ break if bottom_space? info[bottom]
478
485
  bottom -= 1
479
486
  end
480
487
  end
488
+ if last_line? info, top
489
+ pages[page] << info[top..-1].strip
490
+ break
491
+ end
481
492
  pages[page] << info[top..bottom]
482
493
  bottom, top = bottom + @config[:page_width], bottom
483
494
  end
@@ -489,8 +500,7 @@ class InOurTime
489
500
  prg = select_program @sorted_titles[@selected]
490
501
  system 'clear'
491
502
  justify(prg[:subtitle].gsub(/\s+/, ' '))[0].map{|x| iot_puts x}
492
- iot_puts ''
493
- iot_puts "Date Broadcast: #{prg[:date]}"
503
+ iot_puts "\nDate Broadcast: #{prg[:date]}"
494
504
  iot_puts "Duration: #{prg[:duration].to_i/60} mins"
495
505
  iot_puts "Availability: " +
496
506
  (prg[:have_locally] ? "Downloaded" : "Requires Download")
@@ -500,7 +510,7 @@ class InOurTime
500
510
  info = prg[:summary].gsub(/\s+/, ' ')
501
511
  system 'clear'
502
512
  justify(reformat(info))[0].map{|x| iot_puts x}
503
- @info = 2
513
+ @info = justify(reformat(info))[1] == [] ? -1 : 2
504
514
  elsif @info == 2
505
515
  prg = select_program @sorted_titles[@selected]
506
516
  info = prg[:summary].gsub(/\s+/, ' ')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: in_our_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martyn Jago
@@ -11,19 +11,19 @@ cert_chain: []
11
11
  date: 2016-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
14
+ name: oga
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.6.8
19
+ version: '2.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.6.8
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colorize
29
29
  requirement: !ruby/object:Gem::Requirement