catch 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 +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
|
+
|