embedly 0.4.0 → 1.0.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/.rvmrc +1 -1
- data/VERSION +1 -1
- data/bin/embedly_objectify +17 -7
- data/bin/embedly_oembed +17 -7
- data/bin/embedly_preview +17 -7
- data/features/objectify.feature +1 -1
- data/features/oembed.feature +9 -9
- data/features/steps/api_steps.rb +6 -7
- data/lib/embedly/api.rb +20 -24
- metadata +15 -15
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.2@embedly-ruby
|
1
|
+
rvm use 1.9.2@embedly-ruby
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/bin/embedly_objectify
CHANGED
@@ -3,10 +3,11 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
3
3
|
%w{embedly json optparse ostruct}.each {|l| require l}
|
4
4
|
|
5
5
|
options = OpenStruct.new({
|
6
|
-
:
|
6
|
+
:hostname => nil,
|
7
7
|
:key => ENV['EMBEDLY_KEY'] == '' ? nil : ENV['EMBEDLY_KEY'],
|
8
8
|
:verbose => false,
|
9
|
-
:args => {}
|
9
|
+
:args => {},
|
10
|
+
:headers => {}
|
10
11
|
})
|
11
12
|
|
12
13
|
action = File.basename(__FILE__)[/embedly_(\w+)/, 1]
|
@@ -20,17 +21,26 @@ Usage #{action} [OPTIONS] <url> [url] ..
|
|
20
21
|
opts.separator ""
|
21
22
|
opts.separator "Options:"
|
22
23
|
|
23
|
-
opts.on("-
|
24
|
-
"Embedly host.
|
25
|
-
|
26
|
-
options.endpoint = e
|
24
|
+
opts.on("-H", "--hostname ENDPOINT",
|
25
|
+
"Embedly host. Default is api.embed.ly.") do |e|
|
26
|
+
options.hostname = e
|
27
27
|
end
|
28
28
|
|
29
|
-
opts.on("
|
29
|
+
opts.on("--header NAME=VALUE",
|
30
|
+
"HTTP header to send with requests.") do |header|
|
31
|
+
n,v = header.split '='
|
32
|
+
options.headers[n] = v
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("-k", "--key KEY", "Embedly key [default: " +
|
30
36
|
"EMBEDLY_KEY environmental variable]") do |k|
|
31
37
|
options.key = k
|
32
38
|
end
|
33
39
|
|
40
|
+
opts.on("-N", "--no-key", "Ignore EMBEDLY_KEY environmental variable") do
|
41
|
+
options.key = nil
|
42
|
+
end
|
43
|
+
|
34
44
|
opts.on("-o", "--option NAME=VALUE", "Set option to be passed as " +
|
35
45
|
"query param.") do |o|
|
36
46
|
k,v = o.split('=')
|
data/bin/embedly_oembed
CHANGED
@@ -3,10 +3,11 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
3
3
|
%w{embedly json optparse ostruct}.each {|l| require l}
|
4
4
|
|
5
5
|
options = OpenStruct.new({
|
6
|
-
:
|
6
|
+
:hostname => nil,
|
7
7
|
:key => ENV['EMBEDLY_KEY'] == '' ? nil : ENV['EMBEDLY_KEY'],
|
8
8
|
:verbose => false,
|
9
|
-
:args => {}
|
9
|
+
:args => {},
|
10
|
+
:headers => {}
|
10
11
|
})
|
11
12
|
|
12
13
|
action = File.basename(__FILE__)[/embedly_(\w+)/, 1]
|
@@ -20,17 +21,26 @@ Usage #{action} [OPTIONS] <url> [url] ..
|
|
20
21
|
opts.separator ""
|
21
22
|
opts.separator "Options:"
|
22
23
|
|
23
|
-
opts.on("-
|
24
|
-
"Embedly host.
|
25
|
-
|
26
|
-
options.endpoint = e
|
24
|
+
opts.on("-H", "--hostname ENDPOINT",
|
25
|
+
"Embedly host. Default is api.embed.ly.") do |e|
|
26
|
+
options.hostname = e
|
27
27
|
end
|
28
28
|
|
29
|
-
opts.on("
|
29
|
+
opts.on("--header NAME=VALUE",
|
30
|
+
"HTTP header to send with requests.") do |header|
|
31
|
+
n,v = header.split '='
|
32
|
+
options.headers[n] = v
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("-k", "--key KEY", "Embedly key [default: " +
|
30
36
|
"EMBEDLY_KEY environmental variable]") do |k|
|
31
37
|
options.key = k
|
32
38
|
end
|
33
39
|
|
40
|
+
opts.on("-N", "--no-key", "Ignore EMBEDLY_KEY environmental variable") do
|
41
|
+
options.key = nil
|
42
|
+
end
|
43
|
+
|
34
44
|
opts.on("-o", "--option NAME=VALUE", "Set option to be passed as " +
|
35
45
|
"query param.") do |o|
|
36
46
|
k,v = o.split('=')
|
data/bin/embedly_preview
CHANGED
@@ -3,10 +3,11 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
3
3
|
%w{embedly json optparse ostruct}.each {|l| require l}
|
4
4
|
|
5
5
|
options = OpenStruct.new({
|
6
|
-
:
|
6
|
+
:hostname => nil,
|
7
7
|
:key => ENV['EMBEDLY_KEY'] == '' ? nil : ENV['EMBEDLY_KEY'],
|
8
8
|
:verbose => false,
|
9
|
-
:args => {}
|
9
|
+
:args => {},
|
10
|
+
:headers => {}
|
10
11
|
})
|
11
12
|
|
12
13
|
action = File.basename(__FILE__)[/embedly_(\w+)/, 1]
|
@@ -20,17 +21,26 @@ Usage #{action} [OPTIONS] <url> [url] ..
|
|
20
21
|
opts.separator ""
|
21
22
|
opts.separator "Options:"
|
22
23
|
|
23
|
-
opts.on("-
|
24
|
-
"Embedly host.
|
25
|
-
|
26
|
-
options.endpoint = e
|
24
|
+
opts.on("-H", "--hostname ENDPOINT",
|
25
|
+
"Embedly host. Default is api.embed.ly.") do |e|
|
26
|
+
options.hostname = e
|
27
27
|
end
|
28
28
|
|
29
|
-
opts.on("
|
29
|
+
opts.on("--header NAME=VALUE",
|
30
|
+
"HTTP header to send with requests.") do |header|
|
31
|
+
n,v = header.split '='
|
32
|
+
options.headers[n] = v
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("-k", "--key KEY", "Embedly key [default: " +
|
30
36
|
"EMBEDLY_KEY environmental variable]") do |k|
|
31
37
|
options.key = k
|
32
38
|
end
|
33
39
|
|
40
|
+
opts.on("-N", "--no-key", "Ignore EMBEDLY_KEY environmental variable") do
|
41
|
+
options.key = nil
|
42
|
+
end
|
43
|
+
|
34
44
|
opts.on("-o", "--option NAME=VALUE", "Set option to be passed as " +
|
35
45
|
"query param.") do |o|
|
36
46
|
k,v = o.split('=')
|
data/features/objectify.feature
CHANGED
@@ -5,7 +5,7 @@ Feature: Objectify
|
|
5
5
|
Because I want to objectify a url
|
6
6
|
|
7
7
|
Scenario Outline: Get the meta description with pro
|
8
|
-
Given an embedly
|
8
|
+
Given an embedly api with key
|
9
9
|
When objectify is called with the <url> URL
|
10
10
|
Then the meta.description should start with <metadesc>
|
11
11
|
And objectify api_version is 2
|
data/features/oembed.feature
CHANGED
@@ -5,7 +5,7 @@ Feature: OEmbed
|
|
5
5
|
Because I want and oembed for a specific url
|
6
6
|
|
7
7
|
Scenario Outline: Get the provider_url
|
8
|
-
Given an embedly
|
8
|
+
Given an embedly api
|
9
9
|
When oembed is called with the <url> URL
|
10
10
|
Then the provider_url should be <provider_url>
|
11
11
|
|
@@ -18,7 +18,7 @@ Feature: OEmbed
|
|
18
18
|
|
19
19
|
|
20
20
|
Scenario Outline: Get the types
|
21
|
-
Given an embedly
|
21
|
+
Given an embedly api
|
22
22
|
When oembed is called with the <url> URL
|
23
23
|
Then the type should be <type>
|
24
24
|
|
@@ -31,7 +31,7 @@ Feature: OEmbed
|
|
31
31
|
|
32
32
|
|
33
33
|
Scenario Outline: Get the provider_url with force flag
|
34
|
-
Given an embedly
|
34
|
+
Given an embedly api
|
35
35
|
When oembed is called with the <url> URL and force flag
|
36
36
|
Then the provider_url should be <provider_url>
|
37
37
|
|
@@ -41,7 +41,7 @@ Feature: OEmbed
|
|
41
41
|
|
42
42
|
|
43
43
|
Scenario Outline: Get multiple provider_urls
|
44
|
-
Given an embedly
|
44
|
+
Given an embedly api
|
45
45
|
When oembed is called with the <urls> URLs
|
46
46
|
Then provider_url should be <provider_urls>
|
47
47
|
|
@@ -52,7 +52,7 @@ Feature: OEmbed
|
|
52
52
|
|
53
53
|
|
54
54
|
Scenario Outline: Get the provider_url with pro
|
55
|
-
Given an embedly
|
55
|
+
Given an embedly api with key
|
56
56
|
When oembed is called with the <url> URL
|
57
57
|
Then the provider_url should be <provider_url>
|
58
58
|
|
@@ -64,7 +64,7 @@ Feature: OEmbed
|
|
64
64
|
|
65
65
|
|
66
66
|
Scenario Outline: Attempt to get 404 URL
|
67
|
-
Given an embedly
|
67
|
+
Given an embedly api
|
68
68
|
When oembed is called with the <url> URL
|
69
69
|
Then type should be error
|
70
70
|
And error_code should be 404
|
@@ -78,7 +78,7 @@ Feature: OEmbed
|
|
78
78
|
|
79
79
|
|
80
80
|
Scenario Outline: Attempt multi get 404 URLs
|
81
|
-
Given an embedly
|
81
|
+
Given an embedly api
|
82
82
|
When oembed is called with the <urls> URLs
|
83
83
|
Then error_code should be <errcode>
|
84
84
|
And type should be <types>
|
@@ -91,10 +91,10 @@ Feature: OEmbed
|
|
91
91
|
| http://yfrog.com/h7qqespj,http://www.scribd.com/doc/asdfasdfasdf | ,404 | photo,error |
|
92
92
|
|
93
93
|
Scenario Outline: Attempt at non-api service without key
|
94
|
-
Given an embedly
|
94
|
+
Given an embedly api
|
95
95
|
When oembed is called with the <url> URL
|
96
96
|
Then error_code should be 401
|
97
|
-
And error_message should be
|
97
|
+
And error_message should be Embedly api key is required.
|
98
98
|
And type should be error
|
99
99
|
|
100
100
|
Examples:
|
data/features/steps/api_steps.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
$:.unshift(File.expand_path('../../../lib',__FILE__))
|
2
2
|
require 'embedly'
|
3
3
|
|
4
|
-
# cache for
|
5
|
-
|
4
|
+
# cache for hostnames
|
5
|
+
HOSTNAMES = {}
|
6
6
|
|
7
|
-
Given /an embedly
|
7
|
+
Given /an embedly api( with key)?$/ do |key_enabled|
|
8
8
|
opts = {}
|
9
|
-
opts[:endpoint] = endpoint
|
10
9
|
if key_enabled
|
11
10
|
raise 'Please set env variable $EMBEDLY_KEY' unless ENV['EMBEDLY_KEY']
|
12
11
|
opts[:key] = ENV["EMBEDLY_KEY"]
|
13
12
|
end
|
14
|
-
if not
|
15
|
-
|
13
|
+
if not HOSTNAMES[opts]
|
14
|
+
HOSTNAMES[opts] = Embedly::API.new opts
|
16
15
|
end
|
17
|
-
@api =
|
16
|
+
@api = HOSTNAMES[opts]
|
18
17
|
end
|
19
18
|
|
20
19
|
When /(\w+) is called with the (.*) URLs?( and ([^\s]+) flag)?$/ do |method, urls, _, flag|
|
data/lib/embedly/api.rb
CHANGED
@@ -14,7 +14,7 @@ require 'querystring'
|
|
14
14
|
#
|
15
15
|
# * +oembed+
|
16
16
|
# * +objectify+
|
17
|
-
# * +preview+
|
17
|
+
# * +preview+
|
18
18
|
#
|
19
19
|
# All methods return ostructs, so fields can be accessed with the dot operator. ex.
|
20
20
|
#
|
@@ -34,7 +34,7 @@ require 'querystring'
|
|
34
34
|
# api.new_method :arg1 => '1', :arg2 => '2'
|
35
35
|
#
|
36
36
|
class Embedly::API
|
37
|
-
attr_reader :key, :
|
37
|
+
attr_reader :key, :hostname, :api_version, :headers
|
38
38
|
|
39
39
|
def logger *args
|
40
40
|
Embedly.logger *args
|
@@ -42,21 +42,18 @@ class Embedly::API
|
|
42
42
|
|
43
43
|
# === Options
|
44
44
|
#
|
45
|
-
# [:+
|
46
|
-
# [:+key+] Your
|
45
|
+
# [:+hostname+] Hostname of embedly server. Defaults to api.embed.ly.
|
46
|
+
# [:+key+] Your api.embed.ly key.
|
47
47
|
# [:+user_agent+] Your User-Agent header. Defaults to Mozilla/5.0 (compatible; embedly-ruby/VERSION;)
|
48
|
+
# [:+headers+] Additional headers to send with requests.
|
48
49
|
def initialize opts={}
|
49
50
|
@endpoints = [:oembed, :objectify, :preview]
|
50
51
|
@key = opts[:key]
|
51
52
|
@api_version = Hash.new('1')
|
52
53
|
@api_version.merge!({:objectify => '2'})
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
else
|
57
|
-
@endpoint = opts[:endpoint] || 'api.embed.ly'
|
58
|
-
end
|
59
|
-
@user_agent = opts[:user_agent] || "Mozilla/5.0 (compatible; embedly-ruby/#{Embedly::VERSION};)"
|
54
|
+
@hostname = opts[:hostname] || 'api.embed.ly'
|
55
|
+
@headers = opts[:headers] || {}
|
56
|
+
@headers['User-Agent'] = opts[:user_agent] || "Mozilla/5.0 (compatible; embedly-ruby/#{Embedly::VERSION};)"
|
60
57
|
end
|
61
58
|
|
62
59
|
# <b>Use methods oembed, objectify, preview in favor of this method.</b>
|
@@ -82,13 +79,13 @@ class Embedly::API
|
|
82
79
|
# store unsupported services as errors and don't send them to embedly
|
83
80
|
rejects = []
|
84
81
|
if not key
|
85
|
-
params[:urls].reject!.with_index do |url, i|
|
82
|
+
params[:urls].reject!.with_index do |url, i|
|
86
83
|
if url !~ services_regex
|
87
|
-
rejects << [i,
|
84
|
+
rejects << [i,
|
88
85
|
Embedly::EmbedlyObject.new(
|
89
|
-
:type => 'error',
|
90
|
-
:error_code => 401,
|
91
|
-
:error_message => '
|
86
|
+
:type => 'error',
|
87
|
+
:error_code => 401,
|
88
|
+
:error_message => 'Embedly api key is required.'
|
92
89
|
)
|
93
90
|
]
|
94
91
|
end
|
@@ -103,11 +100,11 @@ class Embedly::API
|
|
103
100
|
|
104
101
|
path = "/#{opts[:version]}/#{opts[:action]}?#{QueryString.stringify(params)}"
|
105
102
|
|
106
|
-
logger.debug { "calling #{
|
103
|
+
logger.debug { "calling #{hostname}#{path} with headers #{headers}" }
|
107
104
|
|
108
|
-
host, port = uri_parse(
|
105
|
+
host, port = uri_parse(hostname)
|
109
106
|
response = Net::HTTP.start(host, port) do |http|
|
110
|
-
http.get(path,
|
107
|
+
http.get(path, headers)
|
111
108
|
end
|
112
109
|
|
113
110
|
if response.code.to_i == 200
|
@@ -139,11 +136,10 @@ class Embedly::API
|
|
139
136
|
#
|
140
137
|
# see http://api.embed.ly/docs/service for a description of the response.
|
141
138
|
def services
|
142
|
-
logger.warn { "services isn't availble on the pro endpoint" } if key
|
143
139
|
if not @services
|
144
|
-
host, port = uri_parse(
|
140
|
+
host, port = uri_parse(hostname)
|
145
141
|
response = Net::HTTP.start(host, port) do |http|
|
146
|
-
http.get('/1/services/ruby',
|
142
|
+
http.get('/1/services/ruby', headers)
|
147
143
|
end
|
148
144
|
raise 'services call failed', response if response.code.to_i != 200
|
149
145
|
@services = JSON.parse(response.body)
|
@@ -151,7 +147,7 @@ class Embedly::API
|
|
151
147
|
@services
|
152
148
|
end
|
153
149
|
|
154
|
-
# Returns a regex suitable for checking urls against for non-
|
150
|
+
# Returns a regex suitable for checking urls against for non-key usage
|
155
151
|
def services_regex
|
156
152
|
r = services.collect {|p| p["regex"].join("|")}.join("|")
|
157
153
|
Regexp.new r
|
@@ -163,7 +159,7 @@ class Embedly::API
|
|
163
159
|
#
|
164
160
|
# - +oembed+
|
165
161
|
# - +objectify+
|
166
|
-
# - +preview+
|
162
|
+
# - +preview+
|
167
163
|
#
|
168
164
|
def method_missing(name, *args, &block)
|
169
165
|
if @endpoints.include?name
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embedly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-06-22 00:00:00.000000000 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: querystring
|
17
|
-
requirement: &
|
17
|
+
requirement: &72141180 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *72141180
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: jeweler
|
28
|
-
requirement: &
|
28
|
+
requirement: &72195490 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *72195490
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: cucumber
|
39
|
-
requirement: &
|
39
|
+
requirement: &72195250 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *72195250
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rake
|
50
|
-
requirement: &
|
50
|
+
requirement: &72195010 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *72195010
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rspec
|
61
|
-
requirement: &
|
61
|
+
requirement: &72194770 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *72194770
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: yard
|
72
|
-
requirement: &
|
72
|
+
requirement: &72194530 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *72194530
|
81
81
|
description: Ruby Embedly client library
|
82
82
|
email: bob@embed.ly
|
83
83
|
executables:
|
@@ -123,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
segments:
|
125
125
|
- 0
|
126
|
-
hash:
|
126
|
+
hash: 44977427
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|