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 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