lc-api 0.0.1 → 0.8.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/lib/lc-api/api.rb +40 -0
- data/lib/lc-api/resource/category.rb +6 -0
- data/lib/lc-api/resource/location.rb +6 -0
- data/lib/lc-api/resource/message.rb +6 -0
- data/lib/lc-api/resource/series.rb +6 -0
- data/lib/lc-api/resource/speaker.rb +6 -0
- data/lib/lc-api/resource/staff.rb +6 -0
- data/lib/lc-api/resource.rb +85 -0
- data/lib/lc-api.rb +13 -2
- metadata +26 -2
data/lib/lc-api/api.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module LcApi
|
4
|
+
class API
|
5
|
+
class << self
|
6
|
+
@@base_uri = 'http://0.0.0.0:3000/v1/'
|
7
|
+
|
8
|
+
def method_missing method_name, *args
|
9
|
+
# method_name == "get"
|
10
|
+
# "args" === "message/1, {}"
|
11
|
+
puts "args is: #{args}"
|
12
|
+
# we are expecting "get" to be the method name here, but to be safe, we allow for
|
13
|
+
# missing methods other than "get", which we toss up to super
|
14
|
+
super(method_name, args) unless [:get].include? method_name
|
15
|
+
uri = @@base_uri + args.shift
|
16
|
+
|
17
|
+
param = nil
|
18
|
+
param = args.shift
|
19
|
+
|
20
|
+
(uri = uri + "/#{param}") if (param)
|
21
|
+
|
22
|
+
puts "uri is: #{uri}"
|
23
|
+
HTTParty.get("#{uri}?key=#{LcApi.key}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class ResponseError < StandardError
|
28
|
+
end
|
29
|
+
|
30
|
+
class NotFound < ResponseError
|
31
|
+
end
|
32
|
+
|
33
|
+
class Forbidden < ResponseError
|
34
|
+
end
|
35
|
+
|
36
|
+
class InternalServerError < ResponseError
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module LcApi
|
4
|
+
class Resource
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def id(id, options=nil)
|
8
|
+
bool = options ? true : false
|
9
|
+
(options = {}) unless (options)
|
10
|
+
uri = member_name # ie 'message'
|
11
|
+
uri += "/#{id}" if id
|
12
|
+
parse_response(API.get(uri, options), bool) # method missing
|
13
|
+
end
|
14
|
+
|
15
|
+
def all
|
16
|
+
uri = member_name # get name of resource
|
17
|
+
parse_response(API.get(uri), true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_response(response, multiple=false)
|
21
|
+
case response.code.to_i
|
22
|
+
when 404
|
23
|
+
raise LcApi::API::NotFound.new(response), "Resource was not found"
|
24
|
+
when 403
|
25
|
+
raise LcApi::API::Forbidden.new(response), "Forbidden"
|
26
|
+
when 500
|
27
|
+
raise LcApi::API::InternalServerError.new(response), "500 Internal Server error"
|
28
|
+
end
|
29
|
+
|
30
|
+
return build_record(response.parsed_response) unless multiple
|
31
|
+
|
32
|
+
resources = []
|
33
|
+
response.parsed_response.each do |rec|
|
34
|
+
resources.push build_record(rec)
|
35
|
+
end
|
36
|
+
return resources
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_record(response)
|
40
|
+
attributes = {}
|
41
|
+
response.each_pair do |key, val|
|
42
|
+
attributes[key] = val if @attributes.include? key
|
43
|
+
end
|
44
|
+
new(attributes)
|
45
|
+
end
|
46
|
+
|
47
|
+
def member_name # ie. LcApi::Message = Message = message
|
48
|
+
# ex. name = LcApi::Message
|
49
|
+
name.split('::').last.downcase
|
50
|
+
end
|
51
|
+
|
52
|
+
def define_attribute_methods(attributes)
|
53
|
+
@attributes = attributes
|
54
|
+
|
55
|
+
@attributes.each do |name|
|
56
|
+
define_method(name) { self[name] }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
attr_accessor :attributes
|
62
|
+
|
63
|
+
def initialize attributes = {}
|
64
|
+
# raise error if user attempts to initialize a Resource by calling new
|
65
|
+
raise Error, "#{self.class} is an abstract class and cannot be instantiated" if instance_of? Resource
|
66
|
+
@attributes = {}
|
67
|
+
self.attributes = attributes # "attributes=" called
|
68
|
+
end
|
69
|
+
|
70
|
+
def [](key) # called externally, like so: "message.title"
|
71
|
+
@attributes[key]
|
72
|
+
end
|
73
|
+
|
74
|
+
def []=(key,value) # called internally
|
75
|
+
@attributes[key] = value if self.respond_to?(key)
|
76
|
+
end
|
77
|
+
|
78
|
+
def attributes=(attributes = {})
|
79
|
+
attributes.each_pair do |key, val|
|
80
|
+
self[key] = val # []= method call
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
data/lib/lc-api.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'lc-api/api'
|
2
|
+
require 'lc-api/resource'
|
3
|
+
require 'lc-api/resource/message'
|
4
|
+
require 'lc-api/resource/series'
|
5
|
+
require 'lc-api/resource/speaker'
|
6
|
+
require 'lc-api/resource/location'
|
7
|
+
require 'lc-api/resource/staff'
|
8
|
+
require 'lc-api/resource/category'
|
3
9
|
|
10
|
+
module LcApi
|
11
|
+
class << self
|
12
|
+
attr_accessor :key
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lc-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,23 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
date: 2013-04-25 00:00:00.000000000 Z
|
14
|
-
dependencies:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: httparty
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
15
31
|
description: A gem for consuming the LifeChurch.tv API
|
16
32
|
email: daniel@lifechurch.tv
|
17
33
|
executables: []
|
@@ -19,6 +35,14 @@ extensions: []
|
|
19
35
|
extra_rdoc_files: []
|
20
36
|
files:
|
21
37
|
- lib/lc-api.rb
|
38
|
+
- lib/lc-api/api.rb
|
39
|
+
- lib/lc-api/resource.rb
|
40
|
+
- lib/lc-api/resource/category.rb
|
41
|
+
- lib/lc-api/resource/location.rb
|
42
|
+
- lib/lc-api/resource/message.rb
|
43
|
+
- lib/lc-api/resource/series.rb
|
44
|
+
- lib/lc-api/resource/speaker.rb
|
45
|
+
- lib/lc-api/resource/staff.rb
|
22
46
|
homepage: http://rubygems.org/gems/lc-api
|
23
47
|
licenses: []
|
24
48
|
post_install_message:
|