rhoconnect-adapters 1.0.0.beta1

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.
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