CatchNotes_api 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,11 @@
1
+ == v0.1.3
2
+ * Added tag listing support.
3
+ * Added searching by tag.
4
+ == v0.1.2
5
+ * Added support for updating a note.
6
+ * Added support for deleting a note.
7
+ == v0.1.1
8
+ * Added support for creating a new note.
9
+ == v0.1.0
10
+ * Added support for listing all notes.
11
+ * Added support for finding a single note by its id.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{CatchNotes_api}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wade West"]
12
- s.date = %q{2010-11-05}
12
+ s.date = %q{2010-11-08}
13
13
  s.description = %q{An ActiveResource like interface to catch.com}
14
14
  s.email = %q{wwest81@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ "CHANGELOG.rdoc",
22
23
  "CatchNotes_api.gemspec",
23
24
  "LICENSE",
24
25
  "README.rdoc",
@@ -27,10 +28,12 @@ Gem::Specification.new do |s|
27
28
  "lib/catch_notes.rb",
28
29
  "lib/catch_notes/base.rb",
29
30
  "lib/catch_notes/errors.rb",
31
+ "lib/catch_notes/tagging.rb",
30
32
  "test/faker.rb",
31
33
  "test/helper.rb",
32
34
  "test/note_class.rb",
33
- "test/test_catch_notes.rb"
35
+ "test/test_catch_notes.rb",
36
+ "test/test_tagging.rb"
34
37
  ]
35
38
  s.homepage = %q{http://github.com/wadewest/CatchNotes_api}
36
39
  s.rdoc_options = ["--charset=UTF-8"]
@@ -41,7 +44,8 @@ Gem::Specification.new do |s|
41
44
  "test/faker.rb",
42
45
  "test/helper.rb",
43
46
  "test/note_class.rb",
44
- "test/test_catch_notes.rb"
47
+ "test/test_catch_notes.rb",
48
+ "test/test_tagging.rb"
45
49
  ]
46
50
 
47
51
  if s.respond_to? :specification_version then
@@ -50,7 +54,7 @@ Gem::Specification.new do |s|
50
54
 
51
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
56
  s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
53
- s.add_runtime_dependency(%q<json>, [">= 1.4.6"])
57
+ s.add_development_dependency(%q<json>, [">= 1.4.6"])
54
58
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
55
59
  s.add_development_dependency(%q<sinatra>, [">= 1.1.0"])
56
60
  else
data/README.rdoc CHANGED
@@ -1,6 +1,8 @@
1
1
  = CatchNotes_api
2
2
 
3
3
  == Usage
4
+ # requiring
5
+ require 'catch_notes'
4
6
 
5
7
  # setting up your note class
6
8
  class Note < CatchNotes::Base
@@ -16,15 +18,27 @@
16
18
  first.text # the text content of the note
17
19
 
18
20
  # creating notes
19
- note = Note.new :text => "My New Note"
20
- note.save # will return true if all is good
21
+ my_note = Note.new :text => "My New Note"
22
+ my_note.save # will return true if all is good
21
23
 
22
24
  # updating a note
23
- note.text = "My Updated Note"
24
- note.save
25
+ my_note.text = "My Updated Note"
26
+ my_note.save
25
27
 
26
28
  # deleting a note
27
- note.destroy # will return true if all is good
29
+ my_note.destroy # will return true if all is good
30
+
31
+ # listing tags
32
+ Note.tags
33
+
34
+ # finding note by a tag
35
+ my_notes = Note.find_all_by_tag 'blah'
36
+
37
+ my_note = Note.find_by_tag 'blah'
38
+
39
+ == Todo
40
+
41
+ * Add CRUD support for image attachments.
28
42
 
29
43
  == Note on Patches/Pull Requests
30
44
 
data/Rakefile CHANGED
@@ -12,8 +12,8 @@ begin
12
12
  gem.authors = ["Wade West"]
13
13
 
14
14
  gem.add_dependency 'httparty', '>=0.6.1'
15
- gem.add_dependency 'json', '>=1.4.6'
16
15
 
16
+ gem.add_development_dependency 'json', '>=1.4.6'
17
17
  gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
18
18
  gem.add_development_dependency "sinatra", ">= 1.1.0"
19
19
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -1,5 +1,4 @@
1
1
  require 'httparty'
2
- require 'json'
3
2
  module CatchNotes
4
3
  class Base
5
4
 
@@ -47,18 +46,39 @@ module CatchNotes
47
46
  module ClassMethods
48
47
  def all
49
48
  res = get "/notes"
50
- if send(:ok?, res)
51
- res.parsed_response['notes'].map do |note|
52
- send :build_from_hash, note
53
- end
54
- end
49
+ build_note_array( res.parsed_response['notes'] ) if send(:ok?, res)
55
50
  end
56
51
 
57
- def find(id)
52
+ def find!(id)
58
53
  res = get "/notes/#{id}"
59
- if send(:ok?, res)
60
- send :build_from_hash, res.parsed_response['notes'].first
61
- end
54
+ send(:build_from_hash,res.parsed_response['notes'].first ) if send(:ok?,res)
55
+ end
56
+
57
+ def find(id)
58
+ find!(id)
59
+ rescue CatchNotes::NotFound
60
+ nil
61
+ end
62
+
63
+ def find_all_by_tag!( tag_name )
64
+ res = get "/search?q=%23#{tag_name}"
65
+ build_note_array( res.parsed_response['notes'] ) if send(:ok?, res)
66
+ end
67
+
68
+ def find_all_by_tag( tag_name )
69
+ find_all_by_tag!(tag_name)
70
+ rescue
71
+ []
72
+ end
73
+
74
+ def find_by_tag!( tag_name )
75
+ find_all_by_tag!(tag_name).first
76
+ end
77
+
78
+ def find_by_tag( tag_name )
79
+ find_all_by_tag!(tag_name).first
80
+ rescue
81
+ nil
62
82
  end
63
83
 
64
84
  def first
@@ -68,6 +88,24 @@ module CatchNotes
68
88
  def last
69
89
  all.last
70
90
  end
91
+
92
+ def tags
93
+ res = get "/tags"
94
+ if send(:ok?, res)
95
+ res.parsed_response['tags'].inject({}) do |hash, t|
96
+ hash[t['name']] = Tagging.new t, self
97
+ #hash[t['name'].to_sym] = Tagging.new t, self
98
+ hash
99
+ end
100
+ end
101
+ end
102
+
103
+ private
104
+ def build_note_array( notes )
105
+ notes.map do |note|
106
+ send :build_from_hash, note
107
+ end
108
+ end
71
109
  end
72
110
 
73
111
  def self.included(klass)
@@ -137,6 +175,11 @@ module CatchNotes
137
175
  false
138
176
  end
139
177
 
178
+ def new_record?
179
+ i = self.send :id
180
+ i.nil?
181
+ end
182
+
140
183
  private
141
184
  def post_body
142
185
  {
@@ -147,39 +190,8 @@ module CatchNotes
147
190
  def rebuild(attrs)
148
191
  initialize(attrs)
149
192
  end
150
-
151
- end
152
193
 
153
- module Util
154
-
155
- module ClassMethods
156
- def stringify_keys (input_hash)
157
- input_hash.map{|k,v| [k.to_s, v]}.inject({}) do |hash, pair|
158
- hash[pair.first] = pair.last
159
- hash
160
- end
161
- end
162
194
 
163
- private
164
- def ok?(response)
165
- case response.code
166
- when 200 then true
167
- when 401 then raise CatchNotes::AuthError
168
- when 404 then raise CatchNotes::NotFound
169
- else raise CatchNotes::CatchNotesError
170
- end
171
- end
172
- end
173
-
174
- def new_record?
175
- i = self.send :id
176
- i.nil?
177
- end
178
-
179
- def self.included(klass)
180
- klass.extend ClassMethods
181
- end
182
-
183
195
  end
184
196
 
185
197
  include AuthItems
@@ -0,0 +1,19 @@
1
+ require 'httparty'
2
+ module CatchNotes
3
+ class Tagging
4
+
5
+ def initialize( attrs, creator )
6
+ @attrs = attrs
7
+ @creator = creator
8
+ end
9
+
10
+ def count
11
+ @attrs['count']
12
+ end
13
+
14
+ def notes
15
+ @creator.find_all_by_tag(@attr['name'])
16
+ end
17
+
18
+ end
19
+ end
data/lib/catch_notes.rb CHANGED
@@ -1,5 +1,32 @@
1
- require 'catch_notes/errors'
2
- require 'catch_notes/base'
3
1
  module CatchNotes
4
-
2
+ module Util
3
+
4
+ module ClassMethods
5
+ def stringify_keys (input_hash)
6
+ input_hash.map{|k,v| [k.to_s, v]}.inject({}) do |hash, pair|
7
+ hash[pair.first] = pair.last
8
+ hash
9
+ end
10
+ end
11
+
12
+ private
13
+ def ok?(response)
14
+ case response.code
15
+ when 200 then true
16
+ when 401 then raise CatchNotes::AuthError
17
+ when 404 then raise CatchNotes::NotFound
18
+ else raise CatchNotes::CatchNotesError
19
+ end
20
+ end
21
+ end
22
+
23
+ def self.included(klass)
24
+ klass.extend ClassMethods
25
+ end
26
+
27
+ end
5
28
  end
29
+
30
+ require 'catch_notes/errors'
31
+ require 'catch_notes/base'
32
+ require 'catch_notes/tagging'
data/test/faker.rb CHANGED
@@ -15,7 +15,8 @@ module Faker
15
15
  def build_note(opts = {})
16
16
  opts = {
17
17
  'id' => rand(332422),
18
- 'text' => "A Note for testing."
18
+ 'text' => "A Note for testing.",
19
+ 'tags' => []
19
20
  }.merge(opts)
20
21
  {
21
22
  "browser_url" => "https:\/\/catch.com\/m\/BPTEv\/6Jmd9SKkP0f",
@@ -23,7 +24,7 @@ module Faker
23
24
  "source" => "Catch.com",
24
25
  "text" => opts['text'],
25
26
  "created_at" => "2010-11-02T15:57:46.919Z",
26
- "tags" => [],
27
+ "tags" => opts['tags'],
27
28
  "modified_at" => "2010-11-03T13:47:28.674Z",
28
29
  "source_url" => "https:\/\/catch.com\/",
29
30
  "children" => 0,
@@ -87,6 +88,38 @@ module Faker
87
88
  content_type 'application/json', :charset => 'utf-8'
88
89
  "null"
89
90
  end
91
+
92
+ # For listing tags
93
+ get "/tags" do
94
+ content_type 'application/json', :charset => 'utf-8'
95
+ JSON.generate({
96
+ 'tags' => [
97
+ { 'count' => 3,
98
+ 'modified' => "2010-11-08T17:29:04.278Z",
99
+ 'name' => 'blah'},
100
+ { 'count' => 1,
101
+ 'modified' => "2010-11-08T17:29:04.278Z",
102
+ 'name' => 'foo'},
103
+ { 'count' => 4,
104
+ 'modified' => "2010-11-08T17:29:04.278Z",
105
+ 'name' => 'bar'},
106
+ ]
107
+ })
108
+ end
109
+
110
+ # For searching a tag
111
+ get '/search' do
112
+ content_type 'application/json', :charset => 'utf-8'
113
+ tag = params[:q].gsub(/^#/, '')
114
+ JSON.generate({
115
+ 'notes' => [
116
+ build_note('text'=>'Test note one', 'tags' => [tag]),
117
+ build_note('text'=>'Test note two', 'tags' => [tag]),
118
+ build_note('text'=>'Test note three', 'tags' => [tag]),
119
+ build_note('text'=>'Test note four', 'tags' => [tag])
120
+ ]
121
+ })
122
+ end
90
123
  end
91
124
 
92
125
  Thread.new do
@@ -60,9 +60,14 @@ class TestCatchNotes < Test::Unit::TestCase
60
60
  assert !note.destroy
61
61
  end
62
62
 
63
- should "raise a NotFound error when a note doesn't exist" do
63
+ should "raise a nil error when a note doesn't exist: find" do
64
+ assert_nil NoteClass.find 13
65
+ end
66
+
67
+
68
+ should "raise a NotFound error when a note doesn't exist: find!" do
64
69
  assert_raise CatchNotes::NotFound do
65
- NoteClass.find 13
70
+ NoteClass.find! 13
66
71
  end
67
72
  end
68
73
 
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+ require 'note_class'
3
+
4
+ class TestTagging < Test::Unit::TestCase
5
+ def setup
6
+ NoteClass.good_user
7
+ end
8
+
9
+ should "be able to get a list of tags" do
10
+ assert_instance_of Hash, NoteClass.tags
11
+ end
12
+
13
+ should "be able to find all notes with a given tag" do
14
+ notes = NoteClass.find_all_by_tag 'blah'
15
+ assert_instance_of Array, notes
16
+ assert_instance_of NoteClass, notes.first
17
+ assert_equal 'blah', notes.first.tags.first
18
+ end
19
+
20
+ should "be able to find the first note with a given tag" do
21
+ note = NoteClass.find_by_tag 'blah'
22
+ assert_instance_of NoteClass, note
23
+ end
24
+
25
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CatchNotes_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Wade West
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-05 00:00:00 -05:00
18
+ date: 2010-11-08 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -48,7 +48,7 @@ dependencies:
48
48
  - 4
49
49
  - 6
50
50
  version: 1.4.6
51
- type: :runtime
51
+ type: :development
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: thoughtbot-shoulda
@@ -92,6 +92,7 @@ extra_rdoc_files:
92
92
  files:
93
93
  - .document
94
94
  - .gitignore
95
+ - CHANGELOG.rdoc
95
96
  - CatchNotes_api.gemspec
96
97
  - LICENSE
97
98
  - README.rdoc
@@ -100,10 +101,12 @@ files:
100
101
  - lib/catch_notes.rb
101
102
  - lib/catch_notes/base.rb
102
103
  - lib/catch_notes/errors.rb
104
+ - lib/catch_notes/tagging.rb
103
105
  - test/faker.rb
104
106
  - test/helper.rb
105
107
  - test/note_class.rb
106
108
  - test/test_catch_notes.rb
109
+ - test/test_tagging.rb
107
110
  has_rdoc: true
108
111
  homepage: http://github.com/wadewest/CatchNotes_api
109
112
  licenses: []
@@ -143,3 +146,4 @@ test_files:
143
146
  - test/helper.rb
144
147
  - test/note_class.rb
145
148
  - test/test_catch_notes.rb
149
+ - test/test_tagging.rb