basecrm 0.0.3 → 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5944afdba7dc0d91c937ab939bb6e1fb019e058f
4
+ data.tar.gz: a1939878b665013a2a9591beea66f448e0b17a78
5
+ SHA512:
6
+ metadata.gz: 2d5710f54131a3461b6c7ae51fda0bf8e1f83bc8366e0406a2b901acb1853a6520b903b3c2cdfd24feea9c6362d520bbca213abb55cdc9c0f6a3b914e0d429b9
7
+ data.tar.gz: 1e537e6befde7c148eb1c570cd602bc1abcd067c2594b06c45a374e516cacb56b19eab9443438f3ec716a0f1832341b6db67d46b631d5120fdcefeb765f69594
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - rbx-18mode
6
+ - rbx-19mode
7
+ script: "bundle exec rspec"
data/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in base_crm.gemspec
4
4
  gemspec
5
5
 
6
6
  gem "rspec"
7
7
  gem "simplecov"
8
+ gem "rake"
8
9
 
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Base CRM API client
2
2
 
3
+ [![Build Status](https://travis-ci.org/basecrm/basecrm.png?branch=master)](https://travis-ci.org/basecrm/basecrm)
4
+
3
5
  New and shiny client for the Base CRM API
4
6
 
5
7
  NOTE: This is still a very early release. There might be a lot of
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
data/basecrm.gemspec CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../lib/base_crm/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Marcin Bunsch"]
6
- gem.email = ["marcin@futuresimple.com"]
6
+ gem.email = ["marcin@getbase.com"]
7
7
  gem.description = %q{Base CRM API Client}
8
8
  gem.summary = %q{Base CRM API Client}
9
9
  gem.homepage = "https://github.com/basecrm/basecrm"
data/lib/base_crm.rb CHANGED
@@ -5,19 +5,20 @@ require "base_crm/api_client_ext"
5
5
 
6
6
  module BaseCrm
7
7
 
8
- autoload :Account, "base_crm/account"
9
- autoload :Contact, "base_crm/contact"
10
- autoload :Session, "base_crm/session"
11
- autoload :Deal, "base_crm/deal"
12
- autoload :Forecasting, "base_crm/forecasting"
13
- autoload :Source, "base_crm/source"
14
- autoload :Resource, "base_crm/resource"
15
- autoload :Note, "base_crm/note"
16
- autoload :Noteable, "base_crm/noteable"
17
- autoload :Task, "base_crm/task"
18
- autoload :Taskable, "base_crm/taskable"
19
- autoload :Lead, "base_crm/lead"
20
- autoload :CustomFieldable, "base_crm/custom_fieldable"
8
+ autoload :RelatedObjectScope, "base_crm/related_object_scope"
9
+ autoload :Account, "base_crm/account"
10
+ autoload :Contact, "base_crm/contact"
11
+ autoload :Session, "base_crm/session"
12
+ autoload :Deal, "base_crm/deal"
13
+ autoload :Forecasting, "base_crm/forecasting"
14
+ autoload :Source, "base_crm/source"
15
+ autoload :Resource, "base_crm/resource"
16
+ autoload :Note, "base_crm/note"
17
+ autoload :Noteable, "base_crm/noteable"
18
+ autoload :Task, "base_crm/task"
19
+ autoload :Taskable, "base_crm/taskable"
20
+ autoload :Lead, "base_crm/lead"
21
+ autoload :CustomFieldable, "base_crm/custom_fieldable"
21
22
 
22
23
  end
23
24
 
@@ -2,18 +2,12 @@ module BaseCrm
2
2
  module Noteable
3
3
 
4
4
  def notes
5
- pass_headers(Note).params({
6
- :noteable_type => self.noteable_type,
7
- :noteable_id => self.id
8
- })
5
+ @notes ||= BaseCrm::RelatedObjectScope.new(self, Note, :noteable)
9
6
  end
10
7
 
8
+ # Keeping it for legacy purposes
11
9
  def create_note(message)
12
- pass_headers(Note).create({
13
- :content => message,
14
- :noteable_type => self.noteable_type,
15
- :noteable_id => self.id
16
- })
10
+ notes.create(:content => message)
17
11
  end
18
12
 
19
13
  end
@@ -0,0 +1,35 @@
1
+ require "delegate"
2
+ module BaseCrm
3
+
4
+ class RelatedObjectScope < SimpleDelegator
5
+
6
+ attr_accessor :object, :subobject, :type
7
+
8
+ def initialize(object, subobject, key, type = nil)
9
+ @object = object
10
+ @subobject = subobject
11
+ @type = type || object.class.name.split('::').last
12
+ @type_key = "#{key}_type".to_sym
13
+ @id_key = "#{key}_id".to_sym
14
+ super(subobject_scope)
15
+ end
16
+
17
+ def subobject_scope
18
+ @subobject_scope ||= object.pass_headers(subobject).params(type_and_id_scope)
19
+ end
20
+
21
+ def create(params)
22
+ subobject_scope.create(type_and_id_scope.merge(params))
23
+ end
24
+
25
+ def type_and_id_scope
26
+ {
27
+ @type_key => type,
28
+ @id_key => object.id
29
+ }
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
@@ -2,17 +2,12 @@ module BaseCrm
2
2
  module Taskable
3
3
 
4
4
  def tasks
5
- pass_headers(Task).params({
6
- :taskable_type => self.taskable_type,
7
- :taskable_id => self.id
8
- })
5
+ @tasks ||= BaseCrm::RelatedObjectScope.new(self, Task, :taskable)
9
6
  end
10
7
 
8
+ # Keeping it for legacy purposes
11
9
  def create_task(params)
12
- pass_headers(Task).create({
13
- :taskable_type => self.taskable_type,
14
- :taskable_id => self.id
15
- }.merge(params))
10
+ tasks.create(params)
16
11
  end
17
12
 
18
13
  end
@@ -1,3 +1,3 @@
1
1
  module BaseCrm
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -42,8 +42,8 @@ describe BaseCrm::Contact do
42
42
  end
43
43
 
44
44
  describe ".fetch_for_deal" do
45
- let(:scope) { mock }
46
- let(:deal) { mock(:id => 444) }
45
+ let(:scope) { double }
46
+ let(:deal) { double(:id => 444) }
47
47
 
48
48
  it "returns the scope" do
49
49
  BaseCrm::Contact.should_receive(:scope).and_return(scope)
@@ -58,8 +58,8 @@ describe BaseCrm::Contact do
58
58
  end
59
59
 
60
60
  describe "#notes" do
61
- let(:scope) { mock }
62
- let(:fetch_scope) { mock }
61
+ let(:scope) { double }
62
+ let(:fetch_scope) { double }
63
63
 
64
64
  it "passes the token and applies the params" do
65
65
  subject.
@@ -43,9 +43,9 @@ describe BaseCrm::Deal do
43
43
 
44
44
  describe "#source" do
45
45
 
46
- let(:source) { mock }
46
+ let(:source) { double }
47
47
  let(:source_id) { 444 }
48
- let(:scope) { mock }
48
+ let(:scope) { double }
49
49
 
50
50
  before do
51
51
  subject.source_id = source_id
@@ -87,9 +87,9 @@ describe BaseCrm::Deal do
87
87
 
88
88
  describe "#contact" do
89
89
 
90
- let(:contact) { mock }
91
- let(:entity_id) { mock }
92
- let(:scope) { mock }
90
+ let(:contact) { double }
91
+ let(:entity_id) { double }
92
+ let(:scope) { double }
93
93
 
94
94
  before do
95
95
  subject.entity_id = entity_id
@@ -120,8 +120,8 @@ describe BaseCrm::Deal do
120
120
  end
121
121
 
122
122
  describe "#contacts" do
123
- let(:scope) { mock }
124
- let(:fetch_scope) { mock }
123
+ let(:scope) { double }
124
+ let(:fetch_scope) { double }
125
125
 
126
126
  it "passes the token and users fetch_for_deal" do
127
127
  subject.should_receive(:pass_headers).with(BaseCrm::Contact).and_return(scope)
@@ -131,8 +131,8 @@ describe BaseCrm::Deal do
131
131
  end
132
132
 
133
133
  describe "#forecasting" do
134
- let(:scope) { mock }
135
- let(:fetch_scope) { mock }
134
+ let(:scope) { double }
135
+ let(:fetch_scope) { double }
136
136
 
137
137
  it "passes the token and uses fetch_for_deal" do
138
138
  subject.should_receive(:pass_headers).with(BaseCrm::Forecasting).and_return(scope)
@@ -17,9 +17,9 @@ describe BaseCrm::Forecasting do
17
17
  end
18
18
 
19
19
  describe ".fetch_for_deal" do
20
- let(:scope) { mock }
21
- let(:deal) { mock(:id => 444) }
22
- let(:result) { mock }
20
+ let(:scope) { double }
21
+ let(:deal) { double(:id => 444) }
22
+ let(:result) { double }
23
23
 
24
24
  it "returns the scope" do
25
25
  BaseCrm::Forecasting.should_receive(:scope).and_return(scope)
@@ -36,7 +36,7 @@ describe BaseCrm::Lead do
36
36
  end
37
37
 
38
38
  context "collection" do
39
- let(:items) { mock }
39
+ let(:items) { double }
40
40
  let(:response) do
41
41
  { "items" => items }
42
42
  end
@@ -9,11 +9,11 @@ describe BaseCrm::Resource do
9
9
  describe "#pass_headers" do
10
10
  let(:instance) { ResourceMixinTestClass.headers(headers).build_one({}) }
11
11
  let(:token_name) { BaseCrm.config.token_name }
12
- let(:token) { mock }
12
+ let(:token) { double }
13
13
  let(:headers) do
14
14
  { token_name => token }
15
15
  end
16
- let(:other_klass) { mock }
16
+ let(:other_klass) { double }
17
17
 
18
18
  it "copies the token header from the original scope" do
19
19
  other_klass.should_receive(:headers).with(token_name => token)
@@ -9,8 +9,8 @@ describe BaseCrm::Session do
9
9
  end
10
10
 
11
11
  describe "passing of headers" do
12
- let(:scope) { mock }
13
- let(:scope_class) { mock }
12
+ let(:scope) { double }
13
+ let(:scope_class) { double }
14
14
 
15
15
  before do
16
16
  scope_class.should_receive(:headers).with({
@@ -1,9 +1,9 @@
1
1
  shared_examples "noteable" do |noteable_type|
2
2
 
3
- let(:scope) { mock }
3
+ let(:scope) { double }
4
4
 
5
5
  describe "#notes" do
6
- let(:fetch_scope) { mock }
6
+ let(:fetch_scope) { double }
7
7
 
8
8
  it "passes the token and applies the params" do
9
9
  subject.
@@ -20,20 +20,41 @@ shared_examples "noteable" do |noteable_type|
20
20
 
21
21
  end
22
22
 
23
- describe "#create_note" do
23
+ describe "#notes.create" do
24
24
  let(:message) { mock }
25
25
  let(:note) { mock }
26
+ let(:fetch_scope) { mock }
26
27
 
27
- it "creates a new note" do
28
+ it "passes the token and applies the params" do
28
29
  subject.
29
30
  should_receive(:pass_headers).
30
31
  with(BaseCrm::Note).
31
32
  and_return(scope)
33
+ scope.should_receive(:params).
34
+ with({
35
+ :noteable_type => noteable_type,
36
+ :noteable_id => subject.id
37
+ }).and_return(scope)
32
38
  scope.should_receive(:create).with({
33
39
  :content => message,
34
40
  :noteable_type => noteable_type,
35
41
  :noteable_id => subject.id
36
42
  }).and_return(note)
43
+ subject.notes.create(:content => message).should == note
44
+ end
45
+
46
+ end
47
+
48
+ describe "#create_note" do
49
+ let(:message) { mock }
50
+ let(:notes) { mock }
51
+ let(:note) { mock }
52
+
53
+ it "creates a new note" do
54
+ subject.should_receive(:notes).and_return(notes)
55
+ notes.should_receive(:create).with({
56
+ :content => message
57
+ }).and_return(note)
37
58
  subject.create_note(message).should == note
38
59
  end
39
60
 
@@ -1,9 +1,9 @@
1
1
  shared_examples "taskable" do |taskable_type|
2
2
 
3
- let(:scope) { mock }
3
+ let(:scope) { double }
4
4
 
5
5
  describe "#tasks" do
6
- let(:fetch_scope) { mock }
6
+ let(:fetch_scope) { double }
7
7
 
8
8
  it "passes the token and applies the params" do
9
9
  subject.
@@ -20,18 +20,23 @@ shared_examples "taskable" do |taskable_type|
20
20
 
21
21
  end
22
22
 
23
- describe "#create_task" do
23
+ describe "#tasks.create" do
24
24
  let(:params) do
25
25
  { :content => task_content }
26
26
  end
27
- let(:task_content) { mock }
28
- let(:task) { mock }
27
+ let(:task_content) { double }
28
+ let(:task) { double }
29
29
 
30
30
  it "creates a new task" do
31
31
  subject.
32
32
  should_receive(:pass_headers).
33
33
  with(BaseCrm::Task).
34
34
  and_return(scope)
35
+ scope.should_receive(:params).
36
+ with({
37
+ :taskable_type => taskable_type,
38
+ :taskable_id => subject.id
39
+ }).and_return(scope)
35
40
  scope.should_receive(:create).with({
36
41
  :content => task_content,
37
42
  :taskable_type => taskable_type,
@@ -39,6 +44,23 @@ shared_examples "taskable" do |taskable_type|
39
44
  }).and_return(task)
40
45
  subject.create_task(params).should == task
41
46
  end
47
+ end
48
+
49
+ describe "#create_task" do
50
+ let(:params) do
51
+ { :content => task_content }
52
+ end
53
+ let(:task_content) { mock }
54
+ let(:tasks) { mock }
55
+ let(:task) { mock }
56
+
57
+ it "creates a new task" do
58
+ subject.should_receive(:tasks).and_return(tasks)
59
+ tasks.should_receive(:create).with({
60
+ :content => task_content
61
+ }).and_return(task)
62
+ subject.create_task(params).should == task
63
+ end
42
64
 
43
65
  end
44
66
 
metadata CHANGED
@@ -1,41 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basecrm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Marcin Bunsch
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-20 00:00:00.000000000 Z
11
+ date: 2013-10-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: api_client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.4.2
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.4.2
30
27
  description: Base CRM API Client
31
28
  email:
32
- - marcin@futuresimple.com
29
+ - marcin@getbase.com
33
30
  executables: []
34
31
  extensions: []
35
32
  extra_rdoc_files: []
36
33
  files:
37
34
  - .gitignore
38
35
  - .rspec
36
+ - .travis.yml
39
37
  - Gemfile
40
38
  - LICENSE
41
39
  - README.md
@@ -52,6 +50,7 @@ files:
52
50
  - lib/base_crm/lead.rb
53
51
  - lib/base_crm/note.rb
54
52
  - lib/base_crm/noteable.rb
53
+ - lib/base_crm/related_object_scope.rb
55
54
  - lib/base_crm/resource.rb
56
55
  - lib/base_crm/session.rb
57
56
  - lib/base_crm/source.rb
@@ -74,27 +73,26 @@ files:
74
73
  - spec/support/taskable_shared_examples.rb
75
74
  homepage: https://github.com/basecrm/basecrm
76
75
  licenses: []
76
+ metadata: {}
77
77
  post_install_message:
78
78
  rdoc_options: []
79
79
  require_paths:
80
80
  - lib
81
81
  required_ruby_version: !ruby/object:Gem::Requirement
82
- none: false
83
82
  requirements:
84
- - - ! '>='
83
+ - - '>='
85
84
  - !ruby/object:Gem::Version
86
85
  version: '0'
87
86
  required_rubygems_version: !ruby/object:Gem::Requirement
88
- none: false
89
87
  requirements:
90
- - - ! '>='
88
+ - - '>='
91
89
  - !ruby/object:Gem::Version
92
90
  version: '0'
93
91
  requirements: []
94
92
  rubyforge_project:
95
- rubygems_version: 1.8.25
93
+ rubygems_version: 2.0.5
96
94
  signing_key:
97
- specification_version: 3
95
+ specification_version: 4
98
96
  summary: Base CRM API Client
99
97
  test_files:
100
98
  - spec/base_crm/account_spec.rb
@@ -110,4 +108,3 @@ test_files:
110
108
  - spec/spec_helper.rb
111
109
  - spec/support/noteable_shared_examples.rb
112
110
  - spec/support/taskable_shared_examples.rb
113
- has_rdoc: