tpdata 0.9.1
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/Gemfile +12 -0
- data/Gemfile.lock +36 -0
- data/Manifest.txt +12 -0
- data/README.md +106 -0
- data/Rakefile +10 -0
- data/bin/tpdata +3 -0
- data/examples/data_example.rb +14 -0
- data/lib/theplatform/configuration.rb +44 -0
- data/lib/theplatform/data.rb +120 -0
- data/lib/theplatform/identity.rb +52 -0
- data/lib/theplatform/services.rb +60 -0
- data/lib/theplatform.rb +16 -0
- data/spec/lib/configuration_spec.rb +45 -0
- data/spec/lib/data_spec.rb +69 -0
- data/spec/lib/identity_spec.rb +61 -0
- data/spec/spec_helper.rb +4 -0
- data/theplatform.gemspec +25 -0
- metadata +132 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
ZenTest (4.8.1)
|
5
|
+
autotest-fsevent (0.2.8)
|
6
|
+
sys-uname
|
7
|
+
autotest-growl (0.2.16)
|
8
|
+
diff-lcs (1.1.3)
|
9
|
+
ffi (1.0.11)
|
10
|
+
httparty (0.8.3)
|
11
|
+
multi_json (~> 1.0)
|
12
|
+
multi_xml
|
13
|
+
multi_json (1.0.4)
|
14
|
+
multi_xml (0.5.1)
|
15
|
+
rspec (2.10.0)
|
16
|
+
rspec-core (~> 2.10.0)
|
17
|
+
rspec-expectations (~> 2.10.0)
|
18
|
+
rspec-mocks (~> 2.10.0)
|
19
|
+
rspec-core (2.10.1)
|
20
|
+
rspec-expectations (2.10.0)
|
21
|
+
diff-lcs (~> 1.1.3)
|
22
|
+
rspec-mocks (2.10.1)
|
23
|
+
spork (0.8.4)
|
24
|
+
sys-uname (0.9.0)
|
25
|
+
ffi (>= 1.0.0)
|
26
|
+
|
27
|
+
PLATFORMS
|
28
|
+
ruby
|
29
|
+
|
30
|
+
DEPENDENCIES
|
31
|
+
ZenTest
|
32
|
+
autotest-fsevent
|
33
|
+
autotest-growl
|
34
|
+
httparty
|
35
|
+
rspec
|
36
|
+
spork (= 0.8.4)
|
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# tpdata
|
2
|
+
|
3
|
+
## DESCRIPTION:
|
4
|
+
|
5
|
+
Tpdata gem is a wrapper for the RESTful interface for thePlatform for Media's Data Services.
|
6
|
+
|
7
|
+
|
8
|
+
## REQUIREMENTS:
|
9
|
+
|
10
|
+
The only Gem requirement is HTTParty
|
11
|
+
|
12
|
+
## INSTALL:
|
13
|
+
|
14
|
+
gem install tpdata
|
15
|
+
|
16
|
+
## USAGE:
|
17
|
+
|
18
|
+
To add Tpdata gem:
|
19
|
+
|
20
|
+
require 'theplatform'
|
21
|
+
|
22
|
+
### Configuration
|
23
|
+
Both endpoints (::Data and ::Identity) support the #configure methods to build instance variables on a per object basis.
|
24
|
+
|
25
|
+
ThePlatform::Data.configure do |config|
|
26
|
+
config.schema = '1.4.0'
|
27
|
+
config.form = 'cjson'
|
28
|
+
config.token = 'rDGZTYyxjGqjfEXNsphawfAqIdfdDDff'
|
29
|
+
end
|
30
|
+
=> {:schema=>"1.4.0", :form=>"cjson", :token=>"rDGZTYyxjGqjfEXNsphawfAqIdfdDDff"}
|
31
|
+
|
32
|
+
To list the available params to configure:
|
33
|
+
|
34
|
+
ThePlatform::Identity.parameters
|
35
|
+
=> {:schema=>"1.4.0", :form=>"cjson", :token=>"rDGZTYyxjGqjfEXNsphawfAqIdfdDDff"}
|
36
|
+
|
37
|
+
The boolean methods #parameters? is also available to query if all params are set:
|
38
|
+
|
39
|
+
ThePlatform::Identity.parameters?
|
40
|
+
=> true
|
41
|
+
|
42
|
+
### Tokens
|
43
|
+
To request a token:
|
44
|
+
|
45
|
+
ThePlatform::Identity.token(username:'your_username', password:'your_password',schema:'1.0',form:'json')
|
46
|
+
=> {"signInResponse"=>
|
47
|
+
{"userName"=>"your_username",
|
48
|
+
"duration"=>315360000000,
|
49
|
+
"token"=>"rDGZTYyxjGqjfEXNsphawfAqIdfdDDff",
|
50
|
+
"userId"=>
|
51
|
+
"https://identity.auth.theplatform.com/idm/data/User/mps/123456789",
|
52
|
+
"idleTimeout"=>1209600000}}
|
53
|
+
|
54
|
+
Note that you can also set _duration and _idleTimeout as well. Visit http://help.theplatform.com for more information.
|
55
|
+
|
56
|
+
### Data Services
|
57
|
+
A list of endpoints and valid objects are available at http://help.theplatform.com. Internally, they are listed in the services.rb file.
|
58
|
+
|
59
|
+
In this example, we're going to build a query for the Media Data Service (MDS):
|
60
|
+
|
61
|
+
media = ThePlatform::Data.mds
|
62
|
+
@endpoint="http://data.media.theplatform.com/media/data/",
|
63
|
+
@objects=
|
64
|
+
[:AccountSettings,
|
65
|
+
:AssetType,
|
66
|
+
:Category,
|
67
|
+
:Media,
|
68
|
+
:MediaDefaults,
|
69
|
+
:MediaFile,
|
70
|
+
:Provider,
|
71
|
+
:Release,
|
72
|
+
:Server]>
|
73
|
+
|
74
|
+
The return value for any Service Object is its endpoint and the available objects.
|
75
|
+
To build the query for a GET:
|
76
|
+
|
77
|
+
media.get('Category','12744085', schema:'1.4.0',form:'json',token:'12uZynnc2zHvVNDokvgG0TC9UBD7EPDm')
|
78
|
+
|
79
|
+
Needed parameters are the Objects, Object ID(s), Schema, Form, and the Token (which can be built through the ThePlatform::Identity)
|
80
|
+
|
81
|
+
To request all objects, pass 'all' to the id param. To return multiple objects, pass a String with comma separated IDs.
|
82
|
+
|
83
|
+
A POST:
|
84
|
+
|
85
|
+
media.post('Media', '{"title":"First POST using the RUBYds","ownerId":"http://access.auth.theplatform.com/data/Account/123456789"}',schema:'1.4.0',form:'cjson',token:'Nez8Y9ScVDxPxLDmUsg_ESCDYJCJwPBk',account:'My_Account')
|
86
|
+
|
87
|
+
Note that this is a JSON POST body, but is entered as a String object with a JSON body.
|
88
|
+
|
89
|
+
The same holds true for PUT values as well, media.put
|
90
|
+
|
91
|
+
A DELETE:
|
92
|
+
|
93
|
+
media.delete('Media','27550715', schema:'1.4.0',form:'cjson',token:'Nez8Y9ScVDxPxLDmUsg_ESCDYJCJwPBk',account:'My_Account')
|
94
|
+
|
95
|
+
Needed params here are the Object, Object ID(s), schema, form, token, and account.
|
96
|
+
|
97
|
+
## ToDo:
|
98
|
+
* Add SELF to the Identity endpoints
|
99
|
+
* Unit::Tests and Specs for all. Use mocks instead of live data!
|
100
|
+
|
101
|
+
## LICENSE:
|
102
|
+
|
103
|
+
Copyright (c) 2012 Ben Woodall
|
104
|
+
|
105
|
+
Code hosted at git://ln.benwoodall.com/tpdata.git as ReadOnly.
|
106
|
+
For Write access or send-email diffs: mail@benwoodall.com
|
data/Rakefile
ADDED
data/bin/tpdata
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require './lib/theplatform.rb'
|
2
|
+
|
3
|
+
# request a new token!
|
4
|
+
token = ThePlatform::Identity.token(username:'my_username',password:'my_password',schema:'1.0',form:'json')
|
5
|
+
|
6
|
+
# use #configure to build a basic request
|
7
|
+
ThePlatform::Data.configure do |c|
|
8
|
+
c.schema='1.4.0'
|
9
|
+
c.form='cjson'
|
10
|
+
c.token=token['signInResponse']['token']
|
11
|
+
end
|
12
|
+
|
13
|
+
# return all the Categories!
|
14
|
+
puts ThePlatform::Data.mds.get('Category','all',account:'my_account')
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ThePlatform
|
2
|
+
|
3
|
+
# Module to extend to other Classes in order to set up #configuration on a per object basis
|
4
|
+
module Configuration
|
5
|
+
|
6
|
+
extend self
|
7
|
+
|
8
|
+
attr_accessor :schema, :form, :token, :username, :password, :_duration, :_idleTimeout
|
9
|
+
|
10
|
+
# Allows for a Rails type configuration setup. Different object make different configurations.
|
11
|
+
#
|
12
|
+
# ThePlatform::Data.configure do |config|
|
13
|
+
# config.schema = '1.4.0'
|
14
|
+
# config.form = 'cjson'
|
15
|
+
# config.token = 'o4VThP--IcaKwltckmgdw544KD0kKDg'
|
16
|
+
# end
|
17
|
+
# => {:schema=>"1.4.0", :form=>"json", :token=>"o4VThP--IcaKwltckmgdw544KD0kKDg"}
|
18
|
+
#
|
19
|
+
def configure
|
20
|
+
yield self
|
21
|
+
parameters
|
22
|
+
end
|
23
|
+
|
24
|
+
# List available parameters and values in those params
|
25
|
+
def parameters
|
26
|
+
@values = {}
|
27
|
+
keys.each { |k| @values.merge! k => get_var("@#{k}") }
|
28
|
+
@values
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns true or false if all parameters are set.
|
32
|
+
def parameters?
|
33
|
+
parameters.values.all?
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Helper to clean up recursive method in #parameters
|
39
|
+
def get_var(var)
|
40
|
+
self.instance_variable_get(var)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module ThePlatform
|
2
|
+
|
3
|
+
# Class to RESTfully interface with thePlatform's API
|
4
|
+
# ThePlatform::Data#
|
5
|
+
class Data
|
6
|
+
include HTTParty
|
7
|
+
extend ThePlatform::Configuration
|
8
|
+
|
9
|
+
def initialize(params={})
|
10
|
+
@endpoint = params[:endpoint]
|
11
|
+
@objects = params[:objects]
|
12
|
+
end
|
13
|
+
|
14
|
+
# Set the different available params to configure
|
15
|
+
def self.keys
|
16
|
+
@keys ||= [:schema, :form, :token]
|
17
|
+
end
|
18
|
+
|
19
|
+
# MetaMagic to initialize SERVICE hash into methods to create SERVICE objects
|
20
|
+
(class << self; self; end).instance_eval do
|
21
|
+
SERVICE.keys.each do |data|
|
22
|
+
define_method(data) { self.new(endpoint: SERVICE[data][:endpoint], objects: SERVICE[data][:objects]) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# GET call for data Object.
|
27
|
+
#
|
28
|
+
# This is built by passing the Object, the comma delimited IDs, and the RESTful parameters.
|
29
|
+
# To return all the Objects, pass 'all' for the id param.
|
30
|
+
#
|
31
|
+
# Needed paramters are: schema, form, and token
|
32
|
+
#
|
33
|
+
# ThePlatform::Data.mds.get('Category','1278889',schema:'1.4.0',form:'json',token:'12uZynnc2zHvVNDokvgG0mmK33yOOd',account:'my_account')
|
34
|
+
# or
|
35
|
+
# ThePlatform::Data.mds.get('Category','all',schema:'1.4.0',form:'json',token:'12uZynnc2zHvVNDokvgG0mmK33yOOd',account:'my_account')
|
36
|
+
def get(object, id=[],options={})
|
37
|
+
set_uri
|
38
|
+
set_id = "/#{id}" unless id =~ /all/i
|
39
|
+
self.class.get("/#{object}#{set_id}", query: extras.merge(options))
|
40
|
+
end
|
41
|
+
|
42
|
+
# POST to create new Objects.
|
43
|
+
#
|
44
|
+
# Posts are created by passing the Object type, and a String object of the POST body.
|
45
|
+
#
|
46
|
+
# Needed parameters are: schema, form, token, and account.
|
47
|
+
#
|
48
|
+
# the_body = '{'title':'Using the RUBYds',"ownerId":"http://access.auth.theplatform.com/data/Account/2011111628"}'
|
49
|
+
# ThePlatform::Data.mds.put('Media', the_body,
|
50
|
+
# schema:'1.4.0',form:'cjson',token:'Nez8Y9ScVDxPxLDmUsg_ESCDYJCJwPBk',account:'Ruby Test Account')
|
51
|
+
def post(object, body, options={})
|
52
|
+
set_uri
|
53
|
+
set_header options
|
54
|
+
self.class.post("/#{object}", query: extras.merge(options), body: body)
|
55
|
+
end
|
56
|
+
|
57
|
+
# PUT to edit Objects.
|
58
|
+
#
|
59
|
+
# Put needs the Object type and String body.
|
60
|
+
#
|
61
|
+
# Needed parameters: schema, form, token, and account.
|
62
|
+
#
|
63
|
+
# the_body = '{"id":""http://data.media.theplatform.com/media/data/Media/27444715"","title":"test"}'
|
64
|
+
# ThePlatform::Data.mds.put('Media', the_body,
|
65
|
+
# schema:'1.4.0',form:'cjson',token:'Nez8Y9ScVDxPxLDmUsg_ESCDYJCJwPBk',account:'Ruby Test Account')
|
66
|
+
def put(object, body, options={})
|
67
|
+
set_uri
|
68
|
+
set_header options
|
69
|
+
self.class.put("/#{object}", query: extras.merge(options), body: body)
|
70
|
+
end
|
71
|
+
|
72
|
+
# DELETE objects
|
73
|
+
#
|
74
|
+
# To DELETE Objects, pass the Object type and comma separated IDs
|
75
|
+
#
|
76
|
+
# Needed parameters: schema, form, token, and account
|
77
|
+
#
|
78
|
+
# ThePlatform::Data.mds.delete('Media','27550715', schema:'1.4.0',form:'cjson',
|
79
|
+
# token:'Nez8Y9ScVDxPxLDmUsg_ESCDYJCJwPBk',account:'Ruby Test Account')
|
80
|
+
def delete(object,id=[],options={})
|
81
|
+
set_uri
|
82
|
+
self.class.delete("/#{object}/#{id}", query: extras.merge(options))
|
83
|
+
end
|
84
|
+
|
85
|
+
# NOTIFY endpoint
|
86
|
+
#
|
87
|
+
# This moves to the /notify endpoint of the data service
|
88
|
+
#
|
89
|
+
# Needed parameters: token
|
90
|
+
#
|
91
|
+
# ThePlatform::Data.mds.notify(token:'G1yP1Zsp7nEHW2fug6glIQCjfjIIIl', size:'10', since:'289334341')
|
92
|
+
def notify(options={})
|
93
|
+
self.class.base_uri @endpoint
|
94
|
+
self.class.get("/notify", query: options)
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def set_header(option)
|
100
|
+
if option[:form] == 'json'
|
101
|
+
self.class.headers 'Content-Type' => 'application/json'
|
102
|
+
elsif option[:form] == 'atom'
|
103
|
+
self.class.headers 'Content-Type' => 'application/atom+xml'
|
104
|
+
elsif option[:form] == 'rss'
|
105
|
+
self.class.headers 'Content-Type' => 'application/rss+xml'
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
def extras
|
111
|
+
ThePlatform::Data.parameters
|
112
|
+
end
|
113
|
+
|
114
|
+
def set_uri
|
115
|
+
self.class.base_uri "#{@endpoint}data/"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module ThePlatform
|
2
|
+
|
3
|
+
# Class to RESTfully interface with thePlatform's Identity API
|
4
|
+
# ThePlatform::Identity#
|
5
|
+
class Identity
|
6
|
+
include HTTParty
|
7
|
+
extend ThePlatform::Configuration
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# Set the different available params to configure
|
12
|
+
def keys
|
13
|
+
@keys ||= [:schema, :form, :username, :password, :_duration, :_idleTimeout]
|
14
|
+
end
|
15
|
+
|
16
|
+
# Return ALL THE TOKEN!
|
17
|
+
#
|
18
|
+
# ThePlatform::Identity.token(username:'USERNAME', password:'PASSWORD', schema:'1.0', form:'(json|xml|rss)')
|
19
|
+
#
|
20
|
+
# _duration: and _idleTimeout: are optional. Resorts to thePlatform defaults if not defined
|
21
|
+
def token(options = {})
|
22
|
+
base_uri IDENTITY
|
23
|
+
get("/signIn", query: extras.merge(options))
|
24
|
+
end
|
25
|
+
|
26
|
+
# Invalidate a given Token
|
27
|
+
#
|
28
|
+
# ThePlatform::Identity.invalidate!(token, schema:'1.0', form:'(json|xml|rss)')
|
29
|
+
def invalidate!(tokens, options = {})
|
30
|
+
base_uri IDENTITY
|
31
|
+
get("/signOut?_token=#{tokens}", query: extras.merge(options))
|
32
|
+
end
|
33
|
+
|
34
|
+
# Return the number of tokens in an account.
|
35
|
+
#
|
36
|
+
# ThePlatform::Identity.count(username:'USERNAME', password:'PASSWORD',schema:'1.0', form:'(json|xml|rss)')
|
37
|
+
def count(options = {})
|
38
|
+
base_uri IDENTITY
|
39
|
+
get("/getTokenCount", query: extras.merge(options))
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def self.extras
|
47
|
+
ThePlatform::Identity.parameters
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module ThePlatform
|
2
|
+
|
3
|
+
# URI for Identity service
|
4
|
+
IDENTITY = "https://identity.auth.theplatform.com/idm/web/Authentication/"
|
5
|
+
|
6
|
+
# Hash containing Data Services, along with their available objects
|
7
|
+
SERVICE =
|
8
|
+
{
|
9
|
+
:accessadmin => { :endpoint => 'http://access.auth.theplatform.com/',
|
10
|
+
:objects => [ :Account, :Permission, :Registry, :Role ] },
|
11
|
+
:enduser => { :endpoint => 'http://enduser.access.auth.theplatform.com/',
|
12
|
+
:objects => [ :Permission, :Role ] },
|
13
|
+
:console => { :endpoint => 'http://data.mpx.theplatform.com/cds/',
|
14
|
+
:objects => [ :AccountSettings, :Command, :MenuItem, :Pane, :PaneState, :Panel,
|
15
|
+
:Shortcut, :UserAccountSettings, :UserSettings, :View, :ViewLink ] },
|
16
|
+
:delivery => { :endpoint => 'http://data.delivery.theplatform.com/delivery/',
|
17
|
+
:objects => [ :AccountSettings, :AdPolicy, :Restriction ] },
|
18
|
+
:entitlements => { :endpoint => 'http://data.entitlement.theplatform.com/eds/',
|
19
|
+
:objects => [ :AccountSettings, :Device, :DistributionRights, :Entitlement,
|
20
|
+
:PhysicalDevice, :ProductDevice, :Rights, :SubjectPolicy, :UserDevice ] },
|
21
|
+
:feedreader => { :endpoint => 'http://feedreader.ingest.theplatform.com/feedreader/',
|
22
|
+
:objects => [ :FeedReader ] },
|
23
|
+
:feeds => { :endpoint => 'http://data.feed.theplatform.com/feed/',
|
24
|
+
:objects => [ :FeedAdapter, :FeedConfig ] },
|
25
|
+
:ingest => { :endpoint => 'http://adapter.ingest.theplatform.com/adapter/',
|
26
|
+
:objects => [ :Adapter, :AdapterConfiguration, :Checksum ] },
|
27
|
+
:mds => { :endpoint => 'http://data.media.theplatform.com/media/',
|
28
|
+
:objects => [ :AccountSettings, :AssetType, :Category, :Media,
|
29
|
+
:MediaDefaults, :MediaFile, :Provider, :Release, :Server ] },
|
30
|
+
:mps => { :endpoint => 'http://mps.theplatform.com/',
|
31
|
+
:objects => [ :Account, :AssetType, :Batch, :Category, :DefaultServer, :Media,
|
32
|
+
:MediaFile, :MediaRequest, :Release, :Server, :Task ]},
|
33
|
+
:message => { :endpoint => 'http://data.message.theplatform.com/message/',
|
34
|
+
:objects => [ :EmailTemplate, :MessageInstruction, :MessageQueue, :NotificationFilter ] },
|
35
|
+
:product => { :endpoint => 'http://data.product.theplatform.com/product/',
|
36
|
+
:objects => [ :AccountSettings, :PricingTemplate, :Product, :ProductTag ] },
|
37
|
+
:publish => { :endpoint => 'http://data.publish.theplatform.com/publish/',
|
38
|
+
:objects => [ :Adapter, :AdapterConfiguration, :PublishProfile ] },
|
39
|
+
:sharing => { :endpoint => 'http://data.social.community.theplatform.com/social/',
|
40
|
+
:objects => [ :OutletProfile, :ProviderAdapter ] },
|
41
|
+
:social => { :endpoint => 'http://data.social.community.theplatform.com/social/',
|
42
|
+
:objects => [ :AccountSettings, :Comment, :Rating, :TotalRating ] },
|
43
|
+
:task => { :endpoint => 'http://data.task.theplatform.com/task/',
|
44
|
+
:objects => [ :Agent, :Batch, :Task, :TaskTemplate, :TaskType ] },
|
45
|
+
:identity => { :endpoint => 'https://identity.auth.theplatform.com/idm/',
|
46
|
+
:objects => [ :Directory, :Security, :User ] },
|
47
|
+
:euid => { :endpoint => 'https://euid.theplatform.com/idm/',
|
48
|
+
:objects => [ :Directory, :Security, :User ] },
|
49
|
+
:userprofile => { :endpoint => 'http://data.userprofile.community.theplatform.com/userprofile/',
|
50
|
+
:objects => [ :AccountSettings, :TotalItem, :UserList,
|
51
|
+
:UserListItem, :UserProfile ] },
|
52
|
+
:validation => { :endpoint => 'http://data.validation.theplatform.com/validation/',
|
53
|
+
:objects => [ :ConditionsRule, :ValidationRule, :Validator ] },
|
54
|
+
:watchfolder => { :endpoint => 'http://watchfolder.ingest.theplatform.com/wf/',
|
55
|
+
:objects => [ :WatchFolder, :WatchFolderFile ] },
|
56
|
+
:workflow => { :endpoint => 'http://data.workflow.theplatform.com/workflow/',
|
57
|
+
:objects => [ :ProfileResult, :ProfileStepResult, :WorkflowQueue ] }
|
58
|
+
}
|
59
|
+
|
60
|
+
end
|
data/lib/theplatform.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift( File.dirname( __FILE__ ))
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
# Start of wrapper for tpdata
|
6
|
+
module ThePlatform
|
7
|
+
|
8
|
+
# Set gem version
|
9
|
+
VERSION = '0.9.1'
|
10
|
+
|
11
|
+
require 'theplatform/configuration'
|
12
|
+
require 'theplatform/services'
|
13
|
+
require 'theplatform/identity'
|
14
|
+
require 'theplatform/data'
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ThePlatform::Configuration do
|
4
|
+
|
5
|
+
describe 'mass configuration' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
ThePlatform::Data.configure do |config|
|
9
|
+
config.schema = '1.4.0'
|
10
|
+
config.form = 'cjson'
|
11
|
+
config.token = 'my_token'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should set instance variables' do
|
16
|
+
ThePlatform::Data.parameters[:schema].should == '1.4.0'
|
17
|
+
ThePlatform::Data.parameters[:form].should == 'cjson'
|
18
|
+
ThePlatform::Data.parameters[:token].should == 'my_token'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should return true if all values are set' do
|
22
|
+
ThePlatform::Data.parameters?.should be true
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return false if all values are not set' do
|
26
|
+
ThePlatform::Data.schema = nil
|
27
|
+
ThePlatform::Data.parameters[:schema].should == nil
|
28
|
+
ThePlatform::Data.parameters?.should be false
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'endpoints' do
|
34
|
+
|
35
|
+
it 'should list correct keys for ::Data' do
|
36
|
+
ThePlatform::Data.keys.should == [:schema, :form, :token]
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should list correct keys for ::Identity' do
|
40
|
+
ThePlatform::Identity.keys.should == [:schema, :form, :username, :password, :_duration, :_idleTimeout]
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ThePlatform::Data do
|
4
|
+
|
5
|
+
describe 'default attributes' do
|
6
|
+
|
7
|
+
it 'should include HTTParty methods' do
|
8
|
+
ThePlatform::Data.should include HTTParty
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'endpoints' do
|
14
|
+
|
15
|
+
it 'should make for new class methods' do
|
16
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
17
|
+
ThePlatform::Data.methods.should include endpoint
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should return a list of available data service objects' do
|
22
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
23
|
+
ThePlatform.const_get(:SERVICE).values_at(endpoint)[0].keys.should include :objects
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'requests' do
|
30
|
+
|
31
|
+
it 'should return 200' do
|
32
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
33
|
+
ThePlatform::Data.send(endpoint).get('', 'all', schema:'1.0', form:'json').code.should == 200
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should make a GET against an endpoint' do
|
38
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
39
|
+
ThePlatform::Data.send(endpoint).get('Object', 'all').request.instance_variable_get(:@http_method).should equal Net::HTTP::Get
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should make a POST against an endpoint' do
|
44
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
45
|
+
ThePlatform::Data.send(endpoint).post('Object', '{BODY}').request.instance_variable_get(:@http_method).should equal Net::HTTP::Post
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should make a PUT against an endpoint' do
|
50
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
51
|
+
ThePlatform::Data.send(endpoint).put('Object', '{BODY}').request.instance_variable_get(:@http_method).should equal Net::HTTP::Put
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should make a DELETE against an endpoint' do
|
56
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
57
|
+
ThePlatform::Data.send(endpoint).delete('Object', 'IDS').request.instance_variable_get(:@http_method).should equal Net::HTTP::Delete
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should be able to use the NOTIFY method' do
|
62
|
+
ThePlatform.const_get(:SERVICE).keys.each do |endpoint|
|
63
|
+
ThePlatform::Data.send(endpoint).notify('options').request.instance_variable_get(:@http_method).should equal Net::HTTP::Get
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ThePlatform::Identity do
|
4
|
+
|
5
|
+
describe 'default attributes' do
|
6
|
+
|
7
|
+
it 'should include HTTParty methods' do
|
8
|
+
ThePlatform::Identity.should include HTTParty
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#token" do
|
14
|
+
|
15
|
+
it "should return a 200 response" do
|
16
|
+
ThePlatform::Identity.token(form:'json', schema:'1.0').code.should == 200
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should return BAD REQUEST if no schema or form present' do
|
20
|
+
ThePlatform::Identity.token(test:1, test:2).code.should == 422
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have a valid return body' do
|
24
|
+
ThePlatform::Identity.token(form:'json', schema:'1.0')['description'].should == "No authentication header."
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should not authenticate an invalid user' do
|
28
|
+
ThePlatform::Identity.token(form:'json', schema:'1.0', username:'test', password:'pass')['description'].should == "Could not authenticate user test."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#invalidate!" do
|
33
|
+
|
34
|
+
it 'should return a 200 response' do
|
35
|
+
ThePlatform::Identity.invalidate!('omg_i_haz_a_tokenz', form:'json', schema:'1.0').code.should == 200
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should have a valid return body' do
|
39
|
+
ThePlatform::Identity.invalidate!('omg_i_haz_a_tokenz', form:'json', schema:'1.0').should have_key 'signOutResponse'
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#count" do
|
45
|
+
|
46
|
+
it "should return a 200 response" do
|
47
|
+
ThePlatform::Identity.count(form:'json', schema:'1.0').code.should == 200
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should return a BAD REQUEST if no schema or form are present' do
|
51
|
+
ThePlatform::Identity.count(test:1, test:2).code.should == 422
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should fail if auth is invalid' do
|
55
|
+
ThePlatform::Identity.count(form:'json', schema:'1.0', username:'test', password:'pass')['description'].should == "Could not authenticate user test."
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
data/spec/spec_helper.rb
ADDED
data/theplatform.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require './lib/theplatform.rb'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'tpdata'
|
6
|
+
s.version = ThePlatform::VERSION
|
7
|
+
s.date = '2012-09-28'
|
8
|
+
s.authors = ['Ben Woodall']
|
9
|
+
s.email = 'ben.woodall@theplatform.com'
|
10
|
+
s.homepage = 'http://github.com/benwoody/tpdata'
|
11
|
+
|
12
|
+
s.summary = %q{RESTful wrapper for thePlatform}
|
13
|
+
s.description = %q{Tpdata gem is a wrapper for the RESTful interface for thePlatform for Media's Data Services.}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.extra_rdoc_files = ["README.md"]
|
20
|
+
|
21
|
+
s.add_runtime_dependency 'httparty', "~> 0.8.3"
|
22
|
+
s.add_development_dependency 'rake'
|
23
|
+
s.add_development_dependency 'rspec'
|
24
|
+
s.add_development_dependency 'yard'
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tpdata
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ben Woodall
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.3
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: yard
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Tpdata gem is a wrapper for the RESTful interface for thePlatform for
|
79
|
+
Media's Data Services.
|
80
|
+
email: ben.woodall@theplatform.com
|
81
|
+
executables: []
|
82
|
+
extensions: []
|
83
|
+
extra_rdoc_files:
|
84
|
+
- README.md
|
85
|
+
files:
|
86
|
+
- Gemfile
|
87
|
+
- Gemfile.lock
|
88
|
+
- Manifest.txt
|
89
|
+
- README.md
|
90
|
+
- Rakefile
|
91
|
+
- bin/tpdata
|
92
|
+
- examples/data_example.rb
|
93
|
+
- lib/theplatform.rb
|
94
|
+
- lib/theplatform/configuration.rb
|
95
|
+
- lib/theplatform/data.rb
|
96
|
+
- lib/theplatform/identity.rb
|
97
|
+
- lib/theplatform/services.rb
|
98
|
+
- spec/lib/configuration_spec.rb
|
99
|
+
- spec/lib/data_spec.rb
|
100
|
+
- spec/lib/identity_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
- theplatform.gemspec
|
103
|
+
homepage: http://github.com/benwoody/tpdata
|
104
|
+
licenses: []
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 1.8.21
|
124
|
+
signing_key:
|
125
|
+
specification_version: 3
|
126
|
+
summary: RESTful wrapper for thePlatform
|
127
|
+
test_files:
|
128
|
+
- spec/lib/configuration_spec.rb
|
129
|
+
- spec/lib/data_spec.rb
|
130
|
+
- spec/lib/identity_spec.rb
|
131
|
+
- spec/spec_helper.rb
|
132
|
+
has_rdoc:
|