Module: Marty::Util
- Extended by:
- Delorean::Functions
- Defined in:
- lib/marty/util.rb
Class Method Summary collapse
-
.background_report(script_name, node_name, params, force) ⇒ Object
Run a report as a promise and return its promise ID.
- .db_in_recovery? ⇒ Boolean
- .deep_round(obj, digits) ⇒ Object
-
.gen_report_path(script, node, params = {}) ⇒ Object
generates the report path to report described by script, node, and params.
- .get_posting ⇒ Object
- .get_posting_time ⇒ Object
- .human_to_pg_range(r) ⇒ Object
- .logger ⇒ Object
-
.marty_path ⇒ Object
route path to where Marty is mounted.
- .pg_range_match(r) ⇒ Object
- .pg_range_to_human(r) ⇒ Object
- .scrub_obj(obj) ⇒ Object
- .set_posting_id(sid) ⇒ Object
- .warped? ⇒ Boolean
Class Method Details
.background_report(script_name, node_name, params, force) ⇒ Object
Run a report as a promise and return its promise ID.
139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/marty/util.rb', line 139 def self.background_report(script_name, node_name, params, force) engine = Marty::ScriptSet.new.get_engine(script_name) res = engine.background_eval(node_name, params, ['result', 'title', 'format'], ) promise_id = res.__promise__.id res.force if force promise_id end |
.db_in_recovery? ⇒ Boolean
113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/marty/util.rb', line 113 def self.db_in_recovery? status = false begin sql = 'select pg_is_in_recovery();' result = ActiveRecord::Base.connection.execute(sql) status = result[0]['pg_is_in_recovery'] == 't' if result && result[0] rescue StandardError => e Marty::Util.logger.error 'unable to determine recovery status' end status end |
.deep_round(obj, digits) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/marty/util.rb', line 125 def self.deep_round(obj, digits) case obj when Array obj.map { |o| deep_round(o, digits) } when Hash obj.each_with_object({}) do |(key, value), result| result[key] = deep_round(value, digits) end else obj.is_a?(Float) ? obj.round(digits) : obj end end |
.gen_report_path(script, node, params = {}) ⇒ Object
generates the report path to report described by script, node, and params
153 154 155 156 157 158 159 160 161 |
# File 'lib/marty/util.rb', line 153 def self.gen_report_path(script, node, params = {}) engine = Marty::ScriptSet.new.get_engine(script) format = engine.evaluate(node, 'format') title = params.delete(:title) || engine.evaluate(node, 'title') data = ({ selected_script_name: script, selected_node: node } + params).to_json URI.encode("#{Marty::Util.marty_path}/report?data=#{data}"\ "&reptitle=#{title}&format=#{format}") end |
.get_posting ⇒ Object
10 11 12 13 14 15 |
# File 'lib/marty/util.rb', line 10 def self.get_posting sid = Netzke::Base.session && Netzke::Base.session[:posting] return unless sid.is_a? Integer sid && Marty::Posting.find_by(id: sid) end |
.get_posting_time ⇒ Object
17 18 19 20 |
# File 'lib/marty/util.rb', line 17 def self.get_posting_time snap = get_posting snap ? snap.created_dt : Float::INFINITY end |
.human_to_pg_range(r) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/marty/util.rb', line 86 def self.human_to_pg_range(r) return r if r == 'empty' m = /\A ((?<op0>\>|\>=)(?<start>[^\<\>\=]*?))? ((?<op1>\<|\<=)(?<end>[^\<\>\=]*?))? \z/x.match(r) raise "bad range #{r}" unless m if m[:op0] open = m[:op0] == '>' ? '(' : '[' start = "#{open}#{m[:start]}" else start = '[' end if m[:op1] close = m[:op1] == '<' ? ')' : ']' ends = "#{m[:end]}#{close}" else ends = ']' end "#{start},#{ends}" end |
.logger ⇒ Object
26 27 28 |
# File 'lib/marty/util.rb', line 26 def self.logger @@s_logger ||= Rails.logger || Logger.new($stderr) end |
.marty_path ⇒ Object
route path to where Marty is mounted
31 32 33 |
# File 'lib/marty/util.rb', line 31 def self.marty_path Rails.application.routes.named_routes[:marty].path.spec end |
.pg_range_match(r) ⇒ Object
35 36 37 |
# File 'lib/marty/util.rb', line 35 def self.pg_range_match(r) /\A(?<open>\[|\()(?<start>.*?),(?<end>.*?)(?<close>\]|\))\z/.match(r) end |
.pg_range_to_human(r) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/marty/util.rb', line 39 def self.pg_range_to_human(r) return r if r == 'empty' || r.nil? m = pg_range_match(r) raise "bad PG range #{r}" unless m if m[:start] == '' res = '' else op = m[:open] == '(' ? '>' : '>=' res = "#{op}#{m[:start]}" end if m[:end] != '' op = m[:close] == ')' ? '<' : '<=' res += "#{op}#{m[:end]}" end res end |
.scrub_obj(obj) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/marty/util.rb', line 163 def self.scrub_obj(obj) trav = lambda { |o| if o.is_a?(Hash) return o.each_with_object({}) { |(k, v), h| h[k] = trav.call(v) } elsif o.is_a?(Array) return o.map { |v| trav.call(v) } elsif o.to_s.length > 10000 o.class.to_s else o end } trav.call(obj) end |
.set_posting_id(sid) ⇒ Object
4 5 6 7 8 |
# File 'lib/marty/util.rb', line 4 def self.set_posting_id(sid) snap = Marty::Posting.find_by(id: sid) sid = nil if snap && (snap.created_dt == Float::INFINITY) Netzke::Base.session[:posting] = sid end |
.warped? ⇒ Boolean
22 23 24 |
# File 'lib/marty/util.rb', line 22 def self.warped? get_posting_time != Float::INFINITY end |