metaforce 0.5.3 → 1.0.0a
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/Gemfile +1 -11
- data/LICENSE +22 -0
- data/README.md +91 -96
- data/Rakefile +6 -14
- data/examples/example.rb +51 -0
- data/lib/metaforce/abstract_client.rb +76 -0
- data/lib/metaforce/client.rb +27 -0
- data/lib/metaforce/config.rb +41 -19
- data/lib/metaforce/job/crud.rb +13 -0
- data/lib/metaforce/job/deploy.rb +87 -0
- data/lib/metaforce/job/retrieve.rb +92 -0
- data/lib/metaforce/job.rb +183 -0
- data/lib/metaforce/login.rb +39 -0
- data/lib/metaforce/manifest.rb +18 -93
- data/lib/metaforce/metadata/client/crud.rb +86 -0
- data/lib/metaforce/metadata/client/file.rb +113 -0
- data/lib/metaforce/metadata/client.rb +7 -225
- data/lib/metaforce/services/client.rb +45 -86
- data/lib/metaforce/version.rb +1 -1
- data/lib/metaforce.rb +27 -7
- data/metaforce.gemspec +19 -16
- data/spec/fixtures/package.xml +1 -1
- data/spec/fixtures/payload.zip +0 -0
- data/spec/fixtures/requests/{describe_layout → foo}/invalid_session.xml +0 -0
- data/spec/fixtures/requests/send_email/success.xml +1 -0
- data/spec/lib/client_spec.rb +34 -0
- data/spec/lib/config_spec.rb +8 -50
- data/spec/lib/job/deploy_spec.rb +53 -0
- data/spec/lib/job/retrieve_spec.rb +28 -0
- data/spec/lib/job_spec.rb +95 -0
- data/spec/lib/login_spec.rb +18 -0
- data/spec/lib/manifest_spec.rb +22 -168
- data/spec/lib/metadata/client_spec.rb +84 -179
- data/spec/lib/metaforce_spec.rb +20 -0
- data/spec/lib/services/client_spec.rb +22 -35
- data/spec/spec_helper.rb +24 -3
- data/spec/support/client.rb +38 -0
- data/wsdl/26.0/metadata.xml +4750 -0
- data/wsdl/26.0/partner.xml +3340 -0
- metadata +114 -77
- data/Guardfile +0 -9
- data/bin/metaforce +0 -6
- data/lib/metaforce/core_extensions/string.rb +0 -31
- data/lib/metaforce/core_extensions.rb +0 -1
- data/lib/metaforce/custom_actions.rb +0 -29
- data/lib/metaforce/error.rb +0 -3
- data/lib/metaforce/login_details.rb +0 -28
- data/lib/metaforce/metadata/crud.rb +0 -103
- data/lib/metaforce/metadata/file.rb +0 -74
- data/lib/metaforce/metadata/transaction.rb +0 -100
- data/lib/metaforce/metadata.rb +0 -4
- data/lib/metaforce/rake/deploy.rb +0 -35
- data/lib/metaforce/rake/retrieve.rb +0 -39
- data/lib/metaforce/rake/tests.rb +0 -62
- data/lib/metaforce/rake.rb +0 -43
- data/lib/metaforce/services.rb +0 -1
- data/lib/metaforce/tasks/README.md +0 -62
- data/lib/metaforce/tasks/metaforce.rake +0 -5
- data/lib/metaforce/thor/metaforce.rb +0 -117
- data/lib/metaforce/types.rb +0 -249
- data/spec/.gitignore +0 -1
- data/spec/fixtures/sample/Rakefile +0 -2
- data/spec/fixtures/sample/metaforce.yml +0 -13
- data/spec/fixtures/sample/src/classes/TestClass.cls +0 -2
- data/spec/fixtures/sample/src/classes/TestClass.cls-meta.xml +0 -5
- data/spec/fixtures/sample/src/package.xml +0 -8
- data/spec/lib/core_extensions/string_spec.rb +0 -23
- data/spec/lib/metadata/crud_spec.rb +0 -66
- data/spec/lib/metadata/file_spec.rb +0 -17
- data/spec/lib/metadata/transaction_spec.rb +0 -68
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'base64'
|
2
|
-
|
3
|
-
module Metaforce
|
4
|
-
|
5
|
-
# Convenience class for deployment/retrieval results
|
6
|
-
class Transaction
|
7
|
-
# The Salesforce ID for this task
|
8
|
-
attr_reader :id
|
9
|
-
# The type of transaction (e.g. _:deploy_, _:retrieve_)
|
10
|
-
attr_reader :type
|
11
|
-
|
12
|
-
def initialize(client, id, type=nil)
|
13
|
-
@client = client
|
14
|
-
@id = id
|
15
|
-
@type = type
|
16
|
-
wait_until_done if Metaforce.configuration.wait_until_done
|
17
|
-
end
|
18
|
-
|
19
|
-
# Creates a new transaction and sets type to +:deploy+.
|
20
|
-
def self.deployment(client, id)
|
21
|
-
self.new client, id, :deploy
|
22
|
-
end
|
23
|
-
|
24
|
-
# Creates a new transaction and sets type to +:retrieve+.
|
25
|
-
def self.retrieval(client, id)
|
26
|
-
self.new client, id, :retrieve
|
27
|
-
end
|
28
|
-
|
29
|
-
# Wrapper for <tt>Client.status</tt>.
|
30
|
-
def status
|
31
|
-
@status = @client.status(@id)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Wrapper for <tt>Client.done?</tt>.
|
35
|
-
def done?
|
36
|
-
@done = @client.done?(@id) unless @done
|
37
|
-
@done
|
38
|
-
end
|
39
|
-
alias :complete? :done?
|
40
|
-
alias :completed? :done?
|
41
|
-
|
42
|
-
# Returns the decoded content of the returned zip file.
|
43
|
-
def zip_file
|
44
|
-
raise 'Request was not a retrieve.' unless @type == :retrieve
|
45
|
-
Base64.decode64(result[:zip_file])
|
46
|
-
end
|
47
|
-
|
48
|
-
# Unzips the returned zip file to +destination+.
|
49
|
-
def to(destination)
|
50
|
-
zip = zip_file
|
51
|
-
file = Tempfile.new('retrieve')
|
52
|
-
file.write(zip)
|
53
|
-
path = file.path
|
54
|
-
file.close
|
55
|
-
|
56
|
-
Zip::ZipFile.open(path) do |zip|
|
57
|
-
zip.each do |f|
|
58
|
-
path = File.join(destination, f.name)
|
59
|
-
FileUtils.mkdir_p(File.dirname(path))
|
60
|
-
zip.extract(f, path) { true }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
self
|
64
|
-
end
|
65
|
-
|
66
|
-
# Returns the deploy or retrieve result
|
67
|
-
def result(options={})
|
68
|
-
@result = @client.status(@id, @type) if @result.nil?
|
69
|
-
raise SalesforceError, @result[:message] if @result[:state] == "Error"
|
70
|
-
@result
|
71
|
-
end
|
72
|
-
|
73
|
-
# Enters a loop until .done? returns true
|
74
|
-
def wait_until_done
|
75
|
-
max_wait = 30
|
76
|
-
wait_time = 1
|
77
|
-
until self.done?
|
78
|
-
sleep(wait_time)
|
79
|
-
if wait_time < 30
|
80
|
-
wait_time *= 2
|
81
|
-
else
|
82
|
-
wait_time = max_wait
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
BLACK_LIST = [:@client]
|
88
|
-
|
89
|
-
def to_s
|
90
|
-
public_vars = self.instance_variables.reject { |var|
|
91
|
-
BLACK_LIST.include? var
|
92
|
-
}.map { |var|
|
93
|
-
"#{var}=\"#{instance_variable_get(var)}\""
|
94
|
-
}.join(" ")
|
95
|
-
|
96
|
-
"<##{self.class}:#{self.object_id.to_s(8)} #{public_vars}>"
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
end
|
data/lib/metaforce/metadata.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'metaforce'
|
2
|
-
require 'term/ansicolor'
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/tasklib'
|
5
|
-
include Term::ANSIColor
|
6
|
-
|
7
|
-
module Metaforce
|
8
|
-
module Rake
|
9
|
-
|
10
|
-
class DeployTask < ::Rake::TaskLib
|
11
|
-
attr_accessor :name
|
12
|
-
|
13
|
-
# The directory to deploy
|
14
|
-
attr_accessor :directory
|
15
|
-
|
16
|
-
def initialize(name = 'metaforce:deploy')
|
17
|
-
@name = name
|
18
|
-
@directory = File.expand_path('src')
|
19
|
-
yield self if block_given?
|
20
|
-
define
|
21
|
-
end
|
22
|
-
|
23
|
-
def define
|
24
|
-
desc "Deploy metadata"
|
25
|
-
task @name do
|
26
|
-
client = Metaforce::Rake.client
|
27
|
-
d = client.deploy(@directory)
|
28
|
-
puts green "Deployed #{@directory} successfully" if d.result[:success]
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'metaforce'
|
2
|
-
require 'term/ansicolor'
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/tasklib'
|
5
|
-
include Term::ANSIColor
|
6
|
-
|
7
|
-
module Metaforce
|
8
|
-
module Rake
|
9
|
-
|
10
|
-
class RetrieveTask < ::Rake::TaskLib
|
11
|
-
attr_accessor :name
|
12
|
-
|
13
|
-
# Path to the manifest file
|
14
|
-
attr_accessor :manifest
|
15
|
-
|
16
|
-
# The directory to unzip the retrieved files to
|
17
|
-
attr_accessor :directory
|
18
|
-
|
19
|
-
def initialize(name = 'metaforce:retrieve')
|
20
|
-
@name = name
|
21
|
-
@manifest = File.expand_path('src/package.xml')
|
22
|
-
@directory = File.expand_path('retrieved')
|
23
|
-
yield self if block_given?
|
24
|
-
define
|
25
|
-
end
|
26
|
-
|
27
|
-
def define
|
28
|
-
desc "Retrieve metadata"
|
29
|
-
task @name do
|
30
|
-
client = Metaforce::Rake.client
|
31
|
-
r = client.retrieve_unpackaged(@manifest).to(@directory)
|
32
|
-
puts green "Files retrieved sucessfully to #{@directory}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
data/lib/metaforce/rake/tests.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'metaforce'
|
2
|
-
require 'term/ansicolor'
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/tasklib'
|
5
|
-
include Term::ANSIColor
|
6
|
-
|
7
|
-
module Metaforce
|
8
|
-
module Rake
|
9
|
-
|
10
|
-
class TestsTask < ::Rake::TaskLib
|
11
|
-
attr_accessor :name
|
12
|
-
|
13
|
-
# The directory to deploy
|
14
|
-
attr_accessor :directory
|
15
|
-
|
16
|
-
def initialize(name = 'metaforce:tests:ci')
|
17
|
-
@name = name
|
18
|
-
@directory = File.expand_path('src')
|
19
|
-
yield self if block_given?
|
20
|
-
define
|
21
|
-
end
|
22
|
-
|
23
|
-
def define
|
24
|
-
desc "Deploy metadata, run all tests, then undeploy"
|
25
|
-
task @name do
|
26
|
-
ENV['env'] = ENV['env'] || 'ci'
|
27
|
-
client = Metaforce::Rake.client
|
28
|
-
Metaforce.log = false
|
29
|
-
result = client.deploy(@directory, :options => { :run_all_tests => true }).result
|
30
|
-
failures = result[:run_test_result][:failures]
|
31
|
-
|
32
|
-
if failures
|
33
|
-
failures = [failures] unless failures.is_a?(Array)
|
34
|
-
puts "Failures:"
|
35
|
-
failures.each_with_index do |failure, index|
|
36
|
-
index = index + 1
|
37
|
-
puts
|
38
|
-
puts "\t#{index}) #{failure[:method_name]}"
|
39
|
-
puts red "\t #{failure[:message]}"
|
40
|
-
puts
|
41
|
-
puts magenta "\t ##{failure[:stack_trace]}"
|
42
|
-
puts
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
color = failures ? :red : :green
|
47
|
-
puts "Finished in #{Float(result[:run_test_result][:total_time]) / 100} seconds"
|
48
|
-
puts send(color, "#{result[:run_test_result][:num_tests_run]} tests, #{result[:run_test_result][:num_failures]} failures")
|
49
|
-
|
50
|
-
if failures
|
51
|
-
puts "\nFailed tests:\n"
|
52
|
-
failures.each do |failure|
|
53
|
-
puts "#{red failure[:stack_trace]} #{magenta "# #{failure[:method_name]}"}"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
abort if failures
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
data/lib/metaforce/rake.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'metaforce/rake/deploy'
|
3
|
-
require 'metaforce/rake/retrieve'
|
4
|
-
require 'metaforce/rake/tests'
|
5
|
-
|
6
|
-
module Metaforce
|
7
|
-
module Rake
|
8
|
-
|
9
|
-
class << self
|
10
|
-
CONFIG_FILE = 'metaforce.yml'
|
11
|
-
|
12
|
-
# Loads the config and creates a client
|
13
|
-
def client
|
14
|
-
load_config
|
15
|
-
Metaforce::Metadata::Client.new :username => @username,
|
16
|
-
:password => @password,
|
17
|
-
:security_token => @security_token
|
18
|
-
end
|
19
|
-
|
20
|
-
# Loads configuration settings from metaforce.yml
|
21
|
-
def load_config
|
22
|
-
if File.exists?(CONFIG_FILE)
|
23
|
-
config = YAML.load_file(CONFIG_FILE)
|
24
|
-
env = ENV['env'] || 'default'
|
25
|
-
config = config.has_key?(env) ? config[env] : config
|
26
|
-
@username = config["username"]
|
27
|
-
@password = config["password"]
|
28
|
-
@security_token = config["security_token"] || ''
|
29
|
-
@test = config["test"] || false
|
30
|
-
@log = config["log"] || true
|
31
|
-
Metaforce.log = @log
|
32
|
-
Metaforce.configuration.test = @test
|
33
|
-
else
|
34
|
-
print "username: "; @username = STDIN.gets.chomp
|
35
|
-
print "password: "; @password = STDIN.gets.chomp
|
36
|
-
print "security token: "; @security_token = STDIN.gets.chomp
|
37
|
-
Metaforce.log = true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/lib/metaforce/services.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'metaforce/services/client'
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# Metaforce Rake Tasks
|
2
|
-
These are a set of default rake tasks that can be used for deploying/retrieving
|
3
|
-
metadata using Rake and Metaforce. The following rake tasks are provided:
|
4
|
-
|
5
|
-
* metaforce:deploy
|
6
|
-
* metaforce:retrieve
|
7
|
-
* metaforce:tests:ci
|
8
|
-
|
9
|
-
You can include the rake tasks by adding the following to your Rakefile:
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
begin
|
13
|
-
require 'metaforce'
|
14
|
-
load 'metaforce/tasks/metaforce.rake'
|
15
|
-
rescue LoadError
|
16
|
-
task :metaforce do
|
17
|
-
puts "Couldn't load metaforce tasks"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
```
|
21
|
-
|
22
|
-
## metaforce.yml
|
23
|
-
Include a metaforce.yml file in the root if you'd rather not type in your
|
24
|
-
username, password and security token everytime you deploy or retrieve.
|
25
|
-
|
26
|
-
With one environment:
|
27
|
-
|
28
|
-
```yaml
|
29
|
-
---
|
30
|
-
username: user
|
31
|
-
password: password
|
32
|
-
security_token: securitytoken
|
33
|
-
test: true # defaults to false
|
34
|
-
```
|
35
|
-
|
36
|
-
With multiple environments:
|
37
|
-
|
38
|
-
```yaml
|
39
|
-
---
|
40
|
-
production:
|
41
|
-
username: user
|
42
|
-
password: password
|
43
|
-
security_token: securitytoken
|
44
|
-
sandbox:
|
45
|
-
username: user
|
46
|
-
password: password
|
47
|
-
security_token: securitytoken
|
48
|
-
test: true
|
49
|
-
```
|
50
|
-
|
51
|
-
This would deploy using the `sandbox` environment:
|
52
|
-
|
53
|
-
`rake metaforce:deploy env="sandbox"`
|
54
|
-
|
55
|
-
## Continuous Integration
|
56
|
-
The `metaforce:tests:ci` task is provided to make continuous integration with
|
57
|
-
something like [Jenkins](http://jenkins-ci.org) easier.
|
58
|
-
|
59
|
-
By default, the `metaforce:tests:ci` task will use the `ci` environment in
|
60
|
-
metaforce.yml, so you should set that up before you use this task.
|
61
|
-
|
62
|
-
The task will deploy the metadata and run all tests.
|
@@ -1,117 +0,0 @@
|
|
1
|
-
require 'thor' #should probably be in say, lib/metaforce.rb, but I don't want to make that decision alone.
|
2
|
-
|
3
|
-
class MetaForce < Thor
|
4
|
-
include Thor::Actions
|
5
|
-
require './lib/metaforce/custom_actions'
|
6
|
-
require './lib/metaforce/login_details'
|
7
|
-
require './lib/metaforce'
|
8
|
-
include Thor::Actions::CustomActions
|
9
|
-
|
10
|
-
######## Tasks ############################################################
|
11
|
-
desc "login", "accepts login parameters and completes a soap call to salesforce via the partner api."
|
12
|
-
method_option :reset, :type => :boolean, :aliases => "-r", :required => false, :banner => " Reset stored login information"
|
13
|
-
def login
|
14
|
-
if ((File.exists? LoginDetails::STORAGE_LOCATION) && (options[:reset].nil?))
|
15
|
-
say "Using stored login information"
|
16
|
-
@login_details = LoginDetails.load
|
17
|
-
else
|
18
|
-
login_email = ask "Login Email address: "
|
19
|
-
sandbox = yes? "Is this a sandbox org login: "
|
20
|
-
login_pass = masked_ask "Login Password: "
|
21
|
-
login_security_token = masked_ask "Security Token: "
|
22
|
-
say "If you'd like I can save this login information to this directories .git/config/force.com.config"
|
23
|
-
say "----- PLEASE NOTE, HOWEVER, THAT SAVING THIS INFORMATION IS INSECURE AND IS IN NO WAY ENCRYPTED"
|
24
|
-
save = yes? "Should I save this Login information? (y/n) "
|
25
|
-
|
26
|
-
if save
|
27
|
-
@login_details = LoginDetails.new(login_email, login_pass, login_security_token, sandbox)
|
28
|
-
@login_details.save!
|
29
|
-
else
|
30
|
-
@login_details = LoginDetails.new(login_email, login_pass, login_security_token, sandbox)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
raise "Failed to find viable login information!" if @login_details.nil?
|
35
|
-
Metaforce.log = @login_details.log
|
36
|
-
Metaforce.configuration.test = @login_details.sandbox
|
37
|
-
@client = Metaforce::Metadata::Client.new :username => @login_details.username,
|
38
|
-
:password => @login_details.password,
|
39
|
-
:security_token => @login_details.security_token
|
40
|
-
end
|
41
|
-
|
42
|
-
######## Deploy ###########################################################
|
43
|
-
desc "deploy", "deploys the current working directory's src folder to salesforce"
|
44
|
-
method_option :dir, :type => :string, :aliases => "-d", :required => true, :default => "src", :banner => "Specify the directory to deploy"
|
45
|
-
method_option :reset, :type => :boolean, :aliases => "-r", :required => false, :banner => " Reset stored login information"
|
46
|
-
def deploy
|
47
|
-
login unless @client
|
48
|
-
login unless options[:reset].nil?
|
49
|
-
raise "failed to create connection!" unless @client
|
50
|
-
deploy_results = @client.deploy(options[:dir]).result
|
51
|
-
say "Deploy Successful!", color = Thor::Shell::Color::GREEN if deploy_results[:success]
|
52
|
-
end
|
53
|
-
|
54
|
-
######## RunTests #########################################################
|
55
|
-
desc "test", "runs _all_ salesforce unit tests!"
|
56
|
-
method_option :dir, :type => :string, :aliases => "-d", :required => true, :default => "src", :banner => "Specify the directory to execute tests"
|
57
|
-
method_option :reset, :type => :boolean, :aliases => "-r", :required => false, :banner => " Reset stored login information"
|
58
|
-
def test
|
59
|
-
login unless @client
|
60
|
-
login unless options[:reset].nil?
|
61
|
-
raise "failed to create connection!" unless @client
|
62
|
-
result = spinner {
|
63
|
-
result = @client.deploy(options[:dir], :options => { :run_all_tests => true }).result
|
64
|
-
}
|
65
|
-
failures = result[:run_test_result][:failures]
|
66
|
-
if failures
|
67
|
-
failures = [failures] unless failures.responds_to? :each
|
68
|
-
say "--- FAILURES: ", color = Thor::Shell::Color::RED
|
69
|
-
failures.each_with_index do |f,i|
|
70
|
-
say "#{"-" * 80}", color = Thor::Shell::Color::YELLOW
|
71
|
-
say ""
|
72
|
-
say "\t(#{index +1}) #{failure[:method_name]}"
|
73
|
-
say "\t\t#{failure[:message]}", color = Thor::Shell::Color::RED
|
74
|
-
say ""
|
75
|
-
say "\t\t#{failure[:stack_trace]}", color => Thor::Shell::Color::MAGENTA
|
76
|
-
say ""
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
color = (failures) ? Thor::Shell::Color::RED : Thor::Shell::Color::GREEN
|
81
|
-
say "Finished in #{Float(result[:run_test_result][:total_time]) / 100} seconds"
|
82
|
-
say "#{result[:run_test_result][:num_tests_run]} tests, #{result[:run_test_result][:num_failures]} failures", color = color
|
83
|
-
end
|
84
|
-
|
85
|
-
######## Pull #############################################################
|
86
|
-
desc "pull", "Pull all MetaData objects specified in the package.xml file"
|
87
|
-
method_option :reset, :type => :boolean, :aliases => "-r", :required => false, :banner => " Reset stored login information"
|
88
|
-
method_option :manifest, :type => :string, :aliases => "-m", :required => true, :banner => " Path to Manifest.xml", :default => "src/package.xml"
|
89
|
-
method_option :dir, :type => :string, :aliases => "-d", :required => false, :banner => " Download to directory", :default => "retrieved"
|
90
|
-
def pull
|
91
|
-
login unless @client
|
92
|
-
login unless options[:reset].nil?
|
93
|
-
raise "failed to create connection!" unless @client
|
94
|
-
result = spinner {
|
95
|
-
@client.retrieve_unpackaged(options[:manifest]).to(options[:dir])
|
96
|
-
}
|
97
|
-
say "Files retrieved sucessfully to #{@directory}", color = Thor::Shell::Color::GREEN
|
98
|
-
end
|
99
|
-
|
100
|
-
######## Clone ############################################################
|
101
|
-
desc "clone", "Pull all MetaData objects from the current org"
|
102
|
-
method_option :reset, :type => :boolean, :aliases => "-r", :required => false, :banner => " Reset stored login information"
|
103
|
-
method_option :dir, :type => :string, :aliases => "-d", :required => true, :banner => " Download to directory", :default => "retrieved"
|
104
|
-
def clone
|
105
|
-
login unless @client
|
106
|
-
login unless options[:reset].nil?
|
107
|
-
raise "failed to create connection!" unless @client
|
108
|
-
result = spinner {
|
109
|
-
metadata_objects = Hash.new
|
110
|
-
@client.metadata_objects.collect { |t| metadata_objects[t[:xml_name].underscore.to_sym] = ["*"] }
|
111
|
-
md = Metaforce::Manifest.new(metadata_objects)
|
112
|
-
@client.retrieve_unpackaged(md).to(options[:dir])
|
113
|
-
}
|
114
|
-
say "Files retrieved sucessfully to #{options[:dir]}", color = Thor::Shell::Color::GREEN
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|