anideo-embedly 1.3.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 -0
- data/ChangeLog +56 -0
- data/Gemfile +15 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +105 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/anideo-embedly.gemspec +91 -0
- data/bin/embedly_objectify +12 -0
- data/bin/embedly_oembed +12 -0
- data/bin/embedly_preview +12 -0
- data/cucumber.yml +1 -0
- data/features/command_line.feature +17 -0
- data/features/objectify.feature +15 -0
- data/features/oembed.feature +80 -0
- data/features/steps/api_steps.rb +56 -0
- data/features/steps/env.rb +10 -0
- data/lib/embedly.rb +15 -0
- data/lib/embedly/api.rb +234 -0
- data/lib/embedly/command_line.rb +132 -0
- data/lib/embedly/configuration.rb +59 -0
- data/lib/embedly/exceptions.rb +20 -0
- data/lib/embedly/model.rb +32 -0
- data/spec/embedly/api_spec.rb +23 -0
- data/spec/embedly/command_line_spec.rb +118 -0
- data/spec/embedly/configuration_spec.rb +57 -0
- data/spec/spec_helper.rb +7 -0
- metadata +179 -0
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
# Configure the api
|
4
|
+
#
|
5
|
+
# === Available settings
|
6
|
+
#
|
7
|
+
# * [+debug+] Prints debugging information to logger. Default +false+. Errors still will be logged
|
8
|
+
# * [+logger+] Configure the logger; set this if you want to use a custom logger.
|
9
|
+
#
|
10
|
+
# === Usage
|
11
|
+
#
|
12
|
+
# Embedly.configure do |config|
|
13
|
+
# # prints debug messages
|
14
|
+
# config.debug = true
|
15
|
+
#
|
16
|
+
# # customize the logger
|
17
|
+
# config.logger = MyAwesomeLogger.new(STDERR)
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
class Embedly::Configuration
|
21
|
+
attr_accessor :key, :typhoeus # :nodoc:
|
22
|
+
|
23
|
+
def initialize # :nodoc:
|
24
|
+
self.reset
|
25
|
+
end
|
26
|
+
|
27
|
+
def debug? # :nodoc:
|
28
|
+
self.logger.debug?
|
29
|
+
end
|
30
|
+
|
31
|
+
def debug=(true_or_false) # :nodoc:
|
32
|
+
set_logger_level(true_or_false)
|
33
|
+
end
|
34
|
+
|
35
|
+
def logger # :nodoc:
|
36
|
+
@logger ||= default_logger
|
37
|
+
end
|
38
|
+
|
39
|
+
def logger=(log) # :nodoc:
|
40
|
+
@logger = log
|
41
|
+
set_logger_level(self.debug?)
|
42
|
+
end
|
43
|
+
|
44
|
+
# reset configuration
|
45
|
+
def reset
|
46
|
+
self.logger = default_logger
|
47
|
+
self.debug = false
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def default_logger # :nodoc:
|
53
|
+
Logger.new(STDERR)
|
54
|
+
end
|
55
|
+
|
56
|
+
def set_logger_level(true_or_false) # :nodoc:
|
57
|
+
logger.level = true_or_false ? Logger::DEBUG : Logger::ERROR
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Embedly::BadResponseException < RuntimeError
|
2
|
+
attr_accessor :response, :path
|
3
|
+
|
4
|
+
def initialize(response, path = nil)
|
5
|
+
@response ||= response
|
6
|
+
@path ||= path
|
7
|
+
end
|
8
|
+
|
9
|
+
def message
|
10
|
+
"Bad Response : #{@response.inspect} for path: #{@path.inspect}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
self.message
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
self.message
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class Embedly::EmbedlyObject < OpenStruct
|
4
|
+
|
5
|
+
# Resursively make ostruct
|
6
|
+
def initialize obj
|
7
|
+
o = obj.clone
|
8
|
+
o.each do |k,v|
|
9
|
+
if v.is_a?Hash
|
10
|
+
o[k] = Embedly::EmbedlyObject.new v
|
11
|
+
end
|
12
|
+
end
|
13
|
+
super o
|
14
|
+
end
|
15
|
+
|
16
|
+
# for ruby 1.8.x, type should return @table[:type], not the
|
17
|
+
# class.
|
18
|
+
def type
|
19
|
+
method_missing :type
|
20
|
+
end
|
21
|
+
|
22
|
+
def marshal_dump
|
23
|
+
o = @table.clone
|
24
|
+
o.each do |k,v|
|
25
|
+
if v.is_a?Embedly::EmbedlyObject
|
26
|
+
o[k] = v.marshal_dump
|
27
|
+
end
|
28
|
+
end
|
29
|
+
return o
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Embedly
|
4
|
+
describe API do
|
5
|
+
let(:api) { API.new :key => ENV['EMBEDLY_KEY'] }
|
6
|
+
|
7
|
+
describe "logger" do
|
8
|
+
let(:io) { StringIO.new }
|
9
|
+
|
10
|
+
before do
|
11
|
+
Embedly.configure do |c|
|
12
|
+
c.debug = true
|
13
|
+
c.logger = Logger.new(io)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "logs if debug is enabled" do
|
18
|
+
api.oembed :url => 'http://blog.doki-pen.org/'
|
19
|
+
io.string.should =~ %r{DEBUG -- : calling http://api.embed.ly/1/oembed?}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "embedly/command_line"
|
3
|
+
|
4
|
+
module Embedly
|
5
|
+
describe CommandLine do
|
6
|
+
after do
|
7
|
+
ENV['EMBEDLY_KEY'] = nil
|
8
|
+
ENV['EMBEDLY_SECRET'] = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "::run!" do
|
12
|
+
let(:arguments) { ['-k', 'MY_KEY', 'http://yfrog.com/h7qqespj', '-o', 'maxwidth=10'] }
|
13
|
+
let(:api) { mock(API) }
|
14
|
+
|
15
|
+
it "calls api with options" do
|
16
|
+
API.should_receive(:new).with(:key => 'MY_KEY', :headers => {}) { api }
|
17
|
+
api.should_receive(:oembed).with(:urls => ['http://yfrog.com/h7qqespj'], :maxwidth => '10')
|
18
|
+
CommandLine.run!(:oembed, arguments)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "raises an error if the arguments are empty" do
|
22
|
+
$stdout = StringIO.new
|
23
|
+
expect {
|
24
|
+
CommandLine.run!(:oembed, [])
|
25
|
+
}.to raise_error(SystemExit)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#run" do
|
30
|
+
before do
|
31
|
+
API.any_instance.stub(:oembed)
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "with option --hostname" do
|
35
|
+
%w[-H --hostname].each do |option|
|
36
|
+
it "sets the hostname using #{option}" do
|
37
|
+
command([option, "sth.embed.ly"])[:hostname].should == 'sth.embed.ly'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "with --header" do
|
43
|
+
it "sets the header" do
|
44
|
+
command(%w[--header Header=value])[:headers].should == { 'Header' => 'value' }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "with --key" do
|
49
|
+
%w[-k --key].each do |option|
|
50
|
+
it "sets the key using #{option}" do
|
51
|
+
command([option, "SOME_KEY"])[:key].should == 'SOME_KEY'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "gets the key from environment variables if no key was set" do
|
56
|
+
ENV['EMBEDLY_KEY'] = 'ENVIRONMENT_KEY'
|
57
|
+
|
58
|
+
command([])[:key].should == 'ENVIRONMENT_KEY'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "with --secret" do
|
63
|
+
%w[-s --secret].each do |option|
|
64
|
+
it "sets the secret using #{option}" do
|
65
|
+
command([option, "SECRET"])[:secret].should == 'SECRET'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
it "gets the secret from environment variables if no secret was set" do
|
70
|
+
ENV['EMBEDLY_SECRET'] = 'ENVIRONMENT_SECRET'
|
71
|
+
|
72
|
+
command([])[:secret].should == 'ENVIRONMENT_SECRET'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "with --no-key" do
|
77
|
+
%w[-N --no-key].each do |option|
|
78
|
+
it "unsets the key using #{option}" do
|
79
|
+
command([option])[:key].should be_nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "with --no-secret" do
|
85
|
+
it "unsets the secret" do
|
86
|
+
command(['--no-secret'])[:secret].should be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "with --option" do
|
91
|
+
%w[-o --option].each do |option|
|
92
|
+
it "sets custom option with #{option}" do
|
93
|
+
command([option, "maxwidth=100"])[:query][:maxwidth].should == '100'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "with --verbose" do
|
99
|
+
it "enables logging" do
|
100
|
+
command(["--verbose"])
|
101
|
+
Embedly.configuration.should be_debug
|
102
|
+
end
|
103
|
+
|
104
|
+
it "disables logging" do
|
105
|
+
command(["--no-verbose"])
|
106
|
+
Embedly.configuration.should_not be_debug
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def command(arguments)
|
112
|
+
arguments << 'testurl.com'
|
113
|
+
command = CommandLine.new(arguments)
|
114
|
+
command.run
|
115
|
+
command.options
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Embedly
|
4
|
+
describe Configuration do
|
5
|
+
|
6
|
+
let(:config) { Configuration.new }
|
7
|
+
|
8
|
+
describe "debug and logging" do
|
9
|
+
let(:logger) { Logger.new(STDERR) }
|
10
|
+
|
11
|
+
it "has debugger disabled by default" do
|
12
|
+
config.should_not have_debug_enabled
|
13
|
+
end
|
14
|
+
|
15
|
+
it "has default logger level as error" do
|
16
|
+
config.logger.level.should == Logger::ERROR
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can enable debugging" do
|
20
|
+
config.debug = true
|
21
|
+
config.should have_debug_enabled
|
22
|
+
end
|
23
|
+
|
24
|
+
it "can disable debugging" do
|
25
|
+
config.debug = false
|
26
|
+
config.should_not have_debug_enabled
|
27
|
+
end
|
28
|
+
|
29
|
+
it "can change the logger" do
|
30
|
+
config.logger = logger
|
31
|
+
config.logger.should === logger
|
32
|
+
end
|
33
|
+
|
34
|
+
it "sets the logger level for the new logger" do
|
35
|
+
config.debug = true
|
36
|
+
config.logger = logger
|
37
|
+
config.logger.level.should == Logger::DEBUG
|
38
|
+
end
|
39
|
+
|
40
|
+
it "changes the logger level when enable debugging" do
|
41
|
+
config.debug = true
|
42
|
+
config.logger.level.should == Logger::DEBUG
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "setting options" do
|
47
|
+
it "sets the api key" do
|
48
|
+
config.key = 'my_api_key'
|
49
|
+
config.key.should == 'my_api_key'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
RSpec::Matchers.define :have_debug_enabled do
|
56
|
+
match { |actual| actual.debug? }
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: anideo-embedly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Bob Corsaro
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: querystring
|
16
|
+
requirement: &2155295700 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2155295700
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: oauth
|
27
|
+
requirement: &2155295200 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2155295200
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: typhoeus
|
38
|
+
requirement: &2155294680 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2155294680
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: jeweler
|
49
|
+
requirement: &2155294160 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2155294160
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: cucumber
|
60
|
+
requirement: &2155293600 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2155293600
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &2155373720 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2155373720
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rspec
|
82
|
+
requirement: &2155373160 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2155373160
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: yard
|
93
|
+
requirement: &2155372660 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *2155372660
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: aruba
|
104
|
+
requirement: &2155372120 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *2155372120
|
113
|
+
description: Ruby Embedly client library
|
114
|
+
email: bob@embed.ly
|
115
|
+
executables:
|
116
|
+
- embedly_objectify
|
117
|
+
- embedly_oembed
|
118
|
+
- embedly_preview
|
119
|
+
extensions: []
|
120
|
+
extra_rdoc_files:
|
121
|
+
- ChangeLog
|
122
|
+
- README.rdoc
|
123
|
+
files:
|
124
|
+
- .rvmrc
|
125
|
+
- ChangeLog
|
126
|
+
- Gemfile
|
127
|
+
- MIT-LICENSE
|
128
|
+
- README.rdoc
|
129
|
+
- Rakefile
|
130
|
+
- VERSION
|
131
|
+
- anideo-embedly.gemspec
|
132
|
+
- bin/embedly_objectify
|
133
|
+
- bin/embedly_oembed
|
134
|
+
- bin/embedly_preview
|
135
|
+
- cucumber.yml
|
136
|
+
- features/command_line.feature
|
137
|
+
- features/objectify.feature
|
138
|
+
- features/oembed.feature
|
139
|
+
- features/steps/api_steps.rb
|
140
|
+
- features/steps/env.rb
|
141
|
+
- lib/embedly.rb
|
142
|
+
- lib/embedly/api.rb
|
143
|
+
- lib/embedly/command_line.rb
|
144
|
+
- lib/embedly/configuration.rb
|
145
|
+
- lib/embedly/exceptions.rb
|
146
|
+
- lib/embedly/model.rb
|
147
|
+
- spec/embedly/api_spec.rb
|
148
|
+
- spec/embedly/command_line_spec.rb
|
149
|
+
- spec/embedly/configuration_spec.rb
|
150
|
+
- spec/spec_helper.rb
|
151
|
+
homepage: http://github.com/embedly/embedly-ruby
|
152
|
+
licenses:
|
153
|
+
- MIT
|
154
|
+
post_install_message:
|
155
|
+
rdoc_options: []
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
segments:
|
165
|
+
- 0
|
166
|
+
hash: 1741436886336218838
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
requirements: []
|
174
|
+
rubyforge_project:
|
175
|
+
rubygems_version: 1.8.6
|
176
|
+
signing_key:
|
177
|
+
specification_version: 3
|
178
|
+
summary: Ruby Embedly client library
|
179
|
+
test_files: []
|