databasedotcom_additions 0.5.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,95 @@
1
+ require 'rforce'
2
+ require 'digest/md5'
3
+ require 'rforce_proxy_patch'
4
+ require 'proxy_patch'
5
+ require 'persistent_hash'
6
+
7
+ module Databasedotcom
8
+ class Client
9
+
10
+ attr_accessor :query_result_cache_enabled
11
+ attr_accessor :login_failed_user_message
12
+
13
+ alias_method :query_orig, :query
14
+
15
+ # opt username, password, sandbox
16
+ def self.username_password_login(opt)
17
+ client = Databasedotcom::Client.new :verify_mode => OpenSSL::SSL::VERIFY_NONE
18
+ client.host = opt[:sandbox] ? "test.salesforce.com" : "login.salesforce.com"
19
+ begin
20
+ binding = RForce::Binding.new("https://#{client.host}/services/Soap/u/20.0", nil)
21
+ response = binding.login(opt[:username], opt[:password])
22
+ token = response.loginResponse.result.sessionId
23
+ serverUrl = response.loginResponse.result.serverUrl
24
+ uri = URI(serverUrl)
25
+ client.username = opt[:username]
26
+ client.password = opt[:password]
27
+ client.version = '22.0'
28
+ client.oauth_token = token
29
+ client.instance_url = "#{uri.scheme}://#{uri.host}"
30
+ rescue => e
31
+ client.login_failed_user_message = e.message
32
+ end
33
+ client
34
+ end
35
+
36
+ def cache
37
+
38
+ if ! defined?(@global_cache)
39
+ cache_file_name = 'cache/global-cache.json'
40
+ @global_cache ||= UtilityPack::PersistentHash.new cache_file_name
41
+ end
42
+
43
+ @global_cache
44
+
45
+ end
46
+
47
+ # support for count query - SELECT COUNT() FROM Account_vod__c
48
+ def count(soql_expr)
49
+ result = http_get("/services/data/v#{self.version}/query", :q => soql_expr)
50
+ JSON.parse(result.body)['totalSize']
51
+ end
52
+
53
+ def query(soql)
54
+ resp = query_orig(soql)
55
+ resp
56
+ end
57
+
58
+ def query_raw(soql)
59
+
60
+ if query_result_cache_enabled
61
+ cache_key = "#{self.username}:#{soql}"
62
+ if cache[cache_key]
63
+ puts "cache get - #{cache_key}"
64
+ return cache[cache_key]
65
+ end
66
+ end
67
+
68
+
69
+ result = http_get("/services/data/v#{self.version}/query", :q => soql)
70
+ resp = JSON.parse(result.body)
71
+
72
+ if query_result_cache_enabled
73
+ puts "cache put - #{cache_key}"
74
+ cache[cache_key] = resp
75
+ end
76
+ resp
77
+ end
78
+
79
+ def next_page_raw(path)
80
+ result = http_get(path)
81
+ JSON.parse(result.body)
82
+ end
83
+
84
+ def query_all(soql_expr)
85
+ all_records = []
86
+ records = query(soql_expr)
87
+ while records.total_size > 0
88
+ all_records.concat(records)
89
+ records = records.next_page
90
+ end
91
+ all_records
92
+ end
93
+
94
+ end
95
+ end
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+
4
+ module UtilityPack
5
+
6
+ class PersistentHash
7
+ def initialize path
8
+ @path = path
9
+ end
10
+
11
+ def json_parse_file(path)
12
+ JSON.parse(File.open(path).read)
13
+ end
14
+
15
+ def load
16
+ File.exists?(@path) ? json_parse_file(@path) : {}
17
+ end
18
+
19
+ def save h
20
+ File.open(@path, 'w') {|f| f.write(h.to_json)}
21
+ end
22
+
23
+ def [](key)
24
+ load[key]
25
+ end
26
+
27
+ def []=(key, value)
28
+ h = load
29
+ h[key] = value
30
+ save(h)
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,29 @@
1
+ require 'databasedotcom'
2
+ require 'set_proxy_if_needed'
3
+
4
+ # patch for using a proxy
5
+ module Databasedotcom
6
+ class Client
7
+
8
+ def proxy
9
+ http_proxy = ENV["http_proxy"]
10
+ URI.parse(http_proxy) rescue nil
11
+ end
12
+
13
+ def https_request(host=nil)
14
+
15
+ if proxy
16
+ http = Net::HTTP::Proxy(proxy.host, proxy.port).new(host || URI.parse(self.instance_url).host, 443)
17
+ else
18
+ http = Net::HTTP.new(host || URI.parse(self.instance_url).host, 443)
19
+ end
20
+
21
+ http.tap do |http|
22
+ http.use_ssl = true
23
+ http.ca_file = self.ca_file if self.ca_file
24
+ http.verify_mode = self.verify_mode if self.verify_mode
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'rforce'
3
+ require 'set_proxy_if_needed'
4
+
5
+ module RForce
6
+
7
+ class Binding
8
+
9
+ def init_server(url)
10
+ @url = URI.parse(url)
11
+
12
+ if proxy
13
+ @server = Net::HTTP::Proxy(proxy.host, proxy.port).new(@url.host, 443)
14
+ else
15
+ @server = Net::HTTP.new(@url.host, 443)
16
+ end
17
+
18
+ #@server = Net::HTTP.new(@url.host, @url.port)
19
+ @server.use_ssl = @url.scheme == 'https'
20
+ @server.verify_mode = OpenSSL::SSL::VERIFY_NONE
21
+
22
+ # run ruby with -d or env variable SHOWSOAP=true to see SOAP wiredumps.
23
+ @server.set_debug_output $stderr if show_debug
24
+ end
25
+
26
+ def proxy
27
+ http_proxy = ENV['http_proxy']
28
+ URI.parse(http_proxy) rescue nil
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,14 @@
1
+ def on_work_network
2
+ if RUBY_PLATFORM =~ /32/ # windows
3
+ %x{ipconfig /all}.split.grep(/54\./).count > 0
4
+ else
5
+ %x{ifconfig | grep -i "inet 54." > /dev/null}
6
+ $? == 0
7
+ end
8
+ end
9
+
10
+ if on_work_network
11
+ ENV["http_proxy"] = "http://webproxy.merck.com:8080"
12
+ else
13
+ ENV.delete("http_proxy")
14
+ end
@@ -0,0 +1 @@
1
+ require 'databasedotcom_additions/client.rb'
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: databasedotcom_additions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brian Pfeil
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: databasedotcom
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rforce
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: databasedotcom additions
47
+ email: brian.pfeil@gmail.com
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - lib/databasedotcom_additions/client.rb
53
+ - lib/databasedotcom_additions/persistent_hash.rb
54
+ - lib/databasedotcom_additions/proxy_patch.rb
55
+ - lib/databasedotcom_additions/rforce_proxy_patch.rb
56
+ - lib/databasedotcom_additions/set_proxy_if_needed.rb
57
+ - lib/databasedotcom_additions.rb
58
+ homepage: http://rubygems.org/gems/databasedotcom_additions
59
+ licenses: []
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 1.8.24
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: databasedotcom additions
82
+ test_files: []