advanced_ar 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/advanced_ar.rb +2 -2
- data/lib/advanced_ar/param_validator.rb +25 -4
- data/lib/advanced_ar/version.rb +1 -1
- metadata +2 -6
- data/advanced_ar.gemspec +0 -43
- data/config/initializers/01_custom_preloaders.rb +0 -2
- data/config/initializers/arbitrary_prefetch.rb +0 -1
- data/config/initializers/cancancan.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa3519ddfd34d9170d05d5c8634bf8f0b0d84ba38ebe1cef3bc7ddfe68760001
|
4
|
+
data.tar.gz: cc0d1fcfe9697bb909ea49ec4c73f794ceeba5331a1ae89aa4fb40ee7bf80d9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da83392565166dfe4567a8fe73e76a1847778522ff438beef27804320a4972f9e6d9a8fca5b5a4d3c04acb8d86a54d624b20a667d3a5d7ad418053ff04a7e5e0
|
7
|
+
data.tar.gz: 3bed49515c7ab10026e47f2d4b9688afca6b9da110e60c02b2e5ea087fada2fc54c4d4e361a0297d84609c0738925a18d7132a6ed3fa884f4181e8875c5a807b
|
data/lib/advanced_ar.rb
CHANGED
@@ -7,12 +7,20 @@ module AdvancedAR
|
|
7
7
|
TIME_TYPES = [Date, DateTime, Time].freeze
|
8
8
|
|
9
9
|
CHECKS = %i[type specified present default transform in block items pattern].freeze
|
10
|
-
NON_PREFIXED = %i[default transform type message].freeze
|
10
|
+
NON_PREFIXED = %i[default transform type message timezone].freeze
|
11
11
|
PREFIXES = %i[all onem onep one none].freeze
|
12
12
|
PREFIX_ALIASES = { any: :onep, not: :none }.freeze
|
13
13
|
ALL_PREFIXES = (PREFIXES + PREFIX_ALIASES.keys).freeze
|
14
14
|
VALID_FLAGS = %i[present specified].freeze
|
15
15
|
|
16
|
+
def self.record_type(model, key: :id)
|
17
|
+
Proc.new do |param, *args|
|
18
|
+
model.find_by!(key => param)
|
19
|
+
rescue ActiveRecord::RecordNotFound
|
20
|
+
raise ArgumentError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
16
24
|
def initialize(block, context, parameters = nil, options = nil)
|
17
25
|
@block = block
|
18
26
|
@context = context
|
@@ -229,6 +237,12 @@ module AdvancedAR
|
|
229
237
|
def coerce_single_type(param, type, options)
|
230
238
|
return param if (param.is_a?(type) rescue false)
|
231
239
|
|
240
|
+
if type.is_a?(Class) && type <= ActiveRecord::Base
|
241
|
+
type = self.class.record_type(type)
|
242
|
+
end
|
243
|
+
|
244
|
+
return type.call(param, options) if type.is_a?(Proc)
|
245
|
+
|
232
246
|
if (param.is_a?(Array) && type != Array) || ((param.is_a?(Hash) || param.is_a?(ActionController::Parameters)) && type != Hash)
|
233
247
|
raise ArgumentError
|
234
248
|
end
|
@@ -242,10 +256,17 @@ module AdvancedAR
|
|
242
256
|
|
243
257
|
# Date/Time
|
244
258
|
if TIME_TYPES.include? type
|
245
|
-
if options[:
|
246
|
-
|
259
|
+
if tz = options[:timezone]
|
260
|
+
tz = ActiveSupport::TimeZone[tz] if tz.is_a?(String)
|
261
|
+
dt = options[:format].present? ? tz.strptime(param, options[:format]) : tz.parse(param)
|
262
|
+
dt = dt.to_date if type == Date
|
263
|
+
return dt
|
247
264
|
else
|
248
|
-
|
265
|
+
if options[:format].present?
|
266
|
+
return type.strptime(param, options[:format])
|
267
|
+
else
|
268
|
+
return type.parse(param)
|
269
|
+
end
|
249
270
|
end
|
250
271
|
end
|
251
272
|
|
data/lib/advanced_ar/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: advanced_ar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan Knapp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -256,10 +256,6 @@ extensions: []
|
|
256
256
|
extra_rdoc_files: []
|
257
257
|
files:
|
258
258
|
- README.md
|
259
|
-
- advanced_ar.gemspec
|
260
|
-
- config/initializers/01_custom_preloaders.rb
|
261
|
-
- config/initializers/arbitrary_prefetch.rb
|
262
|
-
- config/initializers/cancancan.rb
|
263
259
|
- lib/advanced_ar.rb
|
264
260
|
- lib/advanced_ar/arbitrary_prefetch.rb
|
265
261
|
- lib/advanced_ar/batch_matcher.rb
|
data/advanced_ar.gemspec
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
|
5
|
-
begin
|
6
|
-
require "advanced_ar/version"
|
7
|
-
VERSION = AdvancedAR::VERSION
|
8
|
-
rescue LoadError
|
9
|
-
VERSION = "0.0.0.docker"
|
10
|
-
end
|
11
|
-
|
12
|
-
Gem::Specification.new do |spec|
|
13
|
-
spec.name = "advanced_ar"
|
14
|
-
spec.version = VERSION
|
15
|
-
spec.authors = ["Ethan Knapp"]
|
16
|
-
spec.email = ["eknapp@instructure.com"]
|
17
|
-
|
18
|
-
spec.summary = "Gem for adding advanced features into ActiveRecord"
|
19
|
-
spec.homepage = "https://instructure.com"
|
20
|
-
|
21
|
-
spec.files = Dir.glob('{db,config,app,lib,spec}/**/*') + %w(README.md advanced_ar.gemspec)
|
22
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
|
-
spec.require_paths = ['lib']
|
24
|
-
|
25
|
-
spec.add_development_dependency "bundler", "~> 1.15"
|
26
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
27
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
28
|
-
spec.add_development_dependency "rspec-rails"
|
29
|
-
spec.add_development_dependency "pg"
|
30
|
-
spec.add_development_dependency "factory"
|
31
|
-
spec.add_development_dependency "factory_girl_rails"
|
32
|
-
spec.add_development_dependency "timecop"
|
33
|
-
spec.add_development_dependency "webmock"
|
34
|
-
spec.add_development_dependency "sinatra", ">= 0"
|
35
|
-
spec.add_development_dependency "shoulda-matchers"
|
36
|
-
spec.add_development_dependency "yard"
|
37
|
-
spec.add_development_dependency "pry"
|
38
|
-
spec.add_development_dependency "pry-nav"
|
39
|
-
spec.add_development_dependency "rubocop"
|
40
|
-
|
41
|
-
spec.add_dependency "rails", ">= 5"
|
42
|
-
spec.add_dependency "activerecord-import"
|
43
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
AdvancedAR::ArbitraryPrefetch.install
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# This patch fixes an issue where CanCanCan wasn't properly handling
|
2
|
-
# existence checks for AR Scopes - instead of do a DB Query, it loaded the entire relation
|
3
|
-
module CanCan
|
4
|
-
module ConditionsMatcher
|
5
|
-
def condition_match?(attribute, value)
|
6
|
-
case value
|
7
|
-
when Hash
|
8
|
-
hash_condition_match?(attribute, value)
|
9
|
-
when Range
|
10
|
-
value.cover?(attribute)
|
11
|
-
when ActiveRecord::Relation
|
12
|
-
ar_condition_match?(attribute, value)
|
13
|
-
when Enumerable
|
14
|
-
value.include?(attribute)
|
15
|
-
else
|
16
|
-
attribute == value
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def ar_condition_match?(attribute, value)
|
21
|
-
return false if attribute.nil?
|
22
|
-
|
23
|
-
if attribute.is_a?(Array) || (defined?(ActiveRecord) && attribute.is_a?(ActiveRecord::Relation) && attribute.loaded?)
|
24
|
-
value.where(id: attribute.pluck(:id)).exists?
|
25
|
-
elsif (defined?(ActiveRecord) && attribute.is_a?(ActiveRecord::Relation))
|
26
|
-
value.where(id: attribute.select(:id)).exists?
|
27
|
-
elsif (defined?(ActiveRecord) && attribute.is_a?(ActiveRecord::Base))
|
28
|
-
value.where(id: attribute.id).exists?
|
29
|
-
else
|
30
|
-
value.where(id: attribute).exists?
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|