meuh 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: b44ec11d67812a0c48cc12d2f009feb64204a23d
4
- data.tar.gz: c4546c3e69de0f00f31a6637feecc09056b7b4d9
3
+ metadata.gz: 12129f88831e373a1c718dbd93b7244b3ac7b22b
4
+ data.tar.gz: 6a5193cfdc69968d92c36bdd1344083317fbca49
5
5
  SHA512:
6
- metadata.gz: d32dc7a0d0cb279d99dfd58db1b43f632a4eba9a94273e10770482adfe45ad6244ed441e348dc31e90f6dfc8b48b4965c702d202ed9ea4343c964a19eae71cea
7
- data.tar.gz: 5398d7f3eb4502b715b1b1a64c0149b5253caabf221edc67012a67c1f77da3b3ed406521a011c2b8800539957f6aee92d151a97fb4199bf4db1e723b129e9f47
6
+ metadata.gz: 88ef7bca9c01debbc8cefa08ba00d8dfc0c0dec2435f0968dd6f63e7b4f876212a1c2f13ab7d899c5ad515a6d7085b88921d812694c5658a9d497f40ba29f1a6
7
+ data.tar.gz: 86b50d7811ef7db789159dbacdac443e0b1eaa27d5a484ea179d87a1b17975c27437c49eb4d685c6d40d65cc8d08e04125bc0fc31452f8cb05933588221a080c
data/bin/meuh CHANGED
@@ -22,6 +22,6 @@ end
22
22
 
23
23
  opts[:color] = !opts[:no_format]
24
24
 
25
- t = Meuh.tracks(opts)
25
+ t = Meuh.tracks
26
26
  puts Meuh.format_results(t, opts[:color])
27
27
 
@@ -11,13 +11,17 @@ module Meuh
11
11
  class << self
12
12
 
13
13
  def version
14
- '0.1.1'
14
+ '0.1.2'
15
15
  end
16
16
 
17
17
  def url
18
18
  'http://www.radiomeuh.com/meuh/playlist/index.php'
19
19
  end
20
20
 
21
+ def user_agent
22
+ "Meuh/#{version} +github.com/bfontaine/meuh"
23
+ end
24
+
21
25
  # Get the text of an element. This is an helper for internal usage.
22
26
  def text(el)
23
27
  el.text.strip.gsub(/\r/, "\n")
@@ -38,11 +42,11 @@ module Meuh
38
42
  # :remaining => "...", <-- remaining time
39
43
  # :time => "..." <-- time for previous tracks
40
44
  # }
41
- def tracks(*opts)
42
- opts = opts[0] || {}
45
+ def tracks
43
46
  tracks = { :previous => [], :current => nil, :next => [] }
44
47
 
45
- doc = Nokogiri::HTML(open(url))
48
+ html = open(url, 'User-Agent' => user_agent).read.encode!(Encoding::UTF_8)
49
+ doc = Nokogiri::HTML(html)
46
50
 
47
51
  def parse_track t
48
52
  lines = t.inner_html.split(/<br\/?\s*>/).map do |l|
@@ -56,12 +60,14 @@ module Meuh
56
60
  artist = nil
57
61
  end
58
62
 
63
+ time = lines[0].strip
64
+
59
65
  {
60
66
  :artist => artist,
61
67
  :album => lines[2].strip,
62
68
  :title => title,
63
69
  :remaining => t.css('font').text.gsub(/^:\s+/, ''),
64
- :time => lines[0].strip
70
+ :time => time == '...' ? '' : time
65
71
  }
66
72
  end
67
73
 
@@ -76,7 +82,7 @@ module Meuh
76
82
  tracks[:next] << parse_track(td)
77
83
  end
78
84
  else
79
- tracks[:previous] << parse_track(td)
85
+ tracks[:previous] << parse_track(td) unless td.text =~ /\(jingle\)/i
80
86
  end
81
87
  end
82
88
 
@@ -14,10 +14,10 @@ module Meuh
14
14
  s = []
15
15
 
16
16
  def track_text(t, style, color) # :previous, :next, :curr
17
- title = t[:title]
18
- artist = t[:artist]
19
- album = t[:album]
20
- time = style == :previous ? "[#{t[:time]}] " : ''
17
+ title = t[:title] || ''
18
+ artist = t[:artist]
19
+ album = t[:album]
20
+ time = style == :previous ? "[#{t[:time]}] " : ''
21
21
 
22
22
  title.strip!
23
23
 
@@ -0,0 +1,60 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ class Meuh_formatting_test < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @tracks = {
7
+ :previous => [
8
+ {
9
+ :artist => 'Artist1',
10
+ :album => 'Album1',
11
+ :title => 'Track1',
12
+ :time => '00:01:01',
13
+ },
14
+ {
15
+ :artist => 'Artist2',
16
+ :album => 'Album2',
17
+ :title => 'Track2',
18
+ :time => '00:01:00',
19
+ },
20
+ {
21
+ :artist => 'Artist3',
22
+ :album => 'Album3',
23
+ :title => 'Track3',
24
+ :time => '00:00:45',
25
+ }
26
+ ],
27
+ :current => {
28
+ :artist => nil,
29
+ :album => 'CurrBar',
30
+ :title => 'Current Track',
31
+ :time => '00:01:02'
32
+ },
33
+ :next => [
34
+ {
35
+ :artist => 'Foo',
36
+ :album => 'FooBar',
37
+ :title => 'Bar',
38
+ :time => ''
39
+ }
40
+ ]
41
+ }
42
+ end
43
+
44
+ def test_general_format_no_color
45
+ r = /^.+\n\nPreviously:\n(?:\* \[.*?\] .*\n)+\nNext:\n\* .+/
46
+ assert_not_nil(Meuh::Formatting.text(@tracks, false) =~ r)
47
+ assert_not_nil(Meuh::Formatting.text(@tracks, true) =~ r)
48
+ end
49
+
50
+ def test_general_format_color
51
+ r = /^.+\n\nPreviously:\n(?:\* \[.*?\] .*\n)+\nNext:\n\* .+/
52
+ assert_not_nil(Meuh::Formatting.text(@tracks, true) =~ r)
53
+ end
54
+
55
+ def test_color_reset
56
+ assert_equal(nil, Meuh::Formatting.text(@tracks, false).index("\e[0m"))
57
+ assert_not_nil(Meuh::Formatting.text(@tracks, true).index "\e[0m")
58
+ end
59
+
60
+ end
@@ -0,0 +1,88 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require File.dirname(__FILE__) + '/fake_responses'
4
+
5
+ class Meuh_query_test < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @url = Meuh.url
9
+ end
10
+
11
+ def test_keys
12
+ t = Meuh.tracks
13
+
14
+ assert(t.has_key?(:previous))
15
+ assert(t.has_key?(:current))
16
+ assert(t.has_key?(:next))
17
+ end
18
+
19
+ def test_next_track
20
+ next_ary = Meuh.tracks[:next]
21
+
22
+ assert_equal(1, next_ary.count)
23
+ nextt = next_ary.first
24
+
25
+ assert(nextt.is_a?(Hash))
26
+ assert(nextt.has_key?(:artist))
27
+ assert(nextt.has_key?(:album))
28
+ assert(nextt.has_key?(:title))
29
+ assert(nextt.has_key?(:time))
30
+
31
+ assert_equal('Foo', nextt[:artist])
32
+ assert_equal('FooBar', nextt[:album])
33
+ assert_equal('Bar', nextt[:title])
34
+ assert_equal('', nextt[:time])
35
+
36
+ end
37
+
38
+ def test_current_track
39
+ curr = Meuh.tracks[:current]
40
+
41
+ assert(curr.is_a?(Hash))
42
+ assert(curr.has_key?(:artist))
43
+ assert(curr.has_key?(:album))
44
+ assert(curr.has_key?(:title))
45
+ assert(curr.has_key?(:time))
46
+
47
+ assert_equal(nil, curr[:artist])
48
+ assert_equal('CurrBar', curr[:album])
49
+ assert_equal('Current Track', curr[:title])
50
+ assert_equal('00:01:02', curr[:time])
51
+ end
52
+
53
+ def test_previous_tracks
54
+ prev_ary = Meuh.tracks[:previous]
55
+
56
+ assert_equal(3, prev_ary.count)
57
+
58
+ assert(prev_ary[0].is_a?(Hash))
59
+ assert(prev_ary[1].is_a?(Hash))
60
+ assert(prev_ary[2].is_a?(Hash))
61
+
62
+ prev1 = prev_ary[0]
63
+
64
+ assert(prev1.is_a?(Hash))
65
+ assert(prev1.has_key?(:artist))
66
+ assert(prev1.has_key?(:album))
67
+ assert(prev1.has_key?(:title))
68
+ assert(prev1.has_key?(:time))
69
+
70
+ assert_equal('Artist1', prev1[:artist])
71
+ assert_equal('Album1', prev1[:album])
72
+ assert_equal('Track1', prev1[:title])
73
+ assert_equal('00:01:01', prev1[:time])
74
+
75
+ prev2 = prev_ary[1]
76
+ assert_equal('Artist2', prev2[:artist])
77
+ assert_equal('Album2', prev2[:album])
78
+ assert_equal('Track2', prev2[:title])
79
+ assert_equal('00:01:00', prev2[:time])
80
+
81
+ prev3 = prev_ary[2]
82
+ assert_equal('Artist3', prev3[:artist])
83
+ assert_equal('Album3', prev3[:album])
84
+ assert_equal('Track3', prev3[:title])
85
+ assert_equal('00:00:45', prev3[:time])
86
+ end
87
+
88
+ end
@@ -14,6 +14,13 @@ for t in Dir.glob( File.join( test_dir, '*_tests.rb' ) )
14
14
  require t
15
15
  end
16
16
 
17
+ class FakeHTMLElement
18
+ attr_reader :text
19
+ def initialize(text)
20
+ @text = text
21
+ end
22
+ end
23
+
17
24
  class MeuhTests < Test::Unit::TestCase
18
25
 
19
26
  # == Meuh#version == #
@@ -22,6 +29,60 @@ class MeuhTests < Test::Unit::TestCase
22
29
  assert(Meuh.version =~ /^\d+\.\d+\.\d+/)
23
30
  end
24
31
 
32
+ # == Meuh#url == #
33
+ def test_meuh_url
34
+ assert(Meuh.url =~ /^https?:\/\//)
35
+ end
36
+
37
+ # == Meuh#user_agent == #
38
+
39
+ def test_meuh_ua
40
+ assert(Meuh.user_agent =~ /^Meuh\/\d+\.\d+\.\d+/)
41
+ end
42
+
43
+ # == Meuh#text == #
44
+
45
+ def test_meuh_text_empty
46
+ e = FakeHTMLElement.new ''
47
+ assert_equal('', Meuh.text(e))
48
+ end
49
+
50
+ def test_meuh_text_spaces
51
+ e = FakeHTMLElement.new ' '
52
+ assert_equal('', Meuh.text(e))
53
+ end
54
+
55
+ def test_meuh_text_strip
56
+ txt = ' foobar '
57
+ e = FakeHTMLElement.new txt
58
+ assert_equal(txt.strip, Meuh.text(e))
59
+ end
60
+
61
+ def test_meuh_text_newlines1
62
+ txt = "foo\rbar"
63
+ e = FakeHTMLElement.new txt
64
+ assert_equal(txt.sub(/\r/, "\n"), Meuh.text(e))
65
+ end
66
+
67
+ def test_meuh_text_newlines2
68
+ txt = "foo\nbar"
69
+ e = FakeHTMLElement.new txt
70
+ assert_equal(txt, Meuh.text(e))
71
+ end
72
+
73
+ def test_meuh_text
74
+ txt = 'foobar'
75
+ e = FakeHTMLElement.new txt
76
+ assert_equal(txt, Meuh.text(e))
77
+ end
78
+
79
+ def test_meuh_text_wrong_element
80
+ assert_equal('', Meuh.text(nil))
81
+ assert_equal('', Meuh.text([]))
82
+ assert_equal('', Meuh.text({}))
83
+ assert_equal('', Meuh.text('foo'))
84
+ end
85
+
25
86
  end
26
87
 
27
88
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meuh
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
  - Baptiste Fontaine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-03 00:00:00.000000000 Z
11
+ date: 2014-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -118,6 +118,8 @@ extra_rdoc_files: []
118
118
  files:
119
119
  - lib/meuh.rb
120
120
  - lib/meuh/formatting.rb
121
+ - tests/formatting_tests.rb
122
+ - tests/query_tests.rb
121
123
  - tests/tests.rb
122
124
  - bin/meuh
123
125
  homepage: https://github.com/bfontaine/meuh-cli
@@ -145,4 +147,6 @@ signing_key:
145
147
  specification_version: 4
146
148
  summary: scrapper for radiomeuh.com's current playlist
147
149
  test_files:
150
+ - tests/formatting_tests.rb
151
+ - tests/query_tests.rb
148
152
  - tests/tests.rb