marty 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
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