hoopla_salesforce 0.0.1

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.
@@ -0,0 +1,5 @@
1
+ module HooplaSalesforce
2
+ class << self
3
+ attr_accessor :enterprise_wsdl, :metadata_wsdl
4
+ end
5
+ end
@@ -0,0 +1,107 @@
1
+ require 'base64'
2
+ require 'savon'
3
+ require 'pp'
4
+
5
+ Savon::Request.logger = Logger.new(STDOUT)
6
+ Savon::Request.logger.level = Logger::WARN
7
+ Savon::Request.log_level = :debug
8
+
9
+ module HooplaSalesforce
10
+ class Deployer
11
+ attr_accessor :client, :metaclient, :header,
12
+ :username, :password, :token
13
+
14
+ def initialize(username, password, token, enterprise_wsdl, metadata_wsdl)
15
+ @username = username
16
+ @password = password
17
+ @token = token
18
+ @enterprise_wsdl = enterprise_wsdl
19
+ @metadata_wsdl = metadata_wsdl
20
+ end
21
+
22
+ def login
23
+ build_clients
24
+ set_certs
25
+ setup_metaclient_and_store_header
26
+ end
27
+
28
+ def build_clients
29
+ @client = Savon::Client.new @enterprise_wsdl
30
+ @metaclient = Savon::Client.new @metadata_wsdl
31
+ end
32
+
33
+ def set_certs
34
+ # TODO figure out how to get Savon to validat SF's cert
35
+ [@client, @metaclient].each { |c| c.request.http.ssl_client_auth(:verify_mode => OpenSSL::SSL::VERIFY_NONE) }
36
+ end
37
+
38
+ def setup_metaclient_and_store_header
39
+ response = client.login do |soap, wsse|
40
+ soap.body = { "wsdl:username" => username, "wsdl:password" => password + token}
41
+ end.to_hash[:login_response][:result]
42
+
43
+ metaclient.wsdl.soap_endpoint = response[:metadata_server_url]
44
+
45
+ @header = { "wsdl:SessionHeader" => { "wsdl:sessionId" => response[:session_id] } }
46
+ end
47
+
48
+ def deploy(zipfile)
49
+ login
50
+
51
+ data = Base64.encode64(File.read(zipfile))
52
+
53
+ response = metaclient.deploy do |soap, wsse|
54
+ soap.header = header
55
+ soap.body = { "wsdl:ZipFile" => data,
56
+ "wsdl:DeployOptions" => {
57
+ "wsdl:runAllTests" => true
58
+ },
59
+ :order! => ['wsdl:ZipFile', 'wsdl:DeployOptions']
60
+ }
61
+ end.to_hash[:deploy_response][:result]
62
+
63
+ puts "Deployment requested, awaiting completion of job #{response[:id]}..."
64
+ while !response[:done]
65
+ response = metaclient.check_status do |soap, wsse|
66
+ soap.header = header
67
+ soap.body = { "wsdl:asyncProcessId" => response[:id] }
68
+ end.to_hash[:check_status_response][:result]
69
+ end
70
+
71
+ response = metaclient.check_deploy_status do |soap, wsse|
72
+ soap.header = header
73
+ soap.body = { "wsdl:asyncProcessId" => response[:id] }
74
+ end.to_hash[:check_deploy_status_response][:result]
75
+
76
+ pp response
77
+
78
+ puts response[:run_test_result][:code_coverage_warnings][:message] rescue nil
79
+ puts response[:messages].map{ |m| m[:problem] }.join("\n")
80
+ end
81
+
82
+ def retrieve(request)
83
+ login
84
+
85
+ response = metaclient.retrieve do |soap, wsse|
86
+ soap.header = @header
87
+ soap.body = { "wsdl:retrieveRequest" => request }
88
+ end.to_hash[:retrieve_response][:result]
89
+
90
+ puts "Retrieve requested, awaiting completion of job #{response[:id]}..."
91
+ while !response[:done]
92
+ response = metaclient.check_status do |soap, wsse|
93
+ soap.header = @header
94
+ soap.body = { "wsdl:asyncProcessId" => response[:id] }
95
+ end.to_hash[:check_status_response][:result]
96
+ end
97
+
98
+ response = metaclient.check_retrieve_status do |soap, wsse|
99
+ soap.header = @header
100
+ soap.body = { "wsdl:asyncProcessId" => response[:id] }
101
+ end.to_hash[:check_retrieve_status_response][:result]
102
+
103
+ File.open('retrieved.zip', 'w') { |f| f.print Base64.decode64(response[:zip_file]) }
104
+ puts "Wrote retrieved contents to retrieved.zip."
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,3 @@
1
+ require 'hoopla_salesforce/rake/deploy_task'
2
+ require 'hoopla_salesforce/rake/retrieve_task'
3
+
@@ -0,0 +1,36 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'hoopla_salesforce'
4
+
5
+ module HooplaSalesforce
6
+ module Rake
7
+ class BaseTask < ::Rake::TaskLib
8
+ # The name for the task and any dependencies.
9
+ attr_accessor :name
10
+
11
+ # Your salesforce username
12
+ attr_accessor :username
13
+
14
+ # Your salesforce password
15
+ attr_accessor :password
16
+
17
+ # Your salesforce API token, which will get concatenated onto your password.
18
+ attr_accessor :token
19
+
20
+ # Path to your enterprise WSDL. Defaults to value of HooplaSalesforce.enterprise_wsdl.
21
+ attr_accessor :enterprise_wsdl
22
+
23
+ # Path to your metadata WSDL. Defaults to value of HooplaSalesforce.metadata_wsdl.
24
+ attr_accessor :metadata_wsdl
25
+
26
+ def initialize(name)
27
+ @name = name
28
+ @enterprise_wsdl = HooplaSalesforce.enterprise_wsdl
29
+ @metadata_wsdl = HooplaSalesforce.metadata_wsdl
30
+
31
+ yield self if block_given?
32
+ define
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ require 'hoopla_salesforce/rake/base_task'
2
+
3
+ module HooplaSalesforce
4
+ module Rake
5
+ class DeployTask < BaseTask
6
+ # Your project root. Defaults to 'src'
7
+ attr_accessor :src
8
+
9
+ # The location of the zip file generated for deployment. Defaults to 'deploy.zip'
10
+ attr_accessor :deployfile
11
+
12
+ def initialize(name=:deploy)
13
+ @deploy_file = "deploy.zip"
14
+ @src = 'src'
15
+ super
16
+ end
17
+
18
+ def define
19
+ desc "Deploy to salesforce"
20
+ task name do
21
+ make_zipfile
22
+ require 'hoopla_salesforce/deployer'
23
+ HooplaSalesforce::Deployer.new(username, password, token, enterprise_wsdl, metadata_wsdl).deploy(deployfile)
24
+ end
25
+ end
26
+
27
+ def make_zipfile
28
+ require 'zip/zip'
29
+ rm_f deployfile
30
+ Zip::ZipFile.open(deployfile, Zip::ZipFile::CREATE) do |zip|
31
+ Dir["#{src}/**/*"].each do |file|
32
+ zip.add(file, file)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ require 'hoopla_salesforce/rake/base_task'
2
+
3
+ module HooplaSalesforce
4
+ module Rake
5
+ class RetrieveTask < BaseTask
6
+ # The format of the retrieve request. Defaults to:
7
+ # { "wsdl:unpackaged" => { "wsdl:types" =>
8
+ # [{ "wsdl:members" => "*", "wsdl:name" => "ApexClass" }]
9
+ # }}
10
+ #
11
+ # If your code is in a salesforce package, you can specify:
12
+ # { "wsdl:packageNames" => ["Your Package Name"] }
13
+ attr_accessor :request
14
+
15
+ def initialize(name=:retrieve)
16
+ @request = { "wsdl:unpackaged" => { "wsdl:types" =>
17
+ [{ "wsdl:members" => "*", "wsdl:name" => "ApexClass" }]
18
+ }}
19
+ super
20
+ end
21
+
22
+ def define
23
+ desc "Retrieve all apex classes from salesforce.com"
24
+ task name do
25
+ require 'hoopla_salesforce/deployer'
26
+ HooplaSalesforce::Deployer.new(username, password, token, enterprise_wsdl, metadata_wsdl).retrieve(request)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,3 @@
1
+ module HooplaSalesforce
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hoopla_salesforce
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Trotter Cashion
13
+ - Mat Schaffer
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-04 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: hoopla-savon
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 7
31
+ - 6
32
+ version: 0.7.6
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: No really, these helpers are awesome
36
+ email: dev@hoopla.net
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/hoopla_salesforce.rb
45
+ - lib/hoopla_salesforce/rake.rb
46
+ - lib/hoopla_salesforce/deployer.rb
47
+ - lib/hoopla_salesforce/rake/deploy_task.rb
48
+ - lib/hoopla_salesforce/rake/retrieve_task.rb
49
+ - lib/hoopla_salesforce/rake/base_task.rb
50
+ - lib/hoopla_salesforce/version.rb
51
+ has_rdoc: true
52
+ homepage: http://hoopla.net
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options: []
57
+
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ requirements: []
75
+
76
+ rubyforge_project: nowarning
77
+ rubygems_version: 1.3.6
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Some awesome helpers for the salesforce API
81
+ test_files: []
82
+