music_xray_api 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,47 +1,26 @@
1
- = amazon_ses
1
+ = music_xray_api
2
2
 
3
3
  Really simple gem that allows you to send email through amazon simple email
4
4
  service.
5
5
 
6
6
  <b>Installation</b>
7
7
 
8
- gem install amazon_ses
8
+ gem install music_xray_api
9
9
 
10
10
  <b>Usage:</b>
11
11
 
12
12
  require 'rubygems'
13
- require 'amazon_ses'
13
+ require 'music_xray_api'
14
14
 
15
15
  # all methods return a raw http response object
16
- # to get the xml just call body on the return object from any of
17
- # the following methods.
18
- # Exceptions will be throw on any api call that doesn't result in
19
- # a 200 OK response from amazon.
16
+ # to get the return bundle just call body...
17
+ # at some point we may have methods for making things a bit prettier
18
+ # Please try not to abuse the api. We take steps to make it scale, however you should limit your rate to
19
+ # about 10 requests/second. Anything more than this may be seen as excessive and you may be banned.
20
+
21
+ Please click into the various classes for more detailed documentation and usage example.
22
+
20
23
 
21
-
22
- # you must have a verified address with amazon to send mail
23
- AmazonSES::Verify.address("youremail@gmail.com",amazon_secret,amazon_key)
24
-
25
- # after verifying the address you can send mail
26
-
27
- # simple send mail text only
28
- AmazonSES::AmzMail.send(from,to,subject,body,secret,key)
29
- # send html email
30
- AmazonSES::AmzMail.send_html(from,to,subject,body,secret,key)
31
- # if you produce your own email via the mail gem you can pass the result of calling to_s on the mail object
32
- # to the following method
33
- AmazonSES::AmzMail.send_raw(mail_string,amazon_secret,amazon_key)
34
-
35
- # the following are two methods for getting stats
36
-
37
- puts AmazonSES::Stats.send_quota(amazon_secret,amazon_key).body
38
- puts AmazonSES::Stats.send_stats(amazon_secret,amazon_key).body
39
-
40
- # the following is a helper object for looking at your stats
41
-
42
- stobj = StatObject.new(amazon_secret,amazon_key)
43
- puts stobj.sent_last_24_hours
44
- puts stobj.reached_quota?
45
24
 
46
25
 
47
26
  Hope you enjoy the Gem. If anyone wants to write a plugin for rails I would link definately link to it and find it useful.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -6,11 +6,15 @@ require "base64"
6
6
  require "openssl"
7
7
  require "digest/sha1"
8
8
  require "rubygems"
9
- require "mail"
10
- require "xmlsimple"
9
+ #require "mail"
10
+ #require "xmlsimple"
11
+ require 'active_resource'
12
+
11
13
 
12
14
  $:.unshift(File.dirname(__FILE__))
13
15
  require 'music_xray_api/base'
14
- require 'music_xray_api/tracks'
15
- #require 'amazon_ses/stats'
16
- #require 'amazon_ses/amz_mail'
16
+ require 'music_xray_api/track'
17
+ require 'music_xray_api/track_set'
18
+ require 'music_xray_api/track_set_member'
19
+ require 'music_xray_api/track_match_request'
20
+
@@ -1,33 +1,95 @@
1
+ class Hash
2
+ def to_url_params
3
+ elements = []
4
+ keys.size.times do |i|
5
+ elements << "#{CGI::escape(keys[i])}=#{CGI::escape(values[i])}"
6
+ end
7
+ elements.join('&')
8
+ end
9
+
10
+ def self.from_url_params(url_params)
11
+ result = {}.with_indifferent_access
12
+ url_params.split('&').each do |element|
13
+ element = element.split('=')
14
+ result[element[0]] = element[1]
15
+ end
16
+ result
17
+ end
18
+ end
19
+
20
+
21
+
1
22
  module MusicXrayApi
23
+
2
24
  class Base
3
-
25
+ @@key ||= ""
26
+ @@secret ||= ""
27
+
28
+ def self.key= k
29
+ @@key = k
30
+ end
31
+ def self.secret= s
32
+ @@secret = s
33
+ end
4
34
  def self.rfc2616(time)
5
35
  time.utc.strftime("%a, %d %b %Y %H:%M:%S")+" +0000"
6
36
  end
7
37
  def self.sign_https_request(request,date,secret,key)
8
38
  return "{'client_key_id':'#{key}', 'algorithm':'HmacSHA256', 'signature':'#{Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha256"), secret, date)).strip}'}"
9
39
  end
10
- def self.make_request(secret,key,postfix,form_hash)
40
+ def self.sign_https_requestv3(date)
41
+ return "{'client_key_id':'#{@@key}', 'algorithm':'HmacSHA256', 'signature':'#{Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha256"), @@secret, date)).strip}'}"
42
+ end
43
+ def self.make_request(secret,key,postfix,form_hash,method)
11
44
  date = MusicXrayApi::Base.rfc2616(Time.now)
12
- uri = URI.parse("https://api-load-balancer-467937692.us-east-1.elb.amazonaws.com/#{postfix}.xml")
45
+ uri = URI.parse("https://api.musicxray.com/#{postfix}.xml")
13
46
  http = Net::HTTP.new(uri.host, uri.port)
14
47
  http.use_ssl = true
15
48
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
16
- request = Net::HTTP::Post.new(uri.request_uri)
17
- request.set_form_data(form_hash)
18
- request['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
19
- request.add_field("Date",date)
20
- request.add_field("X-Xray-Authorization",MusicXrayApi::Base.sign_https_request(request,date,secret,key))
21
- response = http.request(request)
22
- #puts response.inspect
49
+ if method.to_s.downcase=="post"
50
+ @request = Net::HTTP::Post.new(uri.request_uri)
51
+ @request.set_form_data(form_hash)
52
+ @request['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
53
+ elsif method.to_s.downcase=="get"
54
+ @request = Net::HTTP::Get.new("#{uri.request_uri}?#{form_hash.to_url_params}")
55
+ elsif method.to_s.downcase=="put"
56
+ @request = Net::HTTP::Put.new(uri.request_uri)
57
+ @request.set_form_data(form_hash)
58
+ @request['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
59
+ elsif method.to_s.downcase=="delete"
60
+ @request = Net::HTTP::Delete.new("#{uri.request_uri}?#{form_hash.to_url_params}")
61
+ end
62
+ @request.add_field("Date",date)
63
+ @request.add_field("X-Xray-Authorization",MusicXrayApi::Base.sign_https_request(@request,date,secret,key))
64
+ response = http.request(@request)
23
65
  case response
24
66
  when Net::HTTPSuccess then return response
25
- when Net::HTTPClientError then raise response.body
26
- when Net::HTTPServerError then raise response.body
27
- else raise response.body
67
+ when Net::HTTPClientError then raise "#{response.body}"
68
+ when Net::HTTPServerError then raise "#{response.body}"
69
+ else raise "#{response.body}"
28
70
  end
29
71
  #return response
30
72
  end
31
-
73
+ def self.objectify_params(outer,params)
74
+ nar = {}
75
+ params.each do |key,value|
76
+ nar["#{outer}[#{key}]"]=value
77
+ end
78
+ return nar
79
+ end
80
+ end
81
+ end
82
+
83
+ module ResourceMethods
84
+ def self.included(klass)
85
+ klass.extend ClassMethods
86
+ end
87
+ module ClassMethods
88
+ def set_headers
89
+ self.site = 'https://api.musicxray.com'
90
+ date = MusicXrayApi::Base.rfc2616(Time.now)
91
+ headers['Date'] = date.to_s
92
+ headers['X-Xray-Authorization'] = MusicXrayApi::Base.sign_https_requestv3(date)
93
+ end
32
94
  end
33
95
  end
@@ -0,0 +1,8 @@
1
+ module MusicXrayApi
2
+
3
+ class Track < ActiveResource::Base
4
+ include ResourceMethods
5
+
6
+ end
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ module MusicXrayApi
2
+
3
+ class TrackMatchRequest < ActiveResource::Base
4
+ include ResourceMethods
5
+
6
+ end
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ module MusicXrayApi
2
+
3
+ class TrackSet < ActiveResource::Base
4
+ include ResourceMethods
5
+
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module MusicXrayApi
2
+
3
+ class TrackSetMember < ActiveResource::Base
4
+ include ResourceMethods
5
+ end
6
+
7
+ end
@@ -0,0 +1,52 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{music_xray_api}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["jeff durand"]
12
+ s.date = %q{2011-05-18}
13
+ s.description = %q{wrapper for music xray api }
14
+ s.email = %q{jeff.durand@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/music_xray_api.rb",
26
+ "lib/music_xray_api/base.rb",
27
+ "lib/music_xray_api/track.rb",
28
+ "lib/music_xray_api/track_match_request.rb",
29
+ "lib/music_xray_api/track_set.rb",
30
+ "lib/music_xray_api/track_set_member.rb",
31
+ "music_xray_api.gemspec",
32
+ "test/helper.rb",
33
+ "test/test_music_xray_api.rb"
34
+ ]
35
+ s.homepage = %q{http://github.com/johnnyiller/Music-Xray-Api-Wrapper}
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.7.2}
38
+ s.summary = %q{Interface with the music xray api}
39
+
40
+ if s.respond_to? :specification_version then
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<xml-simple>, [">= 0"])
45
+ else
46
+ s.add_dependency(%q<xml-simple>, [">= 0"])
47
+ end
48
+ else
49
+ s.add_dependency(%q<xml-simple>, [">= 0"])
50
+ end
51
+ end
52
+
data/test/helper.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
-
4
+ require 'yaml'
5
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+
8
+
7
9
  require 'music_xray_api'
8
10
 
9
11
  class Test::Unit::TestCase
@@ -1,18 +1,46 @@
1
1
  require 'helper'
2
2
 
3
+
3
4
  class TestMusicXrayApi < Test::Unit::TestCase
4
5
  context "Has valid credentials" do
5
6
  setup do
6
7
  YAML.load_file("./test/credentials.yml").each { |key,value| instance_variable_set("@#{key}", value) }
8
+ MusicXrayApi::Base.key = @key
9
+ MusicXrayApi::Base.secret = @secret
10
+ MusicXrayApi::Track.set_headers
11
+ MusicXrayApi::TrackSet.set_headers
12
+ MusicXrayApi::TrackSetMember.set_headers
13
+ MusicXrayApi::TrackMatchRequest.set_headers
14
+
7
15
  end
8
16
  should "Be able to create a track." do
9
- threads = []
10
- 10.times do
11
- threads << Thread.new do
12
- MusicXrayApi::Tracks.create(@secret,@key).body
13
- end
17
+ tr = MusicXrayApi::Track.create({:mp3_url=>"http://www.google.com", :uri=>"xray/#{Time.now.to_i.to_s}"})
18
+ puts tr.id
19
+ end
20
+ should "be able to do crud for track sets" do
21
+ ts = MusicXrayApi::TrackSet.new
22
+ ts.name = "another my new one"
23
+ puts ts.save
24
+ puts ts.id
25
+ unless ts
26
+ ts.errors
14
27
  end
15
- threads.each { |aThread| aThread.join }
28
+ fts = MusicXrayApi::TrackSet.find(ts.id)
29
+ puts fts.name
30
+ end
31
+ should "be able to add a track I create to a track set I also create" do
32
+ t1 = MusicXrayApi::Track.create({:mp3_url=>"http://www.google.com", :uri=>"xray/#{Time.now.to_i.to_s}1"})
33
+ t2 = MusicXrayApi::Track.create({:mp3_url=>"http://www.google.com", :uri=>"xray/#{Time.now.to_i.to_s}2"})
34
+ t3 = MusicXrayApi::Track.create({:mp3_url=>"http://www.google.com", :uri=>"xray/#{Time.now.to_i.to_s}3"})
35
+ ts = MusicXrayApi::TrackSet.create({:name=>"whatever it's just a name"})
36
+ tsm = MusicXrayApi::TrackSetMember.create({:track_id=>t1.id, :track_set_id=>ts.id})
37
+ tsm = MusicXrayApi::TrackSetMember.create({:track_id=>t2.id, :track_set_id=>ts.id})
38
+ # testing matching request capable
39
+ tmr = MusicXrayApi::TrackMatchRequest.create({:track_id=>t3.id, :track_set_id=>ts.id,:result_delivery_method=>'none'})
40
+
16
41
  end
42
+
17
43
  end
18
44
  end
45
+
46
+
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: music_xray_api
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - jeff durand
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-10 00:00:00 Z
13
+ date: 2011-05-18 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: xml-simple
@@ -40,7 +40,11 @@ files:
40
40
  - VERSION
41
41
  - lib/music_xray_api.rb
42
42
  - lib/music_xray_api/base.rb
43
- - lib/music_xray_api/tracks.rb
43
+ - lib/music_xray_api/track.rb
44
+ - lib/music_xray_api/track_match_request.rb
45
+ - lib/music_xray_api/track_set.rb
46
+ - lib/music_xray_api/track_set_member.rb
47
+ - music_xray_api.gemspec
44
48
  - test/helper.rb
45
49
  - test/test_music_xray_api.rb
46
50
  homepage: http://github.com/johnnyiller/Music-Xray-Api-Wrapper
@@ -1,14 +0,0 @@
1
- module MusicXrayApi
2
-
3
- class Tracks
4
- def self.create(secret,key,params={})
5
- begin
6
- MusicXrayApi::Base.make_request(secret,key,"tracks",params)
7
- rescue Exception=>e
8
- puts e.to_s
9
- raise e.to_s
10
- end
11
- end
12
- end
13
-
14
- end