metaforce 0.5.3 → 1.0.0a

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 (72) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +1 -11
  4. data/LICENSE +22 -0
  5. data/README.md +91 -96
  6. data/Rakefile +6 -14
  7. data/examples/example.rb +51 -0
  8. data/lib/metaforce/abstract_client.rb +76 -0
  9. data/lib/metaforce/client.rb +27 -0
  10. data/lib/metaforce/config.rb +41 -19
  11. data/lib/metaforce/job/crud.rb +13 -0
  12. data/lib/metaforce/job/deploy.rb +87 -0
  13. data/lib/metaforce/job/retrieve.rb +92 -0
  14. data/lib/metaforce/job.rb +183 -0
  15. data/lib/metaforce/login.rb +39 -0
  16. data/lib/metaforce/manifest.rb +18 -93
  17. data/lib/metaforce/metadata/client/crud.rb +86 -0
  18. data/lib/metaforce/metadata/client/file.rb +113 -0
  19. data/lib/metaforce/metadata/client.rb +7 -225
  20. data/lib/metaforce/services/client.rb +45 -86
  21. data/lib/metaforce/version.rb +1 -1
  22. data/lib/metaforce.rb +27 -7
  23. data/metaforce.gemspec +19 -16
  24. data/spec/fixtures/package.xml +1 -1
  25. data/spec/fixtures/payload.zip +0 -0
  26. data/spec/fixtures/requests/{describe_layout → foo}/invalid_session.xml +0 -0
  27. data/spec/fixtures/requests/send_email/success.xml +1 -0
  28. data/spec/lib/client_spec.rb +34 -0
  29. data/spec/lib/config_spec.rb +8 -50
  30. data/spec/lib/job/deploy_spec.rb +53 -0
  31. data/spec/lib/job/retrieve_spec.rb +28 -0
  32. data/spec/lib/job_spec.rb +95 -0
  33. data/spec/lib/login_spec.rb +18 -0
  34. data/spec/lib/manifest_spec.rb +22 -168
  35. data/spec/lib/metadata/client_spec.rb +84 -179
  36. data/spec/lib/metaforce_spec.rb +20 -0
  37. data/spec/lib/services/client_spec.rb +22 -35
  38. data/spec/spec_helper.rb +24 -3
  39. data/spec/support/client.rb +38 -0
  40. data/wsdl/26.0/metadata.xml +4750 -0
  41. data/wsdl/26.0/partner.xml +3340 -0
  42. metadata +114 -77
  43. data/Guardfile +0 -9
  44. data/bin/metaforce +0 -6
  45. data/lib/metaforce/core_extensions/string.rb +0 -31
  46. data/lib/metaforce/core_extensions.rb +0 -1
  47. data/lib/metaforce/custom_actions.rb +0 -29
  48. data/lib/metaforce/error.rb +0 -3
  49. data/lib/metaforce/login_details.rb +0 -28
  50. data/lib/metaforce/metadata/crud.rb +0 -103
  51. data/lib/metaforce/metadata/file.rb +0 -74
  52. data/lib/metaforce/metadata/transaction.rb +0 -100
  53. data/lib/metaforce/metadata.rb +0 -4
  54. data/lib/metaforce/rake/deploy.rb +0 -35
  55. data/lib/metaforce/rake/retrieve.rb +0 -39
  56. data/lib/metaforce/rake/tests.rb +0 -62
  57. data/lib/metaforce/rake.rb +0 -43
  58. data/lib/metaforce/services.rb +0 -1
  59. data/lib/metaforce/tasks/README.md +0 -62
  60. data/lib/metaforce/tasks/metaforce.rake +0 -5
  61. data/lib/metaforce/thor/metaforce.rb +0 -117
  62. data/lib/metaforce/types.rb +0 -249
  63. data/spec/.gitignore +0 -1
  64. data/spec/fixtures/sample/Rakefile +0 -2
  65. data/spec/fixtures/sample/metaforce.yml +0 -13
  66. data/spec/fixtures/sample/src/classes/TestClass.cls +0 -2
  67. data/spec/fixtures/sample/src/classes/TestClass.cls-meta.xml +0 -5
  68. data/spec/fixtures/sample/src/package.xml +0 -8
  69. data/spec/lib/core_extensions/string_spec.rb +0 -23
  70. data/spec/lib/metadata/crud_spec.rb +0 -66
  71. data/spec/lib/metadata/file_spec.rb +0 -17
  72. data/spec/lib/metadata/transaction_spec.rb +0 -68
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metaforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
5
- prerelease:
4
+ version: 1.0.0a
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Eric J. Holmes
@@ -10,44 +10,59 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-08 00:00:00.000000000 Z
13
+ date: 2012-12-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: nokogiri
17
- requirement: &70358490014360 !ruby/object:Gem::Requirement
16
+ name: savon
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 1.5.0
22
+ version: 1.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70358490014360
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 1.2.0
26
31
  - !ruby/object:Gem::Dependency
27
- name: savon
28
- requirement: &70358490013020 !ruby/object:Gem::Requirement
32
+ name: rubyzip
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
32
37
  - !ruby/object:Gem::Version
33
- version: 0.9.7
38
+ version: 0.9.9
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70358490013020
37
- - !ruby/object:Gem::Dependency
38
- name: rubyzip
39
- requirement: &70358490535420 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
40
42
  none: false
41
43
  requirements:
42
44
  - - ~>
43
45
  - !ruby/object:Gem::Version
44
- version: 0.9.5
46
+ version: 0.9.9
47
+ - !ruby/object:Gem::Dependency
48
+ name: activesupport
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70358490535420
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
- name: term-ansicolor
50
- requirement: &70358490534380 !ruby/object:Gem::Requirement
64
+ name: hashie
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :runtime
57
72
  prerelease: false
58
- version_requirements: *70358490534380
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: rake
61
- requirement: &70358490533300 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70358490533300
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: rspec
72
- requirement: &70358490532440 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: '0'
78
103
  type: :development
79
104
  prerelease: false
80
- version_requirements: *70358490532440
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
81
111
  - !ruby/object:Gem::Dependency
82
- name: mocha
83
- requirement: &70358490531480 !ruby/object:Gem::Requirement
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ! '>='
@@ -88,61 +118,62 @@ dependencies:
88
118
  version: '0'
89
119
  type: :development
90
120
  prerelease: false
91
- version_requirements: *70358490531480
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
92
127
  - !ruby/object:Gem::Dependency
93
128
  name: savon_spec
94
- requirement: &70358490530020 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ~>
98
133
  - !ruby/object:Gem::Version
99
- version: 0.1.6
134
+ version: 1.3.0
100
135
  type: :development
101
136
  prerelease: false
102
- version_requirements: *70358490530020
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: 1.3.0
103
143
  description: A Ruby gem for interacting with the Salesforce Metadata API
104
144
  email:
105
145
  - eric@ejholmes.net
106
146
  - Kevinp@madronasg.com
107
- executables:
108
- - metaforce
147
+ executables: []
109
148
  extensions: []
110
149
  extra_rdoc_files: []
111
150
  files:
112
151
  - .gitignore
152
+ - .rspec
113
153
  - .travis.yml
114
154
  - Gemfile
115
- - Guardfile
155
+ - LICENSE
116
156
  - README.md
117
157
  - Rakefile
118
- - bin/metaforce
158
+ - examples/example.rb
119
159
  - lib/metaforce.rb
160
+ - lib/metaforce/abstract_client.rb
161
+ - lib/metaforce/client.rb
120
162
  - lib/metaforce/config.rb
121
- - lib/metaforce/core_extensions.rb
122
- - lib/metaforce/core_extensions/string.rb
123
- - lib/metaforce/custom_actions.rb
124
- - lib/metaforce/error.rb
125
- - lib/metaforce/login_details.rb
163
+ - lib/metaforce/job.rb
164
+ - lib/metaforce/job/crud.rb
165
+ - lib/metaforce/job/deploy.rb
166
+ - lib/metaforce/job/retrieve.rb
167
+ - lib/metaforce/login.rb
126
168
  - lib/metaforce/manifest.rb
127
- - lib/metaforce/metadata.rb
128
169
  - lib/metaforce/metadata/client.rb
129
- - lib/metaforce/metadata/crud.rb
130
- - lib/metaforce/metadata/file.rb
131
- - lib/metaforce/metadata/transaction.rb
132
- - lib/metaforce/rake.rb
133
- - lib/metaforce/rake/deploy.rb
134
- - lib/metaforce/rake/retrieve.rb
135
- - lib/metaforce/rake/tests.rb
136
- - lib/metaforce/services.rb
170
+ - lib/metaforce/metadata/client/crud.rb
171
+ - lib/metaforce/metadata/client/file.rb
137
172
  - lib/metaforce/services/client.rb
138
- - lib/metaforce/tasks/README.md
139
- - lib/metaforce/tasks/metaforce.rake
140
- - lib/metaforce/thor/metaforce.rb
141
- - lib/metaforce/types.rb
142
173
  - lib/metaforce/version.rb
143
174
  - metaforce.gemspec
144
- - spec/.gitignore
145
175
  - spec/fixtures/package.xml
176
+ - spec/fixtures/payload.zip
146
177
  - spec/fixtures/requests/check_deploy_status/done.xml
147
178
  - spec/fixtures/requests/check_deploy_status/error.xml
148
179
  - spec/fixtures/requests/check_retrieve_status/success.xml
@@ -151,34 +182,38 @@ files:
151
182
  - spec/fixtures/requests/create/in_progress.xml
152
183
  - spec/fixtures/requests/delete/in_progress.xml
153
184
  - spec/fixtures/requests/deploy/in_progress.xml
154
- - spec/fixtures/requests/describe_layout/invalid_session.xml
155
185
  - spec/fixtures/requests/describe_layout/success.xml
156
186
  - spec/fixtures/requests/describe_metadata/success.xml
187
+ - spec/fixtures/requests/foo/invalid_session.xml
157
188
  - spec/fixtures/requests/list_metadata/no_result.xml
158
189
  - spec/fixtures/requests/list_metadata/objects.xml
159
190
  - spec/fixtures/requests/login/failure.xml
160
191
  - spec/fixtures/requests/login/success.xml
161
192
  - spec/fixtures/requests/retrieve/in_progress.xml
193
+ - spec/fixtures/requests/send_email/success.xml
162
194
  - spec/fixtures/requests/update/in_progress.xml
163
- - spec/fixtures/sample/Rakefile
164
- - spec/fixtures/sample/metaforce.yml
165
- - spec/fixtures/sample/src/classes/TestClass.cls
166
- - spec/fixtures/sample/src/classes/TestClass.cls-meta.xml
167
- - spec/fixtures/sample/src/package.xml
195
+ - spec/lib/client_spec.rb
168
196
  - spec/lib/config_spec.rb
169
- - spec/lib/core_extensions/string_spec.rb
197
+ - spec/lib/job/deploy_spec.rb
198
+ - spec/lib/job/retrieve_spec.rb
199
+ - spec/lib/job_spec.rb
200
+ - spec/lib/login_spec.rb
170
201
  - spec/lib/manifest_spec.rb
171
202
  - spec/lib/metadata/client_spec.rb
172
- - spec/lib/metadata/crud_spec.rb
173
- - spec/lib/metadata/file_spec.rb
174
- - spec/lib/metadata/transaction_spec.rb
203
+ - spec/lib/metaforce_spec.rb
175
204
  - spec/lib/services/client_spec.rb
176
205
  - spec/spec_helper.rb
206
+ - spec/support/client.rb
177
207
  - wsdl/23.0/metadata.xml
178
208
  - wsdl/23.0/partner.xml
209
+ - wsdl/26.0/metadata.xml
210
+ - wsdl/26.0/partner.xml
179
211
  homepage: https://github.com/ejholmes/metaforce
180
212
  licenses: []
181
- post_install_message:
213
+ post_install_message: ! 'Warning! Metaforce 1.0.x is a complete rewrite and is not
214
+ backwards compatible with 0.5.x
215
+
216
+ '
182
217
  rdoc_options: []
183
218
  require_paths:
184
219
  - lib
@@ -188,20 +223,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
223
  - - ! '>='
189
224
  - !ruby/object:Gem::Version
190
225
  version: '0'
226
+ segments:
227
+ - 0
228
+ hash: -4477921491118908816
191
229
  required_rubygems_version: !ruby/object:Gem::Requirement
192
230
  none: false
193
231
  requirements:
194
- - - ! '>='
232
+ - - ! '>'
195
233
  - !ruby/object:Gem::Version
196
- version: '0'
234
+ version: 1.3.1
197
235
  requirements: []
198
236
  rubyforge_project: metaforce
199
- rubygems_version: 1.8.11
237
+ rubygems_version: 1.8.23
200
238
  signing_key:
201
239
  specification_version: 3
202
240
  summary: A Ruby gem for interacting with the Salesforce Metadata API
203
241
  test_files:
204
242
  - spec/fixtures/package.xml
243
+ - spec/fixtures/payload.zip
205
244
  - spec/fixtures/requests/check_deploy_status/done.xml
206
245
  - spec/fixtures/requests/check_deploy_status/error.xml
207
246
  - spec/fixtures/requests/check_retrieve_status/success.xml
@@ -210,27 +249,25 @@ test_files:
210
249
  - spec/fixtures/requests/create/in_progress.xml
211
250
  - spec/fixtures/requests/delete/in_progress.xml
212
251
  - spec/fixtures/requests/deploy/in_progress.xml
213
- - spec/fixtures/requests/describe_layout/invalid_session.xml
214
252
  - spec/fixtures/requests/describe_layout/success.xml
215
253
  - spec/fixtures/requests/describe_metadata/success.xml
254
+ - spec/fixtures/requests/foo/invalid_session.xml
216
255
  - spec/fixtures/requests/list_metadata/no_result.xml
217
256
  - spec/fixtures/requests/list_metadata/objects.xml
218
257
  - spec/fixtures/requests/login/failure.xml
219
258
  - spec/fixtures/requests/login/success.xml
220
259
  - spec/fixtures/requests/retrieve/in_progress.xml
260
+ - spec/fixtures/requests/send_email/success.xml
221
261
  - spec/fixtures/requests/update/in_progress.xml
222
- - spec/fixtures/sample/Rakefile
223
- - spec/fixtures/sample/metaforce.yml
224
- - spec/fixtures/sample/src/classes/TestClass.cls
225
- - spec/fixtures/sample/src/classes/TestClass.cls-meta.xml
226
- - spec/fixtures/sample/src/package.xml
262
+ - spec/lib/client_spec.rb
227
263
  - spec/lib/config_spec.rb
228
- - spec/lib/core_extensions/string_spec.rb
264
+ - spec/lib/job/deploy_spec.rb
265
+ - spec/lib/job/retrieve_spec.rb
266
+ - spec/lib/job_spec.rb
267
+ - spec/lib/login_spec.rb
229
268
  - spec/lib/manifest_spec.rb
230
269
  - spec/lib/metadata/client_spec.rb
231
- - spec/lib/metadata/crud_spec.rb
232
- - spec/lib/metadata/file_spec.rb
233
- - spec/lib/metadata/transaction_spec.rb
270
+ - spec/lib/metaforce_spec.rb
234
271
  - spec/lib/services/client_spec.rb
235
272
  - spec/spec_helper.rb
236
- has_rdoc:
273
+ - spec/support/client.rb
data/Guardfile DELETED
@@ -1,9 +0,0 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
- group :specs do
5
- guard :rspec do
6
- watch(%r{^spec/.+_spec\.rb$})
7
- watch(%r{^lib/metaforce/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
8
- end
9
- end
data/bin/metaforce DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require './lib/metaforce/thor/metaforce'
4
-
5
- MetaForce.new :shell => Thor::Shell::Color.new
6
- MetaForce.start
@@ -1,31 +0,0 @@
1
- module Metaforce
2
- module CoreExtensions
3
- module String
4
-
5
- def camelcase
6
- str = dup
7
- str.gsub!(/^[a-z]|_[a-z]/) { |a| a.upcase }
8
- str.gsub!('_', '')
9
- str
10
- end unless method_defined?(:camelcase)
11
-
12
- def lower_camelcase
13
- str = dup
14
- str.gsub!(/_[a-z]/) { |a| a.upcase }
15
- str.gsub!('_', '')
16
- str
17
- end unless method_defined?(:lower_camelcase)
18
-
19
- def underscore
20
- self.gsub(/::/, '/').
21
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
22
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
23
- tr("-", "_").
24
- downcase
25
- end unless method_defined?(:underscore)
26
-
27
- end
28
- end
29
- end
30
-
31
- String.send :include, Metaforce::CoreExtensions::String
@@ -1 +0,0 @@
1
- require 'metaforce/core_extensions/string'
@@ -1,29 +0,0 @@
1
- class Thor
2
- module Actions
3
- module CustomActions
4
- require 'highline'
5
-
6
- def masked_ask(question)
7
- password = HighLine.new.ask(question) { |q| q.echo = '*' }
8
- end
9
-
10
- def spinner(&block)
11
- return unless block_given?
12
- chars = %w{ | / - \\ }
13
-
14
- t = Thread.new { yield if block_given? }
15
- while t.alive?
16
- print chars[0]
17
- sleep 0.1
18
- print "\b"
19
-
20
- chars.push chars.shift
21
- end
22
-
23
- t.join
24
- t.value
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,3 +0,0 @@
1
- module Metaforce
2
- class SalesforceError < StandardError; end
3
- end
@@ -1,28 +0,0 @@
1
- class LoginDetails
2
- require 'yaml'
3
-
4
- attr_accessor :username, :password, :security_token, :sandbox, :log
5
- STORAGE_LOCATION = "#{Dir.pwd}/.git/force.com.config"
6
-
7
- def initialize(user, pass, security_token, sandbox, log = nil)
8
- @username = user
9
- @password = pass
10
- @security_token = security_token
11
- @sandbox = sandbox
12
- @log = log
13
- end
14
-
15
- def save!
16
- File.open(STORAGE_LOCATION, "w+") do |file|
17
- file.print Marshal::dump(self)
18
- end
19
- end
20
-
21
- def self.load
22
- $/="---_---" #record separator
23
- File.open(STORAGE_LOCATION, "r") do |object|
24
- return Marshal::load(object)
25
- end
26
- end
27
-
28
- end
@@ -1,103 +0,0 @@
1
- require 'base64'
2
-
3
- module Metaforce
4
- module Metadata
5
- module CRUD
6
-
7
- # Create metadata
8
- #
9
- # == Examples
10
- #
11
- # client.create(:apex_page, :full_name => 'TestPage')
12
- def create(type, metadata={})
13
- metadata = prepare_metadata(type, metadata)
14
- type = type.to_s.camelcase
15
- response = @client.request(:create) do |soap|
16
- soap.header = @header
17
- soap.body = {
18
- :metadata => metadata,
19
- :attributes! => { "ins0:metadata" => { "xsi:type" => "wsdl:#{type}" } }
20
- }
21
- end
22
- Transaction.new self, response.body[:create_response][:result][:id]
23
- end
24
-
25
- # Update metadata
26
- #
27
- # == Examples
28
- #
29
- # client.update(:apex_page, 'OldPage', :full_name => 'NewPage')
30
- def update(type, current_name, metadata={})
31
- metadata = prepare_metadata(type, metadata)
32
- type = type.to_s.camelcase
33
- response = @client.request(:update) do |soap|
34
- soap.header = @header
35
- soap.body = {
36
- :metadata => {
37
- :current_name => current_name,
38
- :metadata => metadata,
39
- :attributes! => { :metadata => { "xsi:type" => "wsdl:#{type}" } }
40
- }
41
- }
42
- end
43
- Transaction.new self, response.body[:update_response][:result][:id]
44
- end
45
-
46
- # Delete metadata
47
- #
48
- # == Examples
49
- #
50
- # client.delete(:apex_page, :full_name => 'TestPage')
51
- def delete(type, full_name)
52
- full_name = [full_name] unless full_name.is_a?(Array)
53
- metadata = []
54
- full_name.each do |f|
55
- metadata << { :full_name => f }
56
- end
57
- type = type.to_s.camelcase
58
- response = @client.request(:delete) do |soap|
59
- soap.header = @header
60
- soap.body = {
61
- :metadata => metadata,
62
- :attributes! => { "ins0:metadata" => { "xsi:type" => "wsdl:#{type}" } }
63
- }
64
- end
65
- Transaction.new self, response.body[:delete_response][:result][:id]
66
- end
67
-
68
- private
69
-
70
- def prepare_metadata(type, metadata)
71
- metadata = [metadata] unless metadata.is_a?(Array)
72
- metadata.each_with_index do |m, i|
73
- template = Metaforce::Metadata::MetadataFile.template(type)
74
- m = template.merge(m) if template
75
- metadata[i] = m
76
- end
77
- metadata = encode_content(metadata)
78
- end
79
-
80
- def encode_content(metadata)
81
- metadata.each do |m|
82
- m[:content] = Base64.encode64(m[:content]) if m.has_key?(:content)
83
- end
84
- metadata
85
- end
86
-
87
- def method_missing(name, *args, &block)
88
- if name =~ /^create_(.*)$/
89
- create($1.to_sym, *args)
90
- elsif name =~ /^update_(.*)$/
91
- update($1.to_sym, *args)
92
- elsif name =~ /^delete_(.*)$/
93
- delete($1.to_sym, *args)
94
- else
95
- super
96
- end
97
- end
98
-
99
- end
100
- end
101
- end
102
-
103
- Metaforce::Metadata::Client.send :include, Metaforce::Metadata::CRUD
@@ -1,74 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Metaforce
4
- module Metadata
5
- class MetadataFile < Hash
6
-
7
- # Initialize the underlying hash
8
- def initialize(hash, type)
9
- super(hash)
10
- @type = type
11
- replace(hash)
12
- end
13
-
14
- def type
15
- @type
16
- end
17
-
18
- # Builds a new MetadataFile object based on the template
19
- #
20
- # == Examples
21
- #
22
- # Metaforce::Metadata::MetadataFile.template(:apex_class)
23
- # #=> {:api_version=>"23.0", :status=>"Active"}
24
- def self.template(type)
25
- Metaforce::Metadata::MetadataFile.new(TEMPLATES[type], type)
26
- end
27
-
28
- # Returns the xml representation of the underlying hash structure
29
- #
30
- # == Examples
31
- #
32
- # f = Metaforce::Metadata::MetadataFile.template(:apex_class)
33
- # f.to_xml
34
- # #=> "<?xml version=\"1.0\"?>\n<ApexClass xmlns=\"http://soap.sforce.com/2006/04/metadata\">\n <apiVersion>23.0</apiVersion>\n <status>Active</status>\n</ApexClass>\n"
35
- def to_xml
36
- xml_builder = Nokogiri::XML::Builder.new do |xml|
37
- xml.send(type.to_s.camelcase, "xmlns" => "http://soap.sforce.com/2006/04/metadata") do
38
- self.each do |key, value|
39
- xml.send(key.to_s.lower_camelcase, value)
40
- end
41
- end
42
- end
43
- xml_builder.to_xml
44
- end
45
-
46
- private
47
-
48
- # Metadata file templates
49
- TEMPLATES = {
50
- :apex_class => {
51
- :api_version => Metaforce.configuration.api_version,
52
- :status => "Active"
53
- },
54
- :apex_component => {
55
- :api_version => Metaforce.configuration.api_version,
56
- :description => '',
57
- :label => '',
58
- :content => "<apex:component>\n</apex:component>"
59
- },
60
- :apex_page => {
61
- :api_version => Metaforce.configuration.api_version,
62
- :description => '',
63
- :label => '',
64
- :content => "<apex:page>\n</apex:page>"
65
- },
66
- :apex_trigger => {
67
- :api_version => Metaforce.configuration.api_version,
68
- :status => "Active"
69
- }
70
- }
71
-
72
- end
73
- end
74
- end