sugarcrm 0.9.0 → 0.9.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.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/sugarcrm/associations/association_methods.rb +0 -18
- data/lib/sugarcrm/attributes/attribute_methods.rb +1 -6
- data/lib/sugarcrm/attributes/attribute_serializers.rb +3 -3
- data/lib/sugarcrm/attributes/attribute_typecast.rb +0 -2
- data/lib/sugarcrm/base.rb +3 -51
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -12,7 +12,7 @@ RubyGem for interacting with SugarCRM via REST.
|
|
12
12
|
|
13
13
|
A less clunky way to interact with SugarCRM via REST.
|
14
14
|
|
15
|
-
Instead of SugarCRM.connection.get_entry("Users", "1")
|
15
|
+
Instead of SugarCRM.connection.get_entry("Users", "1") you could use SugarCRM::User.find(1). There is support for collections à la SugarCRM::User.find(1).email_addresses, or SugarCRM::Contact.first.meetings << new_meeting. ActiveRecord style finders are in place, with limited support for conditions and joins.
|
16
16
|
|
17
17
|
== FEATURES/PROBLEMS:
|
18
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.1
|
@@ -44,15 +44,10 @@ module SugarCRM; module AssociationMethods
|
|
44
44
|
query_association :#{k}
|
45
45
|
end
|
46
46
|
?
|
47
|
-
#seed_association_cache(k.to_syn)
|
48
47
|
end
|
49
48
|
self.class.association_methods_generated = true
|
50
49
|
end
|
51
50
|
|
52
|
-
# def seed_association_cache(association)
|
53
|
-
# @association_cache[association] = AssociationCollection.new(self,association)
|
54
|
-
# end
|
55
|
-
|
56
51
|
# Returns the records from the associated module or returns the cached copy if we've already
|
57
52
|
# loaded it. Force a reload of the records with reload=true
|
58
53
|
#
|
@@ -76,17 +71,4 @@ module SugarCRM; module AssociationMethods
|
|
76
71
|
collection
|
77
72
|
end
|
78
73
|
|
79
|
-
# Loads related records for the given association
|
80
|
-
# def load_associations_for(association)
|
81
|
-
# SugarCRM.connection.get_relationships(self.class._module.name, self.id, association.to_s)
|
82
|
-
# end
|
83
|
-
|
84
|
-
# pushes an element to the association collection
|
85
|
-
def append_to_association(association, record)
|
86
|
-
collection = query_association(association)
|
87
|
-
collection << record
|
88
|
-
collection
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
74
|
end; end
|
@@ -2,7 +2,6 @@ module SugarCRM; module AttributeMethods
|
|
2
2
|
|
3
3
|
module ClassMethods
|
4
4
|
# Returns a hash of the module fields from the module
|
5
|
-
# merges matching keys if another attributes hash is provided
|
6
5
|
def attributes_from_module_fields
|
7
6
|
fields = {}.with_indifferent_access
|
8
7
|
self._module.fields.keys.sort.each do |k|
|
@@ -12,10 +11,6 @@ module SugarCRM; module AttributeMethods
|
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
15
|
-
# TODO: Object.id is not being updated properly. Figure out why...
|
16
|
-
alias :pk :id
|
17
|
-
alias :primary_key :id
|
18
|
-
|
19
14
|
# Determines if attributes or associations have been changed
|
20
15
|
def changed?
|
21
16
|
return true if attributes_changed?
|
@@ -43,7 +38,7 @@ module SugarCRM; module AttributeMethods
|
|
43
38
|
# with attributes from the module.fields array. Skips any
|
44
39
|
# fields that aren't in the module.fields array
|
45
40
|
#
|
46
|
-
# BUG: SugarCRM likes to return fields you don't ask for
|
41
|
+
# BUG: SugarCRM likes to return fields you don't ask for and
|
47
42
|
# aren't fields on a module (i.e. modified_user_name). This
|
48
43
|
# royally screws up our typecasting code, so we handle it here.
|
49
44
|
def merge_attributes(attrs={})
|
@@ -21,9 +21,9 @@ module SugarCRM; module AttributeSerializers
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# Converts the modified_attributes hash into format recognizable by Sugar
|
24
|
-
# {
|
24
|
+
# {:last_name => {:old => "Smit", :new => "Smith"}}
|
25
25
|
# becomes
|
26
|
-
# {
|
26
|
+
# {:last_name => {:name => "last_name", :value => "Smith"}}
|
27
27
|
def serialize_modified_attributes
|
28
28
|
attr_hash = {}
|
29
29
|
@modified_attributes.each_pair do |name,hash|
|
@@ -33,7 +33,7 @@ module SugarCRM; module AttributeSerializers
|
|
33
33
|
attr_hash
|
34
34
|
end
|
35
35
|
|
36
|
-
# Un-typecasts the attribute - false becomes 0
|
36
|
+
# Un-typecasts the attribute - false becomes "0", 5234 becomes "5234", etc.
|
37
37
|
def serialize_attribute(name,value)
|
38
38
|
attr_value = value
|
39
39
|
attr_type = attr_type_for(name)
|
@@ -4,13 +4,11 @@ module SugarCRM; module AttributeTypeCast
|
|
4
4
|
|
5
5
|
# Returns the attribute type for a given attribute
|
6
6
|
def attr_type_for(attribute)
|
7
|
-
# sometimes the module fields aren't loaded. Why?
|
8
7
|
fields = self.class._module.fields
|
9
8
|
field = fields[attribute]
|
10
9
|
raise UninitializedModule, "SugarCRM::Module #{self.class._module.name} was not initialized properly (fields.length == 0)" if fields.length == 0
|
11
10
|
raise InvalidAttribute, "#{self.class}_module.fields does not contain an entry for #{attribute} (of type: #{attribute.class})\nValid fields: #{self.class._module.fields.keys.sort.join(", ")}" if field.nil?
|
12
11
|
raise InvalidAttributeType, "#{self.class}._module.fields[#{attribute}] does not have a key for \'type\'" if field["type"].nil?
|
13
|
-
#return :string unless field.is_a? Hash
|
14
12
|
field["type"].to_sym
|
15
13
|
end
|
16
14
|
|
data/lib/sugarcrm/base.rb
CHANGED
@@ -32,7 +32,7 @@ module SugarCRM; class Base
|
|
32
32
|
@debug = options[:debug]
|
33
33
|
@@connection = SugarCRM::Connection.new(url, user, pass, options)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def find(*args)
|
37
37
|
options = args.extract_options!
|
38
38
|
validate_find_options(options)
|
@@ -199,23 +199,6 @@ module SugarCRM; class Base
|
|
199
199
|
if match.finder?
|
200
200
|
finder = match.finder
|
201
201
|
bang = match.bang?
|
202
|
-
# def self.find_by_login_and_activated(*args)
|
203
|
-
# options = args.extract_options!
|
204
|
-
# attributes = construct_attributes_from_arguments(
|
205
|
-
# [:login,:activated],
|
206
|
-
# args
|
207
|
-
# )
|
208
|
-
# finder_options = { :conditions => attributes }
|
209
|
-
# validate_find_options(options)
|
210
|
-
#
|
211
|
-
# if options[:conditions]
|
212
|
-
# with_scope(:find => finder_options) do
|
213
|
-
# find(:first, options)
|
214
|
-
# end
|
215
|
-
# else
|
216
|
-
# find(:first, options.merge(finder_options))
|
217
|
-
# end
|
218
|
-
# end
|
219
202
|
self.class_eval <<-EOS, __FILE__, __LINE__ + 1
|
220
203
|
def self.#{method_id}(*args)
|
221
204
|
options = args.extract_options!
|
@@ -239,31 +222,6 @@ module SugarCRM; class Base
|
|
239
222
|
send(method_id, *arguments)
|
240
223
|
elsif match.instantiator?
|
241
224
|
instantiator = match.instantiator
|
242
|
-
# def self.find_or_create_by_user_id(*args)
|
243
|
-
# guard_protected_attributes = false
|
244
|
-
#
|
245
|
-
# if args[0].is_a?(Hash)
|
246
|
-
# guard_protected_attributes = true
|
247
|
-
# attributes = args[0].with_indifferent_access
|
248
|
-
# find_attributes = attributes.slice(*[:user_id])
|
249
|
-
# else
|
250
|
-
# find_attributes = attributes = construct_attributes_from_arguments([:user_id], args)
|
251
|
-
# end
|
252
|
-
#
|
253
|
-
# options = { :conditions => find_attributes }
|
254
|
-
# set_readonly_option!(options)
|
255
|
-
#
|
256
|
-
# record = find(:first, options)
|
257
|
-
#
|
258
|
-
# if record.nil?
|
259
|
-
# record = self.new { |r| r.send(:attributes=, attributes, guard_protected_attributes) }
|
260
|
-
# yield(record) if block_given?
|
261
|
-
# record.save
|
262
|
-
# record
|
263
|
-
# else
|
264
|
-
# record
|
265
|
-
# end
|
266
|
-
# end
|
267
225
|
self.class_eval <<-EOS, __FILE__, __LINE__ + 1
|
268
226
|
def self.#{method_id}(*args)
|
269
227
|
attributes = [:#{attribute_names.join(',:')}]
|
@@ -322,10 +280,6 @@ module SugarCRM; class Base
|
|
322
280
|
end
|
323
281
|
|
324
282
|
# Creates an instance of a Module Class, i.e. Account, User, Contact, etc.
|
325
|
-
# This call depends upon SugarCRM.modules having actual data in it. If you
|
326
|
-
# are using Base.establish_connection, you should be fine. But if you are
|
327
|
-
# using the Connection class by itself, you may need to prime the pump with
|
328
|
-
# a call to Module.register_all
|
329
283
|
def initialize(attributes={})
|
330
284
|
@modified_attributes = {}
|
331
285
|
merge_attributes(attributes.with_indifferent_access)
|
@@ -362,8 +316,8 @@ module SugarCRM; class Base
|
|
362
316
|
true
|
363
317
|
end
|
364
318
|
|
365
|
-
# Saves the current object,
|
366
|
-
#
|
319
|
+
# Saves the current object, and any modified associations.
|
320
|
+
# Raises an exceptions if save fails for any reason.
|
367
321
|
def save!
|
368
322
|
save_modified_attributes
|
369
323
|
save_modified_associations
|
@@ -400,8 +354,6 @@ module SugarCRM; class Base
|
|
400
354
|
id.hash
|
401
355
|
end
|
402
356
|
|
403
|
-
|
404
|
-
# Wrapper around class attribute
|
405
357
|
def attribute_methods_generated?
|
406
358
|
self.class.attribute_methods_generated
|
407
359
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sugarcrm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 57
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 1
|
10
|
+
version: 0.9.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Carl Hicks
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-04 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|