marty 2.4.6 → 2.4.7

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: bd09d3bb234821197b1ae5dd78b70e8d07db080f
4
- data.tar.gz: 4a2b19ce73da8012c2cd8157661e56fef22d2fd6
3
+ metadata.gz: 2b427adbbbc21ea8c9e260999376f86e048cbe2e
4
+ data.tar.gz: a776a0c78d3280491a4cca50017df92e5d872386
5
5
  SHA512:
6
- metadata.gz: 5862a5cc24a94a11a71ba2d649440d6636768b8b18872ae1f1653cfeef588d34d81069486cdb45bf9a2793a22bf9aef172df3bbf9f9e4fad243138b2be04f9b9
7
- data.tar.gz: fc3048d404e60b186f3ab9bc49063369f98fd05f30a161ee5736ed116224ec544a3059218e60cf8eacccf1685f7a1f4bfaf15793569fc09d804b731a32e8ac27
6
+ metadata.gz: 0f5002a7ccbbd7011768d3c96bbddb2550924d84c21feac1f4920acace47ab293aaf7f087e67317d638f1a3777236654a5ce660b7c465c7b772c3e3ece813438
7
+ data.tar.gz: 68206fcb4fdc3de3d65dcc0a824ae62a32ecf8fcc0b90efaf7d9e01a5b6d68990244e84f3eb2254be3099fe55576bd3a336994772ccb4aedd1a8ed80c92e8203
data/Gemfile.lock CHANGED
@@ -5,7 +5,7 @@ PATH
5
5
  aws-sigv4 (~> 1.0, >= 1.0.2)
6
6
  axlsx (= 3.0.0pre)
7
7
  coderay
8
- delorean_lang (~> 0.4.2)
8
+ delorean_lang (~> 0.4.8)
9
9
  json-schema
10
10
  mcfly (= 0.0.20)
11
11
  net-ldap (= 0.12.1)
@@ -83,7 +83,7 @@ GEM
83
83
  coffee-script-source
84
84
  execjs
85
85
  coffee-script-source (1.12.2)
86
- concurrent-ruby (1.0.5)
86
+ concurrent-ruby (1.1.4)
87
87
  connection_pool (2.2.1)
88
88
  crass (1.0.3)
89
89
  daemons (1.1.9)
@@ -93,7 +93,7 @@ GEM
93
93
  delayed_job_active_record (4.1.2)
94
94
  activerecord (>= 3.0, < 5.2)
95
95
  delayed_job (>= 3.0, < 5)
96
- delorean_lang (0.4.2)
96
+ delorean_lang (0.4.8)
97
97
  activerecord (>= 3.2)
98
98
  treetop (~> 1.5)
99
99
  diff-lcs (1.3)
@@ -120,7 +120,7 @@ GEM
120
120
  pg (~> 0.17)
121
121
  method_source (0.9.0)
122
122
  mime-types (2.99.3)
123
- mimemagic (0.3.2)
123
+ mimemagic (0.3.3)
124
124
  mini_mime (1.0.0)
125
125
  mini_portile2 (2.3.0)
126
126
  minitest (5.11.3)
data/lib/marty.rb CHANGED
@@ -11,6 +11,7 @@
11
11
  require 'marty/engine'
12
12
  require 'marty/railtie'
13
13
  require 'marty/mcfly_model'
14
+ require 'marty/cache_adapters'
14
15
  require 'marty/monkey'
15
16
  require 'marty/promise_job'
16
17
  require 'marty/json_schema'
@@ -0,0 +1,6 @@
1
+ require 'marty/cache_adapters/mcfly_ruby_cache'
2
+
3
+ module Marty
4
+ module CacheAdapters
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module Marty
2
+ module CacheAdapters
3
+ class McflyRubyCache < ::Delorean::Cache::Adapters::RubyCache
4
+ def cache_item?(klass:, method_name:, args:)
5
+ ts = args && args.first
6
+
7
+ return false if Mcfly.is_infinity(ts)
8
+ true
9
+ end
10
+ end
11
+ end
12
+ end
@@ -6,52 +6,6 @@ module Mcfly::Model
6
6
  end
7
7
 
8
8
  module ClassMethods
9
- def clear_lookup_cache!
10
- @LOOKUP_CACHE.clear if @LOOKUP_CACHE
11
- end
12
-
13
- # FIXME IDEA: we just make :cache an argument to delorean_fn.
14
- # That way, we don't need the cached_ flavors. It'll make all
15
- # this code a lot simpler. We should also just add the :private
16
- # mechanism here.
17
-
18
- # Implements a VERY HACKY class-based (per process) caching
19
- # mechanism for database lookup results. Issues include: cached
20
- # values are ActiveRecord objects. Query results can be very
21
- # large lists which we count as one item in the cache. Caching
22
- # mechanism will result in large processes.
23
- def cached_delorean_fn(name, options = {}, &block)
24
- @LOOKUP_CACHE ||= {}
25
-
26
- delorean_fn(name, options) do |ts, *args|
27
- cache_key = [name, ts] + args.map{ |a|
28
- a.is_a?(ActiveRecord::Base) ? a.id : a
29
- } unless Mcfly.is_infinity(ts)
30
- next @LOOKUP_CACHE[cache_key] if
31
- cache_key && @LOOKUP_CACHE.has_key?(cache_key)
32
-
33
- res = block.call(ts, *args)
34
-
35
- if cache_key
36
- # Cache has >1000 items, clear out the oldest 200. FIXME:
37
- # hard-coded, should be configurable. Cache
38
- # size/invalidation should be per lookup and not class.
39
- # We're invalidating cache items simply based on age and
40
- # not usage. This is faster but not as fair.
41
- if @LOOKUP_CACHE.count > 1000
42
- @LOOKUP_CACHE.keys[0..200].each{|k| @LOOKUP_CACHE.delete(k)}
43
- end
44
- @LOOKUP_CACHE[cache_key] = res
45
-
46
- # Since we're caching this object and don't want anyone
47
- # changing it. FIXME: ideally should freeze this object
48
- # recursively.
49
- res.freeze unless res.is_a?(ActiveRecord::Relation)
50
- end
51
- res
52
- end
53
- end
54
-
55
9
  def hash_if_necessary(q, private)
56
10
  !private && q.is_a?(ActiveRecord::Base) ? make_openstruct(q) : q
57
11
  end
data/lib/marty/monkey.rb CHANGED
@@ -189,6 +189,8 @@ end
189
189
 
190
190
  ######################################################################
191
191
 
192
+ require 'marty/cache_adapters'
193
+
192
194
  class ActiveRecord::Base
193
195
  MCFLY_PT_SIG = [1, 1]
194
196
 
@@ -224,28 +226,44 @@ end
224
226
 
225
227
  ar_instances = [ActiveRecord::Relation, ActiveRecord::QueryMethods::WhereChain]
226
228
 
227
- args_hack = [ar_instances] + [[Object, nil]]*10
228
-
229
- Delorean::RUBY_WHITELIST.merge!(
230
- count: [ar_instances],
231
- distinct: args_hack,
232
- find_by: args_hack,
233
- group: args_hack,
234
- joins: args_hack,
235
- limit: [ar_instances, Integer],
236
- not: args_hack,
237
- order: args_hack,
238
- pluck: args_hack,
239
- select: args_hack,
240
- where: args_hack,
241
- mcfly_pt: [ar_instances,
242
- [Date, Time, ActiveSupport::TimeWithZone, String],
243
- [nil, Class]],
244
- lookup_grid_distinct_entry: [OpenStruct,
245
- [Date, Time, ActiveSupport::TimeWithZone, String],
246
- Hash],
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]]]
242
+ ].each do |meth, args|
243
+ ::Delorean::Ruby.whitelist.add_method meth do |method|
244
+ ar_instances.each do |ar|
245
+ method.called_on ar, with: args
246
+ end
247
+ end
248
+ end
249
+ ::Delorean::Ruby.whitelist.add_method :count do |method|
250
+ ar_instances.each do |ar|
251
+ method.called_on ar
252
+ end
253
+ end
254
+ ::Delorean::Ruby.whitelist.add_method :lookup_grid_distinct_entry do |method|
255
+ method.called_on OpenStruct, with: [[Date, Time,
256
+ ActiveSupport::TimeWithZone, String],
257
+ Hash]
258
+ end
259
+
260
+
261
+ mcfly_cache_adapter = ::Marty::CacheAdapters::McflyRubyCache.new(
262
+ size_per_class: 1000
247
263
  )
248
264
 
265
+ ::Delorean::Cache.adapter = mcfly_cache_adapter
266
+
249
267
  ######################################################################
250
268
 
251
269
  module Mcfly::Controller
data/lib/marty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "2.4.6"
2
+ VERSION = "2.4.7"
3
3
  end
data/marty.gemspec CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
 
33
33
  s.add_dependency 'axlsx', '3.0.0pre'
34
34
 
35
- s.add_dependency 'delorean_lang', '~> 0.4.2'
35
+ s.add_dependency 'delorean_lang', '~> 0.4.8'
36
36
  s.add_dependency 'mcfly', '0.0.20'
37
37
 
38
38
  s.add_dependency 'coderay'
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: 2.4.6
4
+ version: 2.4.7
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: 2019-01-09 00:00:00.000000000 Z
17
+ date: 2019-01-10 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.4.2
67
+ version: 0.4.8
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 0.4.2
74
+ version: 0.4.8
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: mcfly
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -496,6 +496,8 @@ files:
496
496
  - lib/marty.rb
497
497
  - lib/marty/aws/base.rb
498
498
  - lib/marty/aws/request.rb
499
+ - lib/marty/cache_adapters.rb
500
+ - lib/marty/cache_adapters/mcfly_ruby_cache.rb
499
501
  - lib/marty/content_handler.rb
500
502
  - lib/marty/data_change.rb
501
503
  - lib/marty/data_conversion.rb