metaforce 0.5.3 → 1.0.0a

Sign up to get free protection for your applications and to get access to all the features.
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