salesforce_model 0.0.1 → 0.0.3

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/salesforce_model.rb +93 -6
  3. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b5f3c2637368db3fa8ad9bb80509885edc931c1
4
- data.tar.gz: e0e3a34e0f9aee403ee1c95f8d3c880abdf439c5
3
+ metadata.gz: 7d9d2134a4617f30ff7896ab03a40da323848725
4
+ data.tar.gz: 4c8bb17f09ed69e9ffcf3670cef35df372ffed7e
5
5
  SHA512:
6
- metadata.gz: 721a7e2e2bc73f516574b17d0ac2650e9fdf0bbf0a36b0806ab7a6e48e67d64c890346363d54e0578828df948a454fb55224cabba0427d7a8a7b3c4652378d67
7
- data.tar.gz: 05a44bcdb7bc1e832af932c667141dbb5d2eaad962a9602336120899c55f84b662a7aae7113bde4446b89ce638f1f729aea86669ed9cfcbd8e4108e94bb4f0eb
6
+ metadata.gz: 28b728a366fdd392e4fb7cba5790787581b8fc3d22063ef3716b5a8b4c12492a50bd0ffe6747c5b2038dd7f5ee4e0e877efa9f4151872c07faf983bfc91058bb
7
+ data.tar.gz: 43723e6b91dd072e2af5cb9a15da7319e686129ecfdd8326cecd7506d9e86c099a8adad108ec90593751cc83ad7cd42a7578e6303f5fd3e4b4c0d78e7dc49add
@@ -22,19 +22,19 @@ class SalesforceModel < ActiveRecord::Base
22
22
  if ENV['HEROKUCONNECT_SCHEMA'].nil?
23
23
  raise "Please set HEROKUCONNECT_SCHEMA in your environment to use SalesforceModel"
24
24
  end
25
+ cattr_accessor :schema_name
26
+ self.schema_name = ENV['HEROKUCONNECT_SCHEMA'] || 'public'
27
+
28
+ self.pluralize_table_names = false
29
+ self.table_name_prefix = self.schema_name + "."
30
+
25
31
 
26
32
  establish_connection ENV['HEROKUCONNECT_URL']
27
33
 
28
- cattr_accessor :schema_name
29
- self.schema_name = ENV['HEROKUCONNECT_SCHEMA'] || 'public'
30
34
  self.connection.schema_search_path = self.schema_name + ",public"
31
35
 
32
36
  self.abstract_class = true
33
37
 
34
- def self.table_name
35
- return self.schema_name + '.' + self.name.downcase
36
- end
37
-
38
38
  # Introspect tables from the active schema and generate SalesforceModel subclasses
39
39
  # for each table. This is meant for quick bootstrapping models at the Rails console.
40
40
  def self.reflect_models
@@ -51,5 +51,92 @@ class SalesforceModel < ActiveRecord::Base
51
51
  nil
52
52
  end
53
53
 
54
+ attr_protected :createddate, :systemmodstamp, :lastmodifieddate
55
+
56
+ class TriggerLog < SalesforceModel
57
+ self.table_name = superclass.schema_name + "._trigger_log"
58
+
59
+ scope :pending, -> { where("state in ('PENDING','NEW')") }
60
+ scope :completed, -> { where("state in ('SUCCESS','FAILED')") }
61
+ end
62
+
63
+ def self.all_errors
64
+ TriggerLog.where(:state => 'FAILED').order("id DESC").all
65
+ end
66
+
67
+ def self.pending_count
68
+ TriggerLog.where("state in ('PENDING','NEW')").count
69
+ end
70
+
71
+ def self.last_trigger_id
72
+ row = SalesforceModel.connection.select_all("select * From _trigger_last_id")[0]
73
+ if row
74
+ row.values[0].to_i
75
+ else
76
+ nil
77
+ end
78
+ end
79
+
80
+ def self.pending_changes
81
+ TriggerLog.where("state in ('PENDING','NEW')")
82
+ end
83
+
84
+ def self.recent_changes
85
+ TriggerLog.order("id DESC").limit(10).all
86
+ end
87
+
88
+ def self.format_trigger_log_rows(rows)
89
+ require 'text-table'
90
+
91
+ tables = Hash.new {|hash,key| hash[key] = Text::Table.new}
92
+ rows.each do |tl|
93
+ table = tables[tl.table_name]
94
+ data = eval("{#{tl.values.gsub(/NULL/,'nil')}}")
95
+ header = ['log id', 'state','op','table','rec id']
96
+ row = [tl.id, tl.state, tl.action, tl.table_name, tl.record_id]
97
+ data.keys.sort.each do |key|
98
+ next if key == '_c5_source'
99
+ header.append(key[0,8])
100
+ row.append(data[key])
101
+ end
102
+ header.append('sf_msg')
103
+ row.append(tl.sf_message)
104
+
105
+ table.head ||= header
106
+ table.rows.append(row)
107
+ end
108
+
109
+ tables.each do |table|
110
+ puts table
111
+ puts
112
+ end
113
+
114
+ nil
115
+ end
116
+
117
+ def self.recent_updates(table = nil, limit=10)
118
+ self.format_trigger_log_rows(TriggerLog.order("id DESC").limit(limit))
119
+ end
120
+
121
+ def pending_updates
122
+ rows = TriggerLog.pending.where(:record_id => self.id)
123
+ SalesforceModel.format_trigger_log_rows(rows)
124
+ end
125
+
126
+ def recent_updates
127
+ SalesforceModel.format_trigger_log_rows(TriggerLog.where(:record_id => self.id).order("id DESC").limit(10))
128
+ end
129
+
130
+ def salesforce_errors
131
+ TriggerLog.where(:record_id => self.id, :state => 'FAILED').order("id DESC").all
132
+ end
133
+
134
+ def salesforce_error
135
+ log = TriggerLog.where(:record_id => self.id, :state => 'FAILED').order("id DESC").last
136
+ if !log.nil?
137
+ return log.sf_message
138
+ end
139
+ end
140
+
54
141
  end
55
142
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salesforce_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Persinger
@@ -9,7 +9,35 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-04-08 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: text-table
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.0
13
41
  description: Base ActiveRecord subclass for accessing Heroku Connect sync tables
14
42
  email: scottp@heroku.com
15
43
  executables: []