marty 1.2.3 → 1.2.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4869432086cbb253966cbb6dc2b723bf3e1e39fb
4
- data.tar.gz: 60ed80fcbf3f7ba5c28d6d8178fd0756f3fa241d
3
+ metadata.gz: 7a63225a41641bfe7a573dd21373cef1746df111
4
+ data.tar.gz: 46359fc851683968330d72b02a5695072ea81eec
5
5
  SHA512:
6
- metadata.gz: c05a246f66a03be87ee1a9ae7ba9ab45044716a12a05b9ca5268e370f23898650596ed4380989bb6a33719d3beb2576d70d3c292a9af18a4f6f2fca80bd79fa1
7
- data.tar.gz: e2d7751ee36906871b524a13a9888571ab18eb35dc678d131505f84c6c559a8bbb27ac8cf8881b675f61af220b665d7b2d863e56d6e8b35643c56305f8114bc5
6
+ metadata.gz: 456016ef7f36a7474dcf5ce564b5616c2616525701db782a6f6582e9e3d638627b41c027838c603c89bec34f723ccac9b7cc94a6e59768a8c24b762d62efa27a
7
+ data.tar.gz: d1ba3c2c1366c034d76629ab4643a85ffd11d2d06400111fb30f33cf974a9b6ff6c8d43a55dda9bee7a964fd3a684c4e33b1aa14c50aeac477e745d1597c0ba4
@@ -11,13 +11,16 @@ class Marty::DeloreanRule < Marty::BaseRule
11
11
  if computed_guards.present? || results.present?
12
12
  begin
13
13
  eclass = engine && engine.constantize || Marty::RuleScriptSet
14
- eng = eclass.new('infinity').get_engine(self)
14
+ eng = eclass.new('infinity').get_engine(self_as_hash)
15
15
  rescue => e
16
16
  return errors[:computed] = "- " + e.message
17
17
  end
18
18
  end
19
19
  end
20
20
 
21
+ def self_as_hash
22
+ self.as_json + {"classname"=>self.class.name}
23
+ end
21
24
  def self.find_fixed(results)
22
25
  results.each_with_object({}) do |(k, v), h|
23
26
  v_wo_comment = /\A([^#]+)/.match(v)[1] if v.include?("#")
@@ -41,36 +44,40 @@ class Marty::DeloreanRule < Marty::BaseRule
41
44
  "NOT DEFINED"
42
45
  end
43
46
 
44
- def compg_keys
47
+ def self.compg_keys(computed_guards)
45
48
  computed_guards.keys
46
49
  end
47
50
 
48
- def comp_res_keys(ecl)
49
- defkeys = (Marty::Config[self.class.results_cfg_var] || {}).keys
51
+ def self.comp_res_keys(results, grids, ecl)
52
+ defkeys = (Marty::Config[results_cfg_var] || {}).keys
50
53
  results.keys.map {|k| k.ends_with?("_grid") ? ecl.grid_final_name(k) : k}.
51
- select{|k| defkeys.include?(k)} + grid_keys(ecl)
54
+ select{|k| defkeys.include?(k)} + grid_keys(grids, ecl)
52
55
  end
53
- def grid_keys(eclass)
56
+ def self.grid_keys(grids, eclass)
54
57
  grids.keys.map{|k| eclass.grid_final_name(k) }
55
58
  end
56
- def base_compute(params, dgparams=params)
59
+ def self.base_compute(ruleh, params, dgparams=params)
60
+ id, name, engine, computed_guards, grids, results, fixed_results =
61
+ ruleh.values_at("id", "name", "engine", "computed_guards", "grids",
62
+ "results", "fixed_results")
57
63
  eclass = engine && engine.constantize || Marty::RuleScriptSet
58
- engine = eclass.new(params["pt"]).get_engine(self) if
64
+ engine = eclass.new(params["pt"]).get_engine(ruleh) if
59
65
  computed_guards.present? || results.present?
60
66
 
61
67
  if computed_guards.present?
62
68
  begin
63
69
  res = engine.evaluate(eclass.node_name,
64
- compg_keys,
70
+ compg_keys(computed_guards),
65
71
  params.clone)
66
72
  rescue => e
67
73
  raise e, "Error (guard) in rule '#{id}:#{name}': #{e}", e.backtrace
68
74
  end
69
- return Hash[compg_keys.zip(res).select{|k,v| !v}] unless res.all?
75
+ return Hash[compg_keys(computed_guards).zip(res).select{|k,v| !v}] unless
76
+ res.all?
70
77
  end
71
78
  grids_computed = false
72
79
  grid_results = {}
73
- crkeys = comp_res_keys(eclass)
80
+ crkeys = comp_res_keys(results, grids, eclass)
74
81
  if (results.keys - fixed_results.keys).present?
75
82
  begin
76
83
  eval_result = engine.evaluate(
@@ -100,6 +107,14 @@ class Marty::DeloreanRule < Marty::BaseRule
100
107
  end
101
108
  result + grid_results
102
109
  end
110
+ delorean_fn :route_compute, sig: 4 do
111
+ |ruleh, pt, params, grid_names_p|
112
+ kl = ruleh["classname"].constantize
113
+ kl.compute(ruleh, pt, params, grid_names_p)
114
+ end
115
+ def base_compute(params, dgparams=params)
116
+ self.class.base_compute(self_as_hash, params, dgparams)
117
+ end
103
118
 
104
119
  def self.get_matches_(pt, attrs, params)
105
120
  q = super(pt, attrs.except("rule_dt"), params)
@@ -72,7 +72,7 @@ class Marty::DataExporter
72
72
  csv << x.map { |v|
73
73
  case v
74
74
  when Array, Hash
75
- readable ? v.to_s : encode_json(v.to_json)
75
+ readable ? v.to_json : encode_json(v.to_json)
76
76
  when nil
77
77
  nil
78
78
  else
@@ -72,25 +72,27 @@ class Marty::RuleScriptSet < Delorean::AbstractContainer
72
72
  newh.map { |k, v| write_attr(k, v) }.join("\n") + "\n"
73
73
  end
74
74
 
75
- def grid_code(rule)
75
+ def grid_code(ruleh)
76
76
  dgcache = {}
77
77
  h = {}
78
- rule.grids.each do |k, v|
79
- expand_grid_code(h, k.ends_with?('_grid')?k:k+'_grid', %Q("#{v}"), dgcache, {})
78
+ ruleh["grids"].each do |k, v|
79
+ expand_grid_code(h, k.ends_with?('_grid')?k:k+'_grid', %Q("#{v}"),
80
+ dgcache, {})
80
81
  end
81
82
  h.map { |k, v| write_attr(k, v) }.join("\n") + "\n"
82
83
  end
83
84
 
84
- def guard_code(rule)
85
- write_code(rule.computed_guards)
85
+ def guard_code(ruleh)
86
+ write_code(ruleh["computed_guards"])
86
87
  end
87
88
 
88
- def result_code(rule)
89
- write_code(rule.results)
89
+ def result_code(ruleh)
90
+ write_code(ruleh["results"])
90
91
  end
91
92
 
92
- def grid_init(rule)
93
- if rule.grids.present? || rule.results.keys.any?{|k|k.ends_with?("_grid")}
93
+ def grid_init(ruleh)
94
+ if ruleh["grids"].present? ||
95
+ ruleh["results"].keys.any?{|k|k.ends_with?("_grid")}
94
96
  write_code({ "pt" => :parameter,
95
97
  "dgparams__" => :parameter,
96
98
  })
@@ -98,18 +100,18 @@ class Marty::RuleScriptSet < Delorean::AbstractContainer
98
100
  ''
99
101
  end
100
102
  end
101
- def get_code(rule)
102
- grid_i = grid_init(rule)
103
- grid_c = grid_code(rule)
104
- result_c = result_code(rule)
105
- guard_c = guard_code(rule)
103
+ def get_code(ruleh)
104
+ grid_i = grid_init(ruleh)
105
+ grid_c = grid_code(ruleh)
106
+ result_c = result_code(ruleh)
107
+ guard_c = guard_code(ruleh)
106
108
 
107
109
  code = self.class.body_start + self.class.indent(grid_i +
108
110
  guard_c +
109
111
  grid_c +
110
112
  result_c)
111
113
  #puts '='*40
112
- #puts rule.name
114
+ #puts ruleh["name"]
113
115
  #puts '-'
114
116
  #puts code
115
117
  #puts '-'*10
@@ -117,17 +119,17 @@ class Marty::RuleScriptSet < Delorean::AbstractContainer
117
119
  code
118
120
  end
119
121
 
120
- def code_section_counts(rule)
122
+ def code_section_counts(ruleh)
121
123
  errs = {}
122
- errs[:grid_params] = grid_init(rule).count("\n")
123
- errs[:computed_guards] = guard_code(rule).count("\n")
124
- errs[:grids] = grid_code(rule).count("\n")
125
- errs[:results] = result_code(rule).count("\n")
124
+ errs[:grid_params] = grid_init(ruleh).count("\n")
125
+ errs[:computed_guards] = guard_code(ruleh).count("\n")
126
+ errs[:grids] = grid_code(ruleh).count("\n")
127
+ errs[:results] = result_code(ruleh).count("\n")
126
128
  errs
127
129
  end
128
- def get_parse_error_field(rule, exc)
130
+ def get_parse_error_field(ruleh, exc)
129
131
  line = exc.line ? exc.line - self.class.body_lines : 0
130
- errs = code_section_counts(rule)
132
+ errs = code_section_counts(ruleh)
131
133
  line_count = 0
132
134
  errs.each do |k,v|
133
135
  line_count += v
@@ -136,24 +138,24 @@ class Marty::RuleScriptSet < Delorean::AbstractContainer
136
138
  errs.keys.last
137
139
  end
138
140
 
139
- def get_engine(rule)
141
+ def get_engine(ruleh)
140
142
  begin
141
143
  # if rule is a str => importing a regular Script (i.e. not rule)
142
- return sset.get_engine(rule) if rule.is_a? String
144
+ return sset.get_engine(ruleh) if ruleh.is_a? String
143
145
 
144
146
  # on create rule doesn't have an id => don't cache
145
- return sset.parse_check("New RULE #{rule.name}", get_code(rule)) unless
146
- rule.id
147
+ return sset.parse_check("New RULE #{ruleh['name']}", get_code(ruleh)) unless
148
+ ruleh["id"]
147
149
 
148
- rule_pfx = rule.class.name.demodulize
150
+ rule_pfx = ruleh["classname"].demodulize
149
151
 
150
152
  # unique name for specific version of rule
151
- sname = "#{rule_pfx}_#{rule.group_id}_#{rule.created_dt.to_f}"
153
+ sname = "#{rule_pfx}_#{ruleh['group_id']}_#{ruleh['created_dt'].to_f}"
152
154
 
153
155
  # is it a dev posting?
154
156
  if Mcfly.is_infinity(pt)
155
- max_dt = rule.class.
156
- order("created_dt DESC").limit(1).pluck(:created_dt).first
157
+ max_dt = ruleh["classname"].constantize.order("created_dt DESC").
158
+ limit(1).pluck(:created_dt).first
157
159
 
158
160
  @@dengines_dt ||= max_dt
159
161
 
@@ -164,17 +166,17 @@ class Marty::RuleScriptSet < Delorean::AbstractContainer
164
166
 
165
167
  return engine if engine
166
168
 
167
- @@dengines[sname] = sset.parse_check(sname, get_code(rule))
169
+ @@dengines[sname] = sset.parse_check(sname, get_code(ruleh))
168
170
  else
169
171
  engine = @@engines[[pt, sname]]
170
172
 
171
173
  return engine if engine
172
174
 
173
- @@engines[[pt, sname]] = sset.parse_check(sname, get_code(rule))
175
+ @@engines[[pt, sname]] = sset.parse_check(sname, get_code(ruleh))
174
176
  end
175
177
  rescue Delorean::ParseError => e
176
- f = get_parse_error_field(rule, e)
177
- raise "Error in rule '#{rule.name}' field '#{f}': #{e}"
178
+ f = get_parse_error_field(ruleh, e)
179
+ raise "Error in rule '#{ruleh['name']}' field '#{f}': #{e}"
178
180
  end
179
181
  end
180
182
 
data/lib/marty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "1.2.3"
2
+ VERSION = "1.2.4"
3
3
  end
@@ -53,7 +53,7 @@ class Gemini::XyzRule < Marty::DeloreanRule
53
53
  return {} unless xyz_keys.present?
54
54
 
55
55
  eclass = engine && engine.constantize || Marty::RuleScriptSet
56
- engine = eclass.new(pt).get_engine(self)
56
+ engine = eclass.new(pt).get_engine(self_as_hash)
57
57
  res = engine.evaluate("XyzNode", xyz_keys, {"xyz_param"=>xyz_param})
58
58
 
59
59
  res.all?
@@ -5,18 +5,18 @@ class Gemini::XyzRuleScriptSet < Marty::RuleScriptSet
5
5
  def self.body_start
6
6
  "import BaseCode\n#{node_name}: BaseCode::BaseCode\n"
7
7
  end
8
- def xyz_code(rule)
9
- write_code(rule.computed_guards.select{|k,_|k.starts_with?("xyz_")})
8
+ def xyz_code(ruleh)
9
+ write_code(ruleh["computed_guards"].select{|k,_|k.starts_with?("xyz_")})
10
10
  end
11
- def guard_code(rule)
12
- write_code(rule.computed_guards.reject{|k,_|k.starts_with?("xyz_")})
11
+ def guard_code(ruleh)
12
+ write_code(ruleh["computed_guards"].reject{|k,_|k.starts_with?("xyz_")})
13
13
  end
14
- def get_code(rule)
15
- x = xyz_code(rule)
14
+ def get_code(ruleh)
15
+ x = xyz_code(ruleh)
16
16
  super + (x.blank? ? '' :
17
17
  "XyzNode:\n xyz_param =? nil\n" + self.class.indent(x))
18
18
  end
19
- def code_section_counts(rule)
20
- super + { xyz: xyz_code(rule).count("\n") }
19
+ def code_section_counts(ruleh)
20
+ super + { xyz: xyz_code(ruleh).count("\n") }
21
21
  end
22
22
  end
@@ -5,6 +5,7 @@ module Marty::RuleSpec
5
5
  before(:all) do
6
6
  @save_file = "/tmp/save_#{Process.pid}.psql"
7
7
  save_clean_db(@save_file)
8
+ marty_whodunnit
8
9
  Marty::Script.load_scripts
9
10
  Marty::Config['RULEOPTS_MYRULE']={'simple_result'=>{},
10
11
  'computed_value'=>{},
@@ -19,7 +20,6 @@ module Marty::RuleSpec
19
20
  restore_clean_db(@save_file)
20
21
  end
21
22
  before(:each) do
22
- marty_whodunnit
23
23
  dt = DateTime.parse('2017-1-1')
24
24
  p = File.expand_path('../../fixtures/csv/rule', __FILE__)
25
25
  [Marty::DataGrid, Gemini::XyzRule, Gemini::MyRule].each do |klass|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2018-02-06 00:00:00.000000000 Z
17
+ date: 2018-02-15 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg