marty 2.5.2 → 2.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +7 -0
  4. data/.rubocop_todo.yml +11 -589
  5. data/Gemfile +9 -9
  6. data/Gemfile.lock +1 -1
  7. data/Rakefile +1 -3
  8. data/app/components/marty/api_auth_view.rb +3 -3
  9. data/app/components/marty/api_config_view.rb +8 -8
  10. data/app/components/marty/api_log_view.rb +16 -20
  11. data/app/components/marty/auth_app.rb +6 -6
  12. data/app/components/marty/base_rule_view.rb +27 -19
  13. data/app/components/marty/config_view.rb +12 -9
  14. data/app/components/marty/data_grid_view.rb +26 -26
  15. data/app/components/marty/delorean_rule_view.rb +0 -1
  16. data/app/components/marty/event_view.rb +27 -27
  17. data/app/components/marty/extras/layout.rb +26 -26
  18. data/app/components/marty/extras/misc.rb +2 -2
  19. data/app/components/marty/grid.rb +13 -13
  20. data/app/components/marty/grid_append_only.rb +0 -1
  21. data/app/components/marty/import_type_view.rb +13 -13
  22. data/app/components/marty/import_view.rb +17 -16
  23. data/app/components/marty/log_view.rb +16 -14
  24. data/app/components/marty/main_auth_app.rb +59 -59
  25. data/app/components/marty/main_auth_app/client/main_auth_app.js +3 -3
  26. data/app/components/marty/mcfly_grid_panel.rb +10 -10
  27. data/app/components/marty/new_posting_form.rb +11 -11
  28. data/app/components/marty/new_posting_window.rb +0 -1
  29. data/app/components/marty/posting_grid.rb +12 -13
  30. data/app/components/marty/promise_view.rb +6 -6
  31. data/app/components/marty/report_form.rb +50 -53
  32. data/app/components/marty/report_select.rb +27 -27
  33. data/app/components/marty/reporting.rb +4 -4
  34. data/app/components/marty/script_form.rb +40 -42
  35. data/app/components/marty/script_grid.rb +24 -24
  36. data/app/components/marty/script_tester.rb +40 -42
  37. data/app/components/marty/scripting.rb +25 -27
  38. data/app/components/marty/simple_app.rb +24 -9
  39. data/app/components/marty/tag_grid.rb +12 -13
  40. data/app/components/marty/user_view.rb +35 -35
  41. data/app/controllers/marty/application_controller.rb +3 -4
  42. data/app/controllers/marty/components_controller.rb +1 -1
  43. data/app/controllers/marty/delayed_job_controller.rb +1 -0
  44. data/app/controllers/marty/diagnostic/controller.rb +4 -6
  45. data/app/controllers/marty/job_controller.rb +6 -6
  46. data/app/controllers/marty/report_controller.rb +11 -11
  47. data/app/controllers/marty/rpc_controller.rb +15 -16
  48. data/app/helpers/marty/script_set.rb +4 -4
  49. data/app/models/marty/api_auth.rb +4 -5
  50. data/app/models/marty/api_config.rb +1 -1
  51. data/app/models/marty/base.rb +9 -8
  52. data/app/models/marty/base_rule.rb +18 -13
  53. data/app/models/marty/config.rb +4 -5
  54. data/app/models/marty/data_grid.rb +157 -181
  55. data/app/models/marty/delorean_rule.rb +63 -62
  56. data/app/models/marty/enum.rb +1 -1
  57. data/app/models/marty/event.rb +56 -59
  58. data/app/models/marty/helper.rb +38 -6
  59. data/app/models/marty/import_type.rb +6 -6
  60. data/app/models/marty/log.rb +3 -2
  61. data/app/models/marty/name_validator.rb +3 -2
  62. data/app/models/marty/pg_enum.rb +3 -4
  63. data/app/models/marty/posting.rb +20 -24
  64. data/app/models/marty/promise.rb +28 -30
  65. data/app/models/marty/script.rb +30 -28
  66. data/app/models/marty/tag.rb +8 -8
  67. data/app/models/marty/token.rb +2 -2
  68. data/app/models/marty/user.rb +24 -23
  69. data/app/models/marty/vw_promise.rb +10 -11
  70. data/config/routes.rb +2 -2
  71. data/delorean/blame_report.dl +268 -0
  72. data/{spec/dummy/delorean/fields.dl → delorean/marty_fields.dl} +8 -0
  73. data/delorean/table_report.dl +34 -0
  74. data/docker-compose.dummy.yml +2 -3
  75. data/lib/marty/aws/base.rb +8 -8
  76. data/lib/marty/aws/request.rb +4 -4
  77. data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -0
  78. data/lib/marty/content_handler.rb +25 -25
  79. data/lib/marty/data_change.rb +49 -71
  80. data/lib/marty/data_conversion.rb +20 -28
  81. data/lib/marty/data_exporter.rb +25 -28
  82. data/lib/marty/data_importer.rb +25 -27
  83. data/lib/marty/engine.rb +1 -2
  84. data/lib/marty/json_schema.rb +22 -24
  85. data/lib/marty/logger.rb +6 -9
  86. data/lib/marty/mcfly_model.rb +20 -24
  87. data/lib/marty/migrations.rb +37 -35
  88. data/lib/marty/monkey.rb +33 -33
  89. data/lib/marty/permissions.rb +18 -18
  90. data/lib/marty/promise_job.rb +17 -17
  91. data/lib/marty/promise_proxy.rb +6 -6
  92. data/lib/marty/relation.rb +6 -7
  93. data/lib/marty/rpc_call.rb +13 -12
  94. data/lib/marty/rule_script_set.rb +32 -28
  95. data/lib/marty/schema_helper.rb +37 -51
  96. data/lib/marty/util.rb +25 -24
  97. data/lib/marty/version.rb +1 -1
  98. data/lib/marty/xl.rb +121 -115
  99. data/make-dummy.mk +3 -0
  100. data/marty.gemspec +21 -21
  101. data/other/marty/api/base.rb +34 -35
  102. data/other/marty/diagnostic/aws/ec2_instance.rb +8 -8
  103. data/other/marty/diagnostic/base.rb +13 -14
  104. data/other/marty/diagnostic/collection.rb +2 -1
  105. data/other/marty/diagnostic/connections.rb +8 -6
  106. data/other/marty/diagnostic/database.rb +1 -0
  107. data/other/marty/diagnostic/delayed_job_version.rb +7 -9
  108. data/other/marty/diagnostic/delayed_job_worker_total_count.rb +1 -1
  109. data/other/marty/diagnostic/delayed_job_workers.rb +1 -1
  110. data/other/marty/diagnostic/environment_variables.rb +17 -15
  111. data/other/marty/diagnostic/fatal.rb +1 -1
  112. data/other/marty/diagnostic/node.rb +5 -9
  113. data/other/marty/diagnostic/nodes.rb +7 -5
  114. data/other/marty/diagnostic/packer.rb +7 -7
  115. data/other/marty/diagnostic/reporter.rb +24 -27
  116. data/other/marty/diagnostic/version.rb +3 -5
  117. data/script/rails +2 -1
  118. data/spec/controllers/application_controller_spec.rb +6 -6
  119. data/spec/controllers/delayed_job_controller_spec.rb +4 -4
  120. data/spec/controllers/diagnostic/controller_spec.rb +59 -60
  121. data/spec/controllers/job_controller_spec.rb +68 -69
  122. data/spec/controllers/rpc_controller_spec.rb +353 -359
  123. data/spec/controllers/rpc_import_spec.rb +15 -16
  124. data/spec/dummy/delorean/blame_report.dl +110 -15
  125. data/spec/dummy/delorean/data_report.dl +4 -4
  126. data/spec/dummy/delorean/marty_fields.dl +63 -0
  127. data/spec/dummy/delorean/table_report.dl +34 -0
  128. data/spec/features/auth_app_spec.rb +1 -2
  129. data/spec/features/data_import_spec.rb +2 -3
  130. data/spec/features/enum_spec.rb +42 -46
  131. data/spec/features/jobs_dashboard_spec.rb +14 -8
  132. data/spec/features/log_view_spec.rb +40 -43
  133. data/spec/features/reporting_spec.rb +15 -15
  134. data/spec/features/rule_spec.rb +195 -190
  135. data/spec/features/scripting_spec.rb +17 -20
  136. data/spec/features/scripting_test_spec.rb +32 -33
  137. data/spec/features/user_view_spec.rb +15 -17
  138. data/spec/job_helper.rb +11 -11
  139. data/spec/lib/data_blame_spec.rb +82 -0
  140. data/spec/lib/data_exporter_spec.rb +31 -32
  141. data/spec/lib/data_importer_spec.rb +382 -395
  142. data/spec/lib/delorean_query_spec.rb +117 -119
  143. data/spec/lib/json_schema_spec.rb +382 -392
  144. data/spec/lib/logger_spec.rb +23 -24
  145. data/spec/lib/mcfly_model_spec.rb +112 -109
  146. data/spec/lib/migrations_spec.rb +10 -10
  147. data/spec/lib/struct_compare_spec.rb +6 -6
  148. data/spec/lib/table_report_spec.rb +90 -0
  149. data/spec/lib/xl_spec.rb +63 -65
  150. data/spec/lib/xl_styles_spec.rb +16 -19
  151. data/spec/models/api_auth_spec.rb +30 -30
  152. data/spec/models/config_spec.rb +32 -32
  153. data/spec/models/data_grid_spec.rb +642 -655
  154. data/spec/models/event_spec.rb +96 -88
  155. data/spec/models/import_type_spec.rb +20 -20
  156. data/spec/models/posting_spec.rb +35 -35
  157. data/spec/models/promise_spec.rb +5 -5
  158. data/spec/models/rule_spec.rb +280 -269
  159. data/spec/models/script_spec.rb +27 -18
  160. data/spec/models/user_spec.rb +9 -9
  161. data/spec/other/diagnostic/base_spec.rb +20 -19
  162. data/spec/other/diagnostic/collection_spec.rb +6 -5
  163. data/spec/other/diagnostic/delayed_job_version_spec.rb +1 -1
  164. data/spec/other/diagnostic/delayed_job_workers_spec.rb +8 -8
  165. data/spec/other/diagnostic/reporter_spec.rb +31 -33
  166. data/spec/spec_helper.rb +5 -5
  167. data/spec/support/chromedriver.rb +3 -5
  168. data/spec/support/components/netzke_combobox.rb +1 -1
  169. data/spec/support/components/netzke_grid.rb +17 -17
  170. data/spec/support/custom_matchers.rb +2 -2
  171. data/spec/support/download_helper.rb +1 -1
  172. data/spec/support/helper.rb +1 -2
  173. data/spec/support/netzke.rb +31 -31
  174. data/spec/support/performance_helper.rb +8 -8
  175. data/spec/support/post_run_logger.rb +1 -2
  176. data/spec/support/setup.rb +1 -4
  177. data/spec/support/shared_connection.rb +2 -2
  178. data/spec/support/structure_compare.rb +21 -22
  179. data/spec/support/suite.rb +1 -2
  180. data/spec/support/users.rb +5 -6
  181. metadata +32 -26
@@ -4,27 +4,24 @@ class Marty::Logger
4
4
  def self.method_missing(m, *args, &block)
5
5
  return super unless
6
6
  [:debug, :info, :warn, :error, :fatal, :unknown].include?(m)
7
+
7
8
  Marty::Util.logger.send(m, args[0]) if Marty::Util.logger.respond_to?(m)
8
9
  log(m, *args)
9
10
  end
10
11
 
11
- def self.log(type, message, details=nil)
12
+ def self.log(type, message, details = nil)
12
13
  Marty::Log.write_log(type, message, details)
13
14
  end
14
15
 
15
16
  def self.with_logging(error_message, error_data)
16
- begin
17
17
  yield
18
- rescue => e
19
- error(error_message, { "message" => e.message,
20
- "data" => error_data})
18
+ rescue StandardError => e
19
+ error(error_message, 'message' => e.message,
20
+ 'data' => error_data)
21
21
  raise "#{error_message}: #{e.message}"
22
- end
23
22
  end
24
23
 
25
- delorean_fn :dllog, sig: [2, 20] do
26
- |*args|
27
-
24
+ delorean_fn :dllog, sig: [2, 20] do |*args|
28
25
  info args[0], args[1..-1]
29
26
  end
30
27
  end
@@ -11,14 +11,13 @@ module Mcfly::Model
11
11
  end
12
12
 
13
13
  def base_mcfly_lookup(meth, name, options = {}, &block)
14
-
15
14
  priv = options[:private]
16
15
 
17
16
  send(meth, name, options) do |ts, *args|
18
- raise "time cannot be nil" if ts.nil?
17
+ raise 'time cannot be nil' if ts.nil?
19
18
 
20
19
  ts = Mcfly.normalize_infinity(ts)
21
- q = self.where("#{table_name}.obsoleted_dt >= ? AND " +
20
+ q = where("#{table_name}.obsoleted_dt >= ? AND " +
22
21
  "#{table_name}.created_dt < ?", ts, ts).scoping do
23
22
  block.call(ts, *args)
24
23
  end
@@ -40,7 +39,7 @@ module Mcfly::Model
40
39
  base_mcfly_lookup(:delorean_fn, name, options, &block)
41
40
  end
42
41
 
43
- def gen_mcfly_lookup(name, attrs, options={})
42
+ def gen_mcfly_lookup(name, attrs, options = {})
44
43
  raise "bad options #{options.keys}" unless
45
44
  (options.keys - [:mode, :cache, :private]).empty?
46
45
 
@@ -52,36 +51,35 @@ module Mcfly::Model
52
51
  # the older mode=:all is not supported (it's bogus)
53
52
  raise "bad mode #{mode}" unless [nil, :first].member?(mode)
54
53
 
55
- assoc = Set.new(self.reflect_on_all_associations.map(&:name))
54
+ assoc = Set.new(reflect_on_all_associations.map(&:name))
56
55
 
57
- qstr = attrs.map {|k, v|
56
+ qstr = attrs.map do |k, v|
58
57
  k = "#{k}_id" if assoc.member?(k)
59
58
 
60
59
  v ? "(#{k} = ? OR #{k} IS NULL)" : "(#{k} = ?)"
61
- }.join(" AND ")
60
+ end.join(' AND ')
62
61
 
63
62
  if Hash === attrs
64
- order = attrs.select {|k, v| v}.keys.reverse.map { |k|
63
+ order = attrs.select { |k, v| v }.keys.reverse.map do |k|
65
64
  k = "#{k}_id" if assoc.member?(k)
66
65
 
67
66
  "#{k} NULLS LAST"
68
- }.join(", ")
67
+ end.join(', ')
69
68
  attrs = attrs.keys
70
69
  else
71
- raise "bad attrs" unless Array === attrs
70
+ raise 'bad attrs' unless Array === attrs
72
71
  end
73
72
 
74
73
  fn = cache ? :cached_delorean_fn : :delorean_fn
75
- base_mcfly_lookup(fn, name, options + {sig: attrs.length+1,
76
- mode: mode}) do
77
- |t, *attr_list|
74
+ base_mcfly_lookup(fn, name, options + { sig: attrs.length + 1,
75
+ mode: mode }) do |t, *attr_list|
78
76
 
79
- attr_list_ids = attr_list.each_with_index.map {|x, i|
77
+ attr_list_ids = attr_list.each_with_index.map do |x, i|
80
78
  assoc.member?(attrs[i]) ?
81
79
  (attr_list[i] && attr_list[i].id) : attr_list[i]
82
- }
80
+ end
83
81
 
84
- q = self.where(qstr, *attr_list_ids)
82
+ q = where(qstr, *attr_list_ids)
85
83
  q = q.order(order) if order
86
84
  q
87
85
  end
@@ -109,7 +107,7 @@ module Mcfly::Model
109
107
  # pc_name = :pc_lookup_q
110
108
  # pc_attrs = {entity: true, security_instrument: true, coupon: true}
111
109
 
112
- def gen_mcfly_lookup_cat(name, catrel, attrs, options={})
110
+ def gen_mcfly_lookup_cat(name, catrel, attrs, options = {})
113
111
  rel_attr, cat_assoc_name, cat_attr = catrel
114
112
 
115
113
  raise "#{rel_attr} should be mapped in attrs" if attrs[rel_attr].nil?
@@ -118,13 +116,13 @@ module Mcfly::Model
118
116
  cat_attr_id = "#{cat_attr}_id"
119
117
 
120
118
  # replace rel_attr with cat_attr in attrs
121
- pc_attrs = attrs.each_with_object({}) {|(k, v), h|
119
+ pc_attrs = attrs.each_with_object({}) do |(k, v), h|
122
120
  h[k == rel_attr ? cat_attr_id : k] = v
123
- }
121
+ end
124
122
 
125
123
  pc_name = "pc_#{name}".to_sym
126
124
 
127
- gen_mcfly_lookup(pc_name, pc_attrs, options + {private: true})
125
+ gen_mcfly_lookup(pc_name, pc_attrs, options + { private: true })
128
126
 
129
127
  lpi = attrs.keys.index rel_attr
130
128
 
@@ -135,9 +133,7 @@ module Mcfly::Model
135
133
  fn = options.fetch(:mode, :first) ? :cached_delorean_fn : :delorean_fn
136
134
  priv = options[:private]
137
135
 
138
- send(fn, name, sig: attrs.length+1) do
139
- |ts, *args|
140
-
136
+ send(fn, name, sig: attrs.length + 1) do |ts, *args|
141
137
  # Example: rel is a Gemini::SecurityInstrument instance.
142
138
  rel = args[lpi]
143
139
  raise "#{rel_attr} can't be nil" unless rel
@@ -148,7 +144,7 @@ module Mcfly::Model
148
144
  find_by(rel_attr => rel).
149
145
  send(cat_attr_id)
150
146
 
151
- q = self.send(pc_name, ts, *args)
147
+ q = send(pc_name, ts, *args)
152
148
  hash_if_necessary(q, priv)
153
149
  end
154
150
  end
@@ -1,20 +1,20 @@
1
1
  module Marty::Migrations
2
2
  def tb_prefix
3
- "marty_"
3
+ 'marty_'
4
4
  end
5
5
 
6
6
  def new_enum(klass, prefix_override = nil)
7
7
  raise "bad class arg #{klass}" unless
8
8
  klass.is_a?(Class) && klass < ActiveRecord::Base
9
9
 
10
- raise "model class needs VALUES (as Set)" unless
10
+ raise 'model class needs VALUES (as Set)' unless
11
11
  klass.const_defined?(:VALUES)
12
12
 
13
13
  values = klass::VALUES
14
14
  str_values =
15
- values.map {|v| ActiveRecord::Base.connection.quote v}.join ','
15
+ values.map { |v| ActiveRecord::Base.connection.quote v }.join ','
16
16
 
17
- #hacky way to get name
17
+ # hacky way to get name
18
18
  prefix = prefix_override || tb_prefix
19
19
  enum_name = klass.table_name.sub(/^#{prefix}_*/, '')
20
20
 
@@ -28,14 +28,14 @@ module Marty::Migrations
28
28
  raise "bad class arg #{klass}" unless
29
29
  klass.is_a?(Class) && klass < ActiveRecord::Base
30
30
 
31
- raise "model class needs VALUES (as Set)" unless
31
+ raise 'model class needs VALUES (as Set)' unless
32
32
  klass.const_defined?(:VALUES)
33
33
 
34
- #hacky way to get name
34
+ # hacky way to get name
35
35
  prefix = prefix_override || tb_prefix
36
36
  enum_name = klass.table_name.sub(/^#{prefix}/, '')
37
37
 
38
- #check values against underlying values
38
+ # check values against underlying values
39
39
  res = execute <<-SQL
40
40
  SELECT ENUM_RANGE(null::#{enum_name});
41
41
  SQL
@@ -63,7 +63,7 @@ module Marty::Migrations
63
63
  # FIXME: so hacky to specifically check for "marty_"
64
64
  to_table = "#{tb_prefix}#{to_table}" unless
65
65
  to_table.to_s.start_with?(tb_prefix) ||
66
- to_table.to_s.start_with?("marty_")
66
+ to_table.to_s.start_with?('marty_')
67
67
 
68
68
  add_foreign_key(from_table,
69
69
  to_table,
@@ -86,9 +86,9 @@ module Marty::Migrations
86
86
 
87
87
  add_mcfly_attrs_index(tb, *attrs)
88
88
 
89
- MCFLY_INDEX_COLUMNS.each { |a|
89
+ MCFLY_INDEX_COLUMNS.each do |a|
90
90
  add_index tb.to_sym, a, index_opts(tb, a)
91
- }
91
+ end
92
92
  end
93
93
 
94
94
  def add_mcfly_unique_index(klass)
@@ -115,19 +115,19 @@ module Marty::Migrations
115
115
 
116
116
  remove_index(klass.table_name.to_sym,
117
117
  name: unique_index_name(klass)
118
- ) if index_exists?(klass.table_name.to_sym,
119
- attrs,
120
- name: unique_index_name(klass),
121
- unique: true)
118
+ ) if index_exists?(klass.table_name.to_sym,
119
+ attrs,
120
+ name: unique_index_name(klass),
121
+ unique: true)
122
122
  end
123
123
 
124
124
  def self.write_view(target_dir, target_view, klass, jsons, excludes, extras)
125
125
  colnames = klass.columns_hash.keys
126
- excludes += ["user_id", "o_user_id"]
127
- joins = ["join marty_users u on main.user_id = u.id",
128
- "left join marty_users ou on main.o_user_id = ou.id"]
129
- columns = ["u.login AS user_name",
130
- "ou.login AS obsoleted_user"]
126
+ excludes += ['user_id', 'o_user_id']
127
+ joins = ['join marty_users u on main.user_id = u.id',
128
+ 'left join marty_users ou on main.o_user_id = ou.id']
129
+ columns = ['u.login AS user_name',
130
+ 'ou.login AS obsoleted_user']
131
131
  jointabs = {}
132
132
  colnames.each do |c|
133
133
  if jsons[c]
@@ -142,14 +142,14 @@ module Marty::Migrations
142
142
  end
143
143
  elsif !excludes.include?(c)
144
144
  assoc = klass.reflections.find { |(n, h)| h.foreign_key == c }
145
- if assoc && assoc[1].klass.columns_hash["name"]
145
+ if assoc && assoc[1].klass.columns_hash['name']
146
146
  table_name = assoc[1].table_name
147
147
  jointabs[table_name] ||= 0
148
148
  jointabs[table_name] += 1
149
149
  tn_alias = "#{table_name}#{jointabs[table_name]}"
150
150
  joins.push "left join #{table_name} #{tn_alias} on main.#{c} " +
151
151
  "= #{tn_alias}.id"
152
- target_name = c.gsub(/_id$/,'_name')
152
+ target_name = c.gsub(/_id$/, '_name')
153
153
  columns.push "#{tn_alias}.name as #{target_name}"
154
154
  extras.each do |(table, column, new_colname)|
155
155
  columns.push "#{tn_alias}.#{column} as #{new_colname}" if
@@ -160,7 +160,7 @@ module Marty::Migrations
160
160
  end
161
161
  end
162
162
  end
163
- File.open(File.join(target_dir, "#{target_view}.sql"), "w") do |f|
163
+ File.open(File.join(target_dir, "#{target_view}.sql"), 'w') do |f|
164
164
  f.puts <<EOSQL
165
165
  create or replace function f_fixfalse(s text) returns text as $$
166
166
  begin
@@ -205,14 +205,14 @@ EOSQL
205
205
  gen_count = 0
206
206
 
207
207
  sql_files.each do |sql|
208
- base = File.basename(sql, ".sql")
208
+ base = File.basename(sql, '.sql')
209
209
  existing = mig_files[base].first rescue nil
210
210
  # must ensure CRLF line endings or SQL Server keep asking about line
211
211
  # endings whenever you generating script
212
- sql_lines = lines_to_crlf(File.open(sql, "r").readlines)
212
+ sql_lines = lines_to_crlf(File.open(sql, 'r').readlines)
213
213
  next if existing && sql_lines == File.open(existing[:raw_sql]).readlines
214
214
 
215
- timestamp = (time_now + gen_count.seconds).strftime("%Y%m%d%H%M%S")
215
+ timestamp = (time_now + gen_count.seconds).strftime('%Y%m%d%H%M%S')
216
216
  v = existing && existing[:version] + 1 || 1
217
217
  klass = "v#{v}_sql_#{base}"
218
218
  newbase = "#{timestamp}_#{klass}"
@@ -221,14 +221,14 @@ EOSQL
221
221
  sql_snap_call =
222
222
  "Rails.root.join('#{migrations_dir}', 'sql', '#{newbase}.sql')"
223
223
 
224
- File.open(sql_snap_literal, "w") do |f|
224
+ File.open(sql_snap_literal, 'w') do |f|
225
225
  f.print sql_lines.join
226
226
  end
227
227
  puts "creating #{newbase}.rb"
228
228
 
229
229
  # only split on "GO" at the start of a line with optional whitespace
230
230
  # before EOL. GO in comments could trigger this and will cause an error
231
- File.open(mig_name, "w") do |f|
231
+ File.open(mig_name, 'w') do |f|
232
232
  f.print <<OUT
233
233
  class #{klass.camelcase} < ActiveRecord::Migration[4.2]
234
234
 
@@ -254,20 +254,21 @@ OUT
254
254
  # we have to get it from the database
255
255
  def get_old_enum_id(klass, name)
256
256
  ActiveRecord::Base.
257
- connection.execute(<<-SQL).to_a.first.try{|v| v['id']}
257
+ connection.execute(<<-SQL).to_a.first.try { |v| v['id'] }
258
258
  select id from #{klass.table_name} where name =
259
259
  #{ActiveRecord::Base.connection.quote(name)}
260
260
  SQL
261
261
  end
262
262
 
263
263
  private
264
+
264
265
  def fk_opts(from, to, column)
265
266
  name = "fk_#{from}_#{to}_#{column}"
266
267
  if name.length > 63
267
268
  s = Digest::MD5.hexdigest("#{to}_#{column}").slice(0..9)
268
269
  name = "fk_#{from}_#{s}"
269
270
  end
270
- {name: name}
271
+ { name: name }
271
272
  end
272
273
 
273
274
  def index_opts(tb, a)
@@ -278,11 +279,11 @@ OUT
278
279
  end
279
280
 
280
281
  def add_mcfly_attrs_index(tb, *attrs)
281
- attrs.each { |a|
282
+ attrs.each do |a|
282
283
  options = index_opts(tb, a)
283
- options[:order] = {a.to_sym => "NULLS LAST"}
284
+ options[:order] = { a.to_sym => 'NULLS LAST' }
284
285
  add_index tb.to_sym, a, options
285
- }
286
+ end
286
287
  end
287
288
 
288
289
  def unique_index_name(klass)
@@ -305,15 +306,16 @@ OUT
305
306
 
306
307
  def self.get_plv8_migration(file)
307
308
  fnname = %r(/([^/]+)_v[0-9]+\.js\z).match(file)[1]
308
- lines=File.readlines(file)
309
+ lines = File.readlines(file)
309
310
  parts = lines.map do |line|
310
311
  next [:param, $1] if %r(\A// PARAM[:] (.*)$).match(line)
311
312
  next [:ret, $1] if %r(\A// RETURN[:] (.*)$).match(line)
313
+
312
314
  [:body, line]
313
315
  end.group_by(&:first)
314
- args = parts[:param].map{ |(_,l)| l}.join(",\n")
316
+ args = parts[:param].map { |(_, l)| l }.join(",\n")
315
317
  ret = parts[:ret][0][1]
316
- body = parts[:body].map{ |(_,l)| l}.join
318
+ body = parts[:body].map { |(_, l)| l }.join
317
319
  <<EOT
318
320
  CREATE OR REPLACE FUNCTION #{fnname} (
319
321
  #{args}
@@ -25,14 +25,14 @@ end
25
25
  class Hash
26
26
  # define addition on hashes -- useful in Delorean code.
27
27
  def +(x)
28
- self.merge(x)
28
+ merge(x)
29
29
  end
30
30
 
31
31
  # define hash slice (similar to node slice in Delorean)
32
32
  def %(x)
33
- x.each_with_object({}) { |k, h|
33
+ x.each_with_object({}) do |k, h|
34
34
  h[k] = self[k]
35
- }
35
+ end
36
36
  end
37
37
  end
38
38
 
@@ -42,7 +42,7 @@ require 'netzke-basepack'
42
42
 
43
43
  class Netzke::Base
44
44
  # get root component session
45
- def root_sess(component=nil)
45
+ def root_sess(component = nil)
46
46
  component ||= self
47
47
  component.parent ? root_sess(component.parent) : component.component_session
48
48
  end
@@ -87,7 +87,6 @@ class String
87
87
  def in_time_zone(zone = ::Time.zone)
88
88
  self == 'infinity' ? self : old_in_time_zone(zone)
89
89
  end
90
-
91
90
  end
92
91
 
93
92
  ######################################################################
@@ -121,8 +120,8 @@ module Netzke::Basepack::DataAdapters
121
120
  arel_table = assoc ? Arel::Table.new(assoc.klass.table_name.to_sym) :
122
121
  @model.arel_table
123
122
 
124
- value = q["value"]
125
- op = q["operator"]
123
+ value = q['value']
124
+ op = q['operator']
126
125
 
127
126
  attr_type = attr_type(attr)
128
127
 
@@ -144,11 +143,11 @@ module Netzke::Basepack::DataAdapters
144
143
  end
145
144
 
146
145
  # join them by AND
147
- predicates[1..-1].inject(predicates.first){ |r,p| r.and(p) }
146
+ predicates[1..-1].inject(predicates.first) { |r, p| r.and(p) }
148
147
  end
149
148
 
150
149
  def update_predecate_for_enum(table, op, value)
151
- col = Arel::Nodes::NamedFunction.new("CAST", [table.as("TEXT")])
150
+ col = Arel::Nodes::NamedFunction.new('CAST', [table.as('TEXT')])
152
151
  col.matches "%#{value}%"
153
152
  end
154
153
  end
@@ -166,8 +165,9 @@ module ActiveRecord
166
165
 
167
166
  enum = options.delete(:enum)
168
167
 
169
- column_names.each { |name|
170
- column(name, enum || name.to_s.pluralize, options) }
168
+ column_names.each do |name|
169
+ column(name, enum || name.to_s.pluralize, options)
170
+ end
171
171
  end
172
172
  end
173
173
  end
@@ -176,10 +176,10 @@ end
176
176
  ######################################################################
177
177
 
178
178
  class ActiveRecord::Relation
179
- def mcfly_pt(pt, cls=nil)
180
- cls ||= self.klass
179
+ def mcfly_pt(pt, cls = nil)
180
+ cls ||= klass
181
181
  tb = cls.table_name
182
- self.where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?", pt, pt)
182
+ where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?", pt, pt)
183
183
  end
184
184
 
185
185
  def attributes
@@ -216,9 +216,9 @@ class ActiveRecord::Base
216
216
  # when joins args are strings, checks to see if they're
217
217
  # associations attrs. If so, convert them to symbols for joins
218
218
  # to work properly.
219
- new_args = args.map {|a|
220
- self.reflections.has_key?(a) ? a.to_sym : a
221
- }
219
+ new_args = args.map do |a|
220
+ reflections.key?(a) ? a.to_sym : a
221
+ end
222
222
  old_joins(*new_args)
223
223
  end
224
224
  end
@@ -226,19 +226,20 @@ end
226
226
 
227
227
  ar_instances = [ActiveRecord::Relation, ActiveRecord::QueryMethods::WhereChain]
228
228
 
229
- args_hack = [[Object, nil]]*10
230
-
231
- [[:distinct, args_hack],
232
- [:find_by, args_hack],
233
- [:group, args_hack],
234
- [:joins, args_hack],
235
- [:limit, [Integer]],
236
- [:not, args_hack],
237
- [:order, args_hack],
238
- [:pluck, args_hack],
239
- [:select, args_hack],
240
- [:where, args_hack],
241
- [:mcfly_pt, [[Date, Time, ActiveSupport::TimeWithZone, String], [nil, Class]]]
229
+ args_hack = [[Object, nil]] * 10
230
+
231
+ [
232
+ [:distinct, args_hack],
233
+ [:find_by, args_hack],
234
+ [:group, args_hack],
235
+ [:joins, args_hack],
236
+ [:limit, [Integer]],
237
+ [:not, args_hack],
238
+ [:order, args_hack],
239
+ [:pluck, args_hack],
240
+ [:select, args_hack],
241
+ [:where, args_hack],
242
+ [:mcfly_pt, [[Date, Time, ActiveSupport::TimeWithZone, String], [nil, Class]]]
242
243
  ].each do |meth, args|
243
244
  ::Delorean::Ruby.whitelist.add_method meth do |method|
244
245
  ar_instances.each do |ar|
@@ -254,10 +255,9 @@ end
254
255
  ::Delorean::Ruby.whitelist.add_method :lookup_grid_distinct_entry do |method|
255
256
  method.called_on OpenStruct, with: [[Date, Time,
256
257
  ActiveSupport::TimeWithZone, String],
257
- Hash]
258
+ Hash]
258
259
  end
259
260
 
260
-
261
261
  mcfly_cache_adapter = ::Marty::CacheAdapters::McflyRubyCache.new(
262
262
  size_per_class: 1000
263
263
  )
@@ -278,7 +278,7 @@ end
278
278
  class OpenStruct
279
279
  # the default as_json produces {"table"=>h} which is quite goofy
280
280
  def as_json(*)
281
- self.to_h
281
+ to_h
282
282
  end
283
283
  end
284
284