rhoconnect-adapters 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gitignore +4 -0
  2. data/CHANGELOG +4 -0
  3. data/Gemfile +18 -0
  4. data/README.md +239 -0
  5. data/Rakefile +31 -0
  6. data/bin/rhoconnect-adapters +35 -0
  7. data/generators/crm/templates/application/application.rb +34 -0
  8. data/generators/crm/templates/source/source_adapter.rb +10 -0
  9. data/generators/crm/templates/source/source_spec.rb +25 -0
  10. data/generators/crm/templates/spec/spec_helper.rb +64 -0
  11. data/generators/crm/vendor/ms_dynamics/adapter.rb +301 -0
  12. data/generators/crm/vendor/ms_dynamics/application.rb +56 -0
  13. data/generators/crm/vendor/ms_dynamics/lib/crm_metadata_service.rb +43 -0
  14. data/generators/crm/vendor/ms_dynamics/lib/crm_service.rb +141 -0
  15. data/generators/crm/vendor/ms_dynamics/lib/discovery_service.rb +51 -0
  16. data/generators/crm/vendor/ms_dynamics/lib/wlid_service.rb +159 -0
  17. data/generators/crm/vendor/ms_dynamics/ms_dynamics.rb +45 -0
  18. data/generators/crm/vendor/ms_dynamics/settings/Account.yml +46 -0
  19. data/generators/crm/vendor/ms_dynamics/settings/Contact.yml +40 -0
  20. data/generators/crm/vendor/ms_dynamics/settings/GenericObject.yml +18 -0
  21. data/generators/crm/vendor/ms_dynamics/settings/Lead.yml +53 -0
  22. data/generators/crm/vendor/ms_dynamics/settings/Opportunity.yml +41 -0
  23. data/generators/crm/vendor/ms_dynamics/settings/settings.yml +9 -0
  24. data/generators/crm/vendor/ms_dynamics/spec/application_spec.rb +23 -0
  25. data/generators/crm/vendor/ms_dynamics/spec/sources/account_spec.rb +49 -0
  26. data/generators/crm/vendor/ms_dynamics/spec/sources/contact_spec.rb +49 -0
  27. data/generators/crm/vendor/ms_dynamics/spec/sources/lead_spec.rb +49 -0
  28. data/generators/crm/vendor/ms_dynamics/spec/sources/opportunity_spec.rb +62 -0
  29. data/generators/crm/vendor/ms_dynamics/spec/spec_helper.rb +78 -0
  30. data/generators/crm/vendor/ms_dynamics/spec_data/Account.yml +6 -0
  31. data/generators/crm/vendor/ms_dynamics/spec_data/Contact.yml +7 -0
  32. data/generators/crm/vendor/ms_dynamics/spec_data/GenericObject.yml +3 -0
  33. data/generators/crm/vendor/ms_dynamics/spec_data/Lead.yml +12 -0
  34. data/generators/crm/vendor/ms_dynamics/spec_data/Opportunity.yml +6 -0
  35. data/generators/crm/vendor/ms_dynamics/templates.rb +57 -0
  36. data/generators/crm/vendor/oracle_on_demand/adapter.rb +421 -0
  37. data/generators/crm/vendor/oracle_on_demand/application.rb +64 -0
  38. data/generators/crm/vendor/oracle_on_demand/settings/Account.yml +91 -0
  39. data/generators/crm/vendor/oracle_on_demand/settings/Contact.yml +54 -0
  40. data/generators/crm/vendor/oracle_on_demand/settings/GenericObject.yml +21 -0
  41. data/generators/crm/vendor/oracle_on_demand/settings/Lead.yml +72 -0
  42. data/generators/crm/vendor/oracle_on_demand/settings/Opportunity.yml +69 -0
  43. data/generators/crm/vendor/oracle_on_demand/settings/settings.yml +8 -0
  44. data/generators/crm/vendor/oracle_on_demand/spec/application_spec.rb +14 -0
  45. data/generators/crm/vendor/oracle_on_demand/spec/sources/account_spec.rb +50 -0
  46. data/generators/crm/vendor/oracle_on_demand/spec/sources/contact_spec.rb +50 -0
  47. data/generators/crm/vendor/oracle_on_demand/spec/sources/lead_spec.rb +51 -0
  48. data/generators/crm/vendor/oracle_on_demand/spec/sources/opportunity_spec.rb +51 -0
  49. data/generators/crm/vendor/oracle_on_demand/spec_data/Account.yml +8 -0
  50. data/generators/crm/vendor/oracle_on_demand/spec_data/Contact.yml +8 -0
  51. data/generators/crm/vendor/oracle_on_demand/spec_data/GenericObject.yml +4 -0
  52. data/generators/crm/vendor/oracle_on_demand/spec_data/Lead.yml +14 -0
  53. data/generators/crm/vendor/oracle_on_demand/spec_data/Opportunity.yml +6 -0
  54. data/generators/crm/vendor/oracle_on_demand/templates.rb +52 -0
  55. data/generators/crm/vendor/salesforce/adapter.rb +315 -0
  56. data/generators/crm/vendor/salesforce/application.rb +80 -0
  57. data/generators/crm/vendor/salesforce/settings/Account.yml +53 -0
  58. data/generators/crm/vendor/salesforce/settings/Contact.yml +61 -0
  59. data/generators/crm/vendor/salesforce/settings/GenericObject.yml +13 -0
  60. data/generators/crm/vendor/salesforce/settings/Lead.yml +73 -0
  61. data/generators/crm/vendor/salesforce/settings/Opportunity.yml +48 -0
  62. data/generators/crm/vendor/salesforce/settings/settings.yml +6 -0
  63. data/generators/crm/vendor/salesforce/spec/application_spec.rb +14 -0
  64. data/generators/crm/vendor/salesforce/spec/sources/account_spec.rb +50 -0
  65. data/generators/crm/vendor/salesforce/spec/sources/contact_spec.rb +50 -0
  66. data/generators/crm/vendor/salesforce/spec/sources/lead_spec.rb +51 -0
  67. data/generators/crm/vendor/salesforce/spec/sources/opportunity_spec.rb +51 -0
  68. data/generators/crm/vendor/salesforce/spec_data/Account.yml +14 -0
  69. data/generators/crm/vendor/salesforce/spec_data/Contact.yml +8 -0
  70. data/generators/crm/vendor/salesforce/spec_data/GenericObject.yml +3 -0
  71. data/generators/crm/vendor/salesforce/spec_data/Lead.yml +10 -0
  72. data/generators/crm/vendor/salesforce/spec_data/Opportunity.yml +10 -0
  73. data/generators/crm/vendor/salesforce/templates.rb +45 -0
  74. data/generators/crm/vendor/sugar/adapter.rb +291 -0
  75. data/generators/crm/vendor/sugar/application.rb +50 -0
  76. data/generators/crm/vendor/sugar/settings/Account.yml +49 -0
  77. data/generators/crm/vendor/sugar/settings/Contact.yml +62 -0
  78. data/generators/crm/vendor/sugar/settings/GenericObject.yml +12 -0
  79. data/generators/crm/vendor/sugar/settings/Lead.yml +76 -0
  80. data/generators/crm/vendor/sugar/settings/Opportunity.yml +49 -0
  81. data/generators/crm/vendor/sugar/settings/settings.yml +9 -0
  82. data/generators/crm/vendor/sugar/spec/application_spec.rb +25 -0
  83. data/generators/crm/vendor/sugar/spec/sources/account_spec.rb +53 -0
  84. data/generators/crm/vendor/sugar/spec/sources/contact_spec.rb +53 -0
  85. data/generators/crm/vendor/sugar/spec/sources/lead_spec.rb +54 -0
  86. data/generators/crm/vendor/sugar/spec/sources/opportunity_spec.rb +54 -0
  87. data/generators/crm/vendor/sugar/spec_data/Account.yml +13 -0
  88. data/generators/crm/vendor/sugar/spec_data/Contact.yml +8 -0
  89. data/generators/crm/vendor/sugar/spec_data/GenericObject.yml +3 -0
  90. data/generators/crm/vendor/sugar/spec_data/Lead.yml +16 -0
  91. data/generators/crm/vendor/sugar/spec_data/Opportunity.yml +10 -0
  92. data/generators/crm/vendor/sugar/sugar.rb +33 -0
  93. data/generators/crm/vendor/sugar/templates.rb +58 -0
  94. data/generators/rhoconnect-adapters.rb +217 -0
  95. data/lib/rhoconnect-adapters/crm/crm.rb +31 -0
  96. data/lib/rhoconnect-adapters/soap_service.rb +70 -0
  97. data/lib/rhoconnect-adapters/version.rb +3 -0
  98. data/lib/rhoconnect-adapters.rb +2 -0
  99. data/rhoconnect-adapters.gemspec +36 -0
  100. data/spec/apps/ms_dynamics_spec.rb +19 -0
  101. data/spec/apps/oracle_on_demand_spec.rb +20 -0
  102. data/spec/apps/salesforce_spec.rb +18 -0
  103. data/spec/apps/sugar_spec.rb +18 -0
  104. data/spec/generator/generator_spec.rb +113 -0
  105. data/spec/spec_helper.rb +57 -0
  106. metadata +288 -0
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/CHANGELOG ADDED
@@ -0,0 +1,4 @@
1
+ ## 0.1.0
2
+
3
+ * #15178091 - Integration of OracleCRM backend, specs for generator
4
+ * #14613211 - Initial creation of the rhoconnect-adapters
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rhoconnect-adapters.gemspec
4
+ gemspec
5
+ gem 'rake'
6
+
7
+ group :test do
8
+ gem 'rspec', '~> 2.6.0'
9
+ gem 'rcov', '>= 0.9.8'
10
+ gem 'sugarcrm', '>= 0.9.15'
11
+ end
12
+
13
+ group :development do
14
+ gem 'rspec', '~> 2.6.0'
15
+ gem 'rcov', '>= 0.9.8'
16
+ gem 'sugarcrm', '>= 0.9.15'
17
+ end
18
+
data/README.md ADDED
@@ -0,0 +1,239 @@
1
+ rhoconnect-adapters
2
+ ===
3
+
4
+ rhoconnect-adapters is a ruby library containing a collection of the out-of-box [RhoConnect](http://rhomobile.com/products/rhoconnect) applications
5
+ for various needs.
6
+
7
+ With rhoconnect-adapters, you can utilize the pre-built set of [RhoConnect](http://rhomobile.com/products/rhoconnect/) applications
8
+ for popular CRM backends (SalesForce, Oracle CRM On Demand, Sugar CRM, etc.). Also, this library includes support for writing your own [RhoConnect](http://rhomobile.com/products/rhoconnect/)
9
+ CRM applications to extend or customize the default functionality.
10
+
11
+ ## Setup
12
+ Install the 'rhoconnect-adapters' gem by using the following command:
13
+
14
+ $ [sudo] gem install rhoconnect-adapters
15
+
16
+
17
+ ## Usage
18
+ The 'rhoconnect-adapters' command creates pre-built [RhoConnect](http://rhomobile.com/products/rhoconnect/) applications.
19
+ Visit the [RhoConnect](http://rhomobile.com/products/rhoconnect/) website for more information.
20
+
21
+ ### Generating Standard CRM Application
22
+
23
+ To create a standard out-of-the-box rhoconnect CRM application use the following command:
24
+
25
+ $ rhoconnect-adapters crmapp <app_name> <CRM-backend>
26
+
27
+ Here, the \<CRM\-backend\> parameter specifies the CRM backend that your application will use.
28
+ Currently, the following CRM backends are supported:
29
+
30
+ - OracleOnDemand (for [Oracle CRM On Demand](http://crmondemand.oracle.com))
31
+ - MsDynamics (for [Microsoft Dynamics CRM](http://www.microsoft.com/en-us/dynamics/default.aspx))
32
+ - Salesforce (for [Salesforce CRM](http://www.salesforce.com/))
33
+ - Sugar (for [Sugar CRM](http://www.sugarcrm.com/crm/))
34
+
35
+ The generated Rhoconnect CRM application structure will include typical [RhoConnect](http://rhomobile.com/products/rhoconnect/)
36
+ files (for example, application.rb and settings.yml). It will also create a special vendor directory `vendor/\<CRM\-backend\>`
37
+ containing all support files specific for the corresponding CRM backend.
38
+
39
+ By default, the Rhoconnect CRM application will be generated with four standard source adapters corresponding
40
+ to the following CRM objects:
41
+
42
+ - Account
43
+ - Contact
44
+ - Lead
45
+ - Opportunity
46
+
47
+
48
+ ### Generating CRM Application without pre-built source adapters
49
+
50
+ In some cases, it is necessary to generate an application without any standard sources.
51
+ For this purpose, use the `--bare` option to generate just the application's skeleton.
52
+
53
+ rhoconnect-adapters crmapp <app_name> <CRM-backend> --bare
54
+
55
+
56
+ ### Generating CRM source adapters for the Rhoconnect CRM application
57
+
58
+ Once you create your Rhoconnect CRM application, you can generate the desired source adapters
59
+ based on the CRM objects by typing the following command in your application's directory:
60
+
61
+ rhoconnect-adapters crmsource <CRM-object-name> <CRM-backend>
62
+
63
+ Here, \<CRM\-object\-name\> must exactly correspond to the name of the CRM object you're trying to
64
+ build the source adapter for.
65
+
66
+ ## Preparing the Rhoconnect CRM Application
67
+
68
+ ### OracleOnDemand settings
69
+ All OracleOnDemand-specific settings are located in the `vendor/oracle_on_demand/settings` directory.
70
+ In the file `settings.yml` you'll find the entries that you must customize before running the app.
71
+ These are:
72
+
73
+ - **:oraclecrm_service_url:** <oracle_web_services_integration_url> - substitute the default URL with your OracleOnDemand account URL.
74
+
75
+ For every source adapter based on CRM object there is a corresponding *'vendor/oracle_on_demand/settings/\<CRM\-object\-name\>.yml'*
76
+ file containing the descriptions for the OracleOnDemand CRM object.
77
+ Every CRM object file has the following entries:
78
+
79
+ Query_Fields: hash of the objects's fields
80
+ (each field's element has the value
81
+ in a form of the hash with the field's options ,
82
+ containing the following data):
83
+ Label => <val> - display name of the field
84
+ Type => <val> - type of the field data
85
+ (textinput, textarea, Picklist, id, etc.)
86
+
87
+ NonQuery_MappingWS_Fields: object's fields that can not be used
88
+ in OracleCRM Queries
89
+ (however, Oracle returns them in GetMapping API)
90
+
91
+ StaticPickList: Normally, all picklist fields are queried
92
+ for the allowed values using GetPicklistValues API
93
+ However, for certain fields OracleCRM API
94
+ returns the error 'not a valid picklist'
95
+ This entry is a workaround for this error -
96
+ fields's picklist values are statically hard-coded here.
97
+
98
+ ObjectFields: this one specifies a hash of fields
99
+ that are actually references to other objects.
100
+ For example, AccountName field for Contact object
101
+ is really a reference to the corresponding Account object.'
102
+
103
+ TitleFields: this setting specifies an array of fields
104
+ used in constructing the object's title in the 'Show' page
105
+ using the Metadata method. Typically, you will want to put
106
+ `name` fields in here.
107
+
108
+ For the default generated CRM object adapters, this file is pre-filled with information. However, you can customize it by including or excluding
109
+ options. For custom adapters, you need to fill this file with relevant information. List of object's fields, for example, can be obtained
110
+ from the Oracle CRM On Demand documentation and then later used to fill the Query_Fields setting. Alternatively, user can customize the adapter and obtain
111
+ the list of fields using the GetMapping API.
112
+
113
+
114
+ ### MsDynamics settings
115
+ All MsDynamics-specific settings are located in the **'vendor/ms_dynamics/settings'** directory.
116
+ In the file *'settings.yml'* you'll find the entries that are necessary to customize before running the app.
117
+ These are:
118
+
119
+ - **:msdynamics_ticket_url:** <msdynamics_web_services_integration_url> - substitute the default URL with your MsDynamics account URL.
120
+
121
+ For every source adapter based on CRM object there is a corresponding *'vendor/msdynamics/settings/\<CRM\-object\-name\>.yml'*
122
+ file containing the descriptions for the Sugar CRM object.
123
+ Every CRM object file has the following entries:
124
+
125
+ Query_Fields: hash of the objects's fields
126
+ (each field's element has the value
127
+ in a form of the hash with the field's options ,
128
+ containing the following data):
129
+ Label => <val> - display name of the field
130
+ Type => <val> - type of the field data
131
+ (textinput, textarea, Picklist, id, etc.)
132
+
133
+ AttributeTypePicklists: this is a hash of picklist arrays
134
+ for artificially constructed fields
135
+ that are really represent some other field's type
136
+ for example, `customerid` field can be either
137
+ `account` or `contact`. In this case
138
+ field `customertype_attrtype` will represent `customerid` field's type
139
+ and will take values from the `AttributeTypePicklists`
140
+ array for the field `customerid_attrtype`
141
+
142
+ ObjectFields: this one specifies a hash of fields
143
+ that are actually references to other objects.
144
+ For example, `account_name` field for Contact object
145
+ is really a reference to the corresponding Account object.
146
+
147
+ TitleFields: this setting specifies an array of fields
148
+ used in constructing the object's title in the 'Show' page
149
+ using the Metadata method. Typically, you will want to put
150
+ `name` fields in here.
151
+
152
+ For the default generated CRM object adapters, this file is pre-filled with information. However, you can customize it by including or excluding
153
+ options. For custom adapters, you need to fill this file with relevant information. List of object's fields, for example, can be obtained
154
+ from the MsDynamics documentation and then later used to fill the Query_Fields setting. Alternatively, user can customize the adapter and obtain
155
+ the desired list of object's fields using the MsDynamics SOAP API.
156
+
157
+ ### Sugar settings
158
+ All Sugar-specific settings are located in the **'vendor/sugar/settings'** directory.
159
+ In the file *'settings.yml'* you'll find the entries that are necessary to customize before running the app.
160
+ These are:
161
+
162
+ - **:sugarcrm_uri:** <oracle_web_services_integration_url> - substitute the default URL with your OracleOnDemand account URL.
163
+ - **:debug_enabled:** <true/false> - enable debug output of the backend HTTP transactions.
164
+
165
+ For every source adapter based on CRM object there is a corresponding *'vendor/sugar/settings/\<CRM\-object\-name\>.yml'*
166
+ file containing the descriptions for the Sugar CRM object.
167
+ Every CRM object file has the following entries:
168
+
169
+ Query_Fields: hash of the objects's fields
170
+ (each field's element has the value
171
+ in a form of the hash with the field's options ,
172
+ containing the following data):
173
+ Label => <val> - display name of the field
174
+ Type => <val> - type of the field data
175
+ (textinput, textarea, Picklist, id, etc.)
176
+
177
+ ObjectFields: this one specifies a hash of fields
178
+ that are actually references to other objects.
179
+ For example, `account_name` field for Contact object
180
+ is really a reference to the corresponding Account object.
181
+
182
+ TitleFields: this setting specifies an array of fields
183
+ used in constructing the object's title in the 'Show' page
184
+ using the Metadata method. Typically, you will want to put
185
+ `name` fields in here.
186
+
187
+ For the default generated CRM object adapters, this file is pre-filled with information. However, you can customize it by including or excluding
188
+ options. For custom adapters, you need to fill this file with relevant information. List of object's fields, for example, can be obtained
189
+ from the SugarCRM documentation and then later used to fill the Query_Fields setting. Alternatively, user can customize the adapter and obtain
190
+ the desired list of object's fields using the SugarCRM REST API.
191
+
192
+ ### Salesforce settings
193
+ All Salesforce-specific settings are located in the `vendor/salesforce/settings` directory.
194
+ In the file `settings.yml` you'll find the entries that you must customize before running the app.
195
+ These are:
196
+
197
+ - **:salesforce_login_url:** <salesforce_soap_login_url> - Currently, this parameter is pre-defined to
198
+ `https://login.salesforce.com/services/Soap/c/22.0` for simple SOAP web service authentication.
199
+ Rhoconnect-adapters is not using `OAuth2` scheme at this point.
200
+
201
+ For every source adapter based on CRM object there is a corresponding *'vendor/salesforce/settings/\<CRM\-object\-name\>.yml'*
202
+ file containing the descriptions for the OracleOnDemand CRM object.
203
+ Every CRM object file has the following entries:
204
+
205
+ Query_Fields: hash of the objects's fields
206
+ (each field's element has the value
207
+ in a form of the hash with the field's options ,
208
+ containing the following data):
209
+ Label => <val> - display name of the field
210
+ Type => <val> - type of the field data
211
+ (textinput, textarea, Picklist, datetime, id, etc.)
212
+
213
+ ObjectFields: this one specifies a hash of fields
214
+ that are actually references to other objects.
215
+ For example, AccountId field for Contact object
216
+ is really a reference to the corresponding Account object.'
217
+
218
+ TitleFields: this setting specifies an array of fields
219
+ used in constructing the object's title in the 'Show' page
220
+ using the Metadata method. Typically, you will want to put
221
+ `name` fields in here.
222
+
223
+ For the default generated CRM object adapters, this file is pre-filled with sample information. However, you can customize it by including or excluding
224
+ different fields. For custom adapters, you need to fill this file with relevant information. List of object's fields, for example, can be obtained
225
+ from the Salesforce documentation and then later used to fill the Query_Fields setting. Alternatively, user can customize the adapter and obtain
226
+ the list of fields using the `/sobjects/\<CRM\-object\-name\>/describe/` API.
227
+
228
+
229
+ ## Running the CRM Application
230
+ Once your Rhoconnect application is customized and ready to run, you can start it like any other Rhoconnect app.
231
+ Type the following command in the CRM application's root directory:
232
+
233
+ rake rhoconnect:start
234
+
235
+
236
+ ## Meta
237
+ Created and maintained by Rhomobile Inc.
238
+
239
+ Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
5
+
6
+ require 'rspec/core/rake_task'
7
+ require 'rcov/rcovtask'
8
+
9
+ TYPES = {
10
+ :gen => 'spec/generator/*_spec.rb',
11
+ :oracle => 'spec/apps/oracle_on_demand*_spec.rb',
12
+ :ms => 'spec/apps/ms_dynamics*_spec.rb',
13
+ :sugar => 'spec/apps/sugar*_spec.rb',
14
+ :salesforce => 'spec/apps/salesforce*_spec.rb'
15
+ }
16
+
17
+ TYPES.each do |type,files|
18
+ desc "Run specs in #{files}"
19
+ RSpec::Core::RakeTask.new("spec:#{type}") do |t|
20
+ t.rspec_opts = ["-b", "-c", "-fd"]
21
+ t.pattern = FileList[TYPES[type]]
22
+ end
23
+ end
24
+
25
+ desc "Run all specs"
26
+ RSpec::Core::RakeTask.new("spec:all") do |t|
27
+ t.rspec_opts = ["-b", "-c", "-fd"]
28
+ t.pattern = FileList[TYPES.values]
29
+ end
30
+
31
+ task :default => 'spec:all'
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'templater'
5
+
6
+ require File.join(File.dirname(__FILE__), '..','generators','rhoconnect-adapters')
7
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
8
+ require File.join(File.dirname(__FILE__), '..','lib','rhoconnect-adapters')
9
+
10
+ # Stub this method to force 1.8 compatibility (come on templater!)
11
+ class Encoding
12
+ def find
13
+ "utf-8"
14
+ end
15
+
16
+ def dummy?
17
+ false
18
+ end
19
+ end
20
+
21
+ class String
22
+ def force_encoding(enc)
23
+ return self
24
+ end
25
+ def encoding
26
+ if RUBY_VERSION =~ /1\.8/ and Encoding.responds_to?('new')
27
+ Encoding.new
28
+ else
29
+ Encoding.default_external
30
+ end
31
+ end
32
+ end
33
+
34
+ RhoconnectAdapters.run_cli(Dir.pwd, 'rhoconnect-adapters', RhoconnectAdapters::VERSION, ARGV)
35
+
@@ -0,0 +1,34 @@
1
+ require 'vendor/<%=underscore_crm%>/application'
2
+
3
+ class Application < RhoconnectAdapters::CRM::<%=crm_name%>::Application
4
+ class << self
5
+ def backend
6
+ '<%=underscore_crm%>'
7
+ end
8
+
9
+ def authenticate(username,password,session=nil)
10
+ super(username, password, session)
11
+ # override the default behaviour here
12
+ end
13
+
14
+ # Add hooks for application startup here
15
+ # Don't forget to call super at the end!
16
+ def initializer(path)
17
+ super
18
+ end
19
+
20
+ # Calling super here returns rack tempfile path:
21
+ # i.e. /var/folders/J4/J4wGJ-r6H7S313GEZ-Xx5E+++TI
22
+ # Note: This tempfile is removed when server stops or crashes...
23
+ # See http://rack.rubyforge.org/doc/Multipart.html for more info
24
+ #
25
+ # Override this by creating a copy of the file somewhere
26
+ # and returning the path to that file (then don't call super!):
27
+ # i.e. /mnt/myimages/soccer.png
28
+ def store_blob(object,field_name,blob)
29
+ super #=> returns blob[:tempfile]
30
+ end
31
+ end
32
+ end
33
+
34
+ Application.initializer(ROOT_PATH)
@@ -0,0 +1,10 @@
1
+ require 'vendor/<%=underscore_crm%>/adapter'
2
+
3
+ class <%=class_name%> < RhoconnectAdapters::CRM::<%=crm_name%>::Adapter
4
+ def initialize(source)
5
+ super(source)
6
+ @crm_object = self.class.name
7
+ @fields = configure_fields
8
+ end
9
+
10
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__),'..','spec_helper')
2
+
3
+ describe "<%=class_name%>" do
4
+ it_should_behave_like "SpecHelper" do
5
+ before(:each) do
6
+ setup_test_for <%=class_name%>,'testuser'
7
+ end
8
+
9
+ it "should process <%=class_name%> query" do
10
+ pending
11
+ end
12
+
13
+ it "should process <%=class_name%> create" do
14
+ pending
15
+ end
16
+
17
+ it "should process <%=class_name%> update" do
18
+ pending
19
+ end
20
+
21
+ it "should process <%=class_name%> delete" do
22
+ pending
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,64 @@
1
+ require 'rubygems'
2
+
3
+ # Set environment to test
4
+ ENV['RHO_ENV'] = 'test'
5
+ ROOT_PATH = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+
7
+ require 'bundler'
8
+ Bundler.require(:default, ENV['RHO_ENV'].to_sym)
9
+
10
+ # Try to load vendor-ed rhoconnect, otherwise load the gem
11
+ begin
12
+ require 'vendor/rhoconnect/lib/rhoconnect'
13
+ rescue LoadError
14
+ require 'rhoconnect'
15
+ end
16
+
17
+ $:.unshift File.join(File.dirname(__FILE__), "..") # FIXME:
18
+ # Load our rhoconnect application
19
+ require 'application'
20
+ include Rhoconnect
21
+
22
+ require 'rhoconnect/test_methods'
23
+
24
+ # Monkey patch to fix the following issue:
25
+ # /Library/Ruby/Gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/shared_example_group.rb:45:
26
+ # in `ensure_shared_example_group_name_not_taken': Shared example group '...' already exists (ArgumentError)
27
+ module RSpec
28
+ module Core
29
+ module SharedExampleGroup
30
+ private
31
+ def ensure_shared_example_group_name_not_taken(name)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ module TestHelpers
38
+ class << self
39
+ @created_records = {}
40
+ attr_accessor :created_records
41
+ end
42
+ end
43
+
44
+ shared_examples_for "SpecHelper" do
45
+ include Rhoconnect::TestMethods
46
+
47
+ def load_credentials(backend)
48
+ file = YAML.load_file(File.join(ROOT_PATH,'..','rhoconnect-adapters-test',"#{Rhoconnect.under_score(backend)}.yml"))
49
+ return file.nil? ? {} : file
50
+ end
51
+
52
+ before(:all) do
53
+ credentials = load_credentials(Application.backend)
54
+ @test_user = "#{credentials[:test_user]}"
55
+ @test_password = "#{credentials[:test_password]}"
56
+ puts "Specify test user before running these specs" unless @test_user.length > 0
57
+ puts "Specify test user password before running these specs" unless @test_password.length > 0
58
+ end
59
+
60
+ before(:each) do
61
+ Store.db.flushdb
62
+ Application.initializer(ROOT_PATH)
63
+ end
64
+ end