Skip to content

Commit 9ef623f

Browse files
committed
Support Mongoid 7.0
Closes #3013
1 parent 2d197e5 commit 9ef623f

File tree

8 files changed

+26
-16
lines changed

8 files changed

+26
-16
lines changed

Appraisals

+3-3
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ appraise "rails-5.0" do
121121
end
122122

123123
group :mongoid do
124-
gem 'mongoid', '>= 6.0.0.beta'
124+
gem 'mongoid', '~> 6.1'
125125
gem 'kaminari-mongoid'
126126
gem 'mongoid-paperclip', '>= 0.0.8', require: 'mongoid_paperclip'
127127
gem 'carrierwave-mongoid', '>= 0.6.3', require: 'carrierwave/mongoid'
@@ -150,7 +150,7 @@ appraise "rails-5.1" do
150150
end
151151

152152
group :mongoid do
153-
gem 'mongoid', '~> 6.0'
153+
gem 'mongoid', '~> 7.0'
154154
gem 'kaminari-mongoid'
155155
gem 'mongoid-paperclip', '>= 0.0.8', require: 'mongoid_paperclip'
156156
gem 'carrierwave-mongoid', '>= 0.6.3', require: 'carrierwave/mongoid'
@@ -173,7 +173,7 @@ appraise "rails-5.2" do
173173
end
174174

175175
group :mongoid do
176-
gem 'mongoid', '~> 6.4'
176+
gem 'mongoid', '~> 7.0'
177177
gem 'kaminari-mongoid'
178178
gem 'mongoid-paperclip', '>= 0.0.8', require: 'mongoid_paperclip'
179179
gem 'carrierwave-mongoid', '>= 0.6.3', require: 'carrierwave/mongoid'

gemfiles/rails_5.0.gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ group :test do
5252
end
5353

5454
group :mongoid do
55-
gem "mongoid", ">= 6.0.0.beta"
55+
gem "mongoid", "~> 6.1"
5656
gem "kaminari-mongoid"
5757
gem "mongoid-paperclip", ">= 0.0.8", require: "mongoid_paperclip"
5858
gem "carrierwave-mongoid", ">= 0.6.3", require: "carrierwave/mongoid"

gemfiles/rails_5.1.gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ group :test do
5353
end
5454

5555
group :mongoid do
56-
gem "mongoid", "~> 6.0"
56+
gem "mongoid", "~> 7.0"
5757
gem "kaminari-mongoid"
5858
gem "mongoid-paperclip", ">= 0.0.8", require: "mongoid_paperclip"
5959
gem "carrierwave-mongoid", ">= 0.6.3", require: "carrierwave/mongoid"

gemfiles/rails_5.2.gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ group :test do
4747
end
4848

4949
group :mongoid do
50-
gem "mongoid", "~> 6.4"
50+
gem "mongoid", "~> 7.0"
5151
gem "kaminari-mongoid"
5252
gem "mongoid-paperclip", ">= 0.0.8", require: "mongoid_paperclip"
5353
gem "carrierwave-mongoid", ">= 0.6.3", require: "carrierwave/mongoid"

lib/rails_admin/adapters/mongoid.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def encoding
8383
end
8484

8585
def embedded?
86-
model.relations.values.detect { |a| a.macro.to_sym == :embedded_in }
86+
associations.detect { |a| a.macro == :embedded_in }
8787
end
8888

8989
def cyclic?
@@ -150,7 +150,7 @@ def filter_conditions(filters, fields = config.list.fields.select(&:filterable?)
150150

151151
def parse_collection_name(column)
152152
collection_name, column_name = column.split('.')
153-
if [:embeds_one, :embeds_many].include?(model.relations[collection_name].try(:macro).try(:to_sym))
153+
if associations.detect { |a| a.name == collection_name.to_sym }.try(:embeds?)
154154
[table_name, column]
155155
else
156156
[collection_name, column_name]

lib/rails_admin/adapters/mongoid/abstract_object.rb

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class AbstractObject < RailsAdmin::Adapters::ActiveRecord::AbstractObject
77
def initialize(object)
88
super
99
object.associations.each do |name, association|
10+
association = Association.new(association, object.class)
1011
if [:has_many, :references_many].include? association.macro
1112
instance_eval <<-RUBY, __FILE__, __LINE__ + 1
1213
def #{name.to_s.singularize}_ids
@@ -28,9 +29,7 @@ def #{name.to_s.singularize}_ids=(item_ids)
2829
def #{name}_id=(item_id)
2930
item = (#{association.klass}.find(item_id) rescue nil)
3031
return unless item
31-
unless persisted?
32-
item.update_attribute('#{association.foreign_key}', id)
33-
end
32+
item.update_attribute('#{association.foreign_key}', id) unless persisted?
3433
super item.id
3534
end
3635
RUBY

lib/rails_admin/adapters/mongoid/association.rb

+14-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def primary_key
4545
end
4646

4747
def foreign_key
48-
return unless [:embeds_one, :embeds_many].exclude?(macro.to_sym)
48+
return if embeds?
4949
association.foreign_key.to_sym rescue nil
5050
end
5151

@@ -82,7 +82,7 @@ def read_only?
8282

8383
def nested_options
8484
nested = nested_attributes_options.try { |o| o[name] }
85-
if !nested && [:embeds_one, :embeds_many].include?(macro.to_sym) && !association.cyclic
85+
if !nested && [:embeds_one, :embeds_many].include?(macro.to_sym) && !cyclic?
8686
raise <<-MSG.gsub(/^\s+/, '')
8787
Embbeded association without accepts_nested_attributes_for can't be handled by RailsAdmin,
8888
because embedded model doesn't have top-level access.
@@ -96,13 +96,24 @@ def association?
9696
true
9797
end
9898

99+
def macro
100+
association.try(:macro) || association.class.name.split('::').last.underscore.to_sym
101+
end
102+
103+
def embeds?
104+
[:embeds_one, :embeds_many].include?(macro)
105+
end
106+
99107
private
100108

101109
def inverse_of_field
102110
association.respond_to?(:inverse_of_field) && association.inverse_of_field
103111
end
104112

105-
delegate :macro, :options, to: :association, prefix: false
113+
def cyclic?
114+
association.respond_to?(:cyclic?) ? association.cyclic? : association.cyclic
115+
end
116+
106117
delegate :nested_attributes_options, to: :model, prefix: false
107118
delegate :polymorphic_parents, to: RailsAdmin::AbstractModel
108119
end

lib/rails_admin/adapters/mongoid/property.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ def read_only?
7070
private
7171

7272
def object_field_type
73-
if [:belongs_to, :referenced_in, :embedded_in].
74-
include?(model.relations.values.detect { |r| r.foreign_key.try(:to_sym) == name }.try(:macro).try(:to_sym))
73+
association = Association.new model.relations.values.detect { |r| r.try(:foreign_key).try(:to_sym) == name }, model
74+
if [:belongs_to, :referenced_in, :embedded_in].include?(association.macro)
7575
:bson_object_id
7676
else
7777
:string

0 commit comments

Comments
 (0)