goldiloader 1.0.1 → 2.0.0

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
  SHA1:
3
- metadata.gz: 9fce4ef7cebc4da5f8fb6cd2187305e0545199a1
4
- data.tar.gz: 644ebffadf9f5e1bcf1a8c15893a10b23278c97e
3
+ metadata.gz: 5c786bf07ce1fedb7741246eda75430f8360617e
4
+ data.tar.gz: 855321310698182f6016a12556c9010bf2f8075c
5
5
  SHA512:
6
- metadata.gz: 2e2aba9114d41066e38d4e1857795b5da1f16083af7940318529da7a4fd10aa45ad6e6417d180562f6dcb278ee36baac34e216a9f0e8f4f7a62f3564b91d2e76
7
- data.tar.gz: 8b5cb28cda6c254f774016e69bef9774b022c1ce60c3be2f8b568f31e651259cf7356800badef7e94a3ff60230e463383f30823b419ffba10c257eb29fb4417b
6
+ metadata.gz: bea207299074113890d1d278f5f83681fdb542b5b68b6006ce62eb58857c421b00181c5ba8a6dcd6c99e5043667b8dc710c189cbb6c5ad8805f99565143183b2
7
+ data.tar.gz: ca685d4a21ddcdfde6bc0bad6dc3894cdc7bc6cc850a09388014c462a9c3fdd63877f8469c90df69cd90138ca8dbb2c175b2df61f33fa427352c09c234e2b074
@@ -1,11 +1,15 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Goldiloader
4
- module AutoIncludableModel
4
+ module BasePatch
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
8
  attr_writer :auto_include_context
9
+
10
+ class << self
11
+ delegate :auto_include, to: :all
12
+ end
9
13
  end
10
14
 
11
15
  def initialize_copy(other)
@@ -22,158 +26,157 @@ module Goldiloader
22
26
  super
23
27
  end
24
28
  end
25
- end
29
+ ::ActiveRecord::Base.include(::Goldiloader::BasePatch)
26
30
 
27
- ActiveRecord::Base.send(:include, Goldiloader::AutoIncludableModel)
31
+ module RelationPatch
32
+ def exec_queries
33
+ return super if loaded? || !auto_include_value
28
34
 
29
- ActiveRecord::Relation.class_eval do
35
+ models = super
36
+ Goldiloader::AutoIncludeContext.register_models(models, eager_load_values)
37
+ models
38
+ end
30
39
 
31
- def exec_queries_with_auto_include(&block)
32
- return exec_queries_without_auto_include(&block) if loaded?
40
+ def auto_include(auto_include = true)
41
+ spawn.auto_include!(auto_include)
42
+ end
33
43
 
34
- models = exec_queries_without_auto_include(&block)
35
- Goldiloader::AutoIncludeContext.register_models(models, eager_load_values)
36
- models
37
- end
44
+ def auto_include!(auto_include = true)
45
+ self.auto_include_value = auto_include
46
+ self
47
+ end
38
48
 
39
- Goldiloader::Compatibility.alias_method_chain self, :exec_queries, :auto_include
40
- end
49
+ def auto_include_value
50
+ # Note: Don't use get_value because that doesn't work properly with defaulting boolean values
51
+ @values.fetch(:auto_include, true)
52
+ end
41
53
 
42
- ActiveRecord::Associations::Association.class_eval do
54
+ def auto_include_value=(value)
55
+ if Goldiloader::Compatibility.rails_4?
56
+ raise ::ActiveRecord::Relation::ImmutableRelation if @loaded
57
+ check_cached_relation
58
+ @values[:auto_include] = value
59
+ elsif Goldiloader::Compatibility.rails_5_0?
60
+ assert_mutability!
61
+ @values[:auto_include] = value
62
+ else
63
+ set_value(:auto_include, value)
64
+ end
65
+ end
66
+ end
67
+ ::ActiveRecord::Relation.prepend(::Goldiloader::RelationPatch)
43
68
 
44
- class_attribute :default_auto_include, :default_fully_load
45
- self.default_auto_include = true
46
- self.default_fully_load = false
69
+ module MergerPatch
70
+ private
47
71
 
48
- def auto_include?
49
- # We only auto include associations that don't have in-memory changes since the
50
- # Rails association Preloader clobbers any in-memory changes
51
- !loaded? && target.blank? && options.fetch(:auto_include) { self.class.default_auto_include } && eager_loadable?
72
+ def merge_single_values
73
+ relation.auto_include_value = other.auto_include_value
74
+ super
75
+ end
52
76
  end
77
+ ActiveRecord::Relation::Merger.prepend(::Goldiloader::MergerPatch)
53
78
 
54
- def fully_load?
55
- !loaded? && options.fetch(:fully_load) { self.class.default_fully_load }
56
- end
79
+ module AssociationPatch
80
+ extend ActiveSupport::Concern
81
+
82
+ included do
83
+ class_attribute :default_fully_load
84
+ self.default_fully_load = false
85
+ end
57
86
 
58
- private
87
+ def auto_include?
88
+ # We only auto include associations that don't have in-memory changes since the
89
+ # Rails association Preloader clobbers any in-memory changes
90
+ !loaded? && target.blank? && eager_loadable?
91
+ end
92
+
93
+ def fully_load?
94
+ !loaded? && options.fetch(:fully_load) { self.class.default_fully_load }
95
+ end
59
96
 
60
- def eager_loadable?
61
- association_info = Goldiloader::AssociationInfo.new(self)
62
- !association_info.limit? &&
97
+ private
98
+
99
+ def eager_loadable?
100
+ association_info = Goldiloader::AssociationInfo.new(self)
101
+ !association_info.limit? &&
63
102
  !association_info.offset? &&
64
103
  !association_info.group? &&
65
104
  !association_info.from? &&
66
- !association_info.finder_sql? &&
67
- (Goldiloader::Compatibility.unscoped_eager_loadable? || !association_info.unscope?) &&
68
- (Goldiloader::Compatibility.joins_eager_loadable? || !association_info.joins?) &&
69
- !association_info.instance_dependent?
70
- end
105
+ !association_info.instance_dependent? &&
106
+ association_info.auto_include?
107
+ end
71
108
 
72
- def load_with_auto_include(load_method, *args)
73
- if loaded? && !stale_target?
74
- target
75
- elsif auto_include?
76
- Goldiloader::AssociationLoader.load(owner, reflection.name)
77
- target
78
- else
79
- send("#{load_method}_without_auto_include", *args)
109
+ def load_with_auto_include
110
+ if loaded? && !stale_target?
111
+ target
112
+ elsif auto_include?
113
+ Goldiloader::AssociationLoader.load(owner, reflection.name)
114
+ target
115
+ else
116
+ yield
117
+ end
80
118
  end
81
119
  end
120
+ ::ActiveRecord::Associations::Association.include(::Goldiloader::AssociationPatch)
82
121
 
83
- end
84
-
85
- ActiveRecord::Associations::SingularAssociation.class_eval do
86
-
87
- private
122
+ module SingularAssociationPatch
123
+ private
88
124
 
89
- def find_target_with_auto_include(*args)
90
- load_with_auto_include(:find_target, *args)
125
+ def find_target(*args)
126
+ load_with_auto_include { super }
127
+ end
91
128
  end
129
+ ::ActiveRecord::Associations::SingularAssociation.prepend(::Goldiloader::SingularAssociationPatch)
92
130
 
93
- Goldiloader::Compatibility.alias_method_chain self, :find_target, :auto_include
94
- end
95
-
96
- ActiveRecord::Associations::CollectionAssociation.class_eval do
97
- # Force these methods to load the entire association for fully_load associations
98
- [:first, :second, :third, :fourth, :fifth, :last, :size, :ids_reader, :empty?].each do |method|
99
- # Some of these methods were added in Rails 4
100
- next unless method_defined?(method)
101
-
102
- aliased_target, punctuation = method.to_s.sub(/([?!=])$/, ''), $1
103
- define_method("#{aliased_target}_with_fully_load#{punctuation}") do |*args, &block|
104
- load_target if fully_load?
105
- send("#{aliased_target}_without_fully_load#{punctuation}", *args, &block)
131
+ module CollectionAssociationPatch
132
+ # Force these methods to load the entire association for fully_load associations
133
+ association_methods = [:size, :ids_reader, :empty?]
134
+ if Goldiloader::Compatibility::ACTIVE_RECORD_VERSION < ::Gem::Version.new('5.1')
135
+ association_methods.concat([:first, :second, :third, :fourth, :fifth, :last])
106
136
  end
107
137
 
108
- Goldiloader::Compatibility.alias_method_chain self, method, :fully_load
109
- end
138
+ association_methods.each do |method|
139
+ define_method(method) do |*args, &block|
140
+ load_target if fully_load?
141
+ super(*args, &block)
142
+ end
143
+ end
110
144
 
111
- private
145
+ def load_target(*args)
146
+ load_with_auto_include { super }
147
+ end
112
148
 
113
- def load_target_with_auto_include(*args)
114
- load_with_auto_include(:load_target, *args)
149
+ if Goldiloader::Compatibility::ACTIVE_RECORD_VERSION >= ::Gem::Version.new('5.1')
150
+ def find_from_target?
151
+ fully_load? || super
152
+ end
153
+ end
115
154
  end
155
+ ::ActiveRecord::Associations::CollectionAssociation.prepend(::Goldiloader::CollectionAssociationPatch)
116
156
 
117
- Goldiloader::Compatibility.alias_method_chain self, :load_target, :auto_include
118
-
119
- end
120
-
121
- [ActiveRecord::Associations::HasManyThroughAssociation, ActiveRecord::Associations::HasOneThroughAssociation].each do |klass|
122
- klass.class_eval do
157
+ module ThroughAssociationPatch
123
158
  def auto_include?
124
159
  # Only auto include through associations if the target association is auto-loadable
125
160
  through_association = owner.association(through_reflection.name)
126
161
  through_association.auto_include? && super
127
162
  end
128
163
  end
129
- end
130
-
131
- # uniq in Rails 3 not properly eager loaded - See https://github.com/salsify/goldiloader/issues/16
132
- if ActiveRecord::VERSION::MAJOR < 4
133
- ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
134
- def eager_loadable?
135
- association_info = Goldiloader::AssociationInfo.new(self)
136
- super && !association_info.uniq?
137
- end
138
- end
139
- end
140
-
141
- # In Rails >= 4.1 has_and_belongs_to_many associations create a has_many associations
142
- # under the covers so we need to make sure to propagate the auto_include option to that
143
- # association
144
- if Goldiloader::Compatibility::ACTIVE_RECORD_VERSION >= ::Gem::Version.new('4.1')
145
- ActiveRecord::Associations::ClassMethods.class_eval do
146
-
147
- def has_and_belongs_to_many_with_auto_include_option(name, scope = nil, options = {}, &extension)
148
- if scope.is_a?(Hash)
149
- options = scope
150
- scope = nil
164
+ ::ActiveRecord::Associations::HasManyThroughAssociation.prepend(::Goldiloader::ThroughAssociationPatch)
165
+ ::ActiveRecord::Associations::HasOneThroughAssociation.prepend(::Goldiloader::ThroughAssociationPatch)
166
+
167
+ module CollectionProxyPatch
168
+ # The CollectionProxy just forwards exists? to the underlying scope so we need to intercept this and
169
+ # force it to use size which handles fully_load properly.
170
+ def exists?(*args)
171
+ # We don't fully_load the association when arguments are passed to exists? since Rails always
172
+ # pushes this query into the database without any caching (and it likely not a common
173
+ # scenario worth optimizing).
174
+ if args.empty? && @association.fully_load?
175
+ size > 0
176
+ else
177
+ scope.exists?(*args)
151
178
  end
152
-
153
- result = has_and_belongs_to_many_without_auto_include_option(name, scope, options, &extension)
154
- if options.include?(:auto_include)
155
- _reflect_on_association(name).options[:auto_include] = options[:auto_include]
156
- end
157
- result
158
- end
159
-
160
- Goldiloader::Compatibility.alias_method_chain self, :has_and_belongs_to_many, :auto_include_option
161
- end
162
- end
163
-
164
- # The CollectionProxy just forwards exists? to the underlying scope so we need to intercept this and
165
- # force it to use size which handles fully_load properly.
166
- ActiveRecord::Associations::CollectionProxy.class_eval do
167
- def exists?(*args)
168
- # We don't fully_load the association when arguments are passed to exists? since Rails always
169
- # pushes this query into the database without any caching (and it likely not a common
170
- # scenario worth optimizing).
171
- if args.empty? && @association.fully_load?
172
- size > 0
173
- elsif Goldiloader::Compatibility::RAILS_3
174
- scoped.exists?(*args)
175
- else
176
- scope.exists?(*args)
177
179
  end
178
180
  end
181
+ ::ActiveRecord::Associations::CollectionProxy.prepend(::Goldiloader::CollectionProxyPatch)
179
182
  end
@@ -7,119 +7,34 @@ module Goldiloader
7
7
  @association = association
8
8
  end
9
9
 
10
- def finder_sql?
11
- Goldiloader::Compatibility.association_finder_sql_enabled? &&
12
- association_options[:finder_sql].present?
13
- end
14
-
15
- if ActiveRecord::VERSION::MAJOR >= 4
16
- delegate :association_scope, :reflection, to: :@association
17
-
18
- def read_only?
19
- association_scope && association_scope.readonly_value.present?
20
- end
21
-
22
- def offset?
23
- association_scope && association_scope.offset_value.present?
24
- end
25
-
26
- def limit?
27
- association_scope && association_scope.limit_value.present?
28
- end
29
-
30
- def from?
31
- if ActiveRecord::VERSION::MAJOR >= 5
32
- association_scope && association_scope.from_clause.present?
33
- else
34
- association_scope && association_scope.from_value.present?
35
- end
36
- end
37
-
38
- def group?
39
- association_scope && association_scope.group_values.present?
40
- end
41
-
42
- def joins?
43
- return false unless association_scope
44
-
45
- num_joins = association_scope.joins_values.size
46
- if ActiveRecord::VERSION::MAJOR >= 5
47
- num_joins += association_scope.left_joins_values.size + association_scope.left_outer_joins.size
48
- end
49
- # Yuck - Through associations will always have a join for *each* 'through' table
50
- num_joins - num_through_joins > 0
51
- end
52
-
53
- def uniq?
54
- association_scope && association_scope.uniq_value
55
- end
56
-
57
- def instance_dependent?
58
- reflection.scope.present? && reflection.scope.arity > 0
59
- end
60
-
61
- def unscope?
62
- Goldiloader::Compatibility.unscope_query_method_enabled? &&
63
- association_scope &&
64
- association_scope.unscope_values.present?
65
- end
66
-
67
- private
68
-
69
- def num_through_joins
70
- association = @association
71
- count = 0
72
- while association.is_a?(ActiveRecord::Associations::ThroughAssociation)
73
- count += 1
74
- association = association.owner.association(association.through_reflection.name)
75
- end
76
- count
77
- end
78
- else
79
- def read_only?
80
- association_options[:readonly].present?
81
- end
82
-
83
- def offset?
84
- association_options[:offset].present?
85
- end
86
-
87
- def limit?
88
- association_options[:limit].present?
89
- end
90
-
91
- def from?
92
- false
93
- end
94
-
95
- def group?
96
- association_options[:group].present?
97
- end
10
+ delegate :association_scope, :reflection, to: :@association
98
11
 
99
- def joins?
100
- # Rails 3 didn't support joins for associations
101
- false
102
- end
12
+ def offset?
13
+ association_scope && association_scope.offset_value.present?
14
+ end
103
15
 
104
- def uniq?
105
- association_options[:uniq]
106
- end
16
+ def limit?
17
+ association_scope && association_scope.limit_value.present?
18
+ end
107
19
 
108
- def instance_dependent?
109
- # Rails 3 didn't support this
110
- false
111
- end
20
+ def auto_include?
21
+ association_scope.nil? || association_scope.auto_include_value
22
+ end
112
23
 
113
- def unscope?
114
- # Rails 3 didn't support this
115
- false
24
+ def from?
25
+ if ActiveRecord::VERSION::MAJOR >= 5
26
+ association_scope && association_scope.from_clause.present?
27
+ else
28
+ association_scope && association_scope.from_value.present?
116
29
  end
117
30
  end
118
31
 
119
- private
32
+ def group?
33
+ association_scope && association_scope.group_values.present?
34
+ end
120
35
 
121
- def association_options
122
- @association.options
36
+ def instance_dependent?
37
+ reflection.scope.present? && reflection.scope.arity > 0
123
38
  end
124
39
  end
125
40
  end
@@ -10,36 +10,12 @@ module Goldiloader
10
10
  end
11
11
 
12
12
  eager_load(models, association_name)
13
-
14
- # Workaround Rails #15853 for Rails < 4.2.0 by setting models read only
15
- if read_only?(models, association_name)
16
- associated_models = associated_models(models, association_name)
17
- mark_read_only(associated_models)
18
- end
19
13
  end
20
14
 
21
15
  private
22
16
 
23
17
  def eager_load(models, association_name)
24
- if Gem::Version.new(::ActiveRecord::VERSION::STRING) >= Gem::Version.new('4.1')
25
- ::ActiveRecord::Associations::Preloader.new.preload(models, [association_name])
26
- else
27
- ::ActiveRecord::Associations::Preloader.new(models, [association_name]).run
28
- end
29
- end
30
-
31
- def mark_read_only(models)
32
- models.each(&:readonly!)
33
- end
34
-
35
- def read_only?(models, association_name)
36
- model = first_model_with_association(models, association_name)
37
- if model.nil?
38
- false
39
- else
40
- association_info = AssociationInfo.new(model.association(association_name))
41
- association_info.read_only?
42
- end
18
+ ::ActiveRecord::Associations::Preloader.new.preload(models, [association_name])
43
19
  end
44
20
 
45
21
  def first_model_with_association(models, association_name)
@@ -4,7 +4,7 @@ module Goldiloader
4
4
  module AssociationOptions
5
5
  extend self
6
6
 
7
- OPTIONS = [:auto_include, :fully_load].freeze
7
+ OPTIONS = [:fully_load].freeze
8
8
 
9
9
  # This is only used in Rails 5+
10
10
  module AssociationBuilderExtension
@@ -20,30 +20,12 @@ module Goldiloader
20
20
  def register
21
21
  if ::ActiveRecord::VERSION::MAJOR >= 5
22
22
  ActiveRecord::Associations::Builder::Association.extensions << AssociationBuilderExtension
23
- elsif ::ActiveRecord::VERSION::MAJOR >= 4
24
- ActiveRecord::Associations::Builder::Association.valid_options.concat(OPTIONS)
25
23
  else
26
- # Each subclass of CollectionAssociation will have its own copy of valid_options so we need
27
- # to register the valid option for each one.
28
- collection_association_classes.each do |assoc_class|
29
- assoc_class.valid_options.concat(OPTIONS)
30
- end
24
+ ActiveRecord::Associations::Builder::Association.valid_options.concat(OPTIONS)
31
25
  end
32
26
  end
33
27
 
34
28
  private
35
-
36
- def collection_association_classes
37
- # Association.descendants doesn't work well with lazy classloading :(
38
- [
39
- ActiveRecord::Associations::Builder::Association,
40
- ActiveRecord::Associations::Builder::BelongsTo,
41
- ActiveRecord::Associations::Builder::HasAndBelongsToMany,
42
- ActiveRecord::Associations::Builder::HasMany,
43
- ActiveRecord::Associations::Builder::HasOne,
44
- ActiveRecord::Associations::Builder::SingularAssociation
45
- ]
46
- end
47
29
  end
48
30
  end
49
31
 
@@ -2,61 +2,14 @@
2
2
 
3
3
  module Goldiloader
4
4
  module Compatibility
5
-
6
5
  ACTIVE_RECORD_VERSION = ::Gem::Version.new(::ActiveRecord::VERSION::STRING)
7
- RAILS_3 = ACTIVE_RECORD_VERSION < ::Gem::Version.new('4')
8
- MASS_ASSIGNMENT_SECURITY = RAILS_3 || defined?(::ActiveRecord::MassAssignmentSecurity)
9
- ASSOCIATION_FINDER_SQL = ACTIVE_RECORD_VERSION < ::Gem::Version.new('4.1')
10
- UNSCOPE_QUERY_METHOD = ACTIVE_RECORD_VERSION >= ::Gem::Version.new('4.1')
11
- JOINS_EAGER_LOADABLE = ACTIVE_RECORD_VERSION >= ::Gem::Version.new('4.2')
12
- UNSCOPED_EAGER_LOADABLE = ACTIVE_RECORD_VERSION >= ::Gem::Version.new('4.1.9')
13
-
14
- def self.mass_assignment_security_enabled?
15
- MASS_ASSIGNMENT_SECURITY
16
- end
17
-
18
- def self.association_finder_sql_enabled?
19
- ASSOCIATION_FINDER_SQL
20
- end
21
-
22
- def self.unscope_query_method_enabled?
23
- UNSCOPE_QUERY_METHOD
24
- end
25
-
26
- def self.joins_eager_loadable?
27
- # Associations with joins were not eager loadable prior to Rails 4.2 due to
28
- # https://github.com/rails/rails/pull/17678
29
- JOINS_EAGER_LOADABLE
30
- end
31
6
 
32
- def self.unscoped_eager_loadable?
33
- # Unscoped associations weren't properly eager loaded until after Rails 4.1.9.
34
- # See https://github.com/rails/rails/issues/11036.
35
- UNSCOPED_EAGER_LOADABLE
7
+ def self.rails_4?
8
+ ::ActiveRecord::VERSION::MAJOR == 4
36
9
  end
37
10
 
38
- # Copied from Rails since it is deprecated in Rails 5.0. Switch to using
39
- # Module#prepend when we drop Ruby 1.9 support.
40
- def self.alias_method_chain(klass, target, feature)
41
- # Strip out punctuation on predicates, bang or writer methods since
42
- # e.g. target?_without_feature is not a valid method name.
43
- aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
44
- yield(aliased_target, punctuation) if block_given?
45
-
46
- with_method = "#{aliased_target}_with_#{feature}#{punctuation}"
47
- without_method = "#{aliased_target}_without_#{feature}#{punctuation}"
48
-
49
- klass.send(:alias_method, without_method, target)
50
- klass.send(:alias_method, target, with_method)
51
-
52
- case
53
- when klass.public_method_defined?(without_method)
54
- klass.send(:public, target)
55
- when klass.protected_method_defined?(without_method)
56
- klass.send(:protected, target)
57
- when klass.private_method_defined?(without_method)
58
- klass.send(:private, target)
59
- end
11
+ def self.rails_5_0?
12
+ ::ActiveRecord::VERSION::MAJOR == 5 && ::ActiveRecord::VERSION::MINOR == 0
60
13
  end
61
14
  end
62
15
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Goldiloader
4
- VERSION = '1.0.1'.freeze
4
+ VERSION = '2.0.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goldiloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Turkel
@@ -14,42 +14,30 @@ dependencies:
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '3.2'
20
- - - "<"
17
+ - - '='
21
18
  - !ruby/object:Gem::Version
22
- version: '5.1'
19
+ version: 3.2.22.2
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
24
+ - - '='
28
25
  - !ruby/object:Gem::Version
29
- version: '3.2'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '5.1'
26
+ version: 3.2.22.2
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '3.2'
40
- - - "<"
31
+ - - '='
41
32
  - !ruby/object:Gem::Version
42
- version: '5.1'
33
+ version: 3.2.22.2
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: '3.2'
50
- - - "<"
38
+ - - '='
51
39
  - !ruby/object:Gem::Version
52
- version: '5.1'
40
+ version: 3.2.22.2
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: coveralls
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -110,30 +98,30 @@ dependencies:
110
98
  name: simplecov
111
99
  requirement: !ruby/object:Gem::Requirement
112
100
  requirements:
113
- - - "~>"
101
+ - - ">="
114
102
  - !ruby/object:Gem::Version
115
- version: 0.7.1
103
+ version: '0'
116
104
  type: :development
117
105
  prerelease: false
118
106
  version_requirements: !ruby/object:Gem::Requirement
119
107
  requirements:
120
- - - "~>"
108
+ - - ">="
121
109
  - !ruby/object:Gem::Version
122
- version: 0.7.1
110
+ version: '0'
123
111
  - !ruby/object:Gem::Dependency
124
112
  name: mime-types
125
113
  requirement: !ruby/object:Gem::Requirement
126
114
  requirements:
127
- - - "~>"
115
+ - - ">="
128
116
  - !ruby/object:Gem::Version
129
- version: '2'
117
+ version: '0'
130
118
  type: :development
131
119
  prerelease: false
132
120
  version_requirements: !ruby/object:Gem::Requirement
133
121
  requirements:
134
- - - "~>"
122
+ - - ">="
135
123
  - !ruby/object:Gem::Version
136
- version: '2'
124
+ version: '0'
137
125
  - !ruby/object:Gem::Dependency
138
126
  name: sqlite3
139
127
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
164
  requirements:
177
165
  - - ">="
178
166
  - !ruby/object:Gem::Version
179
- version: '0'
167
+ version: '2.1'
180
168
  required_rubygems_version: !ruby/object:Gem::Requirement
181
169
  requirements:
182
170
  - - ">="