soundly 0.1.3 → 0.1.4

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
- SHA1:
3
- metadata.gz: 982a1a80bc9696fc2a87fde99ad336371b01b04a
4
- data.tar.gz: 630fbde11a7f552b0ea8b5338bf70ca1abb2cf88
2
+ SHA256:
3
+ metadata.gz: b7a95dd1aec19a430993c0132ca412e0b0b6ff5c0d09cd53fd67dd70e42d5375
4
+ data.tar.gz: 3e1fce6eb45557df5ba0985033e4bb0f2def779bd7f4f98b3ded5e6f7398c6b5
5
5
  SHA512:
6
- metadata.gz: f6b97db82e320dd6c264765a491cc3ea490ae4ebaf7171f50329523923af41507ff1279900df2528a801e72df92376a138c55b08462572e8ee82fee97c3f0095
7
- data.tar.gz: a0ed2fb4a3b79a8fa58575c525bfe5fa3188cb8b5e8dd0f7fe22d1c7f0afbaa7d33f0c1429e91d638a3e025f75856854388d0e73023596451d646ec1aa96f147
6
+ metadata.gz: 5fcdf5d123ee6be530fde44632d090e1005eaf105e4d901ff3ae6d9f555a05dbd332ba3fd9fb22cbd17390a65daa8f4a7bc7f873a862e25a772d3a05c4b6b249
7
+ data.tar.gz: 550f2c073b575abb845dfe74cd6b29815cf041b84fdd0afd839c33dd54b172ba42fd16b3772fa2951b97c9d48f538f63d1861d97f31031f9ab46b883064d6501
data/README.md CHANGED
@@ -1,33 +1,11 @@
1
1
  # Soundly
2
-
3
- Soundly will offer two playlists generated through Spotify's API. The first playlist will be the 50 most played songs in the united states; the second playlist will be a user curated playlist. The user is me and the playlist is comprised of the songs I listen to most at any given moment.
2
+ Soundly will offer two playlists generated through Spotify's Ruby API. The first playlist will be the 50 most played songs in the united states; the second playlist will be a user curated playlist. The user is me and the playlist is comprised of the songs I listen to most at any given moment.
4
3
 
5
4
  ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'soundly'
11
- ```
12
-
13
- And then execute:
14
-
15
- $ bundle
16
-
17
- Or install it yourself as:
18
-
19
- $ gem install soundly
5
+ run `$ gem install soundly`
20
6
 
21
7
  ## Usage
22
-
23
- Pretty straight forward. This gem is just for funsies.
24
-
25
- ## Development
26
-
27
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
-
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
8
+ Pretty straightforward. This gem is just for funsies.
30
9
 
31
10
  ## Contributing
32
-
33
- Bug reports and pull requests are welcome on GitHub at https://github.com/<github username>/soundly. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
11
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dwyn/soundly. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
data/bin/soundly CHANGED
@@ -2,5 +2,5 @@
2
2
  require "bundler/setup"
3
3
  require "soundly"
4
4
 
5
- Soundly::CLI.new.call
5
+ Soundly::CLI.new.start
6
6
 
data/lib/soundly/cli.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  class Soundly::CLI
2
+
2
3
  def up?
3
- if Net::Ping::External.new("www.google.com").ping? == true
4
- true
5
- end
4
+ true if Net::Ping::External.new("www.google.com").ping?
5
+ # binding.pry
6
6
  end
7
+
7
8
  def pass_go
8
9
  if !up?
9
10
  puts "You need an internet connection to run this program..."
@@ -16,7 +17,7 @@ class Soundly::CLI
16
17
  end
17
18
  end
18
19
 
19
- def call
20
+ def start
20
21
  pass_go
21
22
  end
22
23
 
@@ -30,7 +30,7 @@ class Soundly::Tracks
30
30
 
31
31
  def red_playlist #MY PERSONAL SPOTIFY PLAYLIST
32
32
  authenticate
33
- playlist = RSpotify::Playlist.find('dwyn.hrmn', '7BQJkBkL5muBFOc7ok76XO')
33
+ playlist = RSpotify::Playlist.find('dwayne.', '2wbLPMQHxG3vhxQzRNEOm9')
34
34
  playlist.tracks.each do |song|
35
35
  @@red_playlist << song
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Soundly
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soundly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - "<dwyn>"
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-27 00:00:00.000000000 Z
11
+ date: 2018-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,27 +129,20 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - ".DS_Store"
133
132
  - ".gitignore"
134
- - ".rspec"
135
133
  - ".travis.yml"
136
134
  - CODE_OF_CONDUCT.md
137
135
  - Gemfile
138
136
  - README.md
139
- - Rainbow.md
140
137
  - Rakefile
141
138
  - bin/console
142
139
  - bin/setup
143
140
  - bin/soundly
144
- - lib/.DS_Store
145
141
  - lib/soundly.rb
146
142
  - lib/soundly/cli.rb
147
143
  - lib/soundly/tracks.rb
148
144
  - lib/soundly/version.rb
149
- - notes.md
150
- - rspotify.md
151
145
  - soundly.gemspec
152
- - spec.md
153
146
  homepage: https://github.com/dwyn/soundly
154
147
  licenses: []
155
148
  metadata: {}
@@ -169,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
162
  version: '0'
170
163
  requirements: []
171
164
  rubyforge_project:
172
- rubygems_version: 2.6.14
165
+ rubygems_version: 2.7.6
173
166
  signing_key:
174
167
  specification_version: 4
175
168
  summary: This gem will play songs from a revolving playlist through the Spotify API
data/.DS_Store DELETED
Binary file
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/Rainbow.md DELETED
@@ -1,224 +0,0 @@
1
- # Rainbow
2
-
3
- [![Gem Version](https://badge.fury.io/rb/rainbow.svg)](https://rubygems.org/gems/rainbow)
4
- [![Build Status](https://travis-ci.org/sickill/rainbow.svg?branch=master)](https://travis-ci.org/sickill/rainbow)
5
- [![Build status](https://ci.appveyor.com/api/projects/status/vq4acb2c38642s5q?svg=true)](https://ci.appveyor.com/project/sickill/rainbow)
6
- [![Code Climate](https://codeclimate.com/github/sickill/rainbow.svg)](https://codeclimate.com/github/sickill/rainbow)
7
- [![Coverage Status](https://coveralls.io/repos/sickill/rainbow/badge.svg)](https://coveralls.io/r/sickill/rainbow)
8
-
9
- Rainbow is a ruby gem for colorizing printed text on ANSI terminals.
10
-
11
- It provides a string presenter object, which adds several methods to your
12
- strings for wrapping them in [ANSI escape
13
- codes](http://en.wikipedia.org/wiki/ANSI_escape_code). These codes when printed
14
- in a terminal change text attributes like text color, background color,
15
- intensity etc.
16
-
17
- ## Usage
18
-
19
- To make your string colored wrap it with `Rainbow()` presenter and call
20
- `.color(<color name>)` on it.
21
-
22
- ### Example
23
-
24
- ```ruby
25
- require 'rainbow'
26
-
27
- puts Rainbow("this is red").red + " and " + Rainbow("this on yellow bg").bg(:yellow) + " and " + Rainbow("even bright underlined!").underline.bright
28
-
29
- # => "\e[31mthis is red\e[0m and \e[43mthis on yellow bg\e[0m and \e[4m\e[1meven bright underlined!\e[0m"
30
- ```
31
-
32
- Or, [watch this video example](https://asciinema.org/a/J928KpHoUQ0sl54ulOSOLE71E?rows=20&speed=2.5)
33
-
34
- ### Rainbow presenter API
35
-
36
- Rainbow presenter adds the following methods to presented string:
37
-
38
- * `color(c)` (with `foreground`, and `fg` aliases)
39
- * `background(c)` (with `bg` alias)
40
- * `bright`
41
- * `underline`
42
- * `blink`
43
- * `inverse`
44
- * `hide`
45
- * `faint` (not well supported by terminal emulators)
46
- * `italic` (not well supported by terminal emulators)
47
-
48
- Text color can also be changed by calling a method named by a color:
49
-
50
- * `black`
51
- * `red`
52
- * `green`
53
- * `yellow`
54
- * `blue`
55
- * `magenta`
56
- * `cyan`
57
- * `white`
58
- * `aqua`
59
- * `silver`
60
- * `aliceblue`
61
- * `indianred`
62
-
63
- All of the methods return `self` (the presenter object) so you can chain method
64
- calls:
65
-
66
- ```ruby
67
- Rainbow("hola!").blue.bright.underline
68
- ```
69
-
70
- ### Refinement
71
-
72
- If you want to use the Refinements version, you can:
73
-
74
- ```ruby
75
- require 'rainbow/refinement'
76
- using Rainbow
77
- puts "Hi!".green
78
- ```
79
-
80
- Here's an IRB session example:
81
-
82
- ```
83
- >> 'Hello, World!'.blue.bright.underline
84
- NoMethodError: undefined method `blue' for "Hello, World!":String
85
- (ripl):1:in `<main>'
86
- >> using Rainbow
87
- => main
88
- >> 'Hello, World!'.blue.bright.underline
89
- => "\e[34m\e[1m\e[4mHello, World!\e[0m"
90
- ```
91
-
92
- ### Color specification
93
-
94
- Both `color` and `background` accept color specified in any
95
- of the following ways:
96
-
97
- * ANSI color number (where 0 is black, 1 is red, 2 is green and so on):
98
- `Rainbow("hello").color(1)`
99
-
100
- * [ANSI color](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) name or [X11 color](https://en.wikipedia.org/wiki/X11_color_names) name as a symbol:
101
- `Rainbow("hello").color(:yellow)`.
102
- This can be simplified to `Rainbow("hello").yellow`
103
-
104
- See [Color list](#user-content-color-list) for all available color names.
105
- Note that ANSI colors can be changed in accordance with terminal setting.
106
- But X11 color is just a syntax sugar for RGB triplet. So you always see what you specified.
107
-
108
- * RGB triplet as separate values in the range 0-255:
109
- `Rainbow("hello").color(115, 23, 98)`
110
-
111
- * RGB triplet as a hex string:
112
- `Rainbow("hello").color("FFC482")` or `Rainbow("hello").color("#FFC482")`
113
-
114
- When you specify a color with a RGB triplet rainbow finds the nearest match
115
- from 256 colors palette. Note that it requires a 256-colors capable terminal to
116
- display correctly.
117
-
118
- #### Example: Choose a random color
119
-
120
- You can pick a random color with Rainbow, it's a one-liner:
121
-
122
- ```ruby
123
- colors = Range.new(0,7).to_a
124
- "whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
125
- # => "\e[36mw\e[0m\e[37mh\e[0m\e[34mo\e[0m\e[34mo\e[0m\e[37mp\e[0m\e[34m \e[0m\e[36md\e[0m\e[33me\e[0m\e[34me\e[0m\e[37m \e[0m\e[32md\e[0m\e[35mo\e[0m\e[33mo\e[0m\e[36mp\e[0m"
126
-
127
- colors = [:aliceblue, :antiquewhite, :aqua, :aquamarine, :azure, :beige, :bisque, :blanchedalmond, :blueviolet]
128
- "whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
129
- # => "\e[38;5;135mw\e[0m\e[38;5;230mh\e[0m\e[38;5;231mo\e[0m\e[38;5;135mo\e[0m\e[38;5;231mp\e[0m\e[38;5;231m \e[0m\e[38;5;122md\e[0m\e[38;5;231me\e[0m\e[38;5;231me\e[0m\e[38;5;230m \e[0m\e[38;5;122md\e[0m\e[38;5;51mo\e[0m\e[38;5;51mo\e[0m\e[38;5;51mp\e[0m"
130
- ```
131
-
132
- ### Configuration
133
-
134
- Rainbow can be enabled/disabled globally by setting:
135
-
136
- ```ruby
137
- Rainbow.enabled = true/false
138
- ```
139
-
140
- When disabled all the methods return an unmodified string
141
- (`Rainbow("hello").red == "hello"`).
142
-
143
- It's enabled by default, unless STDOUT/STDERR is not a TTY or a terminal is
144
- dumb.
145
-
146
- ### Advanced usage
147
-
148
- `Rainbow()` and `Rainbow.enabled` operate on the global Rainbow wrapper
149
- instance. If you would like to selectively enable/disable coloring in separate
150
- parts of your application you can get a new Rainbow wrapper instance for each
151
- of them and control the state of coloring during the runtime.
152
-
153
- ```ruby
154
- rainbow_one = Rainbow.new
155
- rainbow_two = Rainbow.new
156
-
157
- rainbow_one.enabled = false
158
-
159
- Rainbow("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY)
160
- rainbow_one.wrap("hello").red # => "hello"
161
- rainbow_two.wrap("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY)
162
- ```
163
-
164
- By default each new instance inherits enabled/disabled state from the global
165
- `Rainbow.enabled`.
166
-
167
- This feature comes handy for example when you have multiple output formatters
168
- in your application and some of them print to a terminal but others write to a
169
- file. Normally rainbow would detect that STDIN/STDERR is a TTY and would
170
- colorize all the strings, even the ones that go through file writing
171
- formatters. You can easily solve that by disabling coloring for the Rainbow
172
- instances that are used by formatters with file output.
173
-
174
- ## Installation
175
-
176
- Add it to your Gemfile:
177
-
178
- ```ruby
179
- gem 'rainbow'
180
- ```
181
-
182
- Or just install it via rubygems:
183
-
184
- ```ruby
185
- gem install rainbow
186
- ```
187
-
188
- ## Color list
189
-
190
- ### ANSI colors
191
-
192
- `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`
193
-
194
- ### X11 colors
195
-
196
- `aliceblue`, `antiquewhite`, `aqua`, `aquamarine`, `azure`, `beige`, `bisque`,
197
- `blanchedalmond`, `blueviolet`, `brown`, `burlywood`, `cadetblue`, `chartreuse`,
198
- `chocolate`, `coral`, `cornflower`, `cornsilk`, `crimson`, `darkblue`,
199
- `darkcyan`, `darkgoldenrod`, `darkgray`, `darkgreen`, `darkkhaki`,
200
- `darkmagenta`, `darkolivegreen`, `darkorange`, `darkorchid`, `darkred`,
201
- `darksalmon`, `darkseagreen`, `darkslateblue`, `darkslategray`, `darkturquoise`,
202
- `darkviolet`, `deeppink`, `deepskyblue`, `dimgray`, `dodgerblue`, `firebrick`,
203
- `floralwhite`, `forestgreen`, `fuchsia`, `gainsboro`, `ghostwhite`, `gold`,
204
- `goldenrod`, `gray`, `greenyellow`, `honeydew`, `hotpink`, `indianred`,
205
- `indigo`, `ivory`, `khaki`, `lavender`, `lavenderblush`, `lawngreen`,
206
- `lemonchiffon`, `lightblue`, `lightcoral`, `lightcyan`, `lightgoldenrod`,
207
- `lightgray`, `lightgreen`, `lightpink`, `lightsalmon`, `lightseagreen`,
208
- `lightskyblue`, `lightslategray`, `lightsteelblue`, `lightyellow`, `lime`,
209
- `limegreen`, `linen`, `maroon`, `mediumaquamarine`, `mediumblue`,
210
- `mediumorchid`, `mediumpurple`, `mediumseagreen`, `mediumslateblue`,
211
- `mediumspringgreen`, `mediumturquoise`, `mediumvioletred`, `midnightblue`,
212
- `mintcream`, `mistyrose`, `moccasin`, `navajowhite`, `navyblue`, `oldlace`,
213
- `olive`, `olivedrab`, `orange`, `orangered`, `orchid`, `palegoldenrod`,
214
- `palegreen`, `paleturquoise`, `palevioletred`, `papayawhip`, `peachpuff`,
215
- `peru`, `pink`, `plum`, `powderblue`, `purple`, `rebeccapurple`, `rosybrown`,
216
- `royalblue`, `saddlebrown`, `salmon`, `sandybrown`, `seagreen`, `seashell`,
217
- `sienna`, `silver`, `skyblue`, `slateblue`, `slategray`, `snow`, `springgreen`,
218
- `steelblue`, `tan`, `teal`, `thistle`, `tomato`, `turquoise`, `violet`,
219
- `webgray`, `webgreen`, `webmaroon`, `webpurple`, `wheat`, `whitesmoke`,
220
- `yellowgreen`
221
-
222
- ## Authors
223
-
224
- [Marcin Kulik](http://ku1ik.com/) and [great open-source contributors](https://github.com/sickill/rainbow/graphs/contributors).
data/lib/.DS_Store DELETED
Binary file
data/notes.md DELETED
@@ -1,10 +0,0 @@
1
- #Psuedo code for Soundly
2
-
3
- 1. Greets user
4
- 2. Give user choice between blue pill and red pill, or to exit the program completely.
5
-
6
- 2A. Blue pill will take user to Spotify's top 50 trending songs in USA
7
-
8
- 2B. Red pill will take user to my personal trending list on Spotify.
9
-
10
- 3. Regardless of pill chosen, the program should end up in a loop that offers a list of songs available - followed by a prompt to ask the user if they would like detailed information on a specific song
data/rspotify.md DELETED
@@ -1,255 +0,0 @@
1
- # RSpotify
2
-
3
- [![Gem Version](https://badge.fury.io/rb/rspotify.svg)](http://badge.fury.io/rb/rspotify)
4
- [![Build Status](https://travis-ci.org/guilhermesad/rspotify.svg?branch=master)](https://travis-ci.org/guilhermesad/rspotify)
5
-
6
- This is a ruby wrapper for the [Spotify Web API](https://developer.spotify.com/web-api).
7
-
8
- ## Features
9
-
10
- * [Full documentation](http://www.rubydoc.info/github/guilhermesad/rspotify/master)
11
- * Full API Endpoint coverage
12
- * OAuth and other authorization flows
13
-
14
- ## Installation
15
-
16
- Add this line to your application's Gemfile:
17
-
18
- gem 'rspotify'
19
-
20
- And then execute:
21
-
22
- $ bundle
23
-
24
- Or install it yourself as:
25
-
26
- $ gem install rspotify
27
-
28
- ## Usage
29
-
30
- RSpotify was designed with usability as its primary goal, so that you can forget the API and intuitively interact with your playlists, favorite artists, users and so on.
31
-
32
- You can write things like `my_playlist.tracks.sort_by(&:popularity).last.album` without having to think which API calls must be done. RSpotify fills the gaps for you.
33
-
34
- Below are some basic usage examples. Check the [documentation](http://rdoc.info/github/guilhermesad/rspotify/master/frames) for the complete reference.
35
-
36
- ```ruby
37
- require 'rspotify'
38
-
39
- artists = RSpotify::Artist.search('Arctic Monkeys')
40
-
41
- arctic_monkeys = artists.first
42
- arctic_monkeys.popularity #=> 74
43
- arctic_monkeys.genres #=> ["Alternative Pop/Rock", "Indie", ...]
44
- arctic_monkeys.top_tracks(:US) #=> (Track array)
45
-
46
- albums = arctic_monkeys.albums
47
- albums.first.name #=> "AM"
48
-
49
- am = albums.first
50
- am.release_date #=> "2013-09-10"
51
- am.images #=> (Image array)
52
- am.available_markets #=> ["AR", "BO", "BR", ...]
53
-
54
- tracks = am.tracks
55
- tracks.first.name #=> "Do I Wanna Know?"
56
-
57
- do_i_wanna_know = tracks.first
58
- do_i_wanna_know.duration_ms #=> 272386
59
- do_i_wanna_know.track_number #=> 1
60
- do_i_wanna_know.preview_url #=> "https://p.scdn.co/mp3-preview/<id>"
61
-
62
- playlists = RSpotify::Playlist.search('Indie')
63
- playlists.first.name #=> "The Indie Mix"
64
-
65
- # You can search within other types too
66
- albums = RSpotify::Album.search('The Wall')
67
- tracks = RSpotify::Track.search('Thriller')
68
- ```
69
-
70
- Find by id:
71
-
72
- ```ruby
73
- arctic_monkeys = RSpotify::Artist.find('7Ln80lUS6He07XvHI8qqHH')
74
- arctic_monkeys.related_artists #=> (Artist array)
75
-
76
- am = RSpotify::Album.find('41vPD50kQ7JeamkxQW7Vuy')
77
- am.album_type #=> "single"
78
-
79
- do_i_wanna_know = RSpotify::Track.find('2UzMpPKPhbcC8RbsmuURAZ')
80
- do_i_wanna_know.album #=> (Album object)
81
-
82
- me = RSpotify::User.find('guilhermesad')
83
- me.uri #=> "spotify:user:guilhermesad"
84
-
85
- # Or find several objects at once:
86
-
87
- ids = %w(2UzMpPKPhbcC8RbsmuURAZ 7Jzsc04YpkRwB1zeyM39wE)
88
-
89
- my_tracks = RSpotify::Track.find(ids)
90
- my_tracks.size #=> 2
91
- ```
92
-
93
- Some data require authentication to be accessed, such as playlists' details. You can easily get your credentials [here](https://developer.spotify.com/my-applications).
94
-
95
- Then just copy and paste them like so:
96
-
97
- ```ruby
98
- RSpotify.authenticate("<your_client_id>", "<your_client_secret>")
99
-
100
- # Now you can access playlists in detail, browse featured content and more
101
-
102
- me = RSpotify::User.find('guilhermesad')
103
- me.playlists #=> (Playlist array)
104
-
105
- # Find by id
106
- playlist = RSpotify::Playlist.find('guilhermesad', '1Xi8mgiuHHPLQYOw2Q16xv')
107
- playlist.name #=> "d33p"
108
- playlist.description #=> "d33p h0uz"
109
- playlist.followers['total'] #=> 1
110
- playlist.tracks #=> (Track array)
111
-
112
- # Search by category
113
- party = RSpotify::Category.find('party')
114
- party.playlists #=> (Playlist array)
115
- categories = RSpotify::Category.list # See all available categories
116
-
117
- # Access featured content from Spotify's Browse tab
118
- featured_playlists = RSpotify::Playlist.browse_featured(country: 'US')
119
- new_releases = RSpotify::Album.new_releases(country: 'ES')
120
-
121
- # Access tracks' audio features
122
- sorry = RSpotify::Track.search("Sorry").first
123
- sorry.audio_features.danceability #=> 0.605
124
- sorry.audio_features.energy #=> 0.768
125
- sorry.audio_features.tempo #=> 100.209
126
-
127
- # Get recommendations
128
- recommendations = RSpotify::Recommendations.generate(seed_genres: ['blues', 'country'])
129
- recommendations = RSpotify::Recommendations.generate(seed_tracks: my_fav_tracks.map(&:id))
130
- recommendations = RSpotify::Recommendations.generate(seed_artists: my_fav_artists.map(&:id))
131
- recommendations.tracks #=> (Track array)
132
- ```
133
-
134
- ## Rails + OAuth
135
-
136
- You might want your application to access a user's Spotify account.
137
-
138
- For instance, suppose you want your app to create playlists for the user based on their taste, or to add a feature that syncs user's playlists with some external app.
139
-
140
- If so, add the following to your application (Remember to [get your credentials](https://developer.spotify.com/my-applications))
141
-
142
- ```ruby
143
- # config/application.rb
144
-
145
- RSpotify::authenticate("<your_client_id>", "<your_client_secret>")
146
- ```
147
-
148
- ```ruby
149
- # config/initializers/omniauth.rb
150
-
151
- require 'rspotify/oauth'
152
-
153
- Rails.application.config.middleware.use OmniAuth::Builder do
154
- provider :spotify, "<your_client_id>", "<your_client_secret>", scope: 'user-read-email playlist-modify-public user-library-read user-library-modify'
155
- end
156
- ```
157
-
158
- You should replace the scope values for the ones your own app will require from the user. You can see the list of available scopes in [here](https://developer.spotify.com/web-api/using-scopes).
159
-
160
- Next, make a link so the user can log in with his Spotify account:
161
-
162
- ```ruby
163
- <%= link_to 'Sign in with Spotify', '/auth/spotify' %>
164
- ```
165
-
166
- And create a route to receive the callback:
167
-
168
- ```ruby
169
- # config/routes.rb
170
-
171
- get '/auth/spotify/callback', to: 'users#spotify'
172
- ```
173
-
174
- Remember you need to tell Spotify this address is white-listed. You can do this by adding it to the Redirect URIs list in your [application page](https://developer.spotify.com/my-applications). An example of Redirect URI would be http://localhost:3000/auth/spotify/callback.
175
-
176
- Finally, create a new RSpotify User with the response received:
177
-
178
- ```ruby
179
- class UsersController < ApplicationController
180
- def spotify
181
- spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
182
- # Now you can access user's private data, create playlists and much more
183
-
184
- # Access private data
185
- spotify_user.country #=> "US"
186
- spotify_user.email #=> "example@email.com"
187
-
188
- # Create playlist in user's Spotify account
189
- playlist = spotify_user.create_playlist!('my-awesome-playlist')
190
-
191
- # Add tracks to a playlist in user's Spotify account
192
- tracks = RSpotify::Track.search('Know')
193
- playlist.add_tracks!(tracks)
194
- playlist.tracks.first.name #=> "Somebody That I Used To Know"
195
-
196
- # Access and modify user's music library
197
- spotify_user.save_tracks!(tracks)
198
- spotify_user.saved_tracks.size #=> 20
199
- spotify_user.remove_tracks!(tracks)
200
-
201
- albums = RSpotify::Album.search('launeddas')
202
- spotify_user.save_albums!(albums)
203
- spotify_user.saved_albums.size #=> 10
204
- spotify_user.remove_albums!(albums)
205
-
206
- # Use Spotify Follow features
207
- spotify_user.follow(playlist)
208
- spotify_user.follows?(artists)
209
- spotify_user.unfollow(users)
210
-
211
- # Get user's top played artists and tracks
212
- spotify_user.top_artists #=> (Artist array)
213
- spotify_user.top_tracks(time_range: 'short_term') #=> (Track array)
214
-
215
- # Check doc for more
216
- end
217
- end
218
- ```
219
-
220
- The user's access token is automatically refreshed by RSpotify when needed. This is specially useful if you persist the user data on a database: this way he only needs to log in to Spotify once in his entire use of your application.
221
-
222
- RSpotify provides a way to facilitate persistence:
223
-
224
- ```ruby
225
- hash = spotify_user.to_hash
226
- # hash containing all user attributes, including access tokens
227
-
228
- # Use the hash to persist the data the way you prefer...
229
-
230
- # Then recover the Spotify user whenever you like
231
- spotify_user = RSpotify::User.new(hash)
232
- spotify_user.create_playlist!('my_awesome_playlist') # automatically refreshes token
233
- ```
234
-
235
- ## Getting raw response
236
-
237
- To get the raw response from Spotify API requests, just toggle the `raw_response` variable:
238
-
239
- ```ruby
240
- RSpotify.raw_response = true
241
- RSpotify::Artist.search('Cher') #=> (String with raw json response)
242
- ```
243
-
244
- ## Notes
245
-
246
- If you'd like to use OAuth outside rails, have a look [here](https://developer.spotify.com/web-api/authorization-guide/#authorization_code_flow) for the requests that need to be made. You should be able to pass the response to RSpotify::User.new just as well, and from there easily create playlists and more for your user.
247
-
248
- ## Contributing
249
-
250
- 1. Fork it ( https://github.com/guilhermesad/rspotify/fork )
251
- 2. Create your feature branch (`git checkout -b my-new-feature`)
252
- 3. Test your changes (`bundle exec rspec`)
253
- 4. Commit your changes (`git commit -am 'Add some feature'`)
254
- 5. Push to the branch (`git push origin my-new-feature`)
255
- 6. Create a new Pull Request
data/spec.md DELETED
@@ -1,6 +0,0 @@
1
- # Specifications for the CLI Assessment
2
-
3
- Specs:
4
- - [x] Have a CLI for interfacing with the application
5
- - [x] Pull data from an external source
6
- - [x] Implement both list and detail views