reps_client 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,32 @@
1
+ ## 0.1.0 (2011-12-30)
2
+
3
+ * Add configuration option to enable or disable debug logging.
4
+ It is disabled by default (previously, it was always enabled).
5
+
6
+ ``` ruby
7
+ RepsClient.configure do |config|
8
+ config.debug = true
9
+ end
10
+ ```
11
+
12
+ * When logging is enabled, it defaults to logging to STDOUT, but you can
13
+ configure a custom logger.
14
+
15
+ ``` ruby
16
+ RepsClient.configure do |config|
17
+ config.logger = Logger.new('my.log')
18
+ end
19
+ ```
20
+
21
+ * Add support for ws-addressing. The REPS production environment requires
22
+ these headers on all requests.
23
+
24
+ * Flesh out logic around the return value of `RepsClient::Client#save_lead`.
25
+ It will return true when successful and false otherwise (previously, the
26
+ return value was meaningless).
27
+
28
+ * Update documentation.
29
+
30
+ ## 0.0.1 (2011-12-09)
31
+
32
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2011 G5
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
data/README.md CHANGED
@@ -4,9 +4,11 @@ This adapter provides a simple wrapper around a SOAP client for the [MDI Achieve
4
4
 
5
5
  ## Installation ##
6
6
 
7
- To use this library prior to the initial release, add this to your Gemfile:
7
+ The gem is available on [RubyGems][rubygems] and can be installed via:
8
8
 
9
- gem 'reps_client', :git => 'git@github.com:g5search/reps_client.git', :branch => 'development'
9
+ ```
10
+ gem install reps_client
11
+ ```
10
12
 
11
13
  ## Basics ##
12
14
 
@@ -14,49 +16,73 @@ For more details on any topic, see the [RDocs][rdocs].
14
16
 
15
17
  ### Configuration ###
16
18
 
17
- Most commonly, you will only need to supply the enterprise key in order to access the service.
18
-
19
19
  Configuration options can be set at the module level to automatically apply it to all client instances:
20
20
 
21
- RepsClient.configure do |config|
22
- config.enterprise_key = 'mykey'
23
- end
21
+ ```ruby
22
+ RepsClient.configure do |config|
23
+ config.enterprise_key = 'mykey'
24
+ end
24
25
 
25
- client = RepsClient::Client.new
26
+ client = RepsClient::Client.new
27
+ ```
26
28
 
27
29
  Or you can set it on each individual client instance:
28
30
 
29
- client = RepsClient::Client.new(:enterprise_key => 'mykey')
31
+ ```ruby
32
+ client = RepsClient::Client.new(:enterprise_key => 'mykey')
33
+ ```
30
34
 
31
- ### Examples ###
35
+ The external service always requires an enterprise key. Optionally, you
36
+ may also wish to change settings such as the service endpoint (which defaults
37
+ to the REPS test server) and configure debug logging (which is disabled by default).
38
+
39
+ ```ruby
40
+ RepsClient.configure do |config|
41
+ config.enterprise_key = 'mykey'
42
+ config.endpoint = 'http://my.hosted.endpoint.com/lead.asmx'
43
+ config.debug = true
44
+ config.logger = Logger.new('my.log')
45
+ end
46
+ ```
32
47
 
33
- To retrieve a list of communities that belong to this enterprise:
48
+ For a full list of configuration options, see {RepsClient::Configuration}.
49
+
50
+ ### Examples ###
34
51
 
35
- communities = client.get_communities
36
- # => [#<RepsClient::Community address1="123 Anywhere Ln" city="Somewhere" community_id="2" name="Pine View Terrace" state="AK" zip="12345">, #<RepsClient::Community community_id="8" name="The Hills at Dale Valley">]
52
+ To retrieve a list of communities that belong to this enterprise in REPS:
37
53
 
54
+ ```ruby
55
+ communities = client.get_communities
56
+ # => [#<RepsClient::Community address1="123 Anywhere Ln" city="Somewhere" community_id="2" name="Pine View Terrace" state="AK" zip="12345">, #<RepsClient::Community community_id="8" name="The Hills at Dale Valley">]
57
+ ```
38
58
  To retrieve a list of enumerated data types (e.g. relationship type, ad source) that are available for a particular community:
39
59
 
40
- pick_lists = client.get_pick_lists(2)
41
- # => {:prefix => [#<RepsClient::Prefix prefix_id="1" value="Mr.">, #<RepsClient::Prefix prefix_id="2" value="Ms.">],
42
- # :suffix => [#<RepsClient::Suffix suffix_id="200" value="Jr.">, #<RepsClient::Suffix suffix_id="99" value="M.D">],
43
- # :relationship_type => [#<RepsClient::RelationshipType relationship_type_id="42" name="Self">],
44
- # :source => [#<RepsClient::Source source_id="99" code="WEB" description="From the community website">]}
45
-
46
- To save a lead, which include a contact and prospect. A very simple lead might look like this:
47
-
48
- contact = RepsClient::Contact.new(:prefix => 'Mr.',
49
- :first_name => 'Fred',
50
- :last_name => 'Rogers',
51
- :email => 'misterrogers@neighborhood.com',
52
- :relationship_to_prospect_id => 2,
53
- :source_id => 99)
54
- prospect = RepsClient::Prospect.new(:prefix => 'Mr.',
55
- :first_name => 'Fred',
56
- :last_name => 'Rogers',
57
- :email => 'misterrogers@neighborhood.com',
58
- :notes => 'Request for Brochure')
59
- client.save_lead(2, contact, prospect)
60
+ ```ruby
61
+ pick_lists = client.get_pick_lists(2)
62
+ # => {:prefix => [#<RepsClient::Prefix prefix_id="1" value="Mr.">, #<RepsClient::Prefix prefix_id="2" value="Ms.">],
63
+ # :suffix => [#<RepsClient::Suffix suffix_id="200" value="Jr.">, #<RepsClient::Suffix suffix_id="99" value="M.D">],
64
+ # :relationship_type => [#<RepsClient::RelationshipType relationship_type_id="42" name="Self">],
65
+ # :source => [#<RepsClient::Source source_id="99" code="WEB" description="From the community website">]}
66
+ ```
67
+
68
+ To save a simple lead:
69
+
70
+ ```ruby
71
+ community_id = 2
72
+ contact = RepsClient::Contact.new(:prefix => 'Mr.',
73
+ :first_name => 'Fred',
74
+ :last_name => 'Rogers',
75
+ :email => 'misterrogers@neighborhood.com',
76
+ :relationship_to_prospect_id => 2,
77
+ :source_id => 99)
78
+ prospect = RepsClient::Prospect.new(:prefix => 'Mr.',
79
+ :first_name => 'Fred',
80
+ :last_name => 'Rogers',
81
+ :email => 'misterrogers@neighborhood.com',
82
+ :notes => 'Request for Brochure')
83
+ client.save_lead(community_id, contact, prospect)
84
+ ```
60
85
 
61
86
  [mdi]: http://mdiachieve.com
62
87
  [rdocs]: http://rubydoc.info/gems/reps_client
88
+ [rubygems]: http://rubygems.org/gems/reps_client
@@ -1,4 +1,5 @@
1
1
  require 'savon'
2
+ require 'uuidtools'
2
3
 
3
4
  require 'reps_client/community'
4
5
  require 'reps_client/errors'
@@ -6,7 +7,7 @@ require 'reps_client/pick_list'
6
7
  require 'reps_client/lead'
7
8
 
8
9
  module RepsClient
9
- # TODO: document RepsClient::Client
10
+ # RepsClient::Client is the main object for connecting to the remote REPS service.
10
11
  class Client
11
12
  include CommunityMethods
12
13
  include PickListMethods
@@ -20,15 +21,76 @@ module RepsClient
20
21
  define_method(opt) { get_value(opt) }
21
22
  end
22
23
 
24
+ # @attr [String] endpoint the service endpoint URL
25
+ # @attr [String] username the username for authentication
26
+ # @attr [String] password the password for authentication
27
+ # @attr [String] namespace the namespace for SOAP requests
28
+ # @attr [String] enterprise_key the corporate key required for all REPS requests
29
+ # @attr [true,false,String] debug set to true or 'true' to enable debug logging (defaults to false)
30
+ # @attr [Logger] logger the custom logger instance for debug logging (defaults to STDOUT)
31
+
32
+ def debug=(val)
33
+ @debug = val
34
+ Savon.log = self.debug?
35
+ end
36
+
37
+ def debug?
38
+ self.debug.to_s == 'true'
39
+ end
40
+
41
+ def logger=(val)
42
+ @logger = val
43
+ Savon.logger = self.logger
44
+ end
45
+
23
46
  # Initializes the client.
24
47
  #
48
+ # By default, the new client instance will take all of its configuration values from the
49
+ # module-level configuration, but these can be overridden at the client-level.
50
+ #
51
+ # @example Using module-level configuration values
52
+ # RepsClient.configure do |config|
53
+ # config.enterprise_key = 'my_key'
54
+ # end
55
+ #
56
+ # client1 = RepsClient::Client.new
57
+ # client1.enterprise_key
58
+ # # => "my_key"
59
+ #
60
+ # client2 = RepsClient::Client.new
61
+ # client2.enterprise_key
62
+ # # => "my_key"
63
+ #
64
+ # @example Selectively overriding configuration values at the client level
65
+ # RepsClient.configure do |config|
66
+ # config.enterprise_key = 'my_key'
67
+ # config.debug = 'true'
68
+ # end
69
+ #
70
+ # client1 = RepsClient::Client.new
71
+ # client1.enterprise_key
72
+ # # => "my_key"
73
+ # client1.debug?
74
+ # # => true
75
+ #
76
+ # client2 = RepsClient::Client.new(:debug => false)
77
+ # client2.enterprise_key
78
+ # # => "my_key"
79
+ # client2.debug?
80
+ # # => false
81
+ #
25
82
  # @param [Hash] options
26
83
  # @option options [String] :username The username for authenticating to the web service
27
84
  # @option options [String] :password The password for authenticating to the web service
28
85
  # @option options [String] :enterprise_key The enterprise key for authentication to the web service
29
86
  # @option options [String] :endpoint The address for connecting to the web service
30
87
  # @option options [String] :namespace The XML namespace to use for requests
88
+ # @option options [true,false] :debug true enabled debug logging (defaults to false)
89
+ # @option options [Logger] :logger a custom logger instance (defaults to STDOUT)
90
+ # @see RepsClient::Configuration
31
91
  def initialize(options={})
92
+ self.debug = nil
93
+ self.logger = nil
32
94
  options.each { |k,v| self.send("#{k}=", v) if self.respond_to?("#{k}=") }
33
95
  end
34
96
 
@@ -44,14 +106,18 @@ module RepsClient
44
106
  wsdl.namespace = self.namespace.to_s
45
107
  wsse.credentials self.username, self.password, false
46
108
 
47
- # We have to override the wsse timestamp method to force UTC
109
+ wsse.timestamp = true
110
+
111
+ # We have to override some of the timestamps to force UTC
48
112
  # (the reps service cacks on any other timezone)
113
+ wsse.created_at = Time.now.utc
49
114
  class << wsse
50
115
  define_method(:timestamp, lambda { @timestamp ||= Time.now.utc.xs_datetime })
51
116
  end
52
117
  end
53
118
  end
54
119
 
120
+ private
55
121
  # Sends a SOAP request to the remote service. This method takes care of
56
122
  # constructing the SOAP envelope and headers as well as common parameters
57
123
  # for REPS (e.g. the enterprise key)
@@ -72,15 +138,19 @@ module RepsClient
72
138
 
73
139
  response = soap_client.request :wsdl, camelcase_action do
74
140
  soap.element_form_default = :qualified
141
+ qualified_soap_action = URI.join(self.namespace, camelcase_action).to_s
142
+
143
+ soap.namespaces['xmlns:wsa'] = 'http://schemas.xmlsoap.org/ws/2004/08/addressing'
144
+ soap.header = ws_addressing_headers(qualified_soap_action)
145
+ http.headers['SOAPAction'] = %{"#{qualified_soap_action}"}
146
+
75
147
  soap.body = {:enterprise_key => self.enterprise_key}.merge(soap_parameters)
76
- http.headers['SOAPAction'] = %{"#{URI.join(self.namespace, camelcase_action)}"}
77
148
  end
78
149
  rescue Savon::SOAP::Fault => f
79
150
  raise RepsClient::ServiceError.translate_fault(f)
80
151
  end
81
152
  end
82
153
 
83
-
84
154
  # Retrieves an attribute value. If the attribute has not been set
85
155
  # on this object, it is retrieved from the global configuration.
86
156
  #
@@ -89,7 +159,17 @@ module RepsClient
89
159
  # @param [Symbol] attribute the name of the attribute
90
160
  # @return [String] the value of the attribute
91
161
  def get_value(attribute)
92
- instance_variable_get("@#{attribute}") || RepsClient.send(attribute)
162
+ local_val = instance_variable_get("@#{attribute}")
163
+ local_val.nil? ? RepsClient.send(attribute) : local_val
164
+ end
165
+
166
+ # Manually constructs the ws-addressing soap headers required by the REPS production
167
+ # web service. It would be nice to add ws-addressing support to savon eventually.
168
+ def ws_addressing_headers(soap_action)
169
+ { 'wsa:Action' => soap_action,
170
+ 'wsa:To' => self.endpoint,
171
+ 'wsa:ReplyTo' => {'wsa:Address' => 'http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous'},
172
+ 'wsa:MessageID' => "urn:uuid:#{UUIDTools::UUID.random_create.to_s}" }
93
173
  end
94
174
  end
95
175
  end
@@ -1,18 +1,39 @@
1
1
  require 'modelish'
2
2
 
3
3
  module RepsClient
4
- # A community (i.e. location) as configured in the MDI REPS service.
4
+ # A community (i.e. location) as configured in the MDI Achieve REPS service.
5
5
  class Community < Modelish::Base
6
+ # @return [Integer] the unique identifier for the community in REPS.
7
+ # @note This ID will be required as an argument in most service calls.
6
8
  property :community_id, :from => :community_idy, :type => Integer
9
+
10
+ # @return [String] the name of the community
7
11
  property :name, :type => String
12
+
13
+ # @return [String] the first line of the community's street address
8
14
  property :address1, :from => :community_address1, :type => String
15
+
16
+ # @return [String] the second line of the community's street address
9
17
  property :address2, :from => :community_address2, :type => String
18
+
19
+ # @return [String] the city where the community is located
10
20
  property :city, :from => :community_city, :type => String
21
+
22
+ # @return [String] the state or territory where the community is located
11
23
  property :state, :from => :community_state, :type => String
24
+
25
+ # @return [String] the zip or postal code of the community
12
26
  property :zip, :from => :community_zip, :type => String
27
+
28
+ ignore_unknown_properties!
13
29
  end
14
30
 
15
31
  module CommunityMethods
32
+ # Retrieves a list of communities from the REPS web service.
33
+ # Note that all of the other service methods require a community ID
34
+ # that is returned by this method.
35
+ #
36
+ # @return [Array<RepsClient::Community>] the list of REPS communities
16
37
  def get_communities
17
38
  response = send_soap_request(:get_communities)
18
39
  communities = response.to_hash[:get_communities_response][:get_communities_result][:diffgram][:document_element][:community]
@@ -1,34 +1,60 @@
1
1
  require 'configlet'
2
+ require 'logger'
2
3
 
3
4
  module RepsClient
4
- # All valid configurations options
5
- VALID_CONFIG_OPTIONS = [:endpoint, :username, :password, :namespace, :enterprise_key]
5
+ # All possible configuration options
6
+ VALID_CONFIG_OPTIONS = [:endpoint, :username, :password, :namespace, :enterprise_key,
7
+ :debug, :logger]
6
8
 
7
- DEFAULT_ENDPOINT = 'https://repssuite.mdiachieve.com/webservices/lead.asmx?wsdl'
9
+ # The default endpoint (points to the REPS test server)
10
+ DEFAULT_ENDPOINT = 'https://repssuite.mdiachieve.com/webservices/lead.asmx'
11
+
12
+ # The default namespace for SOAP requests
8
13
  DEFAULT_NAMESPACE = 'http://www.mdiachieve.com/'
9
14
 
10
15
  module Configuration
11
16
  include Configlet
12
-
17
+
13
18
  def self.extended(base)
14
19
  # Default configuration - happens whether or not .configure is called
15
20
  base.config :reps_client do
16
21
  default :endpoint => DEFAULT_ENDPOINT
17
22
  default :namespace => DEFAULT_NAMESPACE
23
+ default :debug => 'false'
18
24
  end
19
25
  end
20
26
 
21
- # Mutators and accessors for configuration options
27
+ # Dynamically define mutators and accessors for configuration options
22
28
  VALID_CONFIG_OPTIONS.each do |config_opt|
23
29
  define_method(config_opt) do
24
30
  self[config_opt]
25
31
  end
26
32
 
27
33
  define_method("#{config_opt}=".to_sym) do |val|
28
- self[config_opt] = val
34
+ self[config_opt] = val.nil? ? nil : val.to_s
29
35
  end
30
36
  end
31
37
 
38
+ # @attr [String] endpoint the service endpoint URL (defaults to RepsClient::DEFAULT_ENDPOINT)
39
+ # @attr [String] username the username for authentication
40
+ # @attr [String] password the password for authentication
41
+ # @attr [String] namespace the namespace for SOAP requests (defaults to RepsClient::DEFAULT_NAMESPACE)
42
+ # @attr [String] enterprise_key the corporate key required for all REPS requests
43
+ # @attr [true,false,String] debug set to true or 'true' to enable debug logging (defaults to false)
44
+
45
+ # @return [true,false] true if debug logging is enabled; false otherwie.
46
+ def debug?
47
+ self[:debug] == 'true'
48
+ end
49
+
50
+ # Sets the logger to use for debug messages
51
+ attr_writer :logger
52
+
53
+ # @return [Logger] the logger to use for debug messages (defaults to STDOUT)
54
+ def logger
55
+ @logger ||= Logger.new(STDOUT)
56
+ end
57
+
32
58
  # Configures this module through the given +block+.
33
59
  # Default configuration options will be applied unless
34
60
  # they are explicitly overridden in the +block+.
@@ -48,6 +74,8 @@ module RepsClient
48
74
  # config.endpoint = 'http://my.endpoint.com'
49
75
  # config.namespace = 'http://my.namespace.com'
50
76
  # config.enterprise_key = 'my_key'
77
+ # config.debug = true
78
+ # config.logger = Logger.new('my.log')
51
79
  # end
52
80
  # @return [RepsClient] _self
53
81
  # @see VALID_CONFIG_OPTIONS
@@ -25,12 +25,12 @@ module RepsClient
25
25
  # :state => 'CA',
26
26
  # :zip_code => '12345')
27
27
  class Contact < Modelish::Base
28
- # @attribute [rw]
28
+ # @attribute [rw]
29
29
  # @return [String] the contact's salutation (e.g. "Mr.", "Ms.", "Dr.", etc.)
30
30
  # @see RepsClient::PickListMethods#get_pick_lists
31
31
  property :prefix, :type => String, :max_length => 30
32
32
 
33
- # @attribute [rw]
33
+ # @attribute [rw]
34
34
  # @return [String] the contact's first name
35
35
  # @note This attribute is required on initialization.
36
36
  property :first_name, :type => String, :required => true, :max_length => 30
@@ -88,11 +88,15 @@ module RepsClient
88
88
  property :email, :type => String, :max_length => 100
89
89
 
90
90
  # @attribute [rw]
91
- # @return [int] the relationship type id describing the contact's relationship to the prospect
92
- # @note The relationship type is determined based on the contact's answer to the question 'What
93
- # is your relationship to the prospect?' For instance, if a contact was acting on behalf of their
94
- # mother, the relationship type name might be 'Child'. Valid relationship types are available from
91
+ # @return [int] the relationship type id describing the relationship of the contact to the prospect
92
+ # @note REPS requires the "direction" of the relationship type to be the opposite of what most users expect.
93
+ #
94
+ # The relationship type is determined based on the contact's answer to the question "What
95
+ # is your relationship to the prospect?" For instance, if a contact was acting on behalf of their
96
+ # mother, the relationship type name might be "Child" or "Son" or "Daughter" (but definitely
97
+ # *not* "Mother" or "Parent"). Valid relationship types are available from
95
98
  # the remote service.
99
+ #
96
100
  # @see RepsClient::PickListMethods#get_pick_lists
97
101
  property :relationship_to_prospect_id, :type => Integer
98
102
 
@@ -105,7 +109,7 @@ module RepsClient
105
109
  property :include_in_emailings, :default => false, :type => lambda { |v| !!v }
106
110
 
107
111
  # @attribute [rw]
108
- # @return [int]
112
+ # @return [int] the identifier for the lead source in REPS
109
113
  # @see RepsClient::PickListMethods#get_pick_lists
110
114
  # @note This attribute is required on initialization.
111
115
  property :source_id, :type => Integer, :required => true, :validate_type => true
@@ -269,7 +273,7 @@ module RepsClient
269
273
  # @param [Integer] community_id the REPS ID of the community
270
274
  # @param [RepsClient::Contact] contact the contact person for the lead
271
275
  # @param [RepsClient::Prospect] prospect the prospective resident (if different than contact)
272
- #
276
+ # @return [true,false] true if the lead was saved succesfully; false otherwise
273
277
  def save_lead(community_id,contact,prospect=nil)
274
278
  LeadMethods.validate_required!(:community_id => community_id,
275
279
  :contact => contact)
@@ -285,7 +289,9 @@ module RepsClient
285
289
  soap_params[:order!] << :new_prospect
286
290
  end
287
291
 
288
- send_soap_request(:save_lead, soap_params)
292
+ response = send_soap_request(:save_lead, soap_params).to_hash
293
+
294
+ response[:save_lead_response][:save_lead_result][:diffgram][:document_element].nil?
289
295
  end
290
296
  end
291
297
  end
@@ -1,25 +1,65 @@
1
1
  require 'modelish/validations'
2
2
 
3
3
  module RepsClient
4
+ # A name prefix from the REPS service.
5
+ # Equates to the dropdown list labeled "Prefix" on the Leads -> Contact and
6
+ # Prospect pages in REPS.
4
7
  class Prefix < Modelish::Base
8
+ # @return [int] the id of the prefix
5
9
  property :prefix_id, :from => :user_list_idy, :type => Integer
10
+
11
+ # @return [String] the display value of the prefix (e.g. "Mr.")
6
12
  property :value, :from => :list_value, :type => String
13
+
14
+ ignore_unknown_properties!
7
15
  end
8
16
 
17
+ # A name suffix from the REPS service.
18
+ # Equates to the dropdown list labeled "Suffix" on the Leads -> Contact and
19
+ # Prospect pages in REPS.
9
20
  class Suffix < Modelish::Base
21
+ # @return [int] the id of the suffix
10
22
  property :suffix_id, :from => :user_list_idy, :type => Integer
23
+
24
+ # @return [String] the display value of the suffix (e.g. "Jr.")
11
25
  property :value, :from => :list_value, :type => String
26
+
27
+ ignore_unknown_properties!
12
28
  end
13
29
 
30
+ # A type of relationship from the REPS service.
31
+ # Equates to the dropdown list labeled 'Relation to Resident' on the
32
+ # Leads -> Contact page in REPS.
33
+ #
34
+ # Note: Be careful of the direction of the relationship type. Many web pages
35
+ # ask about the relationship of the prospect to the contact (Q: For whom are
36
+ # you inquiring? A: Mother), but REPS uses the relationship of the contact
37
+ # to the prospect (Q: What is your relationship to the prospective resident?
38
+ # A: Daughter).
14
39
  class RelationshipType < Modelish::Base
40
+ # @return [int] the id of the relationship type
15
41
  property :relationship_type_id, :from => :relationship_type_idy, :type => Integer
42
+
43
+ # @return [String] the display name of the relationship type (e.g. "Daughter")
16
44
  property :name, :from => :relationship_name, :type => String
45
+
46
+ ignore_unknown_properties!
17
47
  end
18
48
 
49
+ # A lead source (e.g. print advertising, direct mail, referral, etc.)
50
+ # Equates to the dropdown list labeled 'Source 1' on the Leads -> Contact
51
+ # page in REPS.
19
52
  class Source < Modelish::Base
53
+ # @return [int] the id of the lead source
20
54
  property :source_id, :from => :source_idy, :type => Integer
55
+
56
+ # @return [String] the unique human-readable code identifying the source (e.g. 'KOIN-TV')
21
57
  property :code, :type => String
58
+
59
+ # @return [String] the description of the lead source (e.g. 'KOIN television ad campaign')
22
60
  property :description, :type => String
61
+
62
+ ignore_unknown_properties!
23
63
  end
24
64
 
25
65
  module PickListMethods
@@ -41,14 +81,15 @@ module RepsClient
41
81
  def get_pick_lists(community_id)
42
82
  PickListMethods.validate_required!(:community_id => community_id)
43
83
 
44
- response = send_soap_request(:get_pick_lists, :community_id => community_id, :order! => [:enterprise_key,:community_id])
84
+ response = send_soap_request(:get_pick_lists, :community_id => community_id,
85
+ :order! => [:enterprise_key,:community_id])
45
86
  lists = response.to_hash[:get_pick_lists_response][:get_pick_lists_result][:diffgram][:pick_lists]
46
87
 
47
88
  result = {}
48
89
  [:prefix, :suffix, :relationship_type, :source].each do |k|
49
90
  result[k] = process_pick_list(k, lists)
50
91
  end
51
-
92
+
52
93
  result
53
94
  end
54
95
 
@@ -1,3 +1,4 @@
1
1
  module RepsClient
2
- VERSION = '0.0.1'
2
+ # The current version of this library
3
+ VERSION = '0.1.0'
3
4
  end
data/lib/reps_client.rb CHANGED
@@ -5,8 +5,4 @@ module RepsClient
5
5
  extend Configuration
6
6
 
7
7
  require 'reps_client/client'
8
-
9
- Modelish.configure do |config|
10
- config.ignore_unknown_properties = true
11
- end
12
8
  end
data/reps_client.gemspec CHANGED
@@ -14,13 +14,14 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
-
17
+
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  s.add_dependency('modelish', '>=0.1.3')
21
21
  s.add_dependency('configlet', '~>2.1')
22
-
22
+ s.add_dependency('uuidtools', '~>2.1.2')
23
23
  s.add_dependency('savon', '~>0.9.7')
24
+
24
25
  s.add_development_dependency('savon_spec', '~>0.1')
25
26
 
26
27
  s.add_development_dependency('rspec', '~>2.6')