highrise 2.0.1 → 3.0.0
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/Gemfile +3 -0
- data/Gemfile.lock +38 -0
- data/MIT-LICENSE +1 -1
- data/README.mkdn +21 -29
- data/Rakefile +6 -31
- data/autotest/discover.rb +1 -3
- data/examples/config_initializers_highrise.rb +1 -9
- data/examples/sample.rb +0 -1
- data/highrise.gemspec +24 -117
- data/lib/highrise.rb +6 -5
- data/lib/highrise/account.rb +0 -1
- data/lib/highrise/base.rb +15 -3
- data/lib/highrise/comment.rb +1 -2
- data/lib/highrise/company.rb +3 -2
- data/lib/highrise/deal.rb +4 -1
- data/lib/highrise/deal_category.rb +3 -0
- data/lib/highrise/group.rb +1 -2
- data/lib/highrise/kase.rb +13 -2
- data/lib/highrise/membership.rb +1 -2
- data/lib/highrise/pagination.rb +8 -1
- data/lib/highrise/party.rb +11 -0
- data/lib/highrise/person.rb +1 -4
- data/lib/highrise/recording.rb +5 -0
- data/lib/highrise/searchable.rb +22 -0
- data/lib/highrise/subject.rb +6 -0
- data/lib/highrise/tag.rb +0 -5
- data/lib/highrise/taggable.rb +4 -1
- data/lib/highrise/task_category.rb +3 -0
- data/lib/highrise/version.rb +3 -0
- data/spec/highrise/account_spec.rb +5 -11
- data/spec/highrise/base_spec.rb +45 -10
- data/spec/highrise/comment_spec.rb +2 -11
- data/spec/highrise/company_spec.rb +10 -72
- data/spec/highrise/deal_category_spec.rb +13 -0
- data/spec/highrise/deal_spec.rb +16 -13
- data/spec/highrise/email_spec.rb +7 -19
- data/spec/highrise/group_spec.rb +2 -11
- data/spec/highrise/kase_spec.rb +10 -18
- data/spec/highrise/membership_spec.rb +2 -11
- data/spec/highrise/note_spec.rb +8 -17
- data/spec/highrise/pagination_behavior.rb +20 -0
- data/spec/highrise/pagination_spec.rb +4 -6
- data/spec/highrise/party_spec.rb +16 -0
- data/spec/highrise/person_spec.rb +23 -80
- data/spec/highrise/recording_spec.rb +13 -0
- data/spec/highrise/searchable_behavior.rb +13 -0
- data/spec/highrise/searchable_spec.rb +8 -0
- data/spec/highrise/subject_spec.rb +20 -35
- data/spec/highrise/tag_spec.rb +8 -13
- data/spec/highrise/taggable_behavior.rb +27 -0
- data/spec/highrise/taggable_spec.rb +9 -0
- data/spec/highrise/task_category_spec.rb +13 -0
- data/spec/highrise/task_spec.rb +6 -18
- data/spec/highrise/user_spec.rb +11 -28
- data/spec/spec_helper.rb +9 -18
- metadata +55 -42
- data/CHANGELOG +0 -131
- data/VERSION.yml +0 -5
- data/install.rb +0 -1
- data/lib/cachable.rb +0 -83
- data/spec/cachable_spec.rb +0 -84
- data/spec/spec.opts +0 -7
- data/uninstall.rb +0 -1
data/spec/highrise/group_spec.rb
CHANGED
@@ -1,14 +1,5 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Group do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@group = Highrise::Group.new
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should be instance of Highrise::Base" do
|
10
|
-
@group.kind_of?(Highrise::Base).should be_true
|
11
|
-
end
|
12
|
-
|
13
|
-
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
14
5
|
end
|
data/spec/highrise/kase_spec.rb
CHANGED
@@ -1,25 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Kase do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@kase = Highrise::Kase.new
|
7
|
-
end
|
4
|
+
it { should be_a_kind_of Highrise::Subject }
|
8
5
|
|
9
|
-
it "
|
10
|
-
|
6
|
+
it "#close!" do
|
7
|
+
mocked_now = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
8
|
+
Time.should_receive(:now).and_return(mocked_now)
|
9
|
+
subject.should_receive(:update_attribute).with(:closed_at, mocked_now.utc)
|
10
|
+
subject.close!
|
11
11
|
end
|
12
|
-
|
13
|
-
describe ".close!" do
|
14
|
-
|
15
|
-
it "should set close date and save" do
|
16
|
-
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
17
|
-
Time.should_receive(:now).and_return(time)
|
18
|
-
@kase.should_receive(:closed_at=).with(time.utc)
|
19
|
-
@kase.should_receive(:save)
|
20
|
-
@kase.close!
|
21
|
-
end
|
22
12
|
|
13
|
+
it "#open!" do
|
14
|
+
subject.should_receive(:update_attribute).with(:closed_at, nil)
|
15
|
+
subject.open!
|
23
16
|
end
|
24
|
-
|
25
17
|
end
|
@@ -1,14 +1,5 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Membership do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@member = Highrise::Membership.new
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should be instance of Highrise::Base" do
|
10
|
-
@member.kind_of?(Highrise::Base).should be_true
|
11
|
-
end
|
12
|
-
|
13
|
-
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
14
5
|
end
|
data/spec/highrise/note_spec.rb
CHANGED
@@ -1,23 +1,14 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Note do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
Highrise::Base.site = 'http://example.com.i:3000'
|
7
|
-
@note = Highrise::Note.new(:id => 1)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should be instance of Highrise::Base" do
|
11
|
-
@note.kind_of?(Highrise::Base).should be_true
|
12
|
-
end
|
4
|
+
subject { Highrise::Note.new(:id => 1) }
|
13
5
|
|
14
|
-
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
15
7
|
|
16
|
-
|
17
|
-
Highrise::Comment.should_receive(:find).with(:all, {:from=>"/notes/1/comments.xml"}).and_return("comments")
|
18
|
-
@note.comments.should == "comments"
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
8
|
+
it_should_behave_like "a paginated class"
|
22
9
|
|
10
|
+
it "#comments" do
|
11
|
+
Highrise::Comment.should_receive(:find).with(:all, {:from=>"/notes/1/comments.xml"}).and_return("comments")
|
12
|
+
subject.comments.should == "comments"
|
13
|
+
end
|
23
14
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
shared_examples_for "a paginated class" do
|
2
|
+
it { subject.class.included_modules.should include(Highrise::Pagination) }
|
3
|
+
|
4
|
+
it ".find_all_across_pages" do
|
5
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>0}}).and_return(["things"])
|
6
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>1}}).and_return([])
|
7
|
+
subject.class.find_all_across_pages.should == ["things"]
|
8
|
+
end
|
9
|
+
|
10
|
+
it ".find_all_across_pages with zero results" do
|
11
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>0}}).and_return(nil)
|
12
|
+
subject.class.find_all_across_pages.should == []
|
13
|
+
end
|
14
|
+
|
15
|
+
it ".find_all_across_pages_since" do
|
16
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
17
|
+
subject.class.should_receive(:find_all_across_pages).with({:params=>{:since=>"20090114174311"}}).and_return("result")
|
18
|
+
subject.class.find_all_across_pages_since(time).should == "result"
|
19
|
+
end
|
20
|
+
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Pagination do
|
4
|
+
class TestClass < Highrise::Base; include Highrise::Pagination; end
|
5
|
+
subject { TestClass.new }
|
4
6
|
|
5
|
-
|
6
|
-
Highrise::Person.should_receive(:find).with(:all,{:params=>{:n=>0}}).and_return(["people"])
|
7
|
-
Highrise::Person.should_receive(:find).with(:all,{:params=>{:n=>1}}).and_return([])
|
8
|
-
Highrise::Person.find_all_across_pages.should == ["people"]
|
9
|
-
end
|
7
|
+
it_should_behave_like "a paginated class"
|
10
8
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Party do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it ".recently_viewed" do
|
7
|
+
Highrise::Party.should_receive(:find).with(:all, {:from => '/parties/recently_viewed.xml'})
|
8
|
+
Highrise::Party.recently_viewed
|
9
|
+
end
|
10
|
+
|
11
|
+
it ".deletions_since" do
|
12
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
13
|
+
Highrise::Party.should_receive(:find).with(:all, {:from => '/parties/deletions.xml', :params=>{:since=>"20090114174311"}}).and_return("result")
|
14
|
+
Highrise::Party.deletions_since(time).should == "result"
|
15
|
+
end
|
16
|
+
end
|
@@ -1,96 +1,39 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'spec_helper'
|
4
3
|
|
5
4
|
describe Highrise::Person do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
Highrise::Base.site = 'http://example.com.i:3000'
|
9
|
-
@person = Highrise::Person.new(:id => 1)
|
10
|
-
returning @tags = [] do
|
11
|
-
@tags << {'id' => "414578", 'name' => "cliente"}
|
12
|
-
@tags << {'id' => "414587", 'name' => "walk"}
|
13
|
-
end
|
14
|
-
end
|
5
|
+
subject { Highrise::Person.new(:id => 1) }
|
15
6
|
|
16
|
-
it
|
17
|
-
@person.kind_of?(Highrise::Subject).should be_true
|
18
|
-
end
|
19
|
-
|
20
|
-
describe ".find_all_across_pages_since" do
|
21
|
-
|
22
|
-
it "should delegate to find_all_across_pages with correct params" do
|
23
|
-
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
24
|
-
Highrise::Person.should_receive(:find_all_across_pages).with({:params=>{:since=>"20090114174311"}}).and_return("result")
|
25
|
-
Highrise::Person.find_all_across_pages_since(time).should == "result"
|
26
|
-
end
|
7
|
+
it { should be_a_kind_of Highrise::Subject }
|
27
8
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
it "should return nil when doesn't have company_id" do
|
33
|
-
@person.should_receive(:company_id).and_return(nil)
|
34
|
-
@person.company.should be_nil
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should delegate to Highrise::Company when have company_id" do
|
38
|
-
@person.should_receive(:company_id).at_least(2).times.and_return(1)
|
39
|
-
Highrise::Company.should_receive(:find).with(1).and_return("company")
|
40
|
-
@person.company.should == "company"
|
41
|
-
end
|
9
|
+
it_should_behave_like "a paginated class"
|
10
|
+
it_should_behave_like "a taggable class"
|
11
|
+
it_should_behave_like "a searchable class"
|
42
12
|
|
13
|
+
it ".find_all_across_pages_since" do
|
14
|
+
mocked_now = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
15
|
+
Highrise::Person.should_receive(:find_all_across_pages).with({:params=>{:since=>"20090114174311"}}).and_return("result")
|
16
|
+
Highrise::Person.find_all_across_pages_since(mocked_now).should == "result"
|
43
17
|
end
|
44
18
|
|
45
|
-
describe "
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
@person.should_receive(:last_name).and_return("Tapajós ")
|
50
|
-
@person.name.should == "Marcos Tapajós"
|
19
|
+
describe "#company" do
|
20
|
+
it "returns nil when it doesn't have a company" do
|
21
|
+
subject.should_receive(:company_id).and_return(nil)
|
22
|
+
subject.company.should be_nil
|
51
23
|
end
|
52
24
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
it "should return an array of all tags for that user." do
|
58
|
-
@person.should_receive(:get).with(:tags).and_return(@tags)
|
59
|
-
@person.tags.should == @tags
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "tag!(tag_name)" do
|
65
|
-
|
66
|
-
it "should create a tag for this user." do
|
67
|
-
@person.should_receive(:post).with(:tags, :name => "Forum_User" ).and_return(true)
|
68
|
-
@person.tag!("Forum_User").should be_true
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "untag!(tag_name)" do
|
74
|
-
|
75
|
-
it "should delete a tag for this user." do
|
76
|
-
@person.should_receive(:get).with(:tags).and_return(@tags)
|
77
|
-
@person.should_receive(:delete).with("tags/414578").and_return(true)
|
78
|
-
@person.untag!("cliente").should be_true
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
describe ".label" do
|
84
|
-
it "should return 'Party' for label" do
|
85
|
-
@person.label.should == 'Party'
|
25
|
+
it "delegate to Highrise::Company when have company_id" do
|
26
|
+
subject.should_receive(:company_id).at_least(2).times.and_return(1)
|
27
|
+
Highrise::Company.should_receive(:find).with(1).and_return("company")
|
28
|
+
subject.company.should == "company"
|
86
29
|
end
|
87
30
|
end
|
88
31
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
32
|
+
it "#name" do
|
33
|
+
subject.should_receive(:first_name).and_return("Marcos")
|
34
|
+
subject.should_receive(:last_name).and_return("Tapajós ")
|
35
|
+
subject.name.should == "Marcos Tapajós"
|
94
36
|
end
|
95
37
|
|
38
|
+
it { subject.label.should == 'Party' }
|
96
39
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Recording do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it_should_behave_like "a paginated class"
|
7
|
+
|
8
|
+
it ".find_all_across_pages_since" do
|
9
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
10
|
+
Highrise::Recording.should_receive(:find_all_across_pages).with({:params=>{:since=>"20090114174311"}}).and_return("result")
|
11
|
+
Highrise::Recording.find_all_across_pages_since(time).should == "result"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
shared_examples_for "a searchable class" do
|
2
|
+
it { subject.class.included_modules.should include(Highrise::Searchable) }
|
3
|
+
|
4
|
+
it ".search" do
|
5
|
+
find_args = {:from => "/#{subject.class.collection_name}/search.xml", :params => {"criteria[email]" => "john.doe@example.com", "criteria[zip]" => "90210"}}
|
6
|
+
if subject.class.respond_to?(:find_all_across_pages)
|
7
|
+
subject.class.should_receive(:find_all_across_pages).with(find_args)
|
8
|
+
else
|
9
|
+
subject.class.should_receive(:find).with(:all, find_args)
|
10
|
+
end
|
11
|
+
subject.class.search(:email => "john.doe@example.com", :zip => "90210")
|
12
|
+
end
|
13
|
+
end
|
@@ -1,49 +1,34 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Subject do
|
4
|
+
subject { Highrise::Subject.new(:id => 1) }
|
4
5
|
|
5
|
-
|
6
|
-
@subject = Highrise::Subject.new(:id => 1)
|
7
|
-
end
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
8
7
|
|
9
|
-
it "
|
10
|
-
|
8
|
+
it "#notes" do
|
9
|
+
Highrise::Note.should_receive(:find_all_across_pages).with({:from=>"/subjects/1/notes.xml"}).and_return("notes")
|
10
|
+
subject.notes.should == "notes"
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
it "#add_note" do
|
14
|
+
Highrise::Note.should_receive(:create).with({:body=>"body", :subject_id=>1, :subject_type=>'Subject'}).and_return(mock('note'))
|
15
|
+
subject.add_note :body=>'body'
|
17
16
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@subject.add_note :body=>'body'
|
23
|
-
end
|
17
|
+
|
18
|
+
it "#add_task" do
|
19
|
+
Highrise::Task.should_receive(:create).with({:body=>"body", :subject_id=>1, :subject_type=>'Subject'}).and_return(mock('task'))
|
20
|
+
subject.add_task :body=>'body'
|
24
21
|
end
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@subject.emails.should == "emails"
|
30
|
-
end
|
23
|
+
it "#emails" do
|
24
|
+
Highrise::Email.should_receive(:find_all_across_pages).with({:from=>"/subjects/1/emails.xml"}).and_return("emails")
|
25
|
+
subject.emails.should == "emails"
|
31
26
|
end
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
it "should delegate to Highrise::Task with correct params" do
|
37
|
-
Highrise::Task.should_receive(:find).with(:all, {:from=>"/subjects/1/tasks.xml"}).and_return("tasks")
|
38
|
-
@subject.upcoming_tasks.should == "tasks"
|
39
|
-
end
|
40
|
-
|
28
|
+
it "#upcoming_tasks" do
|
29
|
+
Highrise::Task.should_receive(:find).with(:all, {:from=>"/subjects/1/tasks.xml"}).and_return("tasks")
|
30
|
+
subject.upcoming_tasks.should == "tasks"
|
41
31
|
end
|
42
32
|
|
43
|
-
|
44
|
-
it "should return the class name as a string" do
|
45
|
-
@subject.label.should == "Subject"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
33
|
+
it { subject.label.should == "Subject" }
|
49
34
|
end
|
data/spec/highrise/tag_spec.rb
CHANGED
@@ -1,23 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Highrise::Tag do
|
4
|
-
|
5
|
-
Highrise::Base.site = 'http://example.com.i/'
|
6
|
-
@tag = Highrise::Tag.new(:id => 1, :name => "Name")
|
7
|
-
end
|
4
|
+
subject { Highrise::Tag.new(:id => 1, :name => "Name") }
|
8
5
|
|
9
|
-
it
|
10
|
-
@tag.kind_of?(Highrise::Base).should be_true
|
11
|
-
end
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
12
7
|
|
13
|
-
it "
|
8
|
+
it "supports equality" do
|
14
9
|
tag = Highrise::Tag.new(:id => 1, :name => "Name")
|
15
|
-
|
10
|
+
subject.should == tag
|
16
11
|
end
|
17
12
|
|
18
|
-
it "
|
13
|
+
it ".find_by_name" do
|
19
14
|
tag = Highrise::Tag.new(:id => 2, :name => "Next")
|
20
|
-
Highrise::Tag.should_receive(:find).with(:all).and_return([tag,
|
21
|
-
Highrise::Tag.find_by_name("Name").should ==
|
15
|
+
Highrise::Tag.should_receive(:find).with(:all).and_return([tag, subject])
|
16
|
+
Highrise::Tag.find_by_name("Name").should == subject
|
22
17
|
end
|
23
18
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
shared_examples_for "a taggable class" do
|
2
|
+
before(:each) do
|
3
|
+
(@tags = []).tap do
|
4
|
+
@tags << {'id' => "414578", 'name' => "cliente"}
|
5
|
+
@tags << {'id' => "414580", 'name' => "ged"}
|
6
|
+
@tags << {'id' => "414579", 'name' => "iepc"}
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it { subject.class.included_modules.should include(Highrise::Taggable) }
|
11
|
+
|
12
|
+
it "#tags" do
|
13
|
+
subject.should_receive(:get).with(:tags).and_return(@tags)
|
14
|
+
subject.tags.should == @tags
|
15
|
+
end
|
16
|
+
|
17
|
+
it "#tag!(tag_name)" do
|
18
|
+
subject.should_receive(:post).with(:tags, :name => "client" ).and_return(true)
|
19
|
+
subject.tag!("client").should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "#untag!(tag_name)" do
|
23
|
+
subject.should_receive(:get).with(:tags).and_return(@tags)
|
24
|
+
subject.should_receive(:delete).with("tags/414578").and_return(true)
|
25
|
+
subject.untag!("cliente").should be_true
|
26
|
+
end
|
27
|
+
end
|