giphy 0.0.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.
Files changed (45) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.md +22 -0
  6. data/README.md +126 -0
  7. data/Rakefile +7 -0
  8. data/bin/giphy +12 -0
  9. data/giphy.gemspec +26 -0
  10. data/lib/giphy.rb +8 -0
  11. data/lib/giphy/artist.rb +35 -0
  12. data/lib/giphy/cli.rb +23 -0
  13. data/lib/giphy/client.rb +72 -0
  14. data/lib/giphy/configuration.rb +23 -0
  15. data/lib/giphy/errors/api.rb +5 -0
  16. data/lib/giphy/errors/argument_error.rb +5 -0
  17. data/lib/giphy/favorite_gif.rb +9 -0
  18. data/lib/giphy/flagged_gif.rb +18 -0
  19. data/lib/giphy/gif.rb +83 -0
  20. data/lib/giphy/gif_by_id.rb +34 -0
  21. data/lib/giphy/image.rb +31 -0
  22. data/lib/giphy/null_image.rb +23 -0
  23. data/lib/giphy/request.rb +56 -0
  24. data/lib/giphy/response.rb +27 -0
  25. data/lib/giphy/search.rb +85 -0
  26. data/lib/giphy/special_gif.rb +25 -0
  27. data/lib/giphy/version.rb +3 -0
  28. data/spec/fixtures/giphy.rb +3 -0
  29. data/spec/giphy/artist_spec.rb +32 -0
  30. data/spec/giphy/cli_spec.rb +17 -0
  31. data/spec/giphy/client_spec.rb +94 -0
  32. data/spec/giphy/configuration_spec.rb +34 -0
  33. data/spec/giphy/favorite_gif_spec.rb +28 -0
  34. data/spec/giphy/flagged_gif_spec.rb +34 -0
  35. data/spec/giphy/gif_by_id_spec.rb +40 -0
  36. data/spec/giphy/gif_spec.rb +89 -0
  37. data/spec/giphy/image_spec.rb +32 -0
  38. data/spec/giphy/null_image_spec.rb +11 -0
  39. data/spec/giphy/request_spec.rb +49 -0
  40. data/spec/giphy/response_spec.rb +43 -0
  41. data/spec/giphy/search_spec.rb +111 -0
  42. data/spec/giphy/special_gif_spec.rb +15 -0
  43. data/spec/shared_examples/special_gif_contract_spec.rb +29 -0
  44. data/spec/spec_helper.rb +6 -0
  45. metadata +175 -0
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Configuration do
4
+
5
+ describe ".configure" do
6
+ it "allows setting version and api_key values" do
7
+ Giphy::Configuration.configure do |config|
8
+ config.version = 'v2'
9
+ config.api_key = '123qwe'
10
+ end
11
+
12
+ expect(Giphy::Configuration.version).to eq 'v2'
13
+ expect(Giphy::Configuration.api_key).to eq '123qwe'
14
+ end
15
+ end
16
+
17
+ describe ".version" do
18
+ context "when no specific version is configured" do
19
+ it "returns the default version" do
20
+ Giphy::Configuration.configure { |g| g.version = nil }
21
+ expect(Giphy::Configuration.version).to eq 'v1'
22
+ end
23
+ end
24
+ end
25
+
26
+ describe ".api_key" do
27
+ context "when no specific api_key is configured" do
28
+ it "returns the default api_key" do
29
+ Giphy::Configuration.configure { |g| g.api_key = nil }
30
+ expect(Giphy::Configuration.api_key).to eq 'dc6zaTOxFJmzC'
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::FavoriteGif do
4
+ let(:invalid_hash) { {} }
5
+ let(:valid_hash) do
6
+ { "gif_id" => "12HoHdqnDxz5NS",
7
+ "api_key" => "dc6zaTOxFJmzC",
8
+ "tag" => "fun",
9
+ "create_date" => "2013-06-21 11:51:46"
10
+ }
11
+ end
12
+
13
+ before { @klass = Giphy::FavoriteGif }
14
+
15
+ it_should_behave_like "a Giphy::SpecialGif"
16
+
17
+ describe "#tag" do
18
+ context "when initialized with a valid hash" do
19
+ subject { Giphy::FavoriteGif.new(valid_hash) }
20
+ its(:tag) { should eq "fun" }
21
+ end
22
+
23
+ context "when initialized with an empty/invalid hash" do
24
+ subject { Giphy::FavoriteGif.new(invalid_hash) }
25
+ it { expect{ subject.tag }.to raise_error KeyError }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::FlaggedGif do
4
+ let(:invalid_hash) { {} }
5
+ let(:valid_hash) do
6
+ { "gif_id" => "m5QHf0caAwgMw",
7
+ "api_key" => "dc6zaTOxFJmzC",
8
+ "is_inappropriate" => "0",
9
+ "is_wrong_source" => "1",
10
+ "source_corrected" => "",
11
+ "create_date" => "2013-08-01 11:27:20"
12
+ }
13
+ end
14
+
15
+ before { @klass = Giphy::FlaggedGif }
16
+
17
+ it_should_behave_like "a Giphy::SpecialGif"
18
+
19
+ context "when initialized with a valid hash" do
20
+ subject { Giphy::FlaggedGif.new(valid_hash) }
21
+
22
+ its(:inappropriate?) { should be_false }
23
+ its(:wrong_source?) { should be_true }
24
+ its(:source_corrected) { should eq "" }
25
+ end
26
+
27
+ context "when initialized with an empty/invalid hash" do
28
+ subject { Giphy::FlaggedGif.new(invalid_hash) }
29
+
30
+ it { expect{ subject.inappropriate? }.to raise_error KeyError }
31
+ it { expect{ subject.wrong_source? }.to raise_error KeyError }
32
+ it { expect{ subject.source_corrected }.to raise_error KeyError }
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::GifByID do
4
+ subject { Giphy::GifByID.new }
5
+
6
+ describe "#get" do
7
+ let(:gif_hash) { double }
8
+ let(:gif_object) { double }
9
+ let(:client) { double(gif: gif_hash, gifs: [gif_hash, gif_hash]) }
10
+
11
+ before do
12
+ Giphy::Client.stub(new: client)
13
+ Giphy::Gif.stub(:new).with(gif_hash).and_return(gif_object)
14
+ Giphy::Gif.stub(:build_batch_from).with([gif_hash, gif_hash]).and_return([gif_object, gif_object])
15
+ end
16
+
17
+ describe "#get" do
18
+ context "when ids size is zero" do
19
+ it "raises an ArgumentError and sets its error message" do
20
+ expect{
21
+ subject.get([])
22
+ Giphy::Errors::ArgumentError.should_receive(:new).with('wrong number of arguments (0 for 1...Infinite)')
23
+ }.to raise_error Giphy::Errors::ArgumentError
24
+ end
25
+ end
26
+
27
+ context "when ids size is one" do
28
+ it "returns a gif object" do
29
+ expect( subject.get(['jJgZWn8Z2z4Bi']) ).to eq gif_object
30
+ end
31
+ end
32
+
33
+ context "when ids size is greates than one" do
34
+ it "returns an array of gift objects" do
35
+ expect( subject.get(['jJgZWn8Z2z4Bi', '3avUsGhmckIYE']) ).to eq [gif_object, gif_object]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Gif do
4
+ let(:invalid_hash) { {} }
5
+ let(:valid_hash) do
6
+ { "type" => "gif",
7
+ "id" => "Pvbwe3TghH6ko",
8
+ "url" => "http://giphy.com/gifs/Pvbwe3TghH6ko",
9
+ "bitly_gif_url" => "http://gph.is/18MZ2ya",
10
+ "bitly_fullscreen_url" => "http://gph.is/18MZ2yc",
11
+ "bitly_tiled_url" => "http://gph.is/18MZ2ye",
12
+ "embed_url" => "http://giphy.com/embed/Pvbwe3TghH6ko",
13
+ "images" => {
14
+ "fixed_height" => {
15
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200_d.gif",
16
+ "width" => "313",
17
+ "height" => "200"
18
+ },
19
+ "fixed_height_still" => {
20
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200_d.gif",
21
+ "width" => "313",
22
+ "height" => "200"
23
+ },
24
+ "fixed_height_downsampled" => {
25
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200_d.gif",
26
+ "width" => "313",
27
+ "height" => "200"
28
+ },
29
+ "fixed_width" => {
30
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200w_d.gif",
31
+ "width" => "200",
32
+ "height" => "128"
33
+ },
34
+ "fixed_width_still" => {
35
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200w_d.gif",
36
+ "width" => "200",
37
+ "height" => "128"
38
+ },
39
+ "fixed_width_downsampled" => {
40
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/200w_d.gif",
41
+ "width" => "200",
42
+ "height" => "128"
43
+ },
44
+ "original" => {
45
+ "url" => "http://media0.giphy.com/media/Pvbwe3TghH6ko/giphy.gif",
46
+ "width" => "400",
47
+ "height" => "256",
48
+ "size" => "1477042",
49
+ "frames" => "21"
50
+ }
51
+ }
52
+ }
53
+ end
54
+
55
+ describe ".build_batch_from" do
56
+ it "creates a Giphy::Gif instance for each array element" do
57
+ array = [valid_hash, invalid_hash]
58
+ subject = Giphy::Gif.build_batch_from(array)
59
+
60
+ expect(subject.size).to eq array.size
61
+
62
+ subject.each do |special_gif|
63
+ expect(special_gif).to be_a Giphy::Gif
64
+ end
65
+ end
66
+ end
67
+
68
+ context "when iniatialized with a valid hash" do
69
+ subject { Giphy::Gif.new(valid_hash) }
70
+
71
+ its(:id) { should eq 'Pvbwe3TghH6ko' }
72
+ its(:url) { should eq URI('http://giphy.com/gifs/Pvbwe3TghH6ko') }
73
+ its(:bitly_gif_url) { should eq URI('http://gph.is/18MZ2ya') }
74
+ its(:bitly_fullscreen_url) { should eq URI('http://gph.is/18MZ2yc') }
75
+ its(:bitly_tiled_url) { should eq URI('http://gph.is/18MZ2ye') }
76
+ its(:embed_url) { should eq URI('http://giphy.com/embed/Pvbwe3TghH6ko') }
77
+ end
78
+
79
+ context "when initialized with an empty/invalid hash" do
80
+ subject { Giphy::Gif.new(invalid_hash) }
81
+
82
+ it { expect{ subject.id }.to raise_error KeyError }
83
+ its(:url) { should eq URI('') }
84
+ its(:bitly_gif_url) { should eq URI('') }
85
+ its(:bitly_fullscreen_url) { should eq URI('') }
86
+ its(:bitly_tiled_url) { should eq URI('') }
87
+ its(:embed_url) { should eq URI('') }
88
+ end
89
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Image do
4
+ subject { Giphy::Image.new(hash) }
5
+
6
+ context "when initialized with a valid hash" do
7
+ let(:hash) do
8
+ {"url" => "http://media0.giphy.com/media/ygsIHxE5xSI4o/original.gif",
9
+ "width" => "400",
10
+ "height" => "292",
11
+ "size" => "1013326",
12
+ "frames" => "11"
13
+ }
14
+ end
15
+
16
+ its(:url) { should eq URI("http://media0.giphy.com/media/ygsIHxE5xSI4o/original.gif") }
17
+ its(:width) { should eq 400 }
18
+ its(:height) { should eq 292 }
19
+ its(:size) { should eq 1013326 }
20
+ its(:frames) { should eq 11 }
21
+ end
22
+
23
+ describe "when initialized with an empty/invalid hash" do
24
+ let(:hash) { {} }
25
+
26
+ it { expect{ subject.url }.to raise_error KeyError }
27
+ it { expect{ subject.width }.to raise_error KeyError }
28
+ it { expect{ subject.height }.to raise_error KeyError }
29
+ its(:size) { should eq 0 }
30
+ its(:frames) { should eq 0 }
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::NullImage do
4
+ subject { Giphy::NullImage.new }
5
+
6
+ its(:url) { should eq URI('') }
7
+ its(:width) { should eq 0 }
8
+ its(:height) { should eq 0 }
9
+ its(:size) { should eq 0 }
10
+ its(:frames) { should eq 0 }
11
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Request do
4
+ let(:connection) { double('connection') }
5
+ let(:get_response) { double('get_response') }
6
+ let(:post_response) { double('post_response') }
7
+
8
+ before do
9
+ Faraday.stub(new: connection)
10
+ Giphy::Configuration.stub(api_key: 'dc6zaTOxFJmzC')
11
+ Giphy::Configuration.stub(version: 'v1')
12
+ end
13
+
14
+ describe ".get" do
15
+ it "creates an instance and sends #get to it" do
16
+ instance = double
17
+ Giphy::Request.stub(new: instance)
18
+ instance.stub(:get).with('/path', {}).and_return(get_response)
19
+ expect(Giphy::Request.get('/path', {})).to eq get_response
20
+ end
21
+ end
22
+
23
+ describe ".post" do
24
+ it "creates an instance and sends #post to it" do
25
+ instance = double
26
+ Giphy::Request.stub(new: instance)
27
+ instance.stub(:post).with('/path', {}).and_return(get_response)
28
+ expect(Giphy::Request.post('/path', {})).to eq get_response
29
+ end
30
+ end
31
+
32
+ describe "#get" do
33
+ it "returns the response of doing a get to an API endpoint" do
34
+ connection.stub(:get).
35
+ with('/v1/gifs/test', {api_key: 'dc6zaTOxFJmzC', option: 'option'}).
36
+ and_return(get_response)
37
+ expect(Giphy::Request.new.get('/test', option: 'option')).to eq get_response
38
+ end
39
+ end
40
+
41
+ describe "#post" do
42
+ it "returns the response of doing a post to an API endpoint" do
43
+ connection.stub(:post).
44
+ with('/v1/gifs/test', {api_key: 'dc6zaTOxFJmzC', option: 'option'}).
45
+ and_return(post_response)
46
+ expect(Giphy::Request.new.post('/test', option: 'option')).to eq post_response
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Response do
4
+ describe ".build" do
5
+ it "creates an instance and calls #data on it" do
6
+ data = double
7
+ response = double(data: data)
8
+ Giphy::Response.stub(new: response)
9
+ expect(Giphy::Response.build({})).to eq data
10
+ end
11
+ end
12
+
13
+ describe "#data" do
14
+ let(:response) { double(body: hash) }
15
+ subject { Giphy::Response.new(response) }
16
+
17
+ context "when response contains 'data'" do
18
+ let(:hash) { {'data' => 'data'} }
19
+
20
+ it "returns the 'data' value" do
21
+ expect(subject.data).to eq 'data'
22
+ end
23
+ end
24
+
25
+ context "when response does not contain 'data'" do
26
+ let(:hash) do
27
+ { 'meta' =>
28
+ { 'error_type' => 403,
29
+ 'code' => 403,
30
+ 'error_message' => 'Forbidden'
31
+ }
32
+ }
33
+ end
34
+
35
+ it "raises an error and sets its message" do
36
+ expect{
37
+ subject.data
38
+ Giphy::Errors::API.should_receive(:new).with('403 Forbidden')
39
+ }.to raise_error Giphy::Errors::API
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,111 @@
1
+ require 'spec_helper'
2
+
3
+ describe Giphy::Search do
4
+ class TestObject ; include Giphy::Search ; end
5
+
6
+ subject { TestObject.new }
7
+
8
+ let(:client) { double('client') }
9
+ let(:client_result) { double('result') }
10
+ let(:response) { double('response') }
11
+ let(:options) { {option: 'option'} }
12
+
13
+ before { Giphy::Client.stub(new: client) }
14
+
15
+ describe "#recent" do
16
+ it "returns a batch of Gifs from the client result" do
17
+ client.stub(:recent).with(options).and_return(client_result)
18
+ Giphy::Gif.stub(:build_batch_from).with(client_result).and_return(response)
19
+ expect(subject.recent(options)).to eq response
20
+ end
21
+ end
22
+
23
+ describe "#translate" do
24
+ it "returns a batch of Gifs from the client result" do
25
+ client.stub(:translate).with('word').and_return(client_result)
26
+ Giphy::Gif.stub(:build_batch_from).with(client_result).and_return(response)
27
+ expect(subject.translate('word')).to eq response
28
+ end
29
+ end
30
+
31
+ describe "#search" do
32
+ it "returns a batch of Gifs from the client result" do
33
+ client.stub(:search).with('keyword', options).and_return(client_result)
34
+ Giphy::Gif.stub(:build_batch_from).with(client_result).and_return(response)
35
+ expect(subject.search('keyword', options)).to eq response
36
+ end
37
+ end
38
+
39
+ describe "#flag" do
40
+ it "returns a new FlaggedGif from the client result" do
41
+ client.stub(:flag).with('wdsf34df').and_return(client_result)
42
+ Giphy::FlaggedGif.stub(:new).with(client_result).and_return(response)
43
+ expect(subject.flag('wdsf34df')).to eq response
44
+ end
45
+ end
46
+
47
+ describe "#flagged" do
48
+ it "returns a batch of FlaggedGifs from the client result" do
49
+ client.stub(flagged: client_result)
50
+ Giphy::FlaggedGif.stub(:build_batch_from).with(client_result).and_return(response)
51
+ expect(subject.flagged).to eq response
52
+ end
53
+ end
54
+
55
+ describe "#favorite" do
56
+ it "returns a new FavoriteGifs from the client result" do
57
+ client.stub(:favorite).with('wdsf34df').and_return(client_result)
58
+ Giphy::FavoriteGif.stub(:new).with(client_result).and_return(response)
59
+ expect(subject.favorite('wdsf34df')).to eq response
60
+ end
61
+ end
62
+
63
+ describe "#favorites" do
64
+ it "returns a batch of FavoriteGifs from the client result" do
65
+ client.stub(favorites: client_result)
66
+ Giphy::FavoriteGif.stub(:build_batch_from).with(client_result).and_return(response)
67
+ expect(subject.favorites).to eq response
68
+ end
69
+ end
70
+
71
+ describe "#screensaver" do
72
+ it "returns a new Gif from the client result" do
73
+ client.stub(:screensaver).with('tag').and_return(client_result)
74
+ Giphy::Gif.stub(:new).with(client_result).and_return(response)
75
+ expect(subject.screensaver('tag')).to eq response
76
+ end
77
+ end
78
+
79
+ describe "#random" do
80
+ it "returns a new Gif from the client result" do
81
+ client.stub(random: client_result)
82
+ Giphy::Gif.stub(:new).with(client_result).and_return(response)
83
+ expect(subject.random).to eq response
84
+ end
85
+ end
86
+
87
+ describe "#artists" do
88
+ it "returns a batch of Artists from the client result" do
89
+ client.stub(artists: client_result)
90
+ Giphy::Artist.stub(:build_batch_from).with(client_result).and_return(response)
91
+ expect(subject.artists).to eq response
92
+ end
93
+ end
94
+
95
+ describe "#gif_by_artist" do
96
+ it "returns a batch of Gifs from the client result" do
97
+ client.stub(:artists).with(username: 'artist_name', option: 'option').and_return(client_result)
98
+ Giphy::Gif.stub(:build_batch_from).with(client_result).and_return(response)
99
+ expect(subject.gif_by_artist('artist_name', options)).to eq response
100
+ end
101
+ end
102
+
103
+ describe "#gif_by_id" do
104
+ it "returns a batch of Gifs from the client result" do
105
+ gif_by_id = double
106
+ Giphy::GifByID.stub(new: gif_by_id)
107
+ gif_by_id.stub(:get).with(['wdsf34df', 'ydfe779f']).and_return(response)
108
+ expect(subject.gif_by_id('wdsf34df', 'ydfe779f')).to eq response
109
+ end
110
+ end
111
+ end