active-fedora 9.1.2 → 9.2.0.rc1
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/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/History.txt +90 -0
- data/active-fedora.gemspec +2 -2
- data/lib/active_fedora.rb +17 -3
- data/lib/active_fedora/associations.rb +77 -0
- data/lib/active_fedora/associations/association.rb +2 -2
- data/lib/active_fedora/associations/basic_contains_association.rb +52 -0
- data/lib/active_fedora/associations/builder/directly_contains.rb +23 -0
- data/lib/active_fedora/associations/builder/directly_contains_one.rb +44 -0
- data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +2 -23
- data/lib/active_fedora/associations/builder/indirectly_contains.rb +26 -0
- data/lib/active_fedora/associations/builder/property.rb +10 -0
- data/lib/active_fedora/associations/collection_association.rb +42 -45
- data/lib/active_fedora/associations/collection_proxy.rb +6 -0
- data/lib/active_fedora/associations/contained_finder.rb +41 -0
- data/lib/active_fedora/associations/container_proxy.rb +9 -0
- data/lib/active_fedora/associations/contains_association.rb +20 -38
- data/lib/active_fedora/associations/delete_proxy.rb +28 -0
- data/lib/active_fedora/associations/directly_contains_association.rb +56 -0
- data/lib/active_fedora/associations/directly_contains_one_association.rb +113 -0
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +6 -14
- data/lib/active_fedora/associations/has_many_association.rb +0 -3
- data/lib/active_fedora/associations/id_composite.rb +30 -0
- data/lib/active_fedora/associations/indirectly_contains_association.rb +90 -0
- data/lib/active_fedora/associations/rdf.rb +8 -4
- data/lib/active_fedora/associations/record_composite.rb +39 -0
- data/lib/active_fedora/attached_files.rb +1 -1
- data/lib/active_fedora/attributes.rb +28 -10
- data/lib/active_fedora/attributes/active_triple_attribute.rb +17 -0
- data/lib/active_fedora/attributes/om_attribute.rb +29 -0
- data/lib/active_fedora/attributes/rdf_datastream_attribute.rb +47 -0
- data/lib/active_fedora/attributes/stream_attribute.rb +46 -0
- data/lib/active_fedora/autosave_association.rb +2 -2
- data/lib/active_fedora/base.rb +3 -0
- data/lib/active_fedora/containers/container.rb +38 -0
- data/lib/active_fedora/containers/direct_container.rb +5 -0
- data/lib/active_fedora/containers/indirect_container.rb +7 -0
- data/lib/active_fedora/core.rb +4 -48
- data/lib/active_fedora/delegated_attribute.rb +5 -98
- data/lib/active_fedora/fedora.rb +1 -1
- data/lib/active_fedora/fedora_attributes.rb +4 -26
- data/lib/active_fedora/file.rb +87 -159
- data/lib/active_fedora/file/attributes.rb +63 -0
- data/lib/active_fedora/file/streaming.rb +46 -0
- data/lib/active_fedora/file_relation.rb +7 -0
- data/lib/active_fedora/identifiable.rb +87 -0
- data/lib/active_fedora/inbound_relation_connection.rb +21 -0
- data/lib/active_fedora/indexers.rb +10 -0
- data/lib/active_fedora/indexers/global_indexer.rb +30 -0
- data/lib/active_fedora/indexers/null_indexer.rb +12 -0
- data/lib/active_fedora/indexing/map.rb +4 -5
- data/lib/active_fedora/indexing_service.rb +3 -22
- data/lib/active_fedora/loadable_from_json.rb +8 -0
- data/lib/active_fedora/pathing.rb +24 -0
- data/lib/active_fedora/persistence.rb +15 -8
- data/lib/active_fedora/rdf.rb +2 -0
- data/lib/active_fedora/rdf/fcrepo4.rb +1 -0
- data/lib/active_fedora/rdf/field_map.rb +90 -0
- data/lib/active_fedora/rdf/field_map_entry.rb +28 -0
- data/lib/active_fedora/rdf/indexing_service.rb +9 -23
- data/lib/active_fedora/rdf/rdf_datastream.rb +1 -2
- data/lib/active_fedora/reflection.rb +16 -15
- data/lib/active_fedora/relation/delegation.rb +15 -4
- data/lib/active_fedora/relation/finder_methods.rb +4 -4
- data/lib/active_fedora/schema.rb +26 -0
- data/lib/active_fedora/schema_indexing_strategy.rb +25 -0
- data/lib/active_fedora/simple_datastream.rb +2 -2
- data/lib/active_fedora/solr_query_builder.rb +3 -2
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/with_metadata.rb +1 -1
- data/spec/integration/associations/rdf_spec.rb +49 -0
- data/spec/integration/base_spec.rb +19 -0
- data/spec/integration/belongs_to_association_spec.rb +6 -6
- data/spec/integration/collection_association_spec.rb +4 -4
- data/spec/integration/complex_rdf_datastream_spec.rb +12 -12
- data/spec/integration/datastream_rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/direct_container_spec.rb +254 -0
- data/spec/integration/directly_contains_one_association_spec.rb +102 -0
- data/spec/integration/file_spec.rb +16 -5
- data/spec/integration/has_many_associations_spec.rb +93 -58
- data/spec/integration/indirect_container_spec.rb +251 -0
- data/spec/integration/rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/relation_spec.rb +43 -27
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/attributes_spec.rb +6 -6
- data/spec/unit/collection_proxy_spec.rb +28 -0
- data/spec/unit/file_spec.rb +1 -1
- data/spec/unit/files_hash_spec.rb +4 -4
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +11 -9
- data/spec/unit/indexers/global_indexer_spec.rb +41 -0
- data/spec/unit/indexing_service_spec.rb +0 -21
- data/spec/unit/loadable_from_json_spec.rb +31 -0
- data/spec/unit/pathing_spec.rb +37 -0
- data/spec/unit/rdf/indexing_service_spec.rb +3 -3
- data/spec/unit/rdf_resource_datastream_spec.rb +26 -7
- data/spec/unit/schema_indexing_strategy_spec.rb +68 -0
- data/spec/unit/solr_query_builder_spec.rb +1 -1
- data/spec/unit/solr_service_spec.rb +1 -1
- metadata +49 -8
@@ -1,11 +1,13 @@
|
|
1
1
|
module ActiveFedora::Associations::Builder
|
2
2
|
class HasAndBelongsToMany < CollectionAssociation #:nodoc:
|
3
|
+
extend Deprecation
|
3
4
|
self.macro = :has_and_belongs_to_many
|
4
5
|
|
5
6
|
self.valid_options += [:inverse_of, :solr_page_size]
|
6
7
|
|
7
8
|
def validate_options
|
8
9
|
super
|
10
|
+
Deprecation.warn HasAndBelongsToMany, ":solr_page_size doesn't do anything anymore and will be removed in ActiveFedora 10" if options.key?(:solr_page_size)
|
9
11
|
if !options[:predicate]
|
10
12
|
raise "You must specify a predicate for #{name}"
|
11
13
|
elsif !options[:predicate].kind_of?(RDF::URI)
|
@@ -13,28 +15,5 @@ module ActiveFedora::Associations::Builder
|
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
16
|
-
def build
|
17
|
-
reflection = super
|
18
|
-
define_destroy_hook
|
19
|
-
reflection
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def define_destroy_hook
|
25
|
-
# Don't use a before_destroy callback since users' before_destroy
|
26
|
-
# callbacks will be executed after the association is wiped out.
|
27
|
-
# TODO Update to destroy_associations
|
28
|
-
name = self.name
|
29
|
-
model.send(:include, Module.new {
|
30
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
31
|
-
def destroy # def destroy
|
32
|
-
#{name}.clear # posts.clear
|
33
|
-
super # super
|
34
|
-
end # end
|
35
|
-
RUBY
|
36
|
-
})
|
37
|
-
end
|
38
|
-
|
39
18
|
end
|
40
19
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActiveFedora::Associations::Builder
|
2
|
+
class IndirectlyContains < CollectionAssociation #:nodoc:
|
3
|
+
self.macro = :indirectly_contains
|
4
|
+
self.valid_options += [:has_member_relation, :is_member_of_relation, :inserted_content_relation, :foreign_key, :through]
|
5
|
+
self.valid_options -= [:predicate]
|
6
|
+
|
7
|
+
def build
|
8
|
+
reflection = super
|
9
|
+
configure_dependency
|
10
|
+
reflection
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate_options
|
14
|
+
super
|
15
|
+
if !options[:has_member_relation] && !options[:is_member_of_relation]
|
16
|
+
raise ArgumentError, "You must specify a predicate for #{name}"
|
17
|
+
elsif !options[:has_member_relation].kind_of?(RDF::URI) && !options[:is_member_of_relation].kind_of?(RDF::URI)
|
18
|
+
raise ArgumentError, "Predicate must be a kind of RDF::URI"
|
19
|
+
end
|
20
|
+
|
21
|
+
raise ArgumentError, "Missing :through option" if !options[:through]
|
22
|
+
raise ArgumentError, "Missing :foreign_key option" if !options[:foreign_key]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -9,6 +9,16 @@ module ActiveFedora::Associations::Builder
|
|
9
9
|
@name = :"#{name.to_s.singularize}_ids"
|
10
10
|
end
|
11
11
|
|
12
|
+
def build
|
13
|
+
super.tap do |reflection|
|
14
|
+
model.index_config[name] = build_index_config(reflection)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_index_config(reflection)
|
19
|
+
ActiveFedora::Indexing::Map::IndexObject.new(reflection.predicate_for_solr) { |index| index.as :symbol }
|
20
|
+
end
|
21
|
+
|
12
22
|
end
|
13
23
|
end
|
14
24
|
|
@@ -47,8 +47,8 @@ module ActiveFedora
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def reset
|
50
|
-
|
51
|
-
@
|
50
|
+
super
|
51
|
+
@target = []
|
52
52
|
end
|
53
53
|
|
54
54
|
def find(*args)
|
@@ -239,51 +239,13 @@ module ActiveFedora
|
|
239
239
|
|
240
240
|
def load_target
|
241
241
|
if find_target?
|
242
|
-
|
243
|
-
|
244
|
-
begin
|
245
|
-
targets = find_target
|
246
|
-
rescue ObjectNotFoundError, Ldp::Gone => e
|
247
|
-
ActiveFedora::Base.logger.error "Solr and Fedora may be out of sync:\n" + e.message if ActiveFedora::Base.logger
|
248
|
-
reset
|
249
|
-
end
|
250
|
-
|
251
|
-
@target = merge_target_lists(targets, @target)
|
242
|
+
@target = merge_target_lists(find_target, @target)
|
252
243
|
end
|
253
244
|
|
254
245
|
loaded!
|
255
246
|
target
|
256
247
|
end
|
257
248
|
|
258
|
-
def find_target
|
259
|
-
# TODO: don't reify, just store the solr results and lazily reify.
|
260
|
-
# For now, we set a hard limit of 1000 results.
|
261
|
-
records = ActiveFedora::QueryResultBuilder.reify_solr_results(load_from_solr(rows: 1000))
|
262
|
-
records.each { |record| set_inverse_instance(record) }
|
263
|
-
records
|
264
|
-
end
|
265
|
-
|
266
|
-
def merge_target_lists(loaded, existing)
|
267
|
-
return loaded if existing.empty?
|
268
|
-
return existing if loaded.empty?
|
269
|
-
|
270
|
-
loaded.map do |f|
|
271
|
-
i = existing.index(f)
|
272
|
-
if i
|
273
|
-
existing.delete_at(i).tap do |t|
|
274
|
-
keys = ["id"] + t.changes.keys + (f.attribute_names - t.attribute_names)
|
275
|
-
# FIXME: this call to attributes causes many NoMethodErrors
|
276
|
-
attributes = f.attributes
|
277
|
-
(attributes.keys - keys).each do |k|
|
278
|
-
t.send("#{k}=", attributes[k])
|
279
|
-
end
|
280
|
-
end
|
281
|
-
else
|
282
|
-
f
|
283
|
-
end
|
284
|
-
end + existing
|
285
|
-
end
|
286
|
-
|
287
249
|
# @param opts [Hash] Options that will be passed through to ActiveFedora::SolrService.query.
|
288
250
|
def load_from_solr(opts = Hash.new)
|
289
251
|
finder_query = construct_query
|
@@ -293,6 +255,7 @@ module ActiveFedora
|
|
293
255
|
SolrService.query(finder_query, { rows: rows }.merge(opts))
|
294
256
|
end
|
295
257
|
|
258
|
+
|
296
259
|
def add_to_target(record, skip_callbacks = false)
|
297
260
|
# transaction do
|
298
261
|
callback(:before_add, record) unless skip_callbacks
|
@@ -320,14 +283,11 @@ module ActiveFedora
|
|
320
283
|
def null_scope?
|
321
284
|
owner.new_record? && !foreign_key_present?
|
322
285
|
end
|
286
|
+
|
323
287
|
protected
|
324
|
-
def reset_target!
|
325
|
-
@target = Array.new
|
326
|
-
end
|
327
288
|
|
328
289
|
def construct_query
|
329
290
|
@solr_query ||= begin
|
330
|
-
#TODO use primary_key instead of id
|
331
291
|
clauses = { find_reflection => @owner.id }
|
332
292
|
clauses[:has_model] = @reflection.class_name.constantize.to_class_uri if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base'
|
333
293
|
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(clauses)
|
@@ -337,6 +297,39 @@ module ActiveFedora
|
|
337
297
|
|
338
298
|
private
|
339
299
|
|
300
|
+
def find_target
|
301
|
+
# TODO: don't reify, just store the solr results and lazily reify.
|
302
|
+
# For now, we set a hard limit of 1000 results.
|
303
|
+
records = ActiveFedora::QueryResultBuilder.reify_solr_results(load_from_solr(rows: 1000))
|
304
|
+
records.each { |record| set_inverse_instance(record) }
|
305
|
+
records
|
306
|
+
rescue ObjectNotFoundError, Ldp::Gone => e
|
307
|
+
ActiveFedora::Base.logger.error "Solr and Fedora may be out of sync:\n" + e.message if ActiveFedora::Base.logger
|
308
|
+
reset
|
309
|
+
[]
|
310
|
+
end
|
311
|
+
|
312
|
+
def merge_target_lists(loaded, existing)
|
313
|
+
return loaded if existing.empty?
|
314
|
+
return existing if loaded.empty?
|
315
|
+
|
316
|
+
loaded.map do |f|
|
317
|
+
i = existing.index(f)
|
318
|
+
if i
|
319
|
+
existing.delete_at(i).tap do |t|
|
320
|
+
keys = ["id"] + t.changes.keys + (f.attribute_names - t.attribute_names)
|
321
|
+
# FIXME: this call to attributes causes many NoMethodErrors
|
322
|
+
attributes = f.attributes
|
323
|
+
(attributes.keys - keys).each do |k|
|
324
|
+
t.send("#{k}=", attributes[k])
|
325
|
+
end
|
326
|
+
end
|
327
|
+
else
|
328
|
+
f
|
329
|
+
end
|
330
|
+
end + existing
|
331
|
+
end
|
332
|
+
|
340
333
|
def find_reflection
|
341
334
|
return reflection if @reflection.options[:predicate]
|
342
335
|
if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
|
@@ -366,8 +359,12 @@ module ActiveFedora
|
|
366
359
|
existing_records = records.select { |r| r.persisted? }
|
367
360
|
|
368
361
|
records.each { |record| callback(:before_remove, record) }
|
362
|
+
|
363
|
+
# Delete the record from Fedora.
|
369
364
|
delete_records(existing_records, method) if existing_records.any?
|
365
|
+
|
370
366
|
records.each do |record|
|
367
|
+
# Remove the record from the array/collection.
|
371
368
|
target.delete(record)
|
372
369
|
end
|
373
370
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ActiveFedora::Associations
|
2
|
+
##
|
3
|
+
# Finds the objects which associate with a given record and are contained
|
4
|
+
# within the given container. Uses #repository to find the objects.
|
5
|
+
class ContainedFinder
|
6
|
+
attr_reader :container, :repository
|
7
|
+
delegate :contained_ids, to: :container
|
8
|
+
# @param [#contained_ids] container a container that records are stored
|
9
|
+
# under.
|
10
|
+
# @param [#translate_uri_to_id, #find] repository a repository to build
|
11
|
+
# objects from.
|
12
|
+
def initialize(container:, repository:)
|
13
|
+
@container = container
|
14
|
+
@repository = repository
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param [ActiveFedora::Base] record a record which you want to find the
|
18
|
+
# reference node for.
|
19
|
+
# @return [Array<ActiveFedora::Base>] This returns whatever type
|
20
|
+
# repository.find returns.
|
21
|
+
def find(record)
|
22
|
+
record.reload
|
23
|
+
repository.find(matching_ids(record))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def matching_ids(record)
|
29
|
+
IDComposite.new(proxy_ids(record) & contained_ids, repository.translate_uri_to_id)
|
30
|
+
end
|
31
|
+
|
32
|
+
def proxy_ids(record)
|
33
|
+
relation_subjects(record)
|
34
|
+
end
|
35
|
+
|
36
|
+
def relation_subjects(record)
|
37
|
+
record.resource.query(object: record.rdf_subject).subjects.to_a
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -1,52 +1,34 @@
|
|
1
|
+
# This is the parent class of DirectlyContainsAssociation and IndirectlyContainsAssociation
|
1
2
|
module ActiveFedora
|
2
3
|
module Associations
|
3
|
-
class ContainsAssociation <
|
4
|
-
# Implements the reader method, e.g. foo.bar for Foo.has_one :bar
|
5
|
-
def reader(force_reload = false)
|
6
|
-
super || build
|
7
|
-
end
|
8
|
-
|
9
|
-
def find_target
|
10
|
-
reflection.build_association(target_uri).tap do |record|
|
11
|
-
configure_datastream(record) if reflection.options[:block]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def target_uri
|
16
|
-
"#{owner.uri}/#{reflection.name}"
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
4
|
+
class ContainsAssociation < CollectionAssociation #:nodoc:
|
20
5
|
|
21
|
-
def
|
22
|
-
|
23
|
-
super
|
6
|
+
def reader
|
7
|
+
@records ||= ContainerProxy.new(self)
|
24
8
|
end
|
25
9
|
|
26
|
-
def
|
27
|
-
if
|
28
|
-
|
29
|
-
|
10
|
+
def include?(other)
|
11
|
+
if loaded?
|
12
|
+
target.include?(other)
|
13
|
+
elsif container_predicate = options[:has_member_relation]
|
14
|
+
owner.resource.query(predicate: container_predicate, object: ::RDF::URI(other.uri)).present?
|
15
|
+
else #is_member_of_relation
|
16
|
+
# This will force a load, so it's slowest and the least preferable option
|
17
|
+
target.include?(other)
|
30
18
|
end
|
31
|
-
|
32
|
-
self.target = record
|
33
19
|
end
|
34
20
|
|
35
|
-
|
36
|
-
record = super
|
37
|
-
configure_datastream(record)
|
38
|
-
record
|
39
|
-
end
|
21
|
+
protected
|
40
22
|
|
41
|
-
|
42
|
-
|
43
|
-
if reflection.options[:block].class == Proc
|
44
|
-
reflection.options[:block].call(record)
|
23
|
+
def count_records
|
24
|
+
load_target.size
|
45
25
|
end
|
46
|
-
|
47
|
-
|
26
|
+
|
27
|
+
def uri
|
28
|
+
raise "Can't get uri. Owner isn't saved" if @owner.new_record?
|
29
|
+
"#{@owner.uri}/#{@reflection.name}"
|
48
30
|
end
|
49
|
-
end
|
50
31
|
end
|
51
32
|
end
|
52
33
|
end
|
34
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActiveFedora::Associations
|
2
|
+
class DeleteProxy
|
3
|
+
def self.call(proxy_ids:, proxy_class:)
|
4
|
+
new(proxy_ids: proxy_ids, proxy_class: proxy_class).run
|
5
|
+
end
|
6
|
+
attr_reader :proxy_ids, :proxy_class
|
7
|
+
|
8
|
+
def initialize(proxy_ids:, proxy_class:)
|
9
|
+
@proxy_ids = proxy_ids
|
10
|
+
@proxy_class = proxy_class
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
proxies.each(&:delete)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def proxies
|
20
|
+
@proxies ||= proxy_ids.map{ |uri| uri_to_proxy(uri) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def uri_to_proxy(uri)
|
24
|
+
proxy_class.find(proxy_class.uri_to_id(uri))
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
module Associations
|
3
|
+
class DirectlyContainsAssociation < ContainsAssociation #:nodoc:
|
4
|
+
|
5
|
+
def insert_record(record, force = true, validate = true)
|
6
|
+
container.save!
|
7
|
+
if force
|
8
|
+
record.save!
|
9
|
+
else
|
10
|
+
record.save(validate: validate)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_target
|
15
|
+
query_node = if container_predicate = options[:has_member_relation]
|
16
|
+
owner
|
17
|
+
else
|
18
|
+
container_predicate = ::RDF::Vocab::LDP.contains
|
19
|
+
container
|
20
|
+
end
|
21
|
+
|
22
|
+
uris = query_node.resource.query(predicate: container_predicate).map { |r| r.object.to_s }
|
23
|
+
|
24
|
+
uris.map { |object_uri| klass.find(klass.uri_to_id(object_uri)) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def container
|
28
|
+
@container ||= begin
|
29
|
+
DirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
|
30
|
+
container.parent = @owner
|
31
|
+
container.has_member_relation = Array(options[:has_member_relation])
|
32
|
+
container.is_member_of_relation = Array(options[:is_member_of_relation])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def initialize_attributes(record) #:nodoc:
|
40
|
+
record.uri = ActiveFedora::Base.id_to_uri(container.mint_id)
|
41
|
+
set_inverse_instance(record)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def delete_records(records, method)
|
47
|
+
if method == :destroy
|
48
|
+
records.each { |r| r.destroy }
|
49
|
+
else
|
50
|
+
records.each { |r| r.delete }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|