kmayer-highrise 0.13.0 → 1.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/README.mkdn +3 -5
- data/Rakefile +2 -4
- data/VERSION.yml +3 -3
- data/examples/config_initializers_highrise.rb +2 -2
- data/examples/sample.rb +1 -1
- data/highrise.gemspec +9 -20
- data/lib/cachable.rb +26 -15
- data/lib/highrise.rb +0 -4
- data/lib/highrise/base.rb +1 -3
- data/lib/highrise/person.rb +7 -1
- data/lib/highrise/taggable.rb +8 -24
- data/spec/cachable_spec.rb +13 -15
- data/spec/highrise/company_spec.rb +8 -10
- data/spec/highrise/person_spec.rb +7 -9
- data/spec/spec.opts +2 -1
- data/spec/spec_helper.rb +5 -5
- metadata +3 -31
- data/lib/highrise/curlhelper.rb +0 -27
- data/lib/highrise/curly.rb +0 -101
- data/spec/highrise/companies/16883216.html +0 -1723
- data/spec/highrise/curlhelper_spec.rb +0 -35
- data/spec/highrise/curly_spec.rb +0 -36
- data/spec/highrise/people/16887003.html +0 -1733
data/README.mkdn
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Highrise (
|
1
|
+
# Highrise (1.0)
|
2
2
|
|
3
3
|
## What is it?
|
4
4
|
|
@@ -14,10 +14,8 @@ All these classes are inherited from ActiveResouce::Base. Refer to the [ActiveRe
|
|
14
14
|
|
15
15
|
### Dependencies
|
16
16
|
|
17
|
-
* ActiveResorce >= 2.
|
17
|
+
* ActiveResorce >= 2.1
|
18
18
|
* ActiveSupport >= 2.1
|
19
|
-
* Curb
|
20
|
-
* Hpricot
|
21
19
|
|
22
20
|
### Configure your key
|
23
21
|
|
@@ -33,7 +31,7 @@ or
|
|
33
31
|
|
34
32
|
and, if you want [caching][c]:
|
35
33
|
|
36
|
-
Highrise::Base.
|
34
|
+
Highrise::Base.cache_store= <your normal ActiveSupport::Caching options>
|
37
35
|
|
38
36
|
If you are using this in a Rails application, putting this code in a config/initializers/highrise.rb
|
39
37
|
file is recommended. See config_initializers_highrise.rb in the examples/ directory.
|
data/Rakefile
CHANGED
@@ -27,10 +27,8 @@ Highrise::Base.site = 'http://your_site.highrisehq.com/'
|
|
27
27
|
Highrise::Base.user = 'your_api_auth_token'
|
28
28
|
}
|
29
29
|
gemspec.authors = ["Marcos Tapajós", "Ken Mayer"]
|
30
|
-
gemspec.add_dependency('activeresource', '>=2.
|
31
|
-
gemspec.add_dependency('activesupport', '>=2.1')
|
32
|
-
gemspec.add_dependency('curb')
|
33
|
-
gemspec.add_dependency('hpricot')
|
30
|
+
gemspec.add_dependency('activeresource', '>= 2.1')
|
31
|
+
gemspec.add_dependency('activesupport', '>= 2.1')
|
34
32
|
end
|
35
33
|
rescue LoadError
|
36
34
|
puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gems.github.com"
|
data/VERSION.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
---
|
2
|
-
:minor:
|
3
|
-
:patch:
|
4
|
-
:major:
|
2
|
+
:minor: 0
|
3
|
+
:patch: 1
|
4
|
+
:major: 1
|
@@ -7,6 +7,6 @@ if Rails.env != 'test' then
|
|
7
7
|
Highrise::Base.site = 'https://my_fancy_auth_token@example.com.i'
|
8
8
|
end
|
9
9
|
# The cache store can be anything that ActiveSupport can handle
|
10
|
-
Highrise::Base.
|
11
|
-
Highrise::Base.
|
10
|
+
Highrise::Base.cache_store = ActiveSupport::Cache.lookup_store :mem_cache_store
|
11
|
+
Highrise::Base.store_options = { :expires_in => 60.seconds }
|
12
12
|
end
|
data/examples/sample.rb
CHANGED
data/highrise.gemspec
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{highrise}
|
5
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.1"
|
6
9
|
|
7
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
11
|
s.authors = ["Marcos Tapaj\303\263s", "Ken Mayer"]
|
9
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-09-02}
|
10
13
|
s.description = %q{
|
11
14
|
Based on the original API module from DHH, http://developer.37signals.com/highrise/, this
|
12
15
|
gem is a cleaned up, tested version of the same. Contributors have added support for tags
|
@@ -40,8 +43,6 @@ Highrise::Base.user = 'your_api_auth_token'
|
|
40
43
|
"lib/highrise/base.rb",
|
41
44
|
"lib/highrise/comment.rb",
|
42
45
|
"lib/highrise/company.rb",
|
43
|
-
"lib/highrise/curlhelper.rb",
|
44
|
-
"lib/highrise/curly.rb",
|
45
46
|
"lib/highrise/email.rb",
|
46
47
|
"lib/highrise/group.rb",
|
47
48
|
"lib/highrise/kase.rb",
|
@@ -57,17 +58,13 @@ Highrise::Base.user = 'your_api_auth_token'
|
|
57
58
|
"spec/cachable_spec.rb",
|
58
59
|
"spec/highrise/base_spec.rb",
|
59
60
|
"spec/highrise/comment_spec.rb",
|
60
|
-
"spec/highrise/companies/16883216.html",
|
61
61
|
"spec/highrise/company_spec.rb",
|
62
|
-
"spec/highrise/curlhelper_spec.rb",
|
63
|
-
"spec/highrise/curly_spec.rb",
|
64
62
|
"spec/highrise/email_spec.rb",
|
65
63
|
"spec/highrise/group_spec.rb",
|
66
64
|
"spec/highrise/kase_spec.rb",
|
67
65
|
"spec/highrise/membership_spec.rb",
|
68
66
|
"spec/highrise/note_spec.rb",
|
69
67
|
"spec/highrise/pagination_spec.rb",
|
70
|
-
"spec/highrise/people/16887003.html",
|
71
68
|
"spec/highrise/person_spec.rb",
|
72
69
|
"spec/highrise/subject_spec.rb",
|
73
70
|
"spec/highrise/tag_spec.rb",
|
@@ -80,15 +77,13 @@ Highrise::Base.user = 'your_api_auth_token'
|
|
80
77
|
s.homepage = %q{http://github.com/kmayer/highrise}
|
81
78
|
s.rdoc_options = ["--charset=UTF-8"]
|
82
79
|
s.require_paths = ["lib"]
|
83
|
-
s.rubygems_version = %q{1.3.
|
80
|
+
s.rubygems_version = %q{1.3.5}
|
84
81
|
s.summary = %q{Ruby wrapper around Highrise API}
|
85
82
|
s.test_files = [
|
86
83
|
"spec/cachable_spec.rb",
|
87
84
|
"spec/highrise/base_spec.rb",
|
88
85
|
"spec/highrise/comment_spec.rb",
|
89
86
|
"spec/highrise/company_spec.rb",
|
90
|
-
"spec/highrise/curlhelper_spec.rb",
|
91
|
-
"spec/highrise/curly_spec.rb",
|
92
87
|
"spec/highrise/email_spec.rb",
|
93
88
|
"spec/highrise/group_spec.rb",
|
94
89
|
"spec/highrise/kase_spec.rb",
|
@@ -111,20 +106,14 @@ Highrise::Base.user = 'your_api_auth_token'
|
|
111
106
|
s.specification_version = 3
|
112
107
|
|
113
108
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
114
|
-
s.add_runtime_dependency(%q<activeresource>, [">= 2.
|
109
|
+
s.add_runtime_dependency(%q<activeresource>, [">= 2.1"])
|
115
110
|
s.add_runtime_dependency(%q<activesupport>, [">= 2.1"])
|
116
|
-
s.add_runtime_dependency(%q<curb>, [">= 0"])
|
117
|
-
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
|
118
111
|
else
|
119
|
-
s.add_dependency(%q<activeresource>, [">= 2.
|
112
|
+
s.add_dependency(%q<activeresource>, [">= 2.1"])
|
120
113
|
s.add_dependency(%q<activesupport>, [">= 2.1"])
|
121
|
-
s.add_dependency(%q<curb>, [">= 0"])
|
122
|
-
s.add_dependency(%q<hpricot>, [">= 0"])
|
123
114
|
end
|
124
115
|
else
|
125
|
-
s.add_dependency(%q<activeresource>, [">= 2.
|
116
|
+
s.add_dependency(%q<activeresource>, [">= 2.1"])
|
126
117
|
s.add_dependency(%q<activesupport>, [">= 2.1"])
|
127
|
-
s.add_dependency(%q<curb>, [">= 0"])
|
128
|
-
s.add_dependency(%q<hpricot>, [">= 0"])
|
129
118
|
end
|
130
119
|
end
|
data/lib/cachable.rb
CHANGED
@@ -9,9 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# module CachedResource
|
11
11
|
# class Base < ActiveResource::Base
|
12
|
-
#
|
13
|
-
# class ActiveResource::Connection
|
14
|
-
# include Cachable
|
12
|
+
# include ::Cachable
|
15
13
|
# end
|
16
14
|
# end
|
17
15
|
#
|
@@ -23,14 +21,14 @@
|
|
23
21
|
# these stores
|
24
22
|
#
|
25
23
|
# === Configuration examples ('off' is the default):
|
26
|
-
# CachedResource.
|
27
|
-
# CachedResource.
|
28
|
-
# CachedResource.
|
29
|
-
# CachedResource.
|
30
|
-
# CachedResource.
|
24
|
+
# CachedResource.cache_store = ActiveSupport::Cache.lookup_store :memory_store
|
25
|
+
# CachedResource.cache_store = ActiveSupport::Cache.lookup_store :file_store, "/path/to/cache/directory"
|
26
|
+
# CachedResource.cache_store = ActiveSupport::Cache.lookup_store :drb_store, "druby://localhost:9192"
|
27
|
+
# CachedResource.cache_store = ActiveSupport::Cache.lookup_store :mem_cache_store, "localhost"
|
28
|
+
# CachedResource.cache_store = MyOwnStore.new("parameter")
|
31
29
|
#
|
32
30
|
# === If you are using a store that has write options, you can set them
|
33
|
-
# CachedResource.
|
31
|
+
# CachedResource.store_options = { :expires_in => 60.seconds }
|
34
32
|
#
|
35
33
|
# Note: To ensure that caching is turned off, set CachedResource.connection.cache_store = nil
|
36
34
|
#
|
@@ -38,13 +36,16 @@
|
|
38
36
|
|
39
37
|
module Cachable
|
40
38
|
def self.included(base)
|
39
|
+
base.extend ClassMethods
|
41
40
|
base.class_eval do
|
42
|
-
|
43
|
-
|
41
|
+
class << self
|
42
|
+
alias_method_chain :find_every, :cache
|
43
|
+
alias_method_chain :find_single, :cache
|
44
|
+
end
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
module
|
48
|
+
module ClassMethods
|
48
49
|
attr_writer :cache_store, :store_options
|
49
50
|
|
50
51
|
def cache_store
|
@@ -61,9 +62,19 @@ module Cachable
|
|
61
62
|
|
62
63
|
private
|
63
64
|
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
# A little hacky -- we need to intercept the finds, but not get too deep inside the connection
|
66
|
+
def find_every_with_cache(options)
|
67
|
+
return find_every_without_cache(options) unless is_caching?
|
68
|
+
prefix_options, query_options = split_options(options[:params])
|
69
|
+
path = collection_path(prefix_options, query_options)
|
70
|
+
fetch(path) { find_every_without_cache(options)}
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_single_with_cache(scope, options)
|
74
|
+
return find_single_without_cache(scope, options) unless is_caching?
|
75
|
+
prefix_options, query_options = split_options(options[:params])
|
76
|
+
path = element_path(scope, prefix_options, query_options)
|
77
|
+
fetch(path) { find_single_without_cache(scope, options)}
|
67
78
|
end
|
68
79
|
|
69
80
|
def cache_key(*args)
|
data/lib/highrise.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
require 'active_resource'
|
2
|
-
require 'activesupport'
|
3
|
-
require 'active_support/basic_object'
|
4
2
|
|
5
3
|
require File.dirname(__FILE__) + '/highrise/base'
|
6
4
|
require File.dirname(__FILE__) + '/highrise/pagination'
|
7
|
-
require File.dirname(__FILE__) + '/highrise/curly'
|
8
|
-
require File.dirname(__FILE__) + '/highrise/curlhelper'
|
9
5
|
require File.dirname(__FILE__) + '/highrise/taggable'
|
10
6
|
require File.dirname(__FILE__) + '/highrise/subject'
|
11
7
|
require File.dirname(__FILE__) + '/highrise/comment'
|
data/lib/highrise/base.rb
CHANGED
data/lib/highrise/person.rb
CHANGED
data/lib/highrise/taggable.rb
CHANGED
@@ -1,33 +1,17 @@
|
|
1
1
|
module Highrise
|
2
|
-
module Taggable
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
module Taggable
|
3
|
+
def tags
|
4
|
+
self.get(:tags)
|
5
|
+
end
|
6
6
|
def tag!(tag_name)
|
7
7
|
self.post(:tags, :name => tag_name) unless tag_name.blank?
|
8
|
-
end
|
9
|
-
|
8
|
+
end
|
10
9
|
def untag!(tag_name)
|
11
|
-
to_delete = self.tags.find{|t| t
|
12
|
-
self.untag_id!(to_delete
|
13
|
-
end
|
14
|
-
|
10
|
+
to_delete = self.tags.find{|t| t['name'] == tag_name} unless tag_name.blank?
|
11
|
+
self.untag_id!(to_delete['id']) unless to_delete.nil?
|
12
|
+
end
|
15
13
|
def untag_id!(tag_id)
|
16
14
|
self.delete("tags/#{tag_id}")
|
17
15
|
end
|
18
|
-
|
19
|
-
def tags
|
20
|
-
tags = []
|
21
|
-
get_document.search("#show_tags a").each{ |a|
|
22
|
-
tags << Highrise::Tag.new(:id => a['href'].gsub(/.*\//, ''), :name => a.inner_html) if a['class'] == "grey tag"
|
23
|
-
}
|
24
|
-
tags
|
25
|
-
end
|
26
|
-
|
27
|
-
def get_document
|
28
|
-
@curl_helper ||= CurlHelper.new
|
29
|
-
@doc = @curl_helper.get_document_from_id("#{self.class.collection_name}/#{self.id}")
|
30
|
-
end
|
31
|
-
|
32
16
|
end
|
33
17
|
end
|
data/spec/cachable_spec.rb
CHANGED
@@ -3,44 +3,42 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
3
3
|
describe Highrise::Base, "class configuration" do
|
4
4
|
before(:each) do
|
5
5
|
Highrise::Base.site = 'http://example.com.i:3000'
|
6
|
-
@connection = Highrise::Base.connection
|
7
6
|
end
|
8
7
|
|
9
8
|
it "should tell us if caching is active" do
|
10
|
-
|
11
|
-
|
9
|
+
Highrise::Base.cache_store = ActiveSupport::Cache.lookup_store :memory_store
|
10
|
+
Highrise::Base.is_caching?.should == true
|
12
11
|
end
|
13
12
|
|
14
13
|
it "should tell us if caching is not active" do
|
15
|
-
|
16
|
-
|
14
|
+
Highrise::Base.cache_store = nil
|
15
|
+
Highrise::Base.is_caching?.should == false
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
19
|
describe Highrise::Base do
|
21
20
|
before(:all) do
|
22
21
|
Highrise::Base.site = 'http://example.com.i:3000'
|
23
|
-
|
24
|
-
@connection.cache_store = ActiveSupport::Cache.lookup_store :memory_store
|
22
|
+
Highrise::Base.cache_store = ActiveSupport::Cache.lookup_store :memory_store
|
25
23
|
end
|
26
24
|
|
27
25
|
after(:all) do
|
28
|
-
|
26
|
+
Highrise::Base.cache_store = :none
|
29
27
|
end
|
30
28
|
|
31
29
|
before(:each) do
|
32
30
|
@thing = Highrise::Base.new
|
33
31
|
@key = :key
|
34
|
-
|
32
|
+
Highrise::Base.stub!(:cache_key).and_return(@key)
|
35
33
|
end
|
36
34
|
|
37
35
|
context "when a cached response is available" do
|
38
36
|
before(:each) do
|
39
|
-
|
37
|
+
Highrise::Base.cache_store.write(@key, @thing)
|
40
38
|
end
|
41
39
|
|
42
40
|
it "should NOT make a request to the RESTful server" do
|
43
|
-
|
41
|
+
Highrise::Base.should_not_receive(:find_single_without_cache)
|
44
42
|
Highrise::Base.find(1)
|
45
43
|
end
|
46
44
|
|
@@ -51,18 +49,18 @@ describe Highrise::Base do
|
|
51
49
|
|
52
50
|
context "when a cached response is NOT available" do
|
53
51
|
before(:each) do
|
54
|
-
|
52
|
+
Highrise::Base.cache_store.delete(@key)
|
55
53
|
end
|
56
54
|
|
57
55
|
it "SHOULD perform an ARes request" do
|
58
|
-
|
56
|
+
Highrise::Base.should_receive(:find_single_without_cache).and_return(@thing)
|
59
57
|
Highrise::Base.find(1)
|
60
58
|
end
|
61
59
|
|
62
60
|
it "should cache the response using the caching key" do
|
63
|
-
|
61
|
+
Highrise::Base.should_receive(:find_single_without_cache).and_return(@thing)
|
64
62
|
Highrise::Base.find(1)
|
65
|
-
|
63
|
+
Highrise::Base.cache_store.read(@key).should == @thing
|
66
64
|
end
|
67
65
|
end
|
68
66
|
end
|
@@ -4,11 +4,11 @@ describe Highrise::Company do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
Highrise::Base.site = 'http://example.com.i:3000'
|
7
|
-
@company = Highrise::Company.new
|
7
|
+
@company = Highrise::Company.new(:id => 1)
|
8
8
|
returning @tags = [] do
|
9
|
-
@tags <<
|
10
|
-
@tags <<
|
11
|
-
@tags <<
|
9
|
+
@tags << {'id' => "414578", 'name' => "cliente"}
|
10
|
+
@tags << {'id' => "414580", 'name' => "ged"}
|
11
|
+
@tags << {'id' => "414579", 'name' => "iepc"}
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -39,8 +39,7 @@ describe Highrise::Company do
|
|
39
39
|
describe ".tags" do
|
40
40
|
|
41
41
|
it "should return an array of all tags for that company." do
|
42
|
-
|
43
|
-
@company.stub!(:get_document).and_return(Hpricot(File.open(file_path,"r"){|f| f.read}))
|
42
|
+
@company.should_receive(:get).with(:tags).and_return(@tags)
|
44
43
|
@company.tags.should == @tags
|
45
44
|
end
|
46
45
|
|
@@ -49,7 +48,7 @@ describe Highrise::Company do
|
|
49
48
|
describe "tag!(tag_name)" do
|
50
49
|
|
51
50
|
it "should create a tag for this company." do
|
52
|
-
@company.should_receive(:post).with(:tags, :name => "client" ).
|
51
|
+
@company.should_receive(:post).with(:tags, :name => "client" ).and_return(true)
|
53
52
|
@company.tag!("client").should be_true
|
54
53
|
end
|
55
54
|
|
@@ -58,9 +57,8 @@ describe Highrise::Company do
|
|
58
57
|
describe "untag!(tag_name)" do
|
59
58
|
|
60
59
|
it "should delete a tag for this company." do
|
61
|
-
|
62
|
-
@company.
|
63
|
-
@company.should_receive(:delete).with("tags/414578").at_least(1).times.and_return(true)
|
60
|
+
@company.should_receive(:get).with(:tags).and_return(@tags)
|
61
|
+
@company.should_receive(:delete).with("tags/414578").and_return(true)
|
64
62
|
@company.untag!("cliente").should be_true
|
65
63
|
end
|
66
64
|
|
@@ -4,10 +4,10 @@ describe Highrise::Person do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
Highrise::Base.site = 'http://example.com.i:3000'
|
7
|
-
@person = Highrise::Person.new
|
7
|
+
@person = Highrise::Person.new(:id => 1)
|
8
8
|
returning @tags = [] do
|
9
|
-
@tags <<
|
10
|
-
@tags <<
|
9
|
+
@tags << {'id' => "414578", 'name' => "cliente"}
|
10
|
+
@tags << {'id' => "414587", 'name' => "walk"}
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -53,8 +53,7 @@ describe Highrise::Person do
|
|
53
53
|
describe ".tags" do
|
54
54
|
|
55
55
|
it "should return an array of all tags for that user." do
|
56
|
-
|
57
|
-
@person.stub!(:get_document).and_return(Hpricot(File.open(file_path,"r"){|f| f.read}))
|
56
|
+
@person.should_receive(:get).with(:tags).and_return(@tags)
|
58
57
|
@person.tags.should == @tags
|
59
58
|
end
|
60
59
|
|
@@ -63,7 +62,7 @@ describe Highrise::Person do
|
|
63
62
|
describe "tag!(tag_name)" do
|
64
63
|
|
65
64
|
it "should create a tag for this user." do
|
66
|
-
@person.should_receive(:post).with(:tags, :name => "Forum_User" ).
|
65
|
+
@person.should_receive(:post).with(:tags, :name => "Forum_User" ).and_return(true)
|
67
66
|
@person.tag!("Forum_User").should be_true
|
68
67
|
end
|
69
68
|
|
@@ -72,9 +71,8 @@ describe Highrise::Person do
|
|
72
71
|
describe "untag!(tag_name)" do
|
73
72
|
|
74
73
|
it "should delete a tag for this user." do
|
75
|
-
|
76
|
-
@person.
|
77
|
-
@person.should_receive(:delete).with("tags/414578").at_least(1).times.and_return(true)
|
74
|
+
@person.should_receive(:get).with(:tags).and_return(@tags)
|
75
|
+
@person.should_receive(:delete).with("tags/414578").and_return(true)
|
78
76
|
@person.untag!("cliente").should be_true
|
79
77
|
end
|
80
78
|
|