hypem 0.0.3 → 0.1.0
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.
- data/README.md +38 -36
- data/lib/hypem/playlist.rb +10 -3
- data/lib/hypem/request.rb +2 -1
- data/lib/hypem/version.rb +1 -1
- data/spec/playlist_spec.rb +17 -4
- metadata +15 -15
data/README.md
CHANGED
@@ -15,39 +15,41 @@ This is an unoffical Ruby gem for the **Hype Machine** read-only API. It support
|
|
15
15
|
|
16
16
|
- `Hypem.playlist.tags('tag_name,electro,indie')` --- tracks matching given comma-delimited tags. *The API warns against combining too many different tags*
|
17
17
|
|
18
|
+
- `Hypem.playlist.create_url([hypem_track1,hypem_track2])` --- create a custom Hypem-based playlist URL using array of `Hypem::Track`'s
|
19
|
+
|
18
20
|
- `Hypem.playlist.popular` --- the most popular tracks over a certain timeframe or set. It accepts one of the following arguments:
|
19
21
|
|
20
22
|
|
21
|
-
<table>
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
</table>
|
23
|
+
<table>
|
24
|
+
<thead>
|
25
|
+
<tr>
|
26
|
+
<th> Argument </th>
|
27
|
+
<th> Response (Most Popular...) </th>
|
28
|
+
</tr>
|
29
|
+
</thead>
|
30
|
+
<tbody>
|
31
|
+
<tr>
|
32
|
+
<td><code>'3day'</code> <em>default</em></td>
|
33
|
+
<td>tracks over the last 3 days</td>
|
34
|
+
</tr>
|
35
|
+
<tr>
|
36
|
+
<td><code>:lastweek</code></td>
|
37
|
+
<td>tracks over the last 7 days</td>
|
38
|
+
</tr>
|
39
|
+
<tr>
|
40
|
+
<td><code>:noremix</code></td>
|
41
|
+
<td>non-remixed tracks, over last 3 days</td>
|
42
|
+
</tr>
|
43
|
+
<tr>
|
44
|
+
<td><code>:artists</code></td>
|
45
|
+
<td>tracks by most-blogged artists over last 3 days</td>
|
46
|
+
</tr>
|
47
|
+
<tr>
|
48
|
+
<td><code>:twitter</code></td>
|
49
|
+
<td>tweeted tracks over last 3 days</td>
|
50
|
+
</tr>
|
51
|
+
</tbody>
|
52
|
+
</table>
|
51
53
|
|
52
54
|
Each playlist has a `tracks` attribute containing an array of `Hypem::Tracks`'s. Pagination is supported with the `.next_page` and `.prev_page` methods.
|
53
55
|
|
@@ -65,15 +67,15 @@ Users can be accessed via `Hypem.user('username')` and have various methods:
|
|
65
67
|
#### Playlist Methods ####
|
66
68
|
`Hypem::User` offers several methods for accessing a particular user's personalized playlists:
|
67
69
|
|
68
|
-
- `user.loved_playlist` --- a user's loved tracks
|
70
|
+
- `user.loved_playlist` --- a user's loved tracks
|
69
71
|
|
70
|
-
- `user.obsessed_playlist` --- a user's obsessed tracks
|
72
|
+
- `user.obsessed_playlist` --- a user's obsessed tracks
|
71
73
|
|
72
|
-
- `user.feed_playlist` --- a user's tracks from all followed entities
|
74
|
+
- `user.feed_playlist` --- a user's tracks from all followed entities
|
73
75
|
|
74
|
-
- `user.friends_favorites_playlist` --- a user's friends' favorited tracks
|
76
|
+
- `user.friends_favorites_playlist` --- a user's friends' favorited tracks
|
75
77
|
|
76
|
-
- `user.friends_history_playlist` --- tracks from a user's friends' listening histories
|
78
|
+
- `user.friends_history_playlist` --- tracks from a user's friends' listening histories
|
77
79
|
|
78
80
|
******
|
79
81
|
|
@@ -85,7 +87,7 @@ Blogs can be retrieved using a blog's unique id via `Hypem.blog(1234)` and has t
|
|
85
87
|
******
|
86
88
|
|
87
89
|
### Track ###
|
88
|
-
All Playlist objects have a `tracks` attribute containing an array of `Hypem::Track`s. A sample object inspect is as follows:
|
90
|
+
All Playlist objects have a `tracks` attribute containing an array of `Hypem::Track`'s. A sample object inspect is as follows:
|
89
91
|
|
90
92
|
#<Hypem::Track
|
91
93
|
artist="Hot Chip"
|
data/lib/hypem/playlist.rb
CHANGED
@@ -2,18 +2,18 @@ module Hypem
|
|
2
2
|
class Playlist
|
3
3
|
POPULAR_ARGS = [%s(3day),:lastweek,:noremix,:artists,:twitter]
|
4
4
|
GENERIC_METHODS = [:blog, :tags, :search, :artist, :feed, :loved, :obsessed]
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :path, :tracks
|
6
6
|
attr_reader :extended
|
7
7
|
|
8
8
|
def initialize(type,arg,page=1)
|
9
9
|
@type = type
|
10
10
|
@arg = arg
|
11
11
|
@page = page
|
12
|
-
@
|
12
|
+
@path = "/playlist/#{@type}/#{@arg}/json/#{@page}"
|
13
13
|
end
|
14
14
|
|
15
15
|
def get
|
16
|
-
response = Request.new(
|
16
|
+
response = Request.new(@path).get.response
|
17
17
|
@tracks = []
|
18
18
|
# getting rid of version cell
|
19
19
|
response.body.shift
|
@@ -29,6 +29,13 @@ module Hypem
|
|
29
29
|
Playlist.new(@type,@arg,@page-1).get
|
30
30
|
end
|
31
31
|
|
32
|
+
def self.create_url(tracks)
|
33
|
+
raise ArgumentError if (!tracks.is_a? Array) || (!tracks.first.is_a? Hypem::Track)
|
34
|
+
track_params = tracks.map(&:id).join(',')
|
35
|
+
playlist = Playlist.new('set',track_params)
|
36
|
+
return Hypem::ROOT_PATH + playlist.path
|
37
|
+
end
|
38
|
+
|
32
39
|
def self.latest
|
33
40
|
Playlist.new(:time,:today).get
|
34
41
|
end
|
data/lib/hypem/request.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
|
3
3
|
module Hypem
|
4
|
+
ROOT_PATH = 'http://hypem.com'
|
4
5
|
class Request
|
5
6
|
attr_accessor :response
|
6
7
|
attr_reader :url
|
@@ -18,7 +19,7 @@ module Hypem
|
|
18
19
|
private
|
19
20
|
|
20
21
|
def connection
|
21
|
-
@@conn ||= Faraday.new(url:
|
22
|
+
@@conn ||= Faraday.new(url: ROOT_PATH) do |builder|
|
22
23
|
builder.request :url_encoded
|
23
24
|
#builder.response :logger
|
24
25
|
builder.adapter :net_http
|
data/lib/hypem/version.rb
CHANGED
data/spec/playlist_spec.rb
CHANGED
@@ -12,12 +12,12 @@ describe Hypem::Playlist do
|
|
12
12
|
|
13
13
|
context "when initialized" do
|
14
14
|
|
15
|
-
it "assigns the
|
16
|
-
playlist.
|
15
|
+
it "assigns the path attribute" do
|
16
|
+
playlist.path.should == "/playlist/time/today/json/1"
|
17
17
|
end
|
18
18
|
|
19
|
-
it "assigns proper
|
20
|
-
blog_playlist.
|
19
|
+
it "assigns proper path for blog" do
|
20
|
+
blog_playlist.path.should == "/playlist/blog/1/json/1"
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -35,6 +35,19 @@ describe Hypem::Playlist do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
describe ".create" do
|
39
|
+
let(:tracks) {[mock('Hypem::Track',id: 'track1',), mock('Hypem::Track',id:'track2')]}
|
40
|
+
|
41
|
+
it "requires an array of tracks" do
|
42
|
+
expect { Hypem::Playlist.create_url(['not_a_track'])}.to raise_error ArgumentError
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns the correct playlist url " do
|
46
|
+
tracks.first.stub(:is_a?).and_return(true)
|
47
|
+
Hypem::Playlist.create_url(tracks).should == 'http://hypem.com/playlist/set/track1,track2/json/1'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
38
51
|
describe ".latest" do
|
39
52
|
it "returns a playlist" do
|
40
53
|
playlist.should be_a Hypem::Playlist
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hypem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70128807063420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '2.6'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70128807063420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: vcr
|
27
|
-
requirement: &
|
27
|
+
requirement: &70128807062960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70128807062960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70128807062580 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70128807062580
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: faraday
|
49
|
-
requirement: &
|
49
|
+
requirement: &70128807062040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0.7'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70128807062040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: multi_json
|
60
|
-
requirement: &
|
60
|
+
requirement: &70128807061540 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '1.1'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70128807061540
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: hashie
|
71
|
-
requirement: &
|
71
|
+
requirement: &70128807061080 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '1.2'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70128807061080
|
80
80
|
description:
|
81
81
|
email:
|
82
82
|
- jackcanderson@gmail.com
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
version: '0'
|
141
141
|
segments:
|
142
142
|
- 0
|
143
|
-
hash:
|
143
|
+
hash: 2841197461574656335
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project: hypem
|
146
146
|
rubygems_version: 1.8.10
|