catch 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +15 -0
- data/README.md +61 -0
- data/Rakefile +2 -0
- data/catch.gemspec +27 -0
- data/lib/catch.rb +24 -0
- data/lib/catch/client.rb +48 -0
- data/lib/catch/comment.rb +38 -0
- data/lib/catch/media.rb +28 -0
- data/lib/catch/note.rb +30 -0
- data/lib/catch/search.rb +13 -0
- data/lib/catch/tag.rb +7 -0
- data/lib/catch/user.rb +7 -0
- data/lib/catch/version.rb +3 -0
- data/test/client_test.rb +30 -0
- data/test/comment_test.rb +89 -0
- data/test/fixtures/comment.json +17 -0
- data/test/fixtures/comment_delete.json +1 -0
- data/test/fixtures/comments.json +31 -0
- data/test/fixtures/media.jpg +0 -0
- data/test/fixtures/media.json +10 -0
- data/test/fixtures/media_delete.json +1 -0
- data/test/fixtures/modified_comment.json +17 -0
- data/test/fixtures/modified_note.json +26 -0
- data/test/fixtures/note.json +26 -0
- data/test/fixtures/note_delete.json +1 -0
- data/test/fixtures/notes.json +14 -0
- data/test/fixtures/search.json +14 -0
- data/test/fixtures/tags.json +24 -0
- data/test/fixtures/user.json +39 -0
- data/test/helper.rb +60 -0
- data/test/media_test.rb +43 -0
- data/test/note_test.rb +82 -0
- data/test/search_test.rb +25 -0
- data/test/tag_test.rb +27 -0
- data/test/user_test.rb +22 -0
- metadata +177 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Catch
|
2
|
+
|
3
|
+
Ruby wrapper for the [Catch API](http://developer.catch.com).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
sudo gem install catch
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
|
11
|
+
### Instantiate a client (Basic Auth)
|
12
|
+
|
13
|
+
catch = Catch::Client.new(:username => "fooman", :password => "supersecrete")
|
14
|
+
|
15
|
+
### or configure once
|
16
|
+
|
17
|
+
Catch.configure do |config|
|
18
|
+
config.username = "fooman"
|
19
|
+
config.password = "supersecret"
|
20
|
+
end
|
21
|
+
catch = Catch::Client.new
|
22
|
+
|
23
|
+
#### Examples
|
24
|
+
|
25
|
+
catch.notes
|
26
|
+
catch.note(<note_id>)
|
27
|
+
catch.add_note({:text => "Lorem ipsum dolor"})
|
28
|
+
catch.modify_note(<note_id>, {:text => "Lorem ipsum dolor"})
|
29
|
+
catch.delete_note(<note_id>)
|
30
|
+
|
31
|
+
catch.comments(<note_id>)
|
32
|
+
catch.comment(<note_id>, <comment_id>)
|
33
|
+
catch.add_comment(<note_id>, {:text => "Lorem ipsum dolor"})
|
34
|
+
catch.modify_comment(<note_id>, <comment_id>, {:text => "Lorem ipsum dolor"})
|
35
|
+
catch.delete_comment(<note_id>, <comment_id>)
|
36
|
+
|
37
|
+
catch.add_media(<note_id>, <filepath>)
|
38
|
+
catch.media(<note_id>, <media_id>)
|
39
|
+
catch.delete_media(<note_id>, <media_id>)
|
40
|
+
|
41
|
+
catch.search(<query string>)
|
42
|
+
|
43
|
+
catch.user
|
44
|
+
|
45
|
+
catch.tags
|
46
|
+
|
47
|
+
## Note on Patches/Pull Requests
|
48
|
+
|
49
|
+
* Fork the project.
|
50
|
+
* Make your feature addition or bug fix.
|
51
|
+
* Add tests for it. This is important so I don't break it in a
|
52
|
+
future version unintentionally.
|
53
|
+
* Commit, do not mess with rakefile, version, or history.
|
54
|
+
(if you want to have your own version, that is fine but
|
55
|
+
bump version in a commit by itself I can ignore when I pull)
|
56
|
+
* Send me a pull request. Bonus points for topic branches.
|
57
|
+
|
58
|
+
## Copyright
|
59
|
+
|
60
|
+
Copyright (c) 2011 Samuel Mullen. See LICENSE for details.
|
61
|
+
|
data/Rakefile
ADDED
data/catch.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/catch/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "catch"
|
6
|
+
s.version = Catch::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Samuel Mullen"]
|
9
|
+
s.email = ["samullen@gmail.com"]
|
10
|
+
s.homepage = "http://rubygems.org/gems/catch"
|
11
|
+
s.summary = "Ruby wrapper for Catch.com's API"
|
12
|
+
s.description = "Ruby wrapper for Catch.com's API"
|
13
|
+
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
15
|
+
s.rubyforge_project = "catch"
|
16
|
+
|
17
|
+
s.add_dependency('hashie', '>= 1.0.0')
|
18
|
+
s.add_dependency('faraday', '>= 0.6.1')
|
19
|
+
s.add_dependency('faraday_middleware', '>= 0.6.3')
|
20
|
+
|
21
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
22
|
+
s.add_development_dependency('fakeweb', '>= 1.3.0')
|
23
|
+
|
24
|
+
s.files = `git ls-files`.split("\n")
|
25
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
26
|
+
s.require_path = 'lib'
|
27
|
+
end
|
data/lib/catch.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
module Catch
|
7
|
+
class << self
|
8
|
+
attr_accessor :username
|
9
|
+
attr_accessor :password
|
10
|
+
|
11
|
+
def configure
|
12
|
+
yield self
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'catch/comment'
|
18
|
+
require 'catch/media'
|
19
|
+
require 'catch/note'
|
20
|
+
require 'catch/search'
|
21
|
+
require 'catch/tag'
|
22
|
+
require 'catch/user'
|
23
|
+
require 'catch/client'
|
24
|
+
end
|
data/lib/catch/client.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Catch
|
2
|
+
class Client
|
3
|
+
include Comment
|
4
|
+
include Media
|
5
|
+
include Note
|
6
|
+
include Search
|
7
|
+
include Tag
|
8
|
+
include User
|
9
|
+
|
10
|
+
attr_reader :api_url, :username
|
11
|
+
|
12
|
+
def initialize(options={})
|
13
|
+
@api_url = "https://api.catch.com/v2"
|
14
|
+
@username = options[:username] || Catch.username
|
15
|
+
password = options[:password] || Catch.password
|
16
|
+
connection.basic_auth(@username, password)
|
17
|
+
media_connection.basic_auth(@username, password)
|
18
|
+
end
|
19
|
+
|
20
|
+
def connection
|
21
|
+
@connection ||= Faraday.new(:url => @api_url, :headers => default_headers) do |builder|
|
22
|
+
builder.request :multipart
|
23
|
+
builder.request :url_encoded
|
24
|
+
builder.request :json
|
25
|
+
builder.adapter Faraday.default_adapter
|
26
|
+
builder.use Faraday::Response::Mashify
|
27
|
+
builder.use Faraday::Response::ParseJson
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def media_connection
|
32
|
+
@media_connection ||= Faraday.new(:url => @api_url, :headers => default_headers) do |builder|
|
33
|
+
builder.request :multipart
|
34
|
+
builder.request :url_encoded
|
35
|
+
builder.adapter Faraday.default_adapter
|
36
|
+
builder.use Faraday::Response::Mashify
|
37
|
+
end
|
38
|
+
end
|
39
|
+
private
|
40
|
+
|
41
|
+
def default_headers
|
42
|
+
headers = {
|
43
|
+
:accept => 'application/json',
|
44
|
+
:user_agent => 'Ruby gem'
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Catch
|
2
|
+
module Comment
|
3
|
+
def comments(note_id, params={})
|
4
|
+
connection.get do |req|
|
5
|
+
req.url("comments/#{note_id}")
|
6
|
+
req.params.merge!(params)
|
7
|
+
end.body.notes
|
8
|
+
end
|
9
|
+
|
10
|
+
def comment(note_id, comment_id)
|
11
|
+
params = {:comment => comment_id}
|
12
|
+
connection.get do |req|
|
13
|
+
req.url("comment/#{note_id}")
|
14
|
+
req.params.merge!(params)
|
15
|
+
end.body.notes.first
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_comment(note_id, params={})
|
19
|
+
payload = params.map {|k,v| "#{k}=#{v}"}.join("&")
|
20
|
+
response = connection.post "comments/#{note_id}", payload
|
21
|
+
response.body.notes.first
|
22
|
+
end
|
23
|
+
|
24
|
+
def modify_comment(note_id, comment_id, params={})
|
25
|
+
payload = {:comment => comment_id }
|
26
|
+
payload.merge! params
|
27
|
+
|
28
|
+
response = connection.post do |req|
|
29
|
+
req.url("comments/#{note_id}")
|
30
|
+
req.params.merge!(payload)
|
31
|
+
end.body.notes.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def delete_comment(note_id, comment_id)
|
35
|
+
connection.delete("comments/#{note_id}?comment=#{comment_id}").body.status == 'ok'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/catch/media.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Catch
|
2
|
+
module Media
|
3
|
+
|
4
|
+
def add_media(id, filepath, params={})
|
5
|
+
params.merge!({:data => Faraday::UploadIO.new(filepath, 'image/jpeg')})
|
6
|
+
|
7
|
+
connection.put("media/#{id}", params).body
|
8
|
+
end
|
9
|
+
|
10
|
+
def media(note_id, media_id, params={})
|
11
|
+
media_connection.get do |req|
|
12
|
+
req.url("media/#{note_id}/#{media_id}")
|
13
|
+
req.params.merge!(params)
|
14
|
+
end.body
|
15
|
+
end
|
16
|
+
|
17
|
+
def delete_media(note_id, media_id)
|
18
|
+
connection.delete("media/#{note_id}/#{media_id}").body.status == 'ok'
|
19
|
+
end
|
20
|
+
|
21
|
+
# def shared_media(note_id, media_id, params={})
|
22
|
+
# media_connection.get do |req|
|
23
|
+
# req.url("media/#{note_id}/#{media_id}")
|
24
|
+
# req.params.merge!(params)
|
25
|
+
# end.body
|
26
|
+
# end
|
27
|
+
end
|
28
|
+
end
|
data/lib/catch/note.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Catch
|
2
|
+
module Note
|
3
|
+
def notes(params={})
|
4
|
+
connection.get do |req|
|
5
|
+
req.url("notes")
|
6
|
+
req.params.merge!(params)
|
7
|
+
end.body.notes
|
8
|
+
end
|
9
|
+
|
10
|
+
def note(id)
|
11
|
+
connection.get("notes/#{id}").body.notes.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_note(params={})
|
15
|
+
payload = params.map {|k,v| "#{k}=#{v}"}.join("&")
|
16
|
+
response = connection.post "notes", payload
|
17
|
+
response.body.notes.first
|
18
|
+
end
|
19
|
+
|
20
|
+
def modify_note(id, params={})
|
21
|
+
payload = params.map {|k,v| "#{k}=#{v}"}.join("&")
|
22
|
+
response = connection.post "notes/#{id}", payload
|
23
|
+
response.body.notes.first
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete_note(id)
|
27
|
+
connection.delete("notes/#{id}").body.status == 'ok'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/catch/search.rb
ADDED
data/lib/catch/tag.rb
ADDED
data/lib/catch/user.rb
ADDED
data/test/client_test.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Client do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "accessing the API" do
|
12
|
+
it "sets the default url" do
|
13
|
+
client = Catch::Client.new
|
14
|
+
client.api_url.must_equal 'https://api.catch.com/v2'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "Configuring some defaults" do
|
19
|
+
it "sets username and and api_url" do
|
20
|
+
Catch.configure do |config|
|
21
|
+
config.username = "barman"
|
22
|
+
config.password = "321321321"
|
23
|
+
end
|
24
|
+
|
25
|
+
client = Catch::Client.new
|
26
|
+
client.username.must_equal "barman"
|
27
|
+
client.api_url.must_equal "https://api.catch.com/v2"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Comment do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#comments" do
|
12
|
+
before do
|
13
|
+
@comments_url = "https://fooman:123123123@api.catch.com/v2/comments/123"
|
14
|
+
stub_get(@comments_url, "comments.json")
|
15
|
+
@comments = @client.comments(123)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "retrieves a list of comments for a specified note as an array" do
|
19
|
+
@comments.must_be_instance_of Array
|
20
|
+
end
|
21
|
+
|
22
|
+
it "retrieves values from a comment within the retrieved array" do
|
23
|
+
@comments.first.text.must_equal "Lorem ipsum dolor1"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "takes a hash as a parameter" do
|
27
|
+
params = {:limit => 2}
|
28
|
+
stub_get(build_url(@comments_url, params), "comments.json", params)
|
29
|
+
@client.comments(123, params).first.id.must_equal "1234"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#comment(id)" do
|
34
|
+
before do
|
35
|
+
@note_id = '123'
|
36
|
+
@comment_id = '12345678'
|
37
|
+
@comment_url = "https://fooman:123123123@api.catch.com/v2/comment/123"
|
38
|
+
params = {:comment => @comment_id}
|
39
|
+
stub_get(build_url(@comment_url, params), "comment.json", params)
|
40
|
+
@comment = @client.comment(@note_id, @comment_id)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "retrieves values a note" do
|
44
|
+
@comment.id.must_equal @comment_id
|
45
|
+
@comment.text.must_equal "Lorem ipsum dolor"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#add_comment(options={})" do
|
50
|
+
before do
|
51
|
+
stub_post("https://fooman:123123123@api.catch.com/v2/comments/123", "comment.json")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "adds a new comment to a note" do
|
55
|
+
comment = @client.add_comment(123, {:text => "Lorem ipsum dolor"})
|
56
|
+
comment.id.must_equal "12345678"
|
57
|
+
comment.text.must_equal "Lorem ipsum dolor"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#modify_comment(note_id, comment_id, options={})" do
|
62
|
+
before do
|
63
|
+
@note_id = '123'
|
64
|
+
@comment_id = '12345678'
|
65
|
+
@comments_url = "https://fooman:123123123@api.catch.com/v2/comments/123"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "returns the updated comment" do
|
69
|
+
params = {:comment => @comment_id, :text => "Foo%20bar%20baz"}
|
70
|
+
stub_post(build_url(@comments_url, params), "modified_comment.json", params)
|
71
|
+
comment = @client.modify_comment(@note_id, @comment_id, {:text => "Foo bar baz"})
|
72
|
+
comment.id.must_equal @comment_id
|
73
|
+
comment.text.must_equal "Foo bar baz"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#delete_note(id)" do
|
78
|
+
before do
|
79
|
+
@note_id = '123'
|
80
|
+
@comment_id = '12345678'
|
81
|
+
stub_delete("https://fooman:123123123@api.catch.com/v2/comments/#{@note_id}?comment=#{@comment_id}", "comment_delete.json")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "deletes a specified comment" do
|
85
|
+
comment = @client.delete_comment(@note_id, @comment_id)
|
86
|
+
comment.must_equal true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{"count": 1,
|
2
|
+
"notes": [
|
3
|
+
{
|
4
|
+
"source": null,
|
5
|
+
"created_at": "2011-05-15T12:15:36.748Z",
|
6
|
+
"tags": [],
|
7
|
+
"modified_at": "2011-05-15T12:15:36.748Z",
|
8
|
+
"comments": [],
|
9
|
+
"source_url": "https:\/\/catch.com\/",
|
10
|
+
"text": "Lorem ipsum dolor",
|
11
|
+
"summary": "Lorem ipsum dolor",
|
12
|
+
"id": "12345678",
|
13
|
+
"user": {"user_name": "fooman", "id": "123456789"}
|
14
|
+
}],
|
15
|
+
"previous_cursor": 0,
|
16
|
+
"next_cursor": 0}
|
17
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
{"status": "ok"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"count": 2,
|
3
|
+
"notes": [
|
4
|
+
{
|
5
|
+
"source": null,
|
6
|
+
"created_at": "2011-05-15T12:15:36.748Z",
|
7
|
+
"tags": [],
|
8
|
+
"modified_at": "2011-05-15T12:15:36.748Z",
|
9
|
+
"comments": [],
|
10
|
+
"source_url": "https:\/\/catch.com\/",
|
11
|
+
"text": "Lorem ipsum dolor1",
|
12
|
+
"summary": "Lorem ipsum dolor1",
|
13
|
+
"id": "1234",
|
14
|
+
"user": {"user_name": "fooman", "id": "12345678"}
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"source": null,
|
18
|
+
"created_at": "2011-05-15T12:15:46.450Z",
|
19
|
+
"tags": [],
|
20
|
+
"modified_at": "2011-05-15T12:15:46.450Z",
|
21
|
+
"comments": [],
|
22
|
+
"source_url": "https:\/\/catch.com\/",
|
23
|
+
"text": "Lorem ipsum dolor2",
|
24
|
+
"summary": "Lorem ipsum dolor2",
|
25
|
+
"id": "1235",
|
26
|
+
"user": {"user_name": "fooman", "id": "12345678"}
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"previous_cursor": 0,
|
30
|
+
"next_cursor": 0
|
31
|
+
}
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
{"status": "ok"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{"count": 1,
|
2
|
+
"notes": [
|
3
|
+
{
|
4
|
+
"source": null,
|
5
|
+
"created_at": "2011-05-15T12:15:36.748Z",
|
6
|
+
"tags": [],
|
7
|
+
"modified_at": "2011-05-15T12:15:36.748Z",
|
8
|
+
"comments": [],
|
9
|
+
"source_url": "https:\/\/catch.com\/",
|
10
|
+
"text": "Foo bar baz",
|
11
|
+
"summary": "Foo bar baz",
|
12
|
+
"id": "12345678",
|
13
|
+
"user": {"user_name": "fooman", "id": "123456789"}
|
14
|
+
}],
|
15
|
+
"previous_cursor": 0,
|
16
|
+
"next_cursor": 0}
|
17
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"status": "ok",
|
3
|
+
"count": 1,
|
4
|
+
"notes": [{
|
5
|
+
"browser_url": "https:\/\/catch.comhttps:\/\/catch.com\/m\/BX-wJ\/-ESuZmYBR50",
|
6
|
+
"public_url": null,
|
7
|
+
"server_created_at": "2011-02-20T13:57:59.835Z",
|
8
|
+
"reminder_at": "1970-01-01T00:00:00.000Z",
|
9
|
+
"source": "Catch",
|
10
|
+
"media": [],
|
11
|
+
"created_at": "2011-02-20T14:00:03.000Z",
|
12
|
+
"tags": ["quotes"],
|
13
|
+
"modified_at": "2011-02-21T16:23:16.037Z",
|
14
|
+
"comments": [],
|
15
|
+
"source_url": "https:\/\/catch.com\/",
|
16
|
+
"server_modified_at": "2011-02-21T16:23:16.037Z",
|
17
|
+
"location": null,
|
18
|
+
"text": "Foo bar baz",
|
19
|
+
"summary": "Lorem ipsum dolor",
|
20
|
+
"id": "12345678",
|
21
|
+
"user": {
|
22
|
+
"user_name": "fooman",
|
23
|
+
"id": "87654321"
|
24
|
+
}
|
25
|
+
}]
|
26
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"status": "ok",
|
3
|
+
"count": 1,
|
4
|
+
"notes": [{
|
5
|
+
"browser_url": "https:\/\/catch.comhttps:\/\/catch.com\/m\/BX-wJ\/-ESuZmYBR50",
|
6
|
+
"public_url": null,
|
7
|
+
"server_created_at": "2011-02-20T13:57:59.835Z",
|
8
|
+
"reminder_at": "1970-01-01T00:00:00.000Z",
|
9
|
+
"source": "Catch",
|
10
|
+
"media": [],
|
11
|
+
"created_at": "2011-02-20T14:00:03.000Z",
|
12
|
+
"tags": ["quotes"],
|
13
|
+
"modified_at": "2011-02-21T16:23:16.037Z",
|
14
|
+
"comments": [],
|
15
|
+
"source_url": "https:\/\/catch.com\/",
|
16
|
+
"server_modified_at": "2011-02-21T16:23:16.037Z",
|
17
|
+
"location": null,
|
18
|
+
"text": "Lorem ipsum dolor",
|
19
|
+
"summary": "Lorem ipsum dolor",
|
20
|
+
"id": "12345678",
|
21
|
+
"user": {
|
22
|
+
"user_name": "fooman",
|
23
|
+
"id": "87654321"
|
24
|
+
}
|
25
|
+
}]
|
26
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"status": "ok"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"status": "ok",
|
3
|
+
"count": 40,
|
4
|
+
"notes": [
|
5
|
+
{"server_modified_at": "2011-05-09T02:21:20.304Z", "id": "12345678"},
|
6
|
+
{"server_modified_at": "2011-05-03T13:22:39.599Z", "id": "23456781"},
|
7
|
+
{"server_modified_at": "2011-05-01T03:18:33.489Z", "id": "34567812"},
|
8
|
+
{"server_modified_at": "2011-05-01T02:41:49.186Z", "id": "45678123"},
|
9
|
+
{"server_modified_at": "2011-04-27T13:37:51.295Z", "id": "56781234"},
|
10
|
+
{"server_modified_at": "2011-04-27T12:19:29.596Z", "id": "67812345"},
|
11
|
+
{"server_modified_at": "2011-04-27T12:18:57.392Z", "id": "78123456"},
|
12
|
+
{"server_modified_at": "2011-04-21T19:14:13.922Z", "id": "81234567"}
|
13
|
+
]
|
14
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"status": "ok",
|
3
|
+
"count": 40,
|
4
|
+
"notes": [
|
5
|
+
{"server_modified_at": "2011-05-09T02:21:20.304Z", "id": "12345678"},
|
6
|
+
{"server_modified_at": "2011-05-03T13:22:39.599Z", "id": "23456781"},
|
7
|
+
{"server_modified_at": "2011-05-01T03:18:33.489Z", "id": "34567812"},
|
8
|
+
{"server_modified_at": "2011-05-01T02:41:49.186Z", "id": "45678123"},
|
9
|
+
{"server_modified_at": "2011-04-27T13:37:51.295Z", "id": "56781234"},
|
10
|
+
{"server_modified_at": "2011-04-27T12:19:29.596Z", "id": "67812345"},
|
11
|
+
{"server_modified_at": "2011-04-27T12:18:57.392Z", "id": "78123456"},
|
12
|
+
{"server_modified_at": "2011-04-21T19:14:13.922Z", "id": "81234567"}
|
13
|
+
]
|
14
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"tags": [
|
3
|
+
{"count": 2, "name": "RoR", "modified": "2011-04-20T13:13:02.420Z"},
|
4
|
+
{"count": 2, "name": "agile", "modified": "2011-04-27T13:38:06.569Z"},
|
5
|
+
{"count": 1, "name": "bdd", "modified": "2011-05-14T12:00:16.765Z"},
|
6
|
+
{"count": 1, "name": "business", "modified": "2011-04-15T21:18:51.152Z"},
|
7
|
+
{"count": 1, "name": "change", "modified": "2011-04-15T21:19:02.382Z"},
|
8
|
+
{"count": 3, "name": "cli", "modified": "2011-05-11T17:27:25.361Z"},
|
9
|
+
{"count": 1, "name": "cucumber", "modified": "2011-05-14T12:00:16.765Z"},
|
10
|
+
{"count": 1, "name": "education", "modified": "2011-04-23T17:04:36.000Z"},
|
11
|
+
{"count": 1, "name": "formats", "modified": "2011-02-21T16:14:49.243Z"},
|
12
|
+
{"count": 1, "name": "git", "modified": "2011-02-21T16:22:42.051Z"},
|
13
|
+
{"count": 2, "name": "linux", "modified": "2011-05-11T17:27:25.361Z"},
|
14
|
+
{"count": 1, "name": "memory", "modified": "2011-03-09T01:20:56.000Z"},
|
15
|
+
{"count": 1, "name": "programming", "modified": "2011-03-09T01:49:10.000Z"},
|
16
|
+
{"count": 15, "name": "quotes", "modified": "2011-05-11T01:01:41.511Z"},
|
17
|
+
{"count": 1, "name": "refactoring", "modified": "2011-04-27T13:37:51.295Z"},
|
18
|
+
{"count": 4, "name": "ruby", "modified": "2011-05-14T12:00:16.765Z"},
|
19
|
+
{"count": 1, "name": "sql", "modified": "2011-02-21T16:09:09.614Z"},
|
20
|
+
{"count": 1, "name": "ubuntu", "modified": "2011-05-03T13:22:39.599Z"},
|
21
|
+
{"count": 2, "name": "xp", "modified": "2011-04-27T13:38:06.569Z"}
|
22
|
+
]
|
23
|
+
}
|
24
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
{
|
2
|
+
"server_time": "2011-02-26T01:49:16.582Z",
|
3
|
+
"user": {
|
4
|
+
"account_level_desc": "Catch Free",
|
5
|
+
"created_at": "2011-02-26T00:50:59.795Z",
|
6
|
+
"deactivated_at": null,
|
7
|
+
"account_capabilities": {
|
8
|
+
"allowed_content_types": [
|
9
|
+
"audio/*",
|
10
|
+
"application/ogg",
|
11
|
+
"image/*",
|
12
|
+
"video/*"
|
13
|
+
]
|
14
|
+
},
|
15
|
+
"account_subscription_end_advisory": null,
|
16
|
+
"linked_accounts": [],
|
17
|
+
"account_upload_activity": {
|
18
|
+
"2011-02": 6681
|
19
|
+
},
|
20
|
+
"id": "22878064",
|
21
|
+
"email": "info@catch.com",
|
22
|
+
"deactivateAccount": 0,
|
23
|
+
"account_upload_activity_periodic": [{
|
24
|
+
"period_start": "2011-02-26T00:00:00.000Z",
|
25
|
+
"period_activity": 6681,
|
26
|
+
"period_end": "2011-03-26T00:00:00.000Z"
|
27
|
+
}],
|
28
|
+
"user_name": "API Documenter",
|
29
|
+
"emails": [{
|
30
|
+
"confirmed": "2011-02-26T00:50:59.795Z",
|
31
|
+
"email": "info@catch.com",
|
32
|
+
"primary": true
|
33
|
+
}],
|
34
|
+
"account_limits": {
|
35
|
+
"monthly_upload_limit": 52428800
|
36
|
+
},
|
37
|
+
"account_level": 0
|
38
|
+
}
|
39
|
+
}
|
data/test/helper.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'fakeweb'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
+
|
7
|
+
require 'catch'
|
8
|
+
|
9
|
+
FakeWeb.allow_net_connect = false
|
10
|
+
|
11
|
+
def catch_test_client
|
12
|
+
Catch::Client.new(:username => 'fooman', :password => '123123123')
|
13
|
+
end
|
14
|
+
|
15
|
+
def fixture_file(filename)
|
16
|
+
return '' if filename == ''
|
17
|
+
file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
|
18
|
+
File.read(file_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def catch_url(url)
|
22
|
+
url.match(/^http/) ? url : "https://api.catch.com/v2#{url}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def stub_get(url, filename, options={})
|
26
|
+
opts = {
|
27
|
+
:body => fixture_file(filename),
|
28
|
+
:content_type => 'application/json; charset=utf-8'
|
29
|
+
}.merge(options)
|
30
|
+
FakeWeb.register_uri(:get, catch_url(url), opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def stub_post(url, filename, options={})
|
34
|
+
opts = {
|
35
|
+
:body => fixture_file(filename),
|
36
|
+
:content_type => 'application/json; charset=utf-8'
|
37
|
+
}.merge(options)
|
38
|
+
FakeWeb.register_uri(:post, catch_url(url), opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
# only used for media
|
42
|
+
def stub_put(url, filename, options={})
|
43
|
+
opts = {
|
44
|
+
:body => fixture_file(filename),
|
45
|
+
:content_type => 'application/json; charset=utf-8'
|
46
|
+
}.merge(options)
|
47
|
+
FakeWeb.register_uri(:put, /#{catch_url(url)}/, opts)
|
48
|
+
end
|
49
|
+
|
50
|
+
def stub_delete(url, filename, options={})
|
51
|
+
opts = {
|
52
|
+
:body => fixture_file(filename),
|
53
|
+
:content_type => 'application/json; charset=utf-8'
|
54
|
+
}.merge(options)
|
55
|
+
FakeWeb.register_uri(:delete, catch_url(url), opts)
|
56
|
+
end
|
57
|
+
|
58
|
+
def build_url(url, params)
|
59
|
+
[url, params.map {|k,v| "#{k}=#{v}"}.join("&")].join("?")
|
60
|
+
end
|
data/test/media_test.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Media do
|
7
|
+
before do
|
8
|
+
@note_id = "123"
|
9
|
+
@media_id = "123abc"
|
10
|
+
@media_url = "https://fooman:123123123@api.catch.com/v2/media"
|
11
|
+
@client = catch_test_client
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#add_media(id, FILE)" do
|
15
|
+
before do
|
16
|
+
end
|
17
|
+
|
18
|
+
it "posts a file to an existing note" do
|
19
|
+
stub_put("#{@media_url}/#{@note_id}", "media.json")
|
20
|
+
media = @client.add_media(@note_id, "test/fixtures/media.jpg")
|
21
|
+
media.id.must_equal('123abc')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#media" do
|
26
|
+
it "retrieves a media file" do
|
27
|
+
stub_get("#{@media_url}/#{@note_id}/#{@media_id}", "media.jpg")
|
28
|
+
media_file = @client.media(@note_id, @media_id)
|
29
|
+
puts media_file.size
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#delete_media(note_id, media_id)" do
|
34
|
+
before do
|
35
|
+
stub_delete("https://fooman:123123123@api.catch.com/v2/media/#{@note_id}/#{@media_id}", "note_delete.json")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "deletes a specified media file from a note" do
|
39
|
+
media = @client.delete_media(@note_id, @media_id)
|
40
|
+
media.must_equal true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/test/note_test.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Note do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#notes" do
|
12
|
+
before do
|
13
|
+
@notes_url = "https://fooman:123123123@api.catch.com/v2/notes"
|
14
|
+
stub_get(@notes_url, "notes.json")
|
15
|
+
@notes = @client.notes
|
16
|
+
end
|
17
|
+
|
18
|
+
it "retrieves a list of notes as an array" do
|
19
|
+
@notes.must_be_instance_of Array
|
20
|
+
end
|
21
|
+
|
22
|
+
it "retrieves values from a note within the retrieved array" do
|
23
|
+
@notes.first.id.must_equal "12345678"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "takes a hash as a parameter" do
|
27
|
+
params = {:limit => 2}
|
28
|
+
stub_get(build_url(@notes_url, params), "notes.json", params)
|
29
|
+
@client.notes(params).first.id.must_equal "12345678"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#note(id)" do
|
34
|
+
before do
|
35
|
+
@id = '12345678'
|
36
|
+
stub_get("https://fooman:123123123@api.catch.com/v2/notes/#{@id}", "note.json")
|
37
|
+
@note = @client.note(@id)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "retrieves values a note" do
|
41
|
+
@note.id.must_equal @id
|
42
|
+
@note.text.must_equal "Lorem ipsum dolor"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#add_note(options={})" do
|
47
|
+
before do
|
48
|
+
stub_post("https://fooman:123123123@api.catch.com/v2/notes", "note.json")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "adds a new note" do
|
52
|
+
note = @client.add_note({:text => "Lorem ipsum dolor"})
|
53
|
+
note.id.must_equal "12345678"
|
54
|
+
note.text.must_equal "Lorem ipsum dolor"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#modify_note(id, options={})" do
|
59
|
+
before do
|
60
|
+
@id = '12345678'
|
61
|
+
stub_post("https://fooman:123123123@api.catch.com/v2/notes/#{@id}", "modified_note.json")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns the updated note" do
|
65
|
+
note = @client.modify_note(@id, {:text => "Foo bar baz"})
|
66
|
+
note.id.must_equal @id
|
67
|
+
note.text.must_equal "Foo bar baz"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#delete_note(id)" do
|
72
|
+
before do
|
73
|
+
@id = '123123'
|
74
|
+
stub_delete("https://fooman:123123123@api.catch.com/v2/notes/#{@id}", "note_delete.json")
|
75
|
+
end
|
76
|
+
|
77
|
+
it "deletes a specified note" do
|
78
|
+
note = @client.delete_note(@id)
|
79
|
+
note.must_equal true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/test/search_test.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Search do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#search" do
|
12
|
+
before do
|
13
|
+
@notes_url = "https://fooman:123123123@api.catch.com/v2/search"
|
14
|
+
# stub_get(@notes_url, "notes.json")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "passes query and search parameters, and returns an array of notes" do
|
18
|
+
params = {:q => "Lorem%20ipsum"}
|
19
|
+
stub_get(build_url(@notes_url, params), "search.json", params)
|
20
|
+
notes = @client.search("Lorem ipsum")
|
21
|
+
notes.must_be_instance_of Array
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
data/test/tag_test.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::Tag do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#tags" do
|
12
|
+
before do
|
13
|
+
@tags_url = "https://fooman:123123123@api.catch.com/v2/tags"
|
14
|
+
stub_get(@tags_url, "tags.json")
|
15
|
+
@tags = @client.tags
|
16
|
+
end
|
17
|
+
|
18
|
+
it "retrieves a users tag list" do
|
19
|
+
@tags.must_be_instance_of Array
|
20
|
+
end
|
21
|
+
|
22
|
+
it "retrieves values from a tag within the retrieved array" do
|
23
|
+
@tags.first.name.must_equal "RoR"
|
24
|
+
@tags.first['count'].must_equal 2
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/test/user_test.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'helper'
|
5
|
+
|
6
|
+
describe Catch::User do
|
7
|
+
before do
|
8
|
+
@client = catch_test_client
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#user" do
|
12
|
+
before do
|
13
|
+
stub_get("https://fooman:123123123@api.catch.com/v2/user", "user.json")
|
14
|
+
@user = @client.user
|
15
|
+
end
|
16
|
+
|
17
|
+
it "retrieves the user record" do
|
18
|
+
@user.account_level_desc.must_equal "Catch Free"
|
19
|
+
@user.user_name.must_equal "API Documenter"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: catch
|
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
|
+
- Samuel Mullen
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-05-18 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: hashie
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
version: 1.0.0
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: faraday
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 6
|
46
|
+
- 1
|
47
|
+
version: 0.6.1
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: faraday_middleware
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
- 6
|
61
|
+
- 3
|
62
|
+
version: 0.6.3
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: bundler
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 1
|
75
|
+
- 0
|
76
|
+
- 0
|
77
|
+
version: 1.0.0
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: fakeweb
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
segments:
|
89
|
+
- 1
|
90
|
+
- 3
|
91
|
+
- 0
|
92
|
+
version: 1.3.0
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id005
|
95
|
+
description: Ruby wrapper for Catch.com's API
|
96
|
+
email:
|
97
|
+
- samullen@gmail.com
|
98
|
+
executables: []
|
99
|
+
|
100
|
+
extensions: []
|
101
|
+
|
102
|
+
extra_rdoc_files: []
|
103
|
+
|
104
|
+
files:
|
105
|
+
- .gitignore
|
106
|
+
- Gemfile
|
107
|
+
- Gemfile.lock
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- catch.gemspec
|
111
|
+
- lib/catch.rb
|
112
|
+
- lib/catch/client.rb
|
113
|
+
- lib/catch/comment.rb
|
114
|
+
- lib/catch/media.rb
|
115
|
+
- lib/catch/note.rb
|
116
|
+
- lib/catch/search.rb
|
117
|
+
- lib/catch/tag.rb
|
118
|
+
- lib/catch/user.rb
|
119
|
+
- lib/catch/version.rb
|
120
|
+
- test/client_test.rb
|
121
|
+
- test/comment_test.rb
|
122
|
+
- test/fixtures/comment.json
|
123
|
+
- test/fixtures/comment_delete.json
|
124
|
+
- test/fixtures/comments.json
|
125
|
+
- test/fixtures/media.jpg
|
126
|
+
- test/fixtures/media.json
|
127
|
+
- test/fixtures/media_delete.json
|
128
|
+
- test/fixtures/modified_comment.json
|
129
|
+
- test/fixtures/modified_note.json
|
130
|
+
- test/fixtures/note.json
|
131
|
+
- test/fixtures/note_delete.json
|
132
|
+
- test/fixtures/notes.json
|
133
|
+
- test/fixtures/search.json
|
134
|
+
- test/fixtures/tags.json
|
135
|
+
- test/fixtures/user.json
|
136
|
+
- test/helper.rb
|
137
|
+
- test/media_test.rb
|
138
|
+
- test/note_test.rb
|
139
|
+
- test/search_test.rb
|
140
|
+
- test/tag_test.rb
|
141
|
+
- test/user_test.rb
|
142
|
+
has_rdoc: true
|
143
|
+
homepage: http://rubygems.org/gems/catch
|
144
|
+
licenses: []
|
145
|
+
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
segments:
|
157
|
+
- 0
|
158
|
+
version: "0"
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
segments:
|
165
|
+
- 1
|
166
|
+
- 3
|
167
|
+
- 6
|
168
|
+
version: 1.3.6
|
169
|
+
requirements: []
|
170
|
+
|
171
|
+
rubyforge_project: catch
|
172
|
+
rubygems_version: 1.3.7
|
173
|
+
signing_key:
|
174
|
+
specification_version: 3
|
175
|
+
summary: Ruby wrapper for Catch.com's API
|
176
|
+
test_files: []
|
177
|
+
|