bremen 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,9 +18,11 @@ Or install it yourself as:
18
18
 
19
19
  ## Setting
20
20
 
21
- As far as Soundcloud concerned, you need to set consumer key before using.
21
+ As far as Soundcloud concerned, you need to set your app's client id before using.
22
22
 
23
- Bremen::Soundcloud.consumer_key = 'your_consumer_key'
23
+ Bremen::Soundcloud.client_id = 'your_client_id'
24
+
25
+ Alternately, you can set 'SOUNDCLOUD_CLIENT_ID' environment variable.
24
26
 
25
27
  ## Usage
26
28
 
@@ -31,7 +31,7 @@ module Bremen
31
31
  end
32
32
 
33
33
  def from_api hash = {}
34
- created_at = Time.parse(hash['created_time'])
34
+ created_at = Time.parse(hash['created_time']).utc
35
35
  new({
36
36
  uid: hash['key'],
37
37
  url: hash['url'],
@@ -39,7 +39,7 @@ module Bremen
39
39
  private
40
40
  def convert_singly response
41
41
  uid = response.scan(%r{<link rel="canonical" href="/watch/([^"]+)">}).flatten.first
42
- created_at = Time.parse(response.scan(%r{<meta property="video:release_date" content="(.+)">}).flatten.first.to_s)
42
+ created_at = Time.parse(response.scan(%r{<meta property="video:release_date" content="(.+)">}).flatten.first.to_s).utc
43
43
  new({
44
44
  uid: uid,
45
45
  url: "#{BASE_URL}watch/#{uid}",
@@ -60,7 +60,7 @@ module Bremen
60
60
  response.scan(%r{<div class="thumb_col_1">\n<!---->\n(.*?)\n<!---->\n</div></div>}m).flatten.map do |html|
61
61
  uid = html.scan(%r{<table [^>]+ summary="(.+)">}).flatten.first
62
62
  min, sec = html.scan(%r{<p class="vinfo_length"><span>([\d:]+)</span></p>}).flatten.first.to_s.split(':')
63
- created_at = Time.parse(html.scan(%r{<strong>(.+:\d\d)</strong>}).flatten.first.to_s.gsub(/\xE5\xB9\xB4|\xE6\x9C\x88|\xE6\x97\xA5/, ''))
63
+ created_at = Time.parse(html.scan(%r{<strong>(.+:\d\d)</strong>}).flatten.first.to_s.gsub(/\xE5\xB9\xB4|\xE6\x9C\x88|\xE6\x97\xA5/, '')).utc
64
64
  new({
65
65
  uid: uid,
66
66
  url: "#{BASE_URL}watch/#{uid}",
@@ -13,11 +13,12 @@ module Bremen
13
13
  }
14
14
 
15
15
  class << self
16
- attr_accessor :consumer_key
16
+ attr_accessor :client_id
17
17
 
18
18
  def build_query options = {}
19
- raise %Q{"#{self.name}.consumer_key" must be set} unless consumer_key
20
- super(options.merge(consumer_key: consumer_key))
19
+ self.client_id ||= ENV['SOUNDCLOUD_CLIENT_ID']
20
+ raise %Q{"#{self.name}.client_id" must be set} unless client_id
21
+ super(options.merge(client_id: client_id))
21
22
  end
22
23
 
23
24
  def find_url uid_or_url
@@ -41,20 +42,21 @@ module Bremen
41
42
  end
42
43
 
43
44
  def from_api hash = {}
45
+ created_at = Time.parse(hash['created_at']).utc
44
46
  new({
45
- uid: hash['id'],
47
+ uid: hash['id'].to_s,
46
48
  url: hash['permalink_url'],
47
49
  title: hash['title'],
48
50
  author: Bremen::Author.new({
49
- uid: hash['user']['id'],
51
+ uid: hash['user']['id'].to_s,
50
52
  url: hash['user']['permalink_url'],
51
53
  name: hash['user']['username'],
52
54
  thumbnail_url: hash['user']['avatar_url'].sub(%r{\?.*}, ''),
53
55
  }),
54
56
  length: (hash['duration'].to_i / 1000).round,
55
57
  thumbnail_url: hash['artwork_url'] ? hash['artwork_url'].sub(%r{\?.*}, '') : nil,
56
- created_at: Time.parse(hash['created_at']),
57
- updated_at: Time.parse(hash['created_at']),
58
+ created_at: created_at,
59
+ updated_at: created_at,
58
60
  })
59
61
  end
60
62
 
@@ -1,3 +1,3 @@
1
1
  module Bremen
2
- VERSION = "0.1.3"
2
+ VERSION = '0.2.0'
3
3
  end
@@ -47,8 +47,8 @@ module Bremen
47
47
  }),
48
48
  length: hash['media$group']['yt$duration']['seconds'].to_i,
49
49
  thumbnail_url: hash['media$group']['media$thumbnail'][0]['url'],
50
- created_at: Time.parse(hash['published']['$t']),
51
- updated_at: Time.parse(hash['updated']['$t']),
50
+ created_at: Time.parse(hash['published']['$t']).utc,
51
+ updated_at: Time.parse(hash['updated']['$t']).utc,
52
52
  })
53
53
  end
54
54
 
@@ -1,10 +1,19 @@
1
1
  $:.unshift(File.expand_path('../../', __FILE__))
2
2
  require 'spec_helper'
3
3
 
4
+ envfile = File.expand_path('../../../.env', __FILE__)
5
+ if File.exists?(envfile)
6
+ File.open(envfile, 'r').each do |line|
7
+ key, val = line.chomp.split('=', 2)
8
+ ENV[key] = val
9
+ end
10
+ end
11
+ SITES = ['Youtube', 'Mixcloud', 'Nicovideo']
12
+ SITES << 'Soundcloud' if ENV['SOUNDCLOUD_CLIENT_ID']
13
+
4
14
  describe Bremen::Base do
5
15
  describe '.search' do
6
- #TODO: need to suport autoload soundcloud consumerkey from dotfile.
7
- ['Youtube', 'Mixcloud', 'Nicovideo'].each do |site|
16
+ SITES.each do |site|
8
17
  describe site do
9
18
  let(:klass){ Bremen.const_get(site) }
10
19
 
@@ -41,6 +41,7 @@ describe Bremen::Mixcloud do
41
41
  let(:response){ fixture('mixcloud_single.json') }
42
42
  it 'convert successfully' do
43
43
  subject.title.must_equal 'Title'
44
+ subject.created_at.zone.must_equal 'UTC'
44
45
  end
45
46
  end
46
47
 
@@ -49,6 +50,7 @@ describe Bremen::Mixcloud do
49
50
  let(:response){ fixture('mixcloud_multi.json') }
50
51
  it 'convert successfully' do
51
52
  subject.first.title.must_equal 'Title'
53
+ subject.first.created_at.zone.must_equal 'UTC'
52
54
  end
53
55
  end
54
56
  end
@@ -41,6 +41,7 @@ describe Bremen::Nicovideo do
41
41
  let(:response){ fixture('nicovideo_single.html') }
42
42
  it 'convert successfully' do
43
43
  subject.title.must_equal 'Title'
44
+ subject.created_at.zone.must_equal 'UTC'
44
45
  end
45
46
  end
46
47
 
@@ -49,6 +50,7 @@ describe Bremen::Nicovideo do
49
50
  let(:response){ fixture('nicovideo_multi.html') }
50
51
  it 'convert successfully' do
51
52
  subject.first.title.must_equal 'Title'
53
+ subject.first.created_at.zone.must_equal 'UTC'
52
54
  end
53
55
  end
54
56
  end
@@ -2,54 +2,67 @@ $:.unshift(File.expand_path('../../', __FILE__))
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Bremen::Soundcloud do
5
+ after{ Bremen::Soundcloud.client_id = nil }
5
6
  describe '.build_query' do
6
- describe 'not set consumer_key' do
7
+ before do
8
+ Bremen::Soundcloud.client_id = nil
9
+ ENV['SOUNDCLOUD_CLIENT_ID'] = nil
10
+ end
11
+ describe 'not set client_id' do
7
12
  it 'raise error' do
8
- lambda{ Bremen::Soundcloud.search_url }.must_raise RuntimeError
13
+ lambda{ Bremen::Soundcloud.build_query({a: 'b'}) }.must_raise RuntimeError
14
+ end
15
+ end
16
+
17
+ describe 'set client_id via ENV' do
18
+ before{ ENV['SOUNDCLOUD_CLIENT_ID'] = 'CID' }
19
+ subject{ Bremen::Soundcloud.build_query({a: 'b'}) }
20
+ it 'return query string' do
21
+ subject.must_equal 'a=b&client_id=CID'
9
22
  end
10
23
  end
11
24
 
12
- describe 'set consumer_key' do
13
- before{ Bremen::Soundcloud.consumer_key = 'CK' }
25
+ describe 'set client_id directly' do
26
+ before{ Bremen::Soundcloud.client_id = 'CID' }
14
27
  subject{ Bremen::Soundcloud.build_query({a: 'b'}) }
15
28
  it 'return query string' do
16
- subject.must_equal 'a=b&consumer_key=CK'
29
+ subject.must_equal 'a=b&client_id=CID'
17
30
  end
18
31
  end
19
32
  end
20
33
 
21
34
  describe '.find_url' do
22
- before{ Bremen::Soundcloud.consumer_key = 'CK' }
35
+ before{ Bremen::Soundcloud.client_id = 'CID' }
23
36
  subject{ Bremen::Soundcloud.find_url(uid_or_url) }
24
37
  describe 'given id' do
25
38
  let(:uid_or_url){ 100 }
26
39
  it 'generate directly' do
27
- subject.must_equal 'http://api.soundcloud.com/tracks/100.json?consumer_key=CK'
40
+ subject.must_equal 'http://api.soundcloud.com/tracks/100.json?client_id=CID'
28
41
  end
29
42
  end
30
43
 
31
44
  describe 'given url' do
32
45
  let(:uid_or_url){ 'http://soundcloud.com/author/permalink' }
33
46
  it 'generate with resolve resource' do
34
- subject.must_equal 'http://api.soundcloud.com/resolve.json?url=http%3A%2F%2Fsoundcloud.com%2Fauthor%2Fpermalink&consumer_key=CK'
47
+ subject.must_equal 'http://api.soundcloud.com/resolve.json?url=http%3A%2F%2Fsoundcloud.com%2Fauthor%2Fpermalink&client_id=CID'
35
48
  end
36
49
  end
37
50
  end
38
51
 
39
52
  describe '.search_url' do
40
- before{ Bremen::Soundcloud.consumer_key = 'CK' }
53
+ before{ Bremen::Soundcloud.client_id = 'CID' }
41
54
  subject{ Bremen::Soundcloud.search_url(params) }
42
55
  describe 'only keyword' do
43
56
  let(:params){ {keyword: 'searchword'} }
44
57
  it 'generate' do
45
- subject.must_equal 'http://api.soundcloud.com/tracks.json?q=searchword&order=created_at&limit=50&offset=0&filter=&consumer_key=CK'
58
+ subject.must_equal 'http://api.soundcloud.com/tracks.json?q=searchword&order=created_at&limit=50&offset=0&filter=&client_id=CID'
46
59
  end
47
60
  end
48
61
 
49
62
  describe 'full params' do
50
63
  let(:params){ {keyword: 'searchword', order: 'hotness', limit: 10, page: 2, filter: 'public'} }
51
64
  it 'generate' do
52
- subject.must_equal 'http://api.soundcloud.com/tracks.json?q=searchword&order=hotness&limit=10&offset=10&filter=public&consumer_key=CK'
65
+ subject.must_equal 'http://api.soundcloud.com/tracks.json?q=searchword&order=hotness&limit=10&offset=10&filter=public&client_id=CID'
53
66
  end
54
67
  end
55
68
  end
@@ -59,6 +72,8 @@ describe Bremen::Soundcloud do
59
72
  let(:response){ fixture('soundcloud_single.json') }
60
73
  it 'convert successfully' do
61
74
  subject.title.must_equal 'Title'
75
+ subject.uid.must_equal '11111111'
76
+ subject.created_at.zone.must_equal 'UTC'
62
77
  end
63
78
  end
64
79
 
@@ -67,6 +82,8 @@ describe Bremen::Soundcloud do
67
82
  let(:response){ fixture('soundcloud_multi.json') }
68
83
  it 'convert successfully' do
69
84
  subject.first.title.must_equal 'Title'
85
+ subject.first.uid.must_equal '11111111'
86
+ subject.first.created_at.zone.must_equal 'UTC'
70
87
  end
71
88
  end
72
89
  end
@@ -41,6 +41,7 @@ describe Bremen::Youtube do
41
41
  let(:response){ fixture('youtube_single.json') }
42
42
  it 'convert successfully' do
43
43
  subject.title.must_equal 'Title'
44
+ subject.created_at.zone.must_equal 'UTC'
44
45
  end
45
46
  end
46
47
 
@@ -49,6 +50,7 @@ describe Bremen::Youtube do
49
50
  let(:response){ fixture('youtube_multi.json') }
50
51
  it 'convert successfully' do
51
52
  subject.first.title.must_equal 'Title'
53
+ subject.first.created_at.zone.must_equal 'UTC'
52
54
  end
53
55
  end
54
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bremen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-17 00:00:00.000000000 Z
12
+ date: 2012-12-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard-minitest