sugarcrm 0.9.14 → 0.9.15
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.rdoc +9 -8
- data/VERSION +1 -1
- data/lib/sugarcrm/attributes/attribute_methods.rb +11 -0
- data/lib/sugarcrm/attributes/attribute_validations.rb +2 -2
- data/lib/sugarcrm/session.rb +5 -4
- data/sugarcrm.gemspec +5 -5
- data/test/connection/test_get_entry_list.rb +4 -3
- data/test/connection/test_get_module_fields.rb +2 -2
- data/test/helper.rb +1 -0
- data/test/test_finders.rb +5 -5
- data/test/test_session.rb +4 -2
- data/test/test_sugarcrm.rb +11 -3
- metadata +4 -4
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -11,12 +11,13 @@ A less clunky way to interact with SugarCRM via REST.
|
|
11
11
|
== FEATURES/PROBLEMS:
|
12
12
|
|
13
13
|
* Works with all v2 API calls
|
14
|
-
* Supports
|
14
|
+
* Supports Rails 2 and 3
|
15
|
+
* ActiveRecord style finders and objects
|
16
|
+
* Supports creation, saving, and deletion of SugarCRM specific objects
|
17
|
+
* Flexible extension framework
|
15
18
|
* Validations, typecasting, and serialization of boolean, date, and integer fields
|
16
|
-
* Query, update and delete records from collections
|
17
|
-
*
|
18
|
-
* Auto-generation of SugarCRM specific objects. When a connection is established, get_available_modules is called and the resultant modules are turned into SugarCRM::Module classes.
|
19
|
-
* If you want to use the vanilla API, you can access the methods directly on the SugarCRM.connection object.
|
19
|
+
* Query, update and delete records from collections
|
20
|
+
* Access API methods directly on the SugarCRM.connection object
|
20
21
|
|
21
22
|
== SYNOPSIS:
|
22
23
|
|
@@ -164,7 +165,7 @@ A less clunky way to interact with SugarCRM via REST.
|
|
164
165
|
|
165
166
|
== USING THE GEM WITH RAILS 3
|
166
167
|
|
167
|
-
Note: this gem
|
168
|
+
Note: this gem works with Active Support >= 2.3.10, but is optimized for Rails 3.
|
168
169
|
|
169
170
|
1. Add the sugarcrm gem to your Gemfile (sugarcrm gem version >= 0.9.12)
|
170
171
|
2. Run `bundle install`
|
@@ -245,7 +246,7 @@ To disconnect an active session:
|
|
245
246
|
|
246
247
|
== REQUIREMENTS:
|
247
248
|
|
248
|
-
* activesupport >= 3.
|
249
|
+
* activesupport >= 2.3.10
|
249
250
|
* i18n
|
250
251
|
* json
|
251
252
|
|
@@ -271,4 +272,4 @@ Put your credentials in a file called `test/config.yaml` (which you will have to
|
|
271
272
|
|
272
273
|
== Copyright
|
273
274
|
|
274
|
-
Copyright (c)
|
275
|
+
Copyright (c) 2011 Carl Hicks. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.15
|
@@ -124,6 +124,17 @@ module SugarCRM; module AttributeMethods
|
|
124
124
|
end
|
125
125
|
?
|
126
126
|
end
|
127
|
+
|
128
|
+
# return the (polymorphic) parent record corresponding to the parent_id and parent_type attributes
|
129
|
+
# (an example of parent polymorphism can be found in the Note module)
|
130
|
+
if (@attributes.keys.include? 'parent_id') && (@attributes.keys.include? 'parent_type')
|
131
|
+
self.class.module_eval %Q?
|
132
|
+
def parent
|
133
|
+
(self.class.session.namespace_const.const_get @attributes['parent_type'].singularize).find(@attributes['parent_id'])
|
134
|
+
end
|
135
|
+
?
|
136
|
+
end
|
137
|
+
|
127
138
|
self.class.attribute_methods_generated = true
|
128
139
|
end
|
129
140
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module SugarCRM; module AttributeValidations
|
2
2
|
# Checks to see if we have all the neccessary attributes
|
3
3
|
def valid?
|
4
|
-
@errors = ActiveSupport::HashWithIndifferentAccess.new
|
4
|
+
@errors = (defined?(HashWithIndifferentAccess) ? HashWithIndifferentAccess : ActiveSupport::HashWithIndifferentAccess).new
|
5
5
|
|
6
6
|
self.class._module.required_fields.each do |attribute|
|
7
7
|
valid_attribute?(attribute)
|
@@ -59,4 +59,4 @@ module SugarCRM; module AttributeValidations
|
|
59
59
|
@errors[attribute] = @errors[attribute] << message unless @errors[attribute].include? message
|
60
60
|
@errors
|
61
61
|
end
|
62
|
-
end; end
|
62
|
+
end; end
|
data/lib/sugarcrm/session.rb
CHANGED
@@ -102,10 +102,11 @@ module SugarCRM; class Session
|
|
102
102
|
end
|
103
103
|
|
104
104
|
# load credentials from file, and (re)connect to SugarCRM
|
105
|
-
def load_config(path)
|
105
|
+
def load_config(path, opts = {})
|
106
|
+
opts.reverse_merge! :reconnect => true
|
106
107
|
new_config = self.class.parse_config_file(path)
|
107
|
-
|
108
|
-
reconnect(@config[:base_url], @config[:username], @config[:password]) if connection_info_loaded?
|
108
|
+
update_config(new_config[:config]) if new_config and new_config[:config]
|
109
|
+
reconnect(@config[:base_url], @config[:username], @config[:password]) if opts[:reconnect] and connection_info_loaded?
|
109
110
|
@config
|
110
111
|
end
|
111
112
|
|
@@ -207,4 +208,4 @@ module SugarCRM; class Session
|
|
207
208
|
result[:wait_timeout] = wait_timeout if wait_timeout
|
208
209
|
result
|
209
210
|
end
|
210
|
-
end; end
|
211
|
+
end; end
|
data/sugarcrm.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sugarcrm}
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.15"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Carl Hicks", "David Sulc"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-18}
|
13
13
|
s.default_executable = %q{sugarcrm}
|
14
14
|
s.email = %q{carl.hicks@gmail.com}
|
15
15
|
s.executables = ["sugarcrm"]
|
@@ -117,14 +117,14 @@ Gem::Specification.new do |s|
|
|
117
117
|
s.specification_version = 3
|
118
118
|
|
119
119
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
120
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 3.
|
120
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.3.10"])
|
121
121
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
122
122
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
123
123
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
124
124
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
125
125
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
126
126
|
else
|
127
|
-
s.add_dependency(%q<activesupport>, [">= 3.
|
127
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.10"])
|
128
128
|
s.add_dependency(%q<i18n>, [">= 0"])
|
129
129
|
s.add_dependency(%q<json>, [">= 0"])
|
130
130
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
@@ -132,7 +132,7 @@ Gem::Specification.new do |s|
|
|
132
132
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
133
133
|
end
|
134
134
|
else
|
135
|
-
s.add_dependency(%q<activesupport>, [">= 3.
|
135
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.10"])
|
136
136
|
s.add_dependency(%q<i18n>, [">= 0"])
|
137
137
|
s.add_dependency(%q<json>, [">= 0"])
|
138
138
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
@@ -2,12 +2,13 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestGetEntryList < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
should "return a list of entries when sent #get_entry_list
|
5
|
+
should "return a list of entries when sent #get_entry_list" do
|
6
6
|
users = SugarCRM.connection.get_entry_list(
|
7
7
|
"Users",
|
8
8
|
"users.deleted = 0"
|
9
9
|
)
|
10
|
-
|
10
|
+
assert_kind_of Array, users
|
11
|
+
assert_equal SugarCRM.config[:username], users.first.user_name
|
11
12
|
end
|
12
13
|
should "return an object when #get_entry_list" do
|
13
14
|
@response = SugarCRM.connection.get_entry_list(
|
@@ -19,4 +20,4 @@ class TestGetEntryList < ActiveSupport::TestCase
|
|
19
20
|
assert_instance_of SugarCRM::User, @response[0]
|
20
21
|
end
|
21
22
|
end
|
22
|
-
end
|
23
|
+
end
|
@@ -4,8 +4,8 @@ class TestModuleFields < ActiveSupport::TestCase
|
|
4
4
|
context "A SugarCRM.connection" do
|
5
5
|
should "return a hash of module fields when #get_module_fields" do
|
6
6
|
fields = SugarCRM.connection.get_module_fields("Users")
|
7
|
-
|
7
|
+
assert_kind_of Hash, fields
|
8
8
|
assert "address_city", fields.keys[0]
|
9
9
|
end
|
10
10
|
end
|
11
|
-
end
|
11
|
+
end
|
data/test/helper.rb
CHANGED
data/test/test_finders.rb
CHANGED
@@ -5,9 +5,9 @@ class TestFinders < ActiveSupport::TestCase
|
|
5
5
|
should "always return an Array when :all" do
|
6
6
|
users = SugarCRM::User.all(:limit => 10)
|
7
7
|
assert_instance_of Array, users
|
8
|
-
users = SugarCRM::User.find(:all, :conditions => {:user_name =>
|
8
|
+
users = SugarCRM::User.find(:all, :conditions => {:user_name => "= #{users.first.user_name}"})
|
9
9
|
assert_instance_of Array, users
|
10
|
-
|
10
|
+
assert_equal 1, users.length
|
11
11
|
users = SugarCRM::User.find(:all, :conditions => {:user_name => '= invalid_user_123'})
|
12
12
|
assert_instance_of Array, users
|
13
13
|
assert users.length == 0
|
@@ -101,12 +101,12 @@ class TestFinders < ActiveSupport::TestCase
|
|
101
101
|
|
102
102
|
should "receive a response containing all fields when sent #get_entry" do
|
103
103
|
u = SugarCRM::User.find(1)
|
104
|
-
|
104
|
+
assert_not_nil u.user_name
|
105
105
|
end
|
106
106
|
|
107
107
|
should "return an array of records when sent #find([id1, id2, id3])" do
|
108
108
|
users = SugarCRM::User.find(["seed_sarah_id", 1])
|
109
|
-
|
109
|
+
assert_not_nil users.last.user_name
|
110
110
|
end
|
111
111
|
|
112
112
|
# test Base#find_by_sql edge case
|
@@ -198,4 +198,4 @@ class TestFinders < ActiveSupport::TestCase
|
|
198
198
|
assert a.delete
|
199
199
|
end
|
200
200
|
end
|
201
|
-
end
|
201
|
+
end
|
data/test/test_session.rb
CHANGED
@@ -15,6 +15,7 @@ CONFIG_CONTENTS.freeze
|
|
15
15
|
class TestSession < ActiveSupport::TestCase
|
16
16
|
context "The SugarCRM::Session class" do
|
17
17
|
should "raise SugarCRM::MissingCredentials if at least one of url/username/password is missing" do
|
18
|
+
|
18
19
|
assert_raise(SugarCRM::MissingCredentials){ SugarCRM.connect('http://127.0.0.1/sugarcrm', nil, nil) }
|
19
20
|
end
|
20
21
|
|
@@ -33,7 +34,7 @@ class TestSession < ActiveSupport::TestCase
|
|
33
34
|
end
|
34
35
|
|
35
36
|
should "parse config parameters from a file" do
|
36
|
-
assert_equal CONFIG_CONTENTS, SugarCRM::Session.parse_config_file(
|
37
|
+
assert_equal CONFIG_CONTENTS, SugarCRM::Session.parse_config_file(CONFIG_TEST_PATH)
|
37
38
|
end
|
38
39
|
|
39
40
|
should "create a session from a config file" do
|
@@ -59,8 +60,9 @@ class TestSession < ActiveSupport::TestCase
|
|
59
60
|
end
|
60
61
|
|
61
62
|
should "load config file" do
|
62
|
-
SugarCRM.load_config CONFIG_TEST_PATH
|
63
|
+
SugarCRM.load_config CONFIG_TEST_PATH, :reconnect => false
|
63
64
|
CONFIG_CONTENTS[:config].each{|k,v| assert_equal v, SugarCRM.config[k]}
|
65
|
+
SugarCRM.load_config CONFIG_PATH
|
64
66
|
end
|
65
67
|
|
66
68
|
should "be able to disconnect, and log in to Sugar automatically if credentials are present in config file" do
|
data/test/test_sugarcrm.rb
CHANGED
@@ -13,7 +13,7 @@ class TestSugarCRM < ActiveSupport::TestCase
|
|
13
13
|
|
14
14
|
should "implement self.count" do
|
15
15
|
nb_accounts = SugarCRM::Account.count
|
16
|
-
assert nb_accounts > 0
|
16
|
+
assert nb_accounts > 0, "There should be some Accounts"
|
17
17
|
nb_inc_accounts = nil
|
18
18
|
assert_nothing_raised do
|
19
19
|
nb_inc_accounts = SugarCRM::Account.count(:conditions => {:name => "LIKE '%Inc'"})
|
@@ -38,7 +38,7 @@ class TestSugarCRM < ActiveSupport::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
should "return the module fields" do
|
41
|
-
|
41
|
+
assert_kind_of Hash, SugarCRM::Account._module.fields
|
42
42
|
end
|
43
43
|
|
44
44
|
should "respond to self#methods" do
|
@@ -59,7 +59,7 @@ class TestSugarCRM < ActiveSupport::TestCase
|
|
59
59
|
end
|
60
60
|
|
61
61
|
should "respond to self.attributes_from_modules_fields" do
|
62
|
-
|
62
|
+
assert_kind_of Hash, SugarCRM::User.attributes_from_module
|
63
63
|
end
|
64
64
|
|
65
65
|
should "return an instance of itself when #new" do
|
@@ -189,4 +189,12 @@ class TestSugarCRM < ActiveSupport::TestCase
|
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
|
+
context "A SugarCRM::Note instance" do
|
193
|
+
should "return the correct parent record with the `parent` method" do
|
194
|
+
note = SugarCRM::Note.first
|
195
|
+
parent = note.parent
|
196
|
+
assert_equal note.parent_id, parent.id
|
197
|
+
assert_equal note.parent_type.singularize, parent.class.to_s.split('::').last
|
198
|
+
end
|
199
|
+
end
|
192
200
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: sugarcrm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.9.
|
5
|
+
version: 0.9.15
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Carl Hicks
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-05-
|
14
|
+
date: 2011-05-18 00:00:00 -07:00
|
15
15
|
default_executable: sugarcrm
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 3.
|
24
|
+
version: 2.3.10
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: *id001
|
@@ -194,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
194
|
requirements:
|
195
195
|
- - ">="
|
196
196
|
- !ruby/object:Gem::Version
|
197
|
-
hash: -
|
197
|
+
hash: -1738284526985119473
|
198
198
|
segments:
|
199
199
|
- 0
|
200
200
|
version: "0"
|