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 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
- <thead>
23
- <tr>
24
- <th> Argument </th>
25
- <th> Response (Most Popular...) </th>
26
- </tr>
27
- </thead>
28
- <tbody>
29
- <tr>
30
- <td><code>'3day'</code> <em>default</em></td>
31
- <td>tracks over the last 3 days</td>
32
- </tr>
33
- <tr>
34
- <td><code>:lastweek</code></td>
35
- <td>tracks over the last 7 days</td>
36
- </tr>
37
- <tr>
38
- <td><code>:noremix</code></td>
39
- <td>non-remixed tracks, over last 3 days</td>
40
- </tr>
41
- <tr>
42
- <td><code>:artists</code></td>
43
- <td>tracks by most-blogged artists over last 3 days</td>
44
- </tr>
45
- <tr>
46
- <td><code>:twitter</code></td>
47
- <td>tweeted tracks over last 3 days</td>
48
- </tr>
49
- </tbody>
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"
@@ -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 :url, :tracks
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
- @url = "/playlist/#{@type}/#{@arg}/json/#{@page}"
12
+ @path = "/playlist/#{@type}/#{@arg}/json/#{@page}"
13
13
  end
14
14
 
15
15
  def get
16
- response = Request.new(url).get.response
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
@@ -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: 'http://hypem.com') do |builder|
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
@@ -1,3 +1,3 @@
1
1
  module Hypem
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -12,12 +12,12 @@ describe Hypem::Playlist do
12
12
 
13
13
  context "when initialized" do
14
14
 
15
- it "assigns the url attribute" do
16
- playlist.url.should == "/playlist/time/today/json/1"
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 url for blog" do
20
- blog_playlist.url.should == "/playlist/blog/1/json/1"
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.3
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-25 00:00:00.000000000 Z
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: &70314354528100 !ruby/object:Gem::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: *70314354528100
24
+ version_requirements: *70128807063420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vcr
27
- requirement: &70314354527640 !ruby/object:Gem::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: *70314354527640
35
+ version_requirements: *70128807062960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70314354527260 !ruby/object:Gem::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: *70314354527260
46
+ version_requirements: *70128807062580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: faraday
49
- requirement: &70314354526720 !ruby/object:Gem::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: *70314354526720
57
+ version_requirements: *70128807062040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: multi_json
60
- requirement: &70314354526220 !ruby/object:Gem::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: *70314354526220
68
+ version_requirements: *70128807061540
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hashie
71
- requirement: &70314354525760 !ruby/object:Gem::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: *70314354525760
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: 2921270312575464942
143
+ hash: 2841197461574656335
144
144
  requirements: []
145
145
  rubyforge_project: hypem
146
146
  rubygems_version: 1.8.10