active-fedora 13.3.0 → 14.0.0

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +106 -46
  3. data/.rubocop.yml +26 -12
  4. data/.rubocop_todo.yml +1 -1
  5. data/Gemfile +3 -3
  6. data/active-fedora.gemspec +11 -11
  7. data/lib/active_fedora/association_hash.rb +5 -2
  8. data/lib/active_fedora/associations/association.rb +2 -4
  9. data/lib/active_fedora/associations/association_scope.rb +1 -1
  10. data/lib/active_fedora/associations/basic_contains_association.rb +2 -2
  11. data/lib/active_fedora/associations/belongs_to_association.rb +1 -1
  12. data/lib/active_fedora/associations/builder/association.rb +3 -5
  13. data/lib/active_fedora/associations/builder/basic_contains.rb +1 -1
  14. data/lib/active_fedora/associations/builder/belongs_to.rb +3 -7
  15. data/lib/active_fedora/associations/builder/collection_association.rb +7 -7
  16. data/lib/active_fedora/associations/builder/directly_contains.rb +4 -6
  17. data/lib/active_fedora/associations/builder/directly_contains_one.rb +5 -6
  18. data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +1 -1
  19. data/lib/active_fedora/associations/builder/has_many.rb +1 -1
  20. data/lib/active_fedora/associations/builder/has_subresource.rb +1 -1
  21. data/lib/active_fedora/associations/builder/indirectly_contains.rb +3 -6
  22. data/lib/active_fedora/associations/builder/singular_association.rb +1 -1
  23. data/lib/active_fedora/associations/collection_association.rb +3 -6
  24. data/lib/active_fedora/associations/container_proxy.rb +2 -0
  25. data/lib/active_fedora/associations/contains_association.rb +2 -2
  26. data/lib/active_fedora/associations/directly_contains_association.rb +7 -9
  27. data/lib/active_fedora/associations/directly_contains_one_association.rb +2 -2
  28. data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +1 -1
  29. data/lib/active_fedora/associations/has_many_association.rb +4 -2
  30. data/lib/active_fedora/associations/has_subresource_association.rb +2 -4
  31. data/lib/active_fedora/associations/indirectly_contains_association.rb +10 -12
  32. data/lib/active_fedora/associations/orders_association.rb +7 -14
  33. data/lib/active_fedora/associations/rdf.rb +2 -2
  34. data/lib/active_fedora/associations/record_composite.rb +1 -0
  35. data/lib/active_fedora/associations/singular_association.rb +3 -1
  36. data/lib/active_fedora/associations/singular_rdf.rb +1 -1
  37. data/lib/active_fedora/associations.rb +3 -3
  38. data/lib/active_fedora/attached_files.rb +5 -3
  39. data/lib/active_fedora/attribute_assignment.rb +2 -4
  40. data/lib/active_fedora/attribute_methods/read.rb +1 -1
  41. data/lib/active_fedora/attribute_methods/write.rb +4 -6
  42. data/lib/active_fedora/attribute_methods.rb +7 -7
  43. data/lib/active_fedora/attributes/property_builder.rb +1 -1
  44. data/lib/active_fedora/attributes.rb +1 -1
  45. data/lib/active_fedora/autosave_association.rb +4 -4
  46. data/lib/active_fedora/callbacks.rb +3 -3
  47. data/lib/active_fedora/change_set.rb +5 -7
  48. data/lib/active_fedora/cleaner.rb +1 -1
  49. data/lib/active_fedora/core/fedora_id_translator.rb +1 -3
  50. data/lib/active_fedora/core.rb +6 -13
  51. data/lib/active_fedora/errors.rb +3 -3
  52. data/lib/active_fedora/fedora.rb +3 -7
  53. data/lib/active_fedora/file/attributes.rb +5 -5
  54. data/lib/active_fedora/file.rb +1 -1
  55. data/lib/active_fedora/file_configurator.rb +16 -14
  56. data/lib/active_fedora/file_io.rb +2 -4
  57. data/lib/active_fedora/files_hash.rb +2 -2
  58. data/lib/active_fedora/fixity_service.rb +5 -5
  59. data/lib/active_fedora/identifiable.rb +2 -18
  60. data/lib/active_fedora/indexing/default_descriptors.rb +3 -5
  61. data/lib/active_fedora/indexing/descendant_fetcher.rb +3 -3
  62. data/lib/active_fedora/indexing/descriptor.rb +1 -1
  63. data/lib/active_fedora/indexing/field_mapper.rb +3 -5
  64. data/lib/active_fedora/indexing.rb +9 -5
  65. data/lib/active_fedora/indexing_service.rb +2 -2
  66. data/lib/active_fedora/inheritance.rb +1 -3
  67. data/lib/active_fedora/ldp_resource.rb +3 -3
  68. data/lib/active_fedora/loadable_from_json.rb +5 -3
  69. data/lib/active_fedora/model_classifier.rb +2 -2
  70. data/lib/active_fedora/nested_attributes.rb +11 -21
  71. data/lib/active_fedora/null_logger.rb +2 -0
  72. data/lib/active_fedora/orders/list_node.rb +2 -3
  73. data/lib/active_fedora/orders/ordered_list.rb +16 -22
  74. data/lib/active_fedora/orders/target_proxy.rb +1 -1
  75. data/lib/active_fedora/querying.rb +1 -1
  76. data/lib/active_fedora/rdf/fcrepo.rb +3 -0
  77. data/lib/active_fedora/rdf/field_map.rb +0 -1
  78. data/lib/active_fedora/rdf/persistence.rb +1 -1
  79. data/lib/active_fedora/reflection.rb +8 -11
  80. data/lib/active_fedora/relation/finder_methods.rb +6 -12
  81. data/lib/active_fedora/relation/spawn_methods.rb +1 -1
  82. data/lib/active_fedora/runtime_registry.rb +2 -4
  83. data/lib/active_fedora/scoping/default.rb +2 -4
  84. data/lib/active_fedora/scoping/named.rb +1 -3
  85. data/lib/active_fedora/scoping.rb +2 -2
  86. data/lib/active_fedora/serialization.rb +1 -1
  87. data/lib/active_fedora/solr_service.rb +1 -3
  88. data/lib/active_fedora/version.rb +1 -1
  89. data/lib/active_fedora/versionable.rb +2 -2
  90. data/lib/active_fedora/versions_graph.rb +4 -6
  91. data/lib/active_fedora/with_metadata/metadata_node.rb +1 -1
  92. data/lib/active_fedora/with_metadata.rb +1 -1
  93. data/lib/active_fedora.rb +5 -7
  94. data/lib/generators/active_fedora/config/solr/templates/solr/conf/solrconfig.xml +3 -1
  95. data/lib/tasks/active_fedora_dev.rake +5 -5
  96. metadata +25 -52
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class CollectionAssociation < Association #:nodoc:
3
+ class CollectionAssociation < Association # :nodoc:
4
4
  attr_reader :proxy
5
5
 
6
6
  # Implements the reader method, e.g. foo.items for Foo.has_many :items
@@ -336,11 +336,8 @@ module ActiveFedora
336
336
 
337
337
  def find_reflection
338
338
  return reflection if @reflection.options[:predicate]
339
- if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
340
- @reflection.inverse_of || raise("No :inverse_of or :predicate attribute was set or could be inferred for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class}")
341
- else
342
- raise "Couldn't find reflection"
343
- end
339
+ raise "Couldn't find reflection" unless @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
340
+ @reflection.inverse_of || raise("No :inverse_of or :predicate attribute was set or could be inferred for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class}")
344
341
  end
345
342
 
346
343
  def _create_record(attributes, raise = false)
@@ -1,9 +1,11 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
3
  class ContainerProxy < CollectionProxy
4
+ # rubocop:disable Lint/MissingSuper
4
5
  def initialize(association)
5
6
  @association = association
6
7
  end
8
+ # rubocop:enable Lint/MissingSuper
7
9
  end
8
10
  end
9
11
  end
@@ -1,7 +1,7 @@
1
1
  # This is the parent class of BasicContainsAssociation, DirectlyContainsAssociation and IndirectlyContainsAssociation
2
2
  module ActiveFedora
3
3
  module Associations
4
- class ContainsAssociation < CollectionAssociation #:nodoc:
4
+ class ContainsAssociation < CollectionAssociation # :nodoc:
5
5
  def insert_record(record, force = true, validate = true)
6
6
  if force
7
7
  record.save!
@@ -18,7 +18,7 @@ module ActiveFedora
18
18
  if loaded?
19
19
  target.include?(other)
20
20
  elsif container_predicate = options[:has_member_relation]
21
- owner.resource.query(predicate: container_predicate, object: ::RDF::URI(other.uri)).present?
21
+ owner.resource.query({ predicate: container_predicate, object: ::RDF::URI(other.uri) }).present?
22
22
  else # is_member_of_relation
23
23
  # This will force a load, so it's slowest and the least preferable option
24
24
  target.include?(other)
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class DirectlyContainsAssociation < ContainsAssociation #:nodoc:
3
+ class DirectlyContainsAssociation < ContainsAssociation # :nodoc:
4
4
  def insert_record(record, force = true, validate = true)
5
5
  container.save!
6
6
  super
@@ -14,24 +14,22 @@ module ActiveFedora
14
14
  container
15
15
  end
16
16
 
17
- uris = query_node.resource.query(predicate: container_predicate).map { |r| r.object.to_s }
17
+ uris = query_node.resource.query({ predicate: container_predicate }).map { |r| r.object.to_s }
18
18
 
19
19
  uris.map { |object_uri| klass.find(klass.uri_to_id(object_uri)) }
20
20
  end
21
21
 
22
22
  def container
23
- @container ||= begin
24
- DirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
25
- container.parent = @owner
26
- container.has_member_relation = Array(options[:has_member_relation])
27
- container.is_member_of_relation = Array(options[:is_member_of_relation])
28
- end
23
+ @container ||= DirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
24
+ container.parent = @owner
25
+ container.has_member_relation = Array(options[:has_member_relation])
26
+ container.is_member_of_relation = Array(options[:is_member_of_relation])
29
27
  end
30
28
  end
31
29
 
32
30
  protected
33
31
 
34
- def initialize_attributes(record) #:nodoc:
32
+ def initialize_attributes(record) # :nodoc:
35
33
  record.uri = ActiveFedora::Base.id_to_uri(container.mint_id)
36
34
  set_inverse_instance(record)
37
35
  end
@@ -1,7 +1,7 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
3
  # Filters a DirectContainer relationship, returning the first item that matches the given :type
4
- class DirectlyContainsOneAssociation < SingularAssociation #:nodoc:
4
+ class DirectlyContainsOneAssociation < SingularAssociation # :nodoc:
5
5
  # Finds objects contained by the container predicate (either the configured has_member_relation or ldp:contains)
6
6
  # TODO: Refactor this to use solr (for efficiency) instead of parsing the RDF graph. Requires indexing ActiveFedora::File objects into solr, including their RDF.type and, if possible, the id of their container
7
7
  # See https://github.com/samvera/active_fedora/issues/1335
@@ -14,7 +14,7 @@ module ActiveFedora
14
14
  container_association.container # Use the :through association's container
15
15
  end
16
16
 
17
- contained_uris = query_node.resource.query(predicate: container_predicate).map { |r| r.object.to_s }
17
+ contained_uris = query_node.resource.query({ predicate: container_predicate }).map { |r| r.object.to_s }
18
18
  contained_uris.each do |object_uri|
19
19
  contained_object = klass.find(klass.uri_to_id(object_uri))
20
20
  return contained_object if get_type_from_record(contained_object).include?(options[:type])
@@ -1,7 +1,7 @@
1
1
  module ActiveFedora
2
2
  # = Active Fedora Has And Belongs To Many Association
3
3
  module Associations
4
- class HasAndBelongsToManyAssociation < CollectionAssociation #:nodoc:
4
+ class HasAndBelongsToManyAssociation < CollectionAssociation # :nodoc:
5
5
  def initialize(owner, reflection)
6
6
  super
7
7
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class HasManyAssociation < CollectionAssociation #:nodoc:
3
+ class HasManyAssociation < CollectionAssociation # :nodoc:
4
4
  def initialize(owner, reflection)
5
5
  super
6
6
  end
@@ -35,7 +35,7 @@ module ActiveFedora
35
35
  end
36
36
  elsif owner.persisted?
37
37
  inverse = reflection.inverse_of
38
- if inverse && inverse.collection?
38
+ if inverse&.collection?
39
39
  record[inverse.foreign_key] ||= []
40
40
  record[inverse.foreign_key] += [owner.id]
41
41
  elsif inverse && inverse.klass == ActiveFedora::Base
@@ -88,6 +88,7 @@ module ActiveFedora
88
88
 
89
89
  # Deletes the records according to the <tt>:dependent</tt> option.
90
90
  def delete_records(records, method)
91
+ # rubocop:disable Style/GuardClause
91
92
  return records.each(&:destroy) if method == :destroy
92
93
  # Find all the records that point to this and nullify them
93
94
  # keys = records.map { |r| r[reflection.association_primary_key] }
@@ -115,6 +116,7 @@ module ActiveFedora
115
116
  end
116
117
 
117
118
  # update_counter(-scope.update_all(reflection.foreign_key => nil))
119
+ # rubocop:enable Style/GuardClause
118
120
  end
119
121
  end
120
122
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class HasSubresourceAssociation < SingularAssociation #:nodoc:
3
+ class HasSubresourceAssociation < SingularAssociation # :nodoc:
4
4
  # Implements the reader method, e.g. foo.bar for Foo.has_one :bar
5
5
  def reader(force_reload = false)
6
6
  super || build
@@ -50,9 +50,7 @@ module ActiveFedora
50
50
 
51
51
  def configure_datastream(record)
52
52
  # If you called has_metadata with a block, pass the block into the File class
53
- if reflection.options[:block].class == Proc
54
- reflection.options[:block].call(record)
55
- end
53
+ reflection.options[:block].call(record) if reflection.options[:block].class == Proc
56
54
  return unless record.new_record? && reflection.options[:autocreate]
57
55
  record.datastream_will_change!
58
56
  end
@@ -3,7 +3,7 @@ module ActiveFedora
3
3
  # TODO: we may want to split this into two subclasses, one for has_member_relation
4
4
  # and the other for is_member_of_relation
5
5
  # See https://github.com/samvera/active_fedora/issues/1332
6
- class IndirectlyContainsAssociation < ContainsAssociation #:nodoc:
6
+ class IndirectlyContainsAssociation < ContainsAssociation # :nodoc:
7
7
  # Add +records+ to this association. Returns +self+ so method calls may be chained.
8
8
  # Since << flattens its argument list and inserts each record, +push+ and +concat+ behave identically.
9
9
  def concat(*records)
@@ -30,38 +30,36 @@ module ActiveFedora
30
30
  if loaded?
31
31
  target.map(&:id)
32
32
  else
33
- owner.resource.query(predicate: predicate)
33
+ owner.resource.query({ predicate: predicate })
34
34
  .map { |s| ActiveFedora::Base.uri_to_id(s.object) } | target.map(&:id)
35
35
  end
36
36
  end
37
37
 
38
38
  def find_target
39
39
  if container_predicate = options[:has_member_relation]
40
- uris = owner.resource.query(predicate: container_predicate).map { |r| r.object.to_s }
40
+ uris = owner.resource.query({ predicate: container_predicate }).map { |r| r.object.to_s }
41
41
  uris.map { |object_uri| klass.find(klass.uri_to_id(object_uri)) }
42
42
  else # is_member_of_relation
43
43
  # TODO this is a lot of reads. Avoid this path
44
44
  # See https://github.com/samvera/active_fedora/issues/1345
45
45
  container_predicate = ::RDF::Vocab::LDP.contains
46
- proxy_uris = container.resource.query(predicate: container_predicate).map { |r| r.object.to_s }
46
+ proxy_uris = container.resource.query({ predicate: container_predicate }).map { |r| r.object.to_s }
47
47
  proxy_uris.map { |uri| proxy_class.find(proxy_class.uri_to_id(uri))[options[:foreign_key]] }
48
48
  end
49
49
  end
50
50
 
51
51
  def container
52
- @container ||= begin
53
- IndirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
54
- container.parent = @owner
55
- container.has_member_relation = Array(options[:has_member_relation])
56
- container.is_member_of_relation = Array(options[:is_member_of_relation])
57
- container.inserted_content_relation = Array(options[:inserted_content_relation])
58
- end
52
+ @container ||= IndirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
53
+ container.parent = @owner
54
+ container.has_member_relation = Array(options[:has_member_relation])
55
+ container.is_member_of_relation = Array(options[:is_member_of_relation])
56
+ container.inserted_content_relation = Array(options[:inserted_content_relation])
59
57
  end
60
58
  end
61
59
 
62
60
  protected
63
61
 
64
- def initialize_attributes(_record) #:nodoc:
62
+ def initialize_attributes(_record) # :nodoc:
65
63
  # record.uri = ActiveFedora::Base.id_to_uri(container.mint_id)
66
64
  # set_inverse_instance(record)
67
65
  end
@@ -52,9 +52,7 @@ module ActiveFedora::Associations
52
52
  # Append a target node to the end of the order.
53
53
  # @param [ActiveFedora::Base] record Record to append
54
54
  def append_target(record, _skip_callbacks = false)
55
- unless unordered_association.target.include?(record)
56
- unordered_association.concat(record)
57
- end
55
+ unordered_association.concat(record) unless unordered_association.target.include?(record)
58
56
  target.append_target(record, proxy_in: owner)
59
57
  end
60
58
 
@@ -62,9 +60,7 @@ module ActiveFedora::Associations
62
60
  # @param [Integer] loc Position to insert record.
63
61
  # @param [ActiveFedora::Base] record Record to insert
64
62
  def insert_target_at(loc, record)
65
- unless unordered_association.target.include?(record)
66
- unordered_association.concat(record)
67
- end
63
+ unordered_association.concat(record) unless unordered_association.target.include?(record)
68
64
  target.insert_at(loc, record, proxy_in: owner)
69
65
  end
70
66
 
@@ -73,9 +69,7 @@ module ActiveFedora::Associations
73
69
  # @param [String] id ID of record to insert.
74
70
  def insert_target_id_at(loc, id)
75
71
  raise ArgumentError, "ID can not be nil" if id.nil?
76
- unless unordered_association.ids_reader.include?(id)
77
- raise ArgumentError, "#{id} is not a part of #{unordered_association.reflection.name}"
78
- end
72
+ raise ArgumentError, "#{id} is not a part of #{unordered_association.reflection.name}" unless unordered_association.ids_reader.include?(id)
79
73
  target.insert_proxy_for_at(loc, ActiveFedora::Base.id_to_uri(id), proxy_in: owner)
80
74
  end
81
75
 
@@ -106,11 +100,10 @@ module ActiveFedora::Associations
106
100
  list_container.save
107
101
  # NOTE: This turns out to be pretty cheap, but should we be doing it
108
102
  # elsewhere?
109
- unless list_container.changed?
110
- owner.head = [list_container.head_id.first]
111
- owner.tail = [list_container.tail_id.first]
112
- owner.save
113
- end
103
+ return if list_container.changed?
104
+ owner.head = [list_container.head_id.first]
105
+ owner.tail = [list_container.tail_id.first]
106
+ owner.save
114
107
  end
115
108
 
116
109
  def scope(*_args)
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class RDF < SingularAssociation #:nodoc:
3
+ class RDF < SingularAssociation # :nodoc:
4
4
  def replace(values)
5
5
  ids = Array(values).reject(&:blank?)
6
6
  raise "can't modify frozen #{owner.class}" if owner.frozen?
@@ -54,7 +54,7 @@ module ActiveFedora
54
54
 
55
55
  # @return [Array<RDF::Statement>]
56
56
  def rdf_query
57
- owner.resource.query(subject: owner.rdf_subject, predicate: reflection.predicate).enum_statement
57
+ owner.resource.query({ subject: owner.rdf_subject, predicate: reflection.predicate }).enum_statement
58
58
  end
59
59
 
60
60
  # @return [Array<RDF::URI>]
@@ -18,6 +18,7 @@ module ActiveFedora::Associations
18
18
  def delete
19
19
  each(&:delete)
20
20
  end
21
+
21
22
  ##
22
23
  # A Repository which returns a composite from #find instead of a single
23
24
  # record. Delegates find to a base repository.
@@ -1,7 +1,8 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class SingularAssociation < Association #:nodoc:
3
+ class SingularAssociation < Association # :nodoc:
4
4
  # Implements the reader method, e.g. foo.bar for Foo.has_one :bar
5
+ # rubocop:disable Style/GuardClause
5
6
  def reader(force_reload = false)
6
7
  if force_reload
7
8
  raise NotImplementedError, "Need to define the uncached method" # TODO
@@ -11,6 +12,7 @@ module ActiveFedora
11
12
  end
12
13
  target
13
14
  end
15
+ # rubocop:enable Style/GuardClause
14
16
 
15
17
  # Implements the writer method, e.g. foo.items= for Foo.has_many :items
16
18
  def writer(record)
@@ -1,6 +1,6 @@
1
1
  module ActiveFedora
2
2
  module Associations
3
- class SingularRDF < RDF #:nodoc:
3
+ class SingularRDF < RDF # :nodoc:
4
4
  def replace(value)
5
5
  super(Array(value))
6
6
  end
@@ -3,7 +3,7 @@ require 'active_support/core_ext/module/delegation'
3
3
  require 'active_support/core_ext/object/blank'
4
4
 
5
5
  module ActiveFedora
6
- class InverseOfAssociationNotFoundError < RuntimeError #:nodoc:
6
+ class InverseOfAssociationNotFoundError < RuntimeError # :nodoc:
7
7
  def initialize(reflection, associated_class = nil)
8
8
  super("Could not find the inverse association for #{reflection.name} (#{reflection.options[:inverse_of].inspect} in #{associated_class.nil? ? reflection.class_name : associated_class.name})")
9
9
  end
@@ -65,7 +65,7 @@ module ActiveFedora
65
65
  end
66
66
 
67
67
  # Clears out the association cache.
68
- def clear_association_cache #:nodoc:
68
+ def clear_association_cache # :nodoc:
69
69
  @association_cache.clear if persisted?
70
70
  end
71
71
 
@@ -73,7 +73,7 @@ module ActiveFedora
73
73
  attr_reader :association_cache
74
74
 
75
75
  # Returns the association instance for the given name, instantiating it if it doesn't already exist
76
- def association(name) #:nodoc:
76
+ def association(name) # :nodoc:
77
77
  association = association_instance_get(name)
78
78
 
79
79
  if association.nil?
@@ -8,9 +8,11 @@ module ActiveFedora
8
8
 
9
9
  # Returns only the attached_files that are declared with 'contains'
10
10
  def declared_attached_files
11
- attached_files.reflections.keys.each_with_object({}) do |k, h|
12
- h[k] = attached_files[k]
11
+ result = {}
12
+ attached_files.reflections.keys.each do |k|
13
+ result[k] = attached_files[k]
13
14
  end
15
+ result
14
16
  end
15
17
 
16
18
  #
@@ -30,7 +32,7 @@ module ActiveFedora
30
32
  end
31
33
 
32
34
  def contains_assertions
33
- resource.query(subject: resource, predicate: ::RDF::Vocab::LDP.contains).objects.map(&:to_s)
35
+ resource.query({ subject: resource, predicate: ::RDF::Vocab::LDP.contains }).objects.map(&:to_s)
34
36
  end
35
37
 
36
38
  # Load any undeclared relationships or has_subresource relationships. These are non-idiomatic LDP
@@ -29,10 +29,8 @@ module ActiveFedora
29
29
  # cat.name # => 'Gorby'
30
30
  # cat.status => 'sleeping'
31
31
  def assign_attributes(new_attributes)
32
- unless new_attributes.respond_to?(:stringify_keys)
33
- raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
34
- end
35
- return if new_attributes.nil? || new_attributes.empty?
32
+ raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." unless new_attributes.respond_to?(:stringify_keys)
33
+ return if new_attributes.blank?
36
34
 
37
35
  attributes = new_attributes.stringify_keys
38
36
  _assign_attributes(sanitize_for_mass_assignment(attributes))
@@ -4,7 +4,7 @@ module ActiveFedora
4
4
  module ClassMethods
5
5
  protected
6
6
 
7
- def define_method_attribute(name, owner: nil)
7
+ def define_method_attribute(name, owner: nil) # rubocop:disable Lint/UnusedMethodArgument
8
8
  name = name.to_s
9
9
  safe_name = name.unpack('h*'.freeze).first
10
10
  temp_method = "__temp__#{safe_name}"
@@ -4,7 +4,7 @@ module ActiveFedora
4
4
  module ClassMethods
5
5
  protected
6
6
 
7
- def define_method_attribute=(name, owner: nil)
7
+ def define_method_attribute=(name, owner: nil) # rubocop:disable Lint/UnusedMethodArgument
8
8
  name = name.to_s
9
9
  safe_name = name.unpack('h*'.freeze).first
10
10
  ActiveFedora::AttributeMethods::AttrNames.set_name_cache safe_name, name
@@ -27,11 +27,9 @@ module ActiveFedora
27
27
  end
28
28
 
29
29
  def write_attribute(attribute_name, value)
30
- if self.class.properties.key?(attribute_name)
31
- attributes[attribute_name] = value
32
- else
33
- raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{attribute_name}'"
34
- end
30
+ raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{attribute_name}'" unless self.class.properties.key?(attribute_name)
31
+
32
+ attributes[attribute_name] = value
35
33
  end
36
34
 
37
35
  private
@@ -13,12 +13,12 @@ module ActiveFedora
13
13
  end
14
14
  end
15
15
 
16
- BLACKLISTED_CLASS_METHODS = %w(private public protected allocate new name parent superclass).freeze
16
+ BLACKLISTED_CLASS_METHODS = %w[private public protected allocate new name parent superclass].freeze
17
17
 
18
18
  class GeneratedAttributeMethods < Module; end # :nodoc:
19
19
 
20
20
  module ClassMethods
21
- def inherited(child_class) #:nodoc:
21
+ def inherited(child_class) # :nodoc:
22
22
  child_class.initialize_generated_modules
23
23
  super
24
24
  end
@@ -46,9 +46,7 @@ module ActiveFedora
46
46
  # Person.instance_method_already_implemented?(:name)
47
47
  # # => false
48
48
  def instance_method_already_implemented?(method_name)
49
- if dangerous_attribute_method?(method_name)
50
- raise DangerousAttributeError, "#{method_name} is defined by Active Fedora. Check to make sure that you don't have an attribute or method with the same name."
51
- end
49
+ raise DangerousAttributeError, "#{method_name} is defined by Active Fedora. Check to make sure that you don't have an attribute or method with the same name." if dangerous_attribute_method?(method_name)
52
50
 
53
51
  if superclass == Base
54
52
  super
@@ -148,9 +146,11 @@ module ActiveFedora
148
146
  # person.attributes
149
147
  # # => {"id"=>3, "created_at"=>Sun, 21 Oct 2012 04:53:04, "updated_at"=>Sun, 21 Oct 2012 04:53:04, "name"=>"Francesco", "age"=>22}
150
148
  def attributes
151
- attribute_names.each_with_object({}) do |name, attrs|
152
- attrs[name] = read_attribute(name)
149
+ result = {}
150
+ attribute_names.each do |name|
151
+ result[name] = read_attribute(name)
153
152
  end
153
+ result
154
154
  end
155
155
 
156
156
  # Returns an <tt>#inspect</tt>-like string for the value of the
@@ -1,5 +1,5 @@
1
1
  module ActiveFedora::Attributes
2
- class PropertyBuilder < ActiveTriples::PropertyBuilder #:nodoc:
2
+ class PropertyBuilder < ActiveTriples::PropertyBuilder # :nodoc:
3
3
  def self.define_accessors(model, reflection, options = {})
4
4
  if reflection.multiple?
5
5
  super
@@ -77,7 +77,7 @@ module ActiveFedora
77
77
  # override activemodel so it doesn't trigger a load of all the attributes.
78
78
  # the callback methods seem to trigger this, which means just initing an object (after_init)
79
79
  # causes a load of all the datastreams.
80
- def attribute_method?(attr_name) #:nodoc:
80
+ def attribute_method?(attr_name) # :nodoc:
81
81
  respond_to_without_attributes?(:attributes) && self.class.delegated_attributes.include?(attr_name)
82
82
  end
83
83
 
@@ -77,7 +77,7 @@ module ActiveFedora
77
77
 
78
78
  ASSOCIATION_TYPES = [:has_many, :belongs_to, :has_and_belongs_to_many, :directly_contains, :indirectly_contains, :is_a_container].freeze
79
79
 
80
- module AssociationBuilderExtension #:nodoc:
80
+ module AssociationBuilderExtension # :nodoc:
81
81
  def self.valid_options
82
82
  [:autosave]
83
83
  end
@@ -199,7 +199,7 @@ module ActiveFedora
199
199
  # unless the parent is/was a new record itself.
200
200
  def associated_records_to_validate_or_save(association, new_record, autosave)
201
201
  if new_record
202
- association && association.target
202
+ association&.target
203
203
  elsif autosave
204
204
  association.target.find_all(&:changed_for_autosave?)
205
205
  else
@@ -220,7 +220,7 @@ module ActiveFedora
220
220
  # turned on for the association.
221
221
  def validate_single_association(reflection)
222
222
  association = association_instance_get(reflection.name)
223
- record = association && association.target
223
+ record = association&.target
224
224
  association_valid?(reflection, record) if record
225
225
  end
226
226
 
@@ -306,7 +306,7 @@ module ActiveFedora
306
306
  # In addition, it will destroy the association if it was marked for destruction.
307
307
  def save_belongs_to_association(reflection)
308
308
  association = association_instance_get(reflection.name)
309
- record = association && association.load_target
309
+ record = association&.load_target
310
310
  if record && !record.destroyed?
311
311
  autosave = reflection.options[:autosave]
312
312
 
@@ -227,7 +227,7 @@ module ActiveFedora
227
227
  define_model_callbacks :save, :create, :update, :destroy, :update_index
228
228
  end
229
229
 
230
- def destroy(*) #:nodoc:
230
+ def destroy(*) # :nodoc:
231
231
  _run_destroy_callbacks { super }
232
232
  end
233
233
 
@@ -241,11 +241,11 @@ module ActiveFedora
241
241
  _run_save_callbacks { super }
242
242
  end
243
243
 
244
- def _create_record(*) #:nodoc:
244
+ def _create_record(*) # :nodoc:
245
245
  _run_create_callbacks { super }
246
246
  end
247
247
 
248
- def _update_record(*) #:nodoc:
248
+ def _update_record(*) # :nodoc:
249
249
  _run_update_callbacks { super }
250
250
  end
251
251
  end
@@ -20,10 +20,10 @@ module ActiveFedora
20
20
  if object.association(key.to_sym).present?
21
21
  # This is always an ActiveFedora::Reflection::RDFPropertyReflection
22
22
  predicate = object.association(key.to_sym).reflection.predicate
23
- result[predicate] = graph.query(subject: object.rdf_subject, predicate: predicate)
23
+ result[predicate] = graph.query({ subject: object.rdf_subject, predicate: predicate })
24
24
  elsif object.class.properties.keys.include?(key)
25
25
  predicate = graph.reflections.reflect_on_property(key).predicate
26
- results = graph.query(subject: object.rdf_subject, predicate: predicate)
26
+ results = graph.query({ subject: object.rdf_subject, predicate: predicate })
27
27
  new_graph = child_graphs(results.map(&:object))
28
28
  results.each do |res|
29
29
  new_graph << res
@@ -32,7 +32,7 @@ module ActiveFedora
32
32
  elsif key == 'type'.freeze
33
33
  # working around https://github.com/ActiveTriples/ActiveTriples/issues/122
34
34
  predicate = ::RDF.type
35
- result[predicate] = graph.query(subject: object.rdf_subject, predicate: predicate)
35
+ result[predicate] = graph.query({ subject: object.rdf_subject, predicate: predicate })
36
36
  elsif object.local_attributes.include?(key)
37
37
  raise "Unable to find a graph predicate corresponding to the attribute: \"#{key}\""
38
38
  end
@@ -46,11 +46,9 @@ module ActiveFedora
46
46
  def child_graphs(objects)
47
47
  child_graphs = ::RDF::Graph.new
48
48
  objects.each do |object|
49
- graph.query(subject: object).each do |statement|
49
+ graph.query({ subject: object }).each do |statement|
50
50
  # Have to filter out Fedora triples.
51
- unless FedoraStatement.new(statement).internal?
52
- child_graphs << statement
53
- end
51
+ child_graphs << statement unless FedoraStatement.new(statement).internal?
54
52
  end
55
53
  end
56
54
  child_graphs
@@ -35,7 +35,7 @@ module ActiveFedora
35
35
  end
36
36
 
37
37
  def self.solr_connection
38
- ActiveFedora::SolrService.instance && ActiveFedora::SolrService.instance.conn
38
+ ActiveFedora::SolrService.instance&.conn
39
39
  end
40
40
 
41
41
  def self.cleanout_solr
@@ -4,9 +4,7 @@ module ActiveFedora::Core
4
4
  def self.call(id)
5
5
  id = URI::DEFAULT_PARSER.escape(id, '[]'.freeze)
6
6
  id = "/#{id}" unless id.start_with? SLASH
7
- unless ActiveFedora.fedora.base_path == SLASH || id.start_with?("#{ActiveFedora.fedora.base_path}/")
8
- id = ActiveFedora.fedora.base_path + id
9
- end
7
+ id = ActiveFedora.fedora.base_path + id unless ActiveFedora.fedora.base_path == SLASH || id.start_with?("#{ActiveFedora.fedora.base_path}/")
10
8
  ActiveFedora.fedora.host + id
11
9
  end
12
10
  end