cameraplus 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.
- data/.gitignore +9 -0
- data/.rvmrc +55 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +227 -0
- data/Rakefile +2 -0
- data/cameraplus.gemspec +25 -0
- data/lib/cameraplus.rb +18 -0
- data/lib/cameraplus/api/page.rb +17 -0
- data/lib/cameraplus/api/request.rb +45 -0
- data/lib/cameraplus/api/search.rb +25 -0
- data/lib/cameraplus/api/user.rb +17 -0
- data/lib/cameraplus/comment.rb +14 -0
- data/lib/cameraplus/exceptions.rb +7 -0
- data/lib/cameraplus/page.rb +34 -0
- data/lib/cameraplus/page_metadata.rb +73 -0
- data/lib/cameraplus/photo.rb +49 -0
- data/lib/cameraplus/photo_exif.rb +13 -0
- data/lib/cameraplus/photo_recipe.rb +12 -0
- data/lib/cameraplus/search.rb +45 -0
- data/lib/cameraplus/user.rb +72 -0
- data/lib/cameraplus/version.rb +3 -0
- data/lib/core_ext/hash.rb +13 -0
- data/spec/cameraplus/api/page_spec.rb +17 -0
- data/spec/cameraplus/api/request_spec.rb +47 -0
- data/spec/cameraplus/api/search_spec.rb +37 -0
- data/spec/cameraplus/api/user_spec.rb +17 -0
- data/spec/cameraplus/comment_spec.rb +32 -0
- data/spec/cameraplus/page_metadata_spec.rb +117 -0
- data/spec/cameraplus/page_spec.rb +84 -0
- data/spec/cameraplus/photo_exif_spec.rb +23 -0
- data/spec/cameraplus/photo_recipe_spec.rb +19 -0
- data/spec/cameraplus/photo_spec.rb +82 -0
- data/spec/cameraplus/search_spec.rb +51 -0
- data/spec/cameraplus/user_spec.rb +82 -0
- data/spec/core_ext/hash_spec.rb +53 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/vcr_cassettes/api_request_invalid.yml +56 -0
- data/spec/vcr_cassettes/api_request_valid.yml +78 -0
- data/spec/vcr_cassettes/more_results.yml +369 -0
- data/spec/vcr_cassettes/page.yml +58 -0
- data/spec/vcr_cassettes/search.yml +55 -0
- data/spec/vcr_cassettes/user.yml +78 -0
- data/spec/vcr_config.rb +7 -0
- metadata +177 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::API::User do
|
4
|
+
|
5
|
+
use_vcr_cassette :user
|
6
|
+
|
7
|
+
it "should receive a hash" do
|
8
|
+
response = Cameraplus::API::User.find "mostlylisa"
|
9
|
+
response.should be_a Hash
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should make a request to the Camera+ API" do
|
13
|
+
Cameraplus::API::Request.should_receive(:call).with "/user/mostlylisa:pages", {}
|
14
|
+
Cameraplus::API::User.find "mostlylisa"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::Comment do
|
4
|
+
|
5
|
+
let(:data) do
|
6
|
+
{
|
7
|
+
author: "Lisa Bettany",
|
8
|
+
avatar: "https:\/\/fbcdn-profile-a.akamaihd.net\/hprofile-ak-snc4\/261022_674215636_4030749_q.jpg",
|
9
|
+
url: "http:\/\/www.facebook.com\/profile.php?id=674215636",
|
10
|
+
text: "great shot!"
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { Cameraplus::Comment.new data }
|
15
|
+
|
16
|
+
it "has an author" do
|
17
|
+
subject.author.should eq "Lisa Bettany"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has an avatar" do
|
21
|
+
subject.avatar.should eq "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/261022_674215636_4030749_q.jpg"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "has an url" do
|
25
|
+
subject.url.should eq "http://www.facebook.com/profile.php?id=674215636"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "has text" do
|
29
|
+
subject.text.should eq "great shot!"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::PageMetadata do
|
4
|
+
|
5
|
+
use_vcr_cassette :page
|
6
|
+
|
7
|
+
subject { Cameraplus::PageMetadata.find "b72Z" }
|
8
|
+
|
9
|
+
it "should be a Page" do
|
10
|
+
subject.should be_a Cameraplus::PageMetadata
|
11
|
+
end
|
12
|
+
|
13
|
+
context ".find" do
|
14
|
+
|
15
|
+
it "finds the url of the specified page" do
|
16
|
+
subject.url.should eq "http://camerapl.us/b72Z"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "finds the created at datetime of the specified page" do
|
20
|
+
subject.created_at.should eq DateTime.parse("2011-07-01 21:50:40")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "finds the location of the specified page" do
|
24
|
+
subject.location.should eq "42.574017 18.641312"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "finds the location name of the specified page" do
|
28
|
+
subject.location_name.should eq "Kotor, Montenegro"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "finds the tweet text of the specified page" do
|
32
|
+
subject.tweet_text.should eq "Tiny Town of Kotor, Montenegro #mybestphoto"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "finds the tweet id of the specified page" do
|
36
|
+
subject.tweet_id.should eq 86914646237384704
|
37
|
+
end
|
38
|
+
|
39
|
+
it "finds the view count of the specified page" do
|
40
|
+
subject.view_count.should eq 925
|
41
|
+
end
|
42
|
+
|
43
|
+
it "finds the comment count of the specified page" do
|
44
|
+
subject.comment_count.should eq 6
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
context "#user" do
|
50
|
+
|
51
|
+
it "should be a User" do
|
52
|
+
subject.user.should be_a Cameraplus::User
|
53
|
+
end
|
54
|
+
|
55
|
+
it "has an username" do
|
56
|
+
subject.user.username.should eq "lucyk"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "has a name" do
|
60
|
+
subject.user.name.should eq "Oleg Lutsenko"
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context "#photos" do
|
66
|
+
|
67
|
+
it "should be an Array" do
|
68
|
+
subject.photos.should be_an Array
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should contain a Cameraplus::Photo" do
|
72
|
+
subject.photos.first.should be_a Cameraplus::Photo
|
73
|
+
end
|
74
|
+
|
75
|
+
context "with a Cameraplus::Photo" do
|
76
|
+
|
77
|
+
it "should have recipes" do
|
78
|
+
subject.photos.first.recipes.should be_an Array
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should contain a Cameraplus::PhotoRecipe" do
|
82
|
+
subject.photos.first.recipes.first.should be_a Cameraplus::PhotoRecipe
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should have exif data" do
|
86
|
+
subject.photos.last.exif.should be_an Array
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should contain a Cameraplus::PhotoExif" do
|
90
|
+
subject.photos.first.exif.first.should be_a Cameraplus::PhotoExif
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
context "#comments" do
|
98
|
+
|
99
|
+
it "should be an Array" do
|
100
|
+
subject.comments.should be_an Array
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should contain a Cameraplus::Comment" do
|
104
|
+
subject.comments.first.should be_a Cameraplus::Comment
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should know the number of comments" do
|
108
|
+
subject.comments.size.should eq 6
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should know the authors of the comments" do
|
112
|
+
subject.comments.map(&:author).should eq ["Lisa Bettany", "Oleg Lutsenko", "Oliver Penack", "John Goundry \u2714", "Jason Hansen", "Jonathan Feuer"]
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cameraplus::Page do
|
4
|
+
|
5
|
+
let(:data) do
|
6
|
+
{
|
7
|
+
url: "http:\/\/campl.us\/iao4",
|
8
|
+
tweettext: "Carnival in Venice, a travel photographer''s dream shoot!",
|
9
|
+
tweetid: "180064216093437954",
|
10
|
+
timestamp: "2012-03-14 22:53:49",
|
11
|
+
views: 1951,
|
12
|
+
comments: 1,
|
13
|
+
location: "45.43383498680353 12.34226474539595",
|
14
|
+
locationname: "Venice, Venice",
|
15
|
+
images: [ photo ]
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:photo) do
|
20
|
+
{
|
21
|
+
"800px" => "http:\/\/pics.campl.us\/f\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
22
|
+
"120px" => "http:\/\/pics.campl.us\/t\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
23
|
+
"480px" => "http:\/\/pics.campl.us\/iphone\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
24
|
+
:fullwidth => 800,
|
25
|
+
:fullheight => 590,
|
26
|
+
:location => "45.43383498680353 12.34226474539595"
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
subject { Cameraplus::Page.new data }
|
31
|
+
|
32
|
+
context "instance" do
|
33
|
+
|
34
|
+
it "has an url" do
|
35
|
+
subject.url.should eq "http://campl.us/iao4"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "has a datetime at which it was created" do
|
39
|
+
subject.created_at.should eq DateTime.parse("2012-03-14 22:53:49")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "has a location" do
|
43
|
+
subject.location.should eq "45.43383498680353 12.34226474539595"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "has a location name" do
|
47
|
+
subject.location_name.should eq "Venice, Venice"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "has a tweet text" do
|
51
|
+
subject.tweet_text.should eq "Carnival in Venice, a travel photographer''s dream shoot!"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "has a tweet id" do
|
55
|
+
subject.tweet_id.should eq 180064216093437954
|
56
|
+
end
|
57
|
+
|
58
|
+
it "has a view count" do
|
59
|
+
subject.view_count.should eq 1951
|
60
|
+
end
|
61
|
+
|
62
|
+
it "has a comment count" do
|
63
|
+
subject.comment_count.should eq 1
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
context "#photos" do
|
69
|
+
|
70
|
+
it "should be an Array" do
|
71
|
+
subject.photos.should be_an Array
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should contain a Cameraplus::Photo" do
|
75
|
+
subject.photos.first.should be_a Cameraplus::Photo
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should have one photo" do
|
79
|
+
subject.photos.size.should eq 1
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::PhotoExif do
|
4
|
+
|
5
|
+
let(:data) do
|
6
|
+
{ :title => "Exposure", :value => "1\/120 sec", :style => "main" }
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { Cameraplus::PhotoExif.new data }
|
10
|
+
|
11
|
+
it "should have a title" do
|
12
|
+
subject.title.should eq "Exposure"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have a value" do
|
16
|
+
subject.value.should eq "1/120 sec"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have a style" do
|
20
|
+
subject.style.should eq "main"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::PhotoRecipe do
|
4
|
+
|
5
|
+
let(:data) do
|
6
|
+
{ :type => "fx", :value => "Vibrant" }
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { Cameraplus::PhotoRecipe.new data }
|
10
|
+
|
11
|
+
it "should have a type" do
|
12
|
+
subject.type.should eq "fx"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have a value" do
|
16
|
+
subject.value.should eq "Vibrant"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cameraplus::Photo do
|
4
|
+
|
5
|
+
let(:data) do
|
6
|
+
{
|
7
|
+
"800px" => "http:\/\/pics.campl.us\/f\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
8
|
+
"120px" => "http:\/\/pics.campl.us\/t\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
9
|
+
"480px" => "http:\/\/pics.campl.us\/iphone\/0\/0b497f01791c851db1a17f81e0621a5c.jpg",
|
10
|
+
"fullwidth" => 800,
|
11
|
+
"fullheight" => 590,
|
12
|
+
"location" => "45.43383498680353 12.34226474539595",
|
13
|
+
"recipe" => [
|
14
|
+
{
|
15
|
+
"type" => "fx",
|
16
|
+
"value" => "Vibrant"
|
17
|
+
}
|
18
|
+
],
|
19
|
+
"exifdata" => [
|
20
|
+
{
|
21
|
+
"title" => "Camera",
|
22
|
+
"value" => "Apple iPhone 4S",
|
23
|
+
"style" => "main"
|
24
|
+
}
|
25
|
+
]
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { Cameraplus::Photo.new data }
|
30
|
+
|
31
|
+
context "instance" do
|
32
|
+
|
33
|
+
it "has a small version" do
|
34
|
+
subject.small.should eq "http://pics.campl.us/t/0/0b497f01791c851db1a17f81e0621a5c.jpg"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has a medium version" do
|
38
|
+
subject.medium.should eq "http://pics.campl.us/iphone/0/0b497f01791c851db1a17f81e0621a5c.jpg"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "has a large version" do
|
42
|
+
subject.large.should eq "http://pics.campl.us/f/0/0b497f01791c851db1a17f81e0621a5c.jpg"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "has a width" do
|
46
|
+
subject.width.should eq 800
|
47
|
+
end
|
48
|
+
|
49
|
+
it "has a height" do
|
50
|
+
subject.height.should eq 590
|
51
|
+
end
|
52
|
+
|
53
|
+
it "has a location" do
|
54
|
+
subject.location.should eq "45.43383498680353 12.34226474539595"
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
context "#recipes" do
|
60
|
+
|
61
|
+
it "should have recipes" do
|
62
|
+
subject.recipes.should be_an Array
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should contain a Cameraplus::PhotoRecipe" do
|
66
|
+
subject.recipes.first.should be_a Cameraplus::PhotoRecipe
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
context "#exif" do
|
72
|
+
|
73
|
+
it "should have exif data" do
|
74
|
+
subject.exif.should be_an Array
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should contain a Cameraplus::PhotoExif" do
|
78
|
+
subject.exif.first.should be_a Cameraplus::PhotoExif
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::Search do
|
4
|
+
|
5
|
+
context "by username" do
|
6
|
+
|
7
|
+
use_vcr_cassette :search
|
8
|
+
|
9
|
+
let(:results) { Cameraplus::Search.find username: "mostlylisa" }
|
10
|
+
|
11
|
+
it "should find a list of results" do
|
12
|
+
results.should be_an Array
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with a Search object selected" do
|
16
|
+
|
17
|
+
let(:result) { results.first }
|
18
|
+
|
19
|
+
context "#page" do
|
20
|
+
|
21
|
+
it "should be a Page" do
|
22
|
+
result.page.should be_a Cameraplus::Page
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "#user" do
|
28
|
+
|
29
|
+
it "should be a User" do
|
30
|
+
result.user.should be_a Cameraplus::User
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
context "#photos" do
|
36
|
+
|
37
|
+
it "should be an Array" do
|
38
|
+
result.photos.should be_an Array
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should contain a Cameraplus::Photo" do
|
42
|
+
result.photos.first.should be_a Cameraplus::Photo
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Cameraplus::User do
|
4
|
+
|
5
|
+
use_vcr_cassette :user
|
6
|
+
|
7
|
+
let(:user) { Cameraplus::User.find "mostlylisa" }
|
8
|
+
|
9
|
+
it "should be a User" do
|
10
|
+
user.should be_a Cameraplus::User
|
11
|
+
end
|
12
|
+
|
13
|
+
context ".find" do
|
14
|
+
|
15
|
+
it "finds the id of the specified user" do
|
16
|
+
user.id.should eq 6978642
|
17
|
+
end
|
18
|
+
|
19
|
+
it "finds the username of the specified user" do
|
20
|
+
user.username.should eq "mostlylisa"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "finds the name of the specified user" do
|
24
|
+
user.name.should eq "Lisa Bettany"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "finds the avatar of the specified user" do
|
28
|
+
user.avatar.should eq "http://a0.twimg.com/profile_images/1767370289/284161_10150711631895637_674215636_19658534_6246798_n_normal.jpeg"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "finds the number of pages of the specified user" do
|
32
|
+
user.page_count.should eq 122
|
33
|
+
end
|
34
|
+
|
35
|
+
it "finds the number of photos of the specified user" do
|
36
|
+
user.photo_count.should eq 876
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
context "#pages" do
|
42
|
+
|
43
|
+
it "should be an Array" do
|
44
|
+
user.pages.should be_a Array
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should contain a Cameraplus::Page" do
|
48
|
+
user.pages.first.should be_a Cameraplus::Page
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should have one page" do
|
52
|
+
user.pages.size.should eq 3
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
context "#more_results" do
|
58
|
+
|
59
|
+
use_vcr_cassette :more_results
|
60
|
+
|
61
|
+
let(:user) { Cameraplus::User.find "kalleboo" }
|
62
|
+
let(:more_results) { user.more_results }
|
63
|
+
|
64
|
+
it "should be a User" do
|
65
|
+
more_results.should be_a Cameraplus::User
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should retrieve more pages" do
|
69
|
+
more_results.pages.should be_an Array
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should contain pages that aren't the same as the first pages" do
|
73
|
+
more_results.pages.should_not eq user.pages
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should contain Cameraplus::Page objects" do
|
77
|
+
more_results.pages.each { |page| page.should be_a Cameraplus::Page }
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|