openphoto-ruby 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 ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .DS_STORE
6
+ spec/settings.yml
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in openphoto-ruby.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/Readme.markdown ADDED
@@ -0,0 +1,36 @@
1
+ Open Photo API / Ruby Library
2
+ =======================
3
+ #### OpenPhoto, a photo service for the masses
4
+
5
+ ----------------------------------------
6
+
7
+ <a name="install"></a>
8
+ ### Installation
9
+ gem install openphoto-ruby
10
+
11
+ <a name="ruby"></a>
12
+ ### How to use the library
13
+
14
+ To use the library you need to first require 'openphoto-ruby', retrieve your OAuth credentials, then instantiate an instance of the client and start making calls.
15
+
16
+ require 'rubygems'
17
+ require 'openphoto-ruby'
18
+
19
+ @client = Openphoto::Client.new(@site, @consumer_key, @consumer_secret, @access_token, @access_token_secret)
20
+ photo = @client.connect(:post, "/photo/upload.json", {"photo"=>"/tmp/photo.png", "permission"=>"1", "title"=>"test upload"})
21
+ puts "#{photo.message} #{@site}/photo/#{photo.result["id"]}/view"
22
+
23
+ ----------------------------------------
24
+
25
+ <a name="credentials"></a>
26
+ #### Getting your credentials
27
+
28
+ You can get your credentials by clicking on the arrow next to your email address once you're logged into your site and then clicking on settings.
29
+ If you don't have any credentials then you can create one for yourself by going to `/v1/oauth/flow`.
30
+ Once completed go back to the settings page and you should see the credential you just created
31
+
32
+ ----------------------------------------
33
+ <a name="openphoto"></a>
34
+ #### OpenPhoto installation and API documentation
35
+
36
+ You can find more information at the main <a href="http://theopenphotoproject.org/documentation">OpenPhoto documentation page</a>.
data/examples.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'openphoto-ruby'
3
+
4
+ #load our credentials
5
+ options = YAML.load_file("spec/settings.yml")
6
+ @consumer_key = options["oauth"]["consumer_key"]
7
+ @consumer_secret = options["oauth"]["consumer_secret"]
8
+ @access_token = options["oauth"]["access_token"]
9
+ @access_token_secret = options["oauth"]["access_token_secret"]
10
+ @site = options["oauth"]["site"]
11
+
12
+ #create a client
13
+ @client = Openphoto::Client.new(@site, @consumer_key, @consumer_secret, @access_token, @access_token_secret)
14
+
15
+ #connect to GetHelloWorld
16
+ #http://theopenphotoproject.org/documentation/api/GetHelloWorld
17
+ puts @client.connect(:get, "/hello.json").message
18
+
19
+ #upload a photo
20
+ #http://theopenphotoproject.org/documentation/api/PostPhotoUpload
21
+ puts "uploading spec/logo.png..."
22
+ photo = @client.connect(:post, "/photo/upload.json", {"photo"=>"spec/logo.png", "permission"=>"1", "title"=>"test upload"})
23
+ puts "#{photo.message} #{@site}/photo/#{photo.result["id"]}/view"
24
+
@@ -0,0 +1,5 @@
1
+ module Openphoto
2
+ module Ruby
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,68 @@
1
+ require "openphoto-ruby/version"
2
+
3
+ module Openphoto
4
+
5
+ class Client
6
+
7
+ require 'oauth'
8
+ require 'json'
9
+ require 'pp'
10
+ require 'base64'
11
+
12
+ attr_accessor :hostname, :consumer_key, :consumer_secret, :access_token, :access_token_secret
13
+
14
+ def initialize(hostname, consumer_key, consumer_secret, access_token, access_token_secret)
15
+ @hostname = hostname
16
+ @consumer_key = consumer_key
17
+ @consumer_secret = consumer_secret
18
+ @access_token = access_token
19
+ @access_token_secret = access_token_secret
20
+ end
21
+
22
+ def connect(method,path,params={})
23
+ params["photo"] = Base64.encode64(File.read(params["photo"])) if params.keys.index("photo")
24
+ access_token = prepare_access_token
25
+ response = access_token.request(method.to_sym, path, params)
26
+ response.extend Openphoto::Response
27
+ return response
28
+ end
29
+
30
+ # Exchange your oauth_token and oauth_token_secret for an AccessToken instance.
31
+ def prepare_access_token
32
+ consumer = OAuth::Consumer.new(@consumer_key, @consumer_secret,
33
+ { :site => @hostname,
34
+ :scheme => :header,
35
+ :access_token_path=>"/v1/oauth/token/access",
36
+ :authorize_path => "/v1/oauth/authorize",
37
+ :request_token_path => "/v1/oauth/token/request"
38
+ })
39
+
40
+ access_token = OAuth::AccessToken.from_hash(consumer, :oauth_token => @access_token, :oauth_token_secret => @access_token_secret)
41
+ return access_token
42
+ end
43
+
44
+ end
45
+
46
+ module Response
47
+ #adds OpenPhoto related functions to Net::HTTPResponse
48
+
49
+ def json
50
+ JSON.parse(response.body)
51
+ end
52
+
53
+ def result
54
+ json["result"]
55
+ end
56
+
57
+ def message
58
+ json["message"]
59
+ end
60
+
61
+ def code
62
+ json["code"]
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "openphoto-ruby/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "openphoto-ruby"
7
+ s.version = Openphoto::Ruby::VERSION
8
+ s.authors = ["Brian Levine"]
9
+ s.email = ["beans@beanserver.net"]
10
+ s.homepage = ""
11
+ s.summary = "A ruby wrapper to the OpenPhoto API"
12
+ s.description = "A ruby wrapper to the OpenPhoto API"
13
+
14
+ s.rubyforge_project = "openphoto-ruby"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec", "~> 2.6"
22
+ s.add_dependency "oauth", "~> 0.4.5"
23
+ s.add_dependency "json"
24
+
25
+ end
data/spec/logo.png ADDED
Binary file
@@ -0,0 +1,71 @@
1
+ require 'openphoto-ruby'
2
+
3
+ describe Openphoto do
4
+ before(:each) do
5
+ options = YAML.load_file("spec/settings.yml")
6
+ @consumer_key = options["oauth"]["consumer_key"]
7
+ @consumer_secret = options["oauth"]["consumer_secret"]
8
+ @access_token = options["oauth"]["access_token"]
9
+ @access_token_secret = options["oauth"]["access_token_secret"]
10
+ @site = options["oauth"]["site"]
11
+ @client = Openphoto::Client.new(@site, @consumer_key, @consumer_secret, @access_token, @access_token_secret)
12
+ end
13
+
14
+ it "says hello world" do
15
+ out=@client.connect(:get, "/hello.json")
16
+ out.message.should=="Hello, world!"
17
+ out.code.should==200
18
+ end
19
+
20
+ it "says hello world with oauth" do
21
+ out=@client.connect(:get, "/hello.json", {"auth"=>"true"})
22
+ out.message.should=="Hello, world!"
23
+ out.code.should==200
24
+
25
+ @client = Openphoto::Client.new(@site, "bad credential", @consumer_secret, @access_token, @access_token_secret)
26
+ out=@client.connect(:get, "/hello.json?auth=true")
27
+ out.code.should==403
28
+ end
29
+
30
+ context "photos context" do
31
+
32
+ it "uploads a photo" do
33
+
34
+ out=@client.connect(:post, "/photo/upload.json", {"photo"=>"spec/logo.png", "permission"=>"1", "title"=>"rspec upload"})
35
+ out.code.should==202
36
+ out.message.should match("uploaded successfully")
37
+ $upload_id = out.result["id"]
38
+ end
39
+
40
+ it "views a photo" do
41
+ out=@client.connect(:get, "/photo/#{$upload_id}/view.json")
42
+ out.result["title"].should match("rspec upload")
43
+ out.code.should==200
44
+ end
45
+
46
+ it "adds an action" do
47
+ out=@client.connect(:post, "/action/photo/#{$upload_id}/create.json", {"email"=>"test@openphoto.me", "type"=>"comment", "value"=>"hi there"})
48
+ out.code.should==200
49
+ out.code.should_not==403
50
+ puts out.message
51
+ puts out.result
52
+ $comment_id = out.result["id"]
53
+ end
54
+
55
+ it "deletes an action" do
56
+ out=@client.connect(:post, "/action/photo/#{$comment_id}/delete.json")
57
+ out.code.should==200
58
+ out.code.should_not==403
59
+ end
60
+
61
+ it "deletes a photo" do
62
+ out=@client.connect(:post, "/photo/#{$upload_id}/delete.json")
63
+ out.code.should==200
64
+ out.code.should_not==403
65
+ out.message.should match("Photo deleted successfully")
66
+ end
67
+
68
+ end
69
+
70
+
71
+ end
@@ -0,0 +1,9 @@
1
+ #Getting your credentials
2
+ #You can get your credentials by clicking on the arrow next to your email address once you're logged into your site and #then clicking on settings. If you don't have any credentials then you can create one for yourself by going to #/v1/oauth/flow. Once completed go back to the settings page and you should see the credential you just created
3
+
4
+ oauth:
5
+ consumer_key: 3e35bbca3c5973efxxxxxxxxxx
6
+ consumer_secret: 3179xxxxx
7
+ access_token: 7158277d9aa5xxxxxxxxxxx
8
+ access_token_secret: d0f9xxxxx
9
+ site: http://www.openphoto.me
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openphoto-ruby
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Brian Levine
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-12-21 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 6
30
+ version: "2.6"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: oauth
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ - 4
43
+ - 5
44
+ version: 0.4.5
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: json
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :runtime
58
+ version_requirements: *id003
59
+ description: A ruby wrapper to the OpenPhoto API
60
+ email:
61
+ - beans@beanserver.net
62
+ executables: []
63
+
64
+ extensions: []
65
+
66
+ extra_rdoc_files: []
67
+
68
+ files:
69
+ - .gitignore
70
+ - Gemfile
71
+ - Rakefile
72
+ - Readme.markdown
73
+ - examples.rb
74
+ - lib/openphoto-ruby.rb
75
+ - lib/openphoto-ruby/version.rb
76
+ - openphoto-ruby.gemspec
77
+ - spec/logo.png
78
+ - spec/openphoto_spec.rb
79
+ - spec/settings.yml.example
80
+ has_rdoc: true
81
+ homepage: ""
82
+ licenses: []
83
+
84
+ post_install_message:
85
+ rdoc_options: []
86
+
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ requirements: []
104
+
105
+ rubyforge_project: openphoto-ruby
106
+ rubygems_version: 1.3.6
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: A ruby wrapper to the OpenPhoto API
110
+ test_files:
111
+ - spec/logo.png
112
+ - spec/openphoto_spec.rb
113
+ - spec/settings.yml.example