advanced_ar 0.1.1 → 0.1.3
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 +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
|