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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d811ccf8f4dbdc96a068b07d751a011652d955c0cd7acb6306c501f87556428
4
- data.tar.gz: 54667691794d23f31b26071829b941fa0417a497aae6d9652fab464d805b8983
3
+ metadata.gz: fa3519ddfd34d9170d05d5c8634bf8f0b0d84ba38ebe1cef3bc7ddfe68760001
4
+ data.tar.gz: cc0d1fcfe9697bb909ea49ec4c73f794ceeba5331a1ae89aa4fb40ee7bf80d9d
5
5
  SHA512:
6
- metadata.gz: 8a110c0b3ad7a972408a4c6f6cb857d23e3082575d90c0433e777d5f42be3a09ceb53cf4e86ea86d72976806a722a9fc1a26fbf31eb76d0891ecfc5d4da3c2bc
7
- data.tar.gz: b02ffa63c01b932c06920ce04fd25fdb1dc9957b1d9fd1216b46c5fe32d4a3d36d96aa8df07316c6207230a74c0e74ee4d842b8aa75ae0ab1efb0171957b3bb8
6
+ metadata.gz: da83392565166dfe4567a8fe73e76a1847778522ff438beef27804320a4972f9e6d9a8fca5b5a4d3c04acb8d86a54d624b20a667d3a5d7ad418053ff04a7e5e0
7
+ data.tar.gz: 3bed49515c7ab10026e47f2d4b9688afca6b9da110e60c02b2e5ea087fada2fc54c4d4e361a0297d84609c0738925a18d7132a6ed3fa884f4181e8875c5a807b
data/lib/advanced_ar.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
+ Dir[File.dirname(__FILE__) + "/advanced_ar/*.rb"].each { |file| require file }
3
+
2
4
  module AdvancedAR
3
5
 
4
6
  end
5
-
6
- Dir[File.dirname(__FILE__) + "/advanced_ar/*.rb"].each { |file| require file }
@@ -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[:format].present?
246
- return type.strptime(param, options[:format])
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
- return type.parse(param)
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
 
@@ -1,3 +1,3 @@
1
1
  module AdvancedAR
2
- VERSION = "0.1.1".freeze
2
+ VERSION = "0.1.3".freeze
3
3
  end
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.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: 2020-09-25 00:00:00.000000000 Z
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,2 +0,0 @@
1
- # This Preloader needs to run before any that will load Models
2
- AdvancedAR::CustomPreloaders.install
@@ -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