audio_vision 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 65f96343d62472eca34e5f679543b6d94740a9d3
4
+ data.tar.gz: 83781ab608c3594fbe0afa38aecfd459bf254398
5
+ SHA512:
6
+ metadata.gz: 53745f097f82206eed4675ff9e4c33be0dde68321cf13bba4a6ade2e110861789cfeb735db3a9e03739c4e30ce56e967c8a469d823f9d31e2e7e9ff9c63489d8
7
+ data.tar.gz: 76d9377bcaa27b448ad7d9b557823c13deaf43b403bd33877a9ba2b0b9016ae2484911cf76d4a558fd1d77633688b72be1301b83cc59e5871772ab11b47393af
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ## 1.0.0.rc1
2
+ First release.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in audiovision-ruby.gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Bryan Ricker
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # AudioVision
2
+
3
+ This is a simple Ruby client for the AudioVision API.
4
+ Documentation for the AudioVision API can be found
5
+ [**here**](https://github.com/SCPR/api-docs/tree/master/AudioVision/v1).
6
+
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'audio_vision'
13
+
14
+
15
+ ## Usage
16
+
17
+ ### Posts
18
+ ```ruby
19
+ # Find by ID
20
+ AudioVision::Post.find(109)
21
+
22
+ # Find by URL
23
+ AudioVision::Post.find_by_url("http://audiovision.scpr.org/319/public-square-thankful-for")
24
+
25
+ # Find Collection - all parameters are passed directly to API
26
+ AudioVision::Post.collection(limit: 10, query: "Los Angeles", category: "video")
27
+ ```
28
+
29
+ ### Billboards
30
+ ```ruby
31
+ # Find by ID
32
+ AudioVision::Billboard.find(4)
33
+
34
+ # Get the current Billboard
35
+ AudioVision::Billboard.current
36
+
37
+ # Get all Billboards
38
+ AudioVision::Billboard.collection
39
+ ```
40
+
41
+ ### Buckets
42
+ ```ruby
43
+ # Find by UUID (key)
44
+ AudioVision::Billboard.find("featured-posts")
45
+
46
+ # Get all Buckets
47
+ AudioVision::Bucket.collection
48
+ ```
49
+
50
+
51
+ ## Contributing
52
+ Fork it, fix it, send a PR. `bundle exec rspec` to run tests.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'audio_vision/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "audio_vision"
8
+ spec.version = AudioVision::VERSION
9
+ spec.authors = ["Bryan Ricker"]
10
+ spec.email = ["bricker@kpcc.org"]
11
+ spec.description = %q{Ruby client for the AudioVision API.}
12
+ spec.summary = %q{Ruby client for the AudioVision API.}
13
+ spec.homepage = "https://github.com/SCPR/audio_vision-ruby"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(spec)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "faraday", "~> 0.8.8"
22
+ spec.add_dependency "faraday_middleware", "~> 0.9.0"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "webmock"
28
+ end
@@ -0,0 +1,22 @@
1
+ module AudioVision
2
+ URL = "http://audiovision.scpr.org"
3
+ API_ROOT = "/api"
4
+ API_VERSION = "v1"
5
+
6
+ class << self
7
+ # The API root path for all requests.
8
+ def api_root
9
+ @api_root ||= [API_ROOT, API_VERSION].join("/")
10
+ end
11
+ end
12
+ end
13
+
14
+ require 'audio_vision/version'
15
+ require 'audio_vision/client'
16
+ require 'audio_vision/attribution'
17
+ require 'audio_vision/category'
18
+ require 'audio_vision/asset'
19
+ require 'audio_vision/base'
20
+ require 'audio_vision/billboard'
21
+ require 'audio_vision/bucket'
22
+ require 'audio_vision/post'
@@ -0,0 +1,40 @@
1
+ module AudioVision
2
+ class Asset
3
+
4
+ class Size
5
+ attr_accessor :width, :height, :url
6
+
7
+ def initialize(attributes={})
8
+ @width = attributes['width']
9
+ @height = attributes['height']
10
+ @url = attributes['url']
11
+ end
12
+ end
13
+
14
+
15
+ ATTRIBUTES = [
16
+ :caption,
17
+ :owner,
18
+ :title
19
+ ]
20
+
21
+ SIZES = [
22
+ :thumbnail,
23
+ :small,
24
+ :large,
25
+ :full
26
+ ]
27
+
28
+ attr_accessor *(ATTRIBUTES + SIZES)
29
+
30
+ def initialize(attributes={})
31
+ @caption = attributes["caption"]
32
+ @owner = attributes["owner"]
33
+ @title = attributes["title"]
34
+
35
+ SIZES.each do |size|
36
+ self.send("#{size}=", Asset::Size.new(attributes[size.to_s]))
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,18 @@
1
+ module AudioVision
2
+ class Attribution
3
+
4
+ attr_accessor \
5
+ :name,
6
+ :url,
7
+ :role_text,
8
+ :role
9
+
10
+
11
+ def initialize(attributes={})
12
+ @name = attributes["name"]
13
+ @url = attributes["url"]
14
+ @role_text = attributes["role_text"]
15
+ @role = attributes["role"]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,78 @@
1
+ require 'time'
2
+
3
+ module AudioVision
4
+ # This is a private class and shouldn't be used directly.
5
+ # It acts as a base class for all of the AudioVision classes which
6
+ # are available in the API.
7
+ class Base
8
+
9
+ class << self
10
+ # Returns the API path for this class.
11
+ # Example: /api/v1/posts
12
+ def api_path
13
+ @api_path ||= [AudioVision.api_root, self.api_namespace].join("/")
14
+ end
15
+
16
+ # Find an object by its ID.
17
+ # Returns the object if found, otherwise false.
18
+ #
19
+ # Example:
20
+ # AudioVision::Post.find(10) #=> #<AudioVision::Post>
21
+ def find(id)
22
+ response = client.get(endpoint(id))
23
+
24
+ if response.success?
25
+ new(response.body)
26
+ else
27
+ false
28
+ end
29
+ end
30
+
31
+
32
+ # Get a collection of posts.
33
+ # Passed-in parameters are passed directly to the API.
34
+ # Returns an array of Posts.
35
+ #
36
+ # Example:
37
+ # AudionVision::Post.collection(limit: 5, query: "Photos") #=> [ ... ]
38
+ def collection(options={})
39
+ response = client.get(api_path, options)
40
+
41
+ if response.success?
42
+ collection = []
43
+
44
+ response.body.each do |json|
45
+ collection << new(json)
46
+ end
47
+
48
+ collection
49
+ else
50
+ []
51
+ end
52
+ end
53
+
54
+
55
+ private
56
+
57
+ def endpoint(*segments)
58
+ [self.api_namespace, *segments].join("/")
59
+ end
60
+
61
+ def client
62
+ @client ||= AudioVision::Client.new
63
+ end
64
+ end
65
+
66
+
67
+ # Steal the ActiveRecord behavior for object comparison.
68
+ # If they're the same class and the ID is the same, then it's "same"
69
+ # enough for us.
70
+ def ==(comparison_object)
71
+ super ||
72
+ comparison_object.instance_of?(self.class) &&
73
+ self.id && self.id == comparison_object.id
74
+ end
75
+ alias :eql? :==
76
+
77
+ end
78
+ end
@@ -0,0 +1,54 @@
1
+ module AudioVision
2
+ class Billboard < Base
3
+
4
+ class << self
5
+ def api_namespace
6
+ :billboards
7
+ end
8
+
9
+
10
+ # Get the current Billboard on AudioVision.
11
+ # Returns a Billboard if success, otherwise nil.
12
+ #
13
+ # Example:
14
+ # AudioVision::Billboard.current #=> #<AudioVision::Billboard>
15
+ def current
16
+ response = client.get(endpoint("current"))
17
+
18
+ if response.success?
19
+ new(response.body)
20
+ else
21
+ nil
22
+ end
23
+ end
24
+ end
25
+
26
+
27
+ attr_accessor \
28
+ :id,
29
+ :layout,
30
+ :published_at,
31
+ :updated_at,
32
+ :posts
33
+
34
+
35
+ def initialize(attributes={})
36
+ @id = attributes["id"]
37
+ @layout = attributes["layout"]
38
+
39
+ if attributes["published_at"]
40
+ @published_at = Time.parse(attributes["published_at"].to_s)
41
+ end
42
+
43
+ if attributes["updated_at"]
44
+ @updated_at = Time.parse(attributes["updated_at"].to_s)
45
+ end
46
+
47
+ @posts = []
48
+
49
+ Array(attributes["posts"]).each do |json|
50
+ @posts << AudioVision::Post.new(json)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,37 @@
1
+ module AudioVision
2
+ class Bucket < Base
3
+
4
+ class << self
5
+ def api_namespace
6
+ :buckets
7
+ end
8
+
9
+ alias :find_by_key :find
10
+ end
11
+
12
+
13
+ attr_accessor \
14
+ :id,
15
+ :title,
16
+ :description,
17
+ :updated_at,
18
+ :posts
19
+
20
+
21
+ def initialize(attributes={})
22
+ @id = attributes["id"]
23
+ @title = attributes["title"]
24
+ @description = attributes["description"]
25
+
26
+ if attributes["updated_at"]
27
+ @updated_at = Time.parse(attributes["updated_at"].to_s)
28
+ end
29
+
30
+ @posts = []
31
+
32
+ Array(attributes["posts"]).each do |json|
33
+ @posts << AudioVision::Post.new(json)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ module AudioVision
2
+ class Category
3
+
4
+ attr_accessor \
5
+ :id,
6
+ :title,
7
+ :slug,
8
+ :description,
9
+ :public_url
10
+
11
+
12
+ def initialize(attributes={})
13
+ @id = attributes["id"]
14
+ @title = attributes["title"]
15
+ @slug = attributes["slug"]
16
+ @description = attributes["description"]
17
+ @public_url = attributes["public_url"]
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,34 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+
4
+ module AudioVision
5
+ class Client
6
+ # Get a response from the AudioVision API.
7
+ # Returns a Faraday Response object.
8
+ #
9
+ # Example:
10
+ # client.get("posts/1")
11
+ def get(path, params={})
12
+ connection.get do |request|
13
+ request.url path
14
+ request.params = params
15
+ end
16
+ end
17
+
18
+
19
+ private
20
+
21
+ def connection
22
+ @connection ||= begin
23
+ Faraday.new(:url => api_root) do |conn|
24
+ conn.response :json
25
+ conn.adapter Faraday.default_adapter
26
+ end
27
+ end
28
+ end
29
+
30
+ def api_root
31
+ @api_root ||= AudioVision::URL + AudioVision.api_root
32
+ end
33
+ end
34
+ end