active-fedora 9.0.2 → 9.0.8

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 (50) hide show
  1. checksums.yaml +5 -5
  2. data/History.txt +85 -0
  3. data/README.md +2 -4
  4. data/active-fedora.gemspec +1 -0
  5. data/lib/active_fedora.rb +5 -0
  6. data/lib/active_fedora/associations/builder/has_many.rb +1 -1
  7. data/lib/active_fedora/associations/collection_association.rb +1 -18
  8. data/lib/active_fedora/associations/contains_association.rb +3 -1
  9. data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +12 -10
  10. data/lib/active_fedora/attached_files.rb +6 -3
  11. data/lib/active_fedora/change_set.rb +2 -2
  12. data/lib/active_fedora/core.rb +26 -38
  13. data/lib/active_fedora/core/fedora_id_translator.rb +12 -0
  14. data/lib/active_fedora/core/fedora_uri_translator.rb +9 -0
  15. data/lib/active_fedora/errors.rb +4 -0
  16. data/lib/active_fedora/fedora_attributes.rb +25 -1
  17. data/lib/active_fedora/file.rb +2 -15
  18. data/lib/active_fedora/inheritable_accessors.rb +26 -0
  19. data/lib/active_fedora/nom_datastream.rb +6 -4
  20. data/lib/active_fedora/rdf/ntriples_rdf_datastream.rb +0 -4
  21. data/lib/active_fedora/reflection.rb +3 -1
  22. data/lib/active_fedora/relation/finder_methods.rb +36 -5
  23. data/lib/active_fedora/version.rb +1 -1
  24. data/lib/active_fedora/versions_graph.rb +7 -8
  25. data/spec/integration/associations_spec.rb +64 -21
  26. data/spec/integration/belongs_to_association_spec.rb +118 -47
  27. data/spec/integration/collection_association_spec.rb +46 -0
  28. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +178 -139
  29. data/spec/integration/query_result_builder_spec.rb +2 -2
  30. data/spec/integration/versionable_spec.rb +38 -1
  31. data/spec/samples/samples.rb +0 -1
  32. data/spec/spec_helper.rb +1 -0
  33. data/spec/unit/base_spec.rb +98 -0
  34. data/spec/unit/change_set_spec.rb +4 -2
  35. data/spec/unit/core/fedora_id_translator_spec.rb +20 -0
  36. data/spec/unit/core/fedora_uri_translator_spec.rb +19 -0
  37. data/spec/unit/core_spec.rb +50 -0
  38. data/spec/unit/has_many_association_spec.rb +27 -2
  39. data/spec/unit/qualified_dublin_core_datastream_spec.rb +0 -6
  40. data/spec/unit/reflection_spec.rb +44 -0
  41. data/spec/unit/simple_datastream_spec.rb +32 -0
  42. metadata +23 -13
  43. data/spec/samples/marpa-dc_datastream.rb +0 -102
  44. data/spec/samples/models/audio_record.rb +0 -29
  45. data/spec/samples/models/image.rb +0 -5
  46. data/spec/samples/models/oral_history.rb +0 -36
  47. data/spec/samples/models/seminar.rb +0 -29
  48. data/spec/samples/models/seminar_audio_file.rb +0 -32
  49. data/spec/samples/oral_history_sample_model.rb +0 -30
  50. data/spec/samples/special_thing.rb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d965581bccc2e324f6336a4f7c5efb78efad4fcc
4
- data.tar.gz: 72afbee2a1034a97575d0bfbfb74fed1e3d1ca14
2
+ SHA256:
3
+ metadata.gz: ebf611de1fa3721bc0d53f15e6210ced8509072da4f1406f818e2f14c5f11be2
4
+ data.tar.gz: 1f6729e4bce4f1b03ba5ba2864c4dbe84ae454932221de98fe4357b8e80e69e4
5
5
  SHA512:
6
- metadata.gz: e72f35a6d6effd301066113a82479a9924e67b6f137e97db989cef3e9d7ac48790835d074fb617f222a07d7b9641ca49aac0bba4ec6e778da23340eff3edf857
7
- data.tar.gz: 0689886286c8acc0aea9f4a19b70fac85b7da7d011ecdfcf13c140ab5e5479f900063d5ca5d88e94a315a83d88d72ccdd26b268240a6615596a481542f16c89b
6
+ metadata.gz: f5ba1bc7bcb326f435f1ed88cad1e1a7b68c04b122472379430bf320a634e67e3da72c13c424dda5ba1f9d2673aec820a74d9b7adffb60bd9c23498f89ed7b52
7
+ data.tar.gz: 2e06a0593ec85862f1995277e7a530f05bff3f31e30ed80a4719c04beb8807c28060ec275fa2d833c118b83ad22fb812c5a07d848823bbfc9d90bb8693683fd9
@@ -1,3 +1,88 @@
1
+ v9.0.8
2
+
3
+ 2015-04-15: Revert "Move the indexing logic to the model. Fixes #736"
4
+ [Justin Coyne] (cabb9057)
5
+
6
+ 2015-04-15: Fix deleting from a HABTM when the inverse_of is a
7
+ has_many. Fixes #763 [Justin Coyne] (b1e67fb1)
8
+
9
+ 2015-04-15: Remove a spec that is a duplicate of
10
+ integration/collection_association_spec.rb:92 [Justin Coyne]
11
+ (bdafd50d)
12
+
13
+ 2015-04-15: Leverage the code in AssociationRelation to find the
14
+ inverse. Fixes #760 [Justin Coyne] (c764ea70)
15
+
16
+ 2015-04-15: Make #translate_id_to_uri/uri_to_id reliable. [Trey
17
+ Terrell] (80a4e3fd)
18
+
19
+ 2015-04-15: Find best model match in case of inheritance [Stuart
20
+ Kenny] (481a9cd4)
21
+
22
+ 2015-04-15: Requires 'deprecation' for ActiveFedora::File [Andrew
23
+ Myers] (14be5cf6)
24
+
25
+ 2015-04-07: The indexing hints should be inheritable [Justin Coyne]
26
+ (c8d41b91)
27
+
28
+ v9.0.7
29
+ 2015-04-06: Only set/save the inverse on a HABTM if the inverse is also HABTM
30
+ previously we were getting: [Justin Coyne]
31
+
32
+ 2015-04-06: Derive a foreign_key ending with `_ids` if the inverse is a
33
+ collection [Justin Coyne]
34
+
35
+ 2015-04-06: Find inverse relations when class_names have modules [Justin Coyne]
36
+
37
+ 2015-04-06: Raise an error when the inverse relationship can not be found.
38
+ Previously a "SystemStackError: Stack too deep" was encountered in this
39
+ situation [Justin Coyne]
40
+
41
+ 2015-04-02: Add a mechanism to set rdf_label on the ActiveTriple resource
42
+ [Justin Coyne]
43
+
44
+ 2015-04-03: Refactor has_and_belongs_to_many_associations_spec [Justin Coyne]
45
+
46
+ 2015-04-03: Remove unused sample classes [Justin Coyne]
47
+
48
+ 2015-04-02: Sort versions as dates not as strings [Justin Coyne]
49
+
50
+ 2015-04-01: Prevents an object from being loaded to the incorrect class. For
51
+ example, when loading a batch object it should be loaded into a Batch (and not a
52
+ File for example.) [Justin Coyne]
53
+
54
+ 2015-03-27: Move the indexing logic to the model. Fixes #736 You should now add
55
+ indexing hints to has_attributes by passing a block similar to how you do it
56
+ with rdf properties. e.g.: [Justin Coyne]
57
+
58
+ v9.0.6
59
+ 2015-03-26: Setting type should not wipe out properties. Fixes #737 [Justin Coyne]
60
+
61
+ v9.0.5
62
+ 2015-03-25: Properties named *_id should not break the change set [Chris Colvard]
63
+
64
+ 2015-03-24: Add rdf:type assertions to ActiveFedora::Base [Justin Coyne]
65
+
66
+ 2015-03-24: Add documentation that differentiates attach_file from add_file [Justin Coyne]
67
+
68
+ 2015-03-24: Remove #default_attributes. Fixes #732 [Chris Colvard]
69
+
70
+ 2015-03-18: Make sure datastreams get configured on load as well as new/create [Michael B. Klein]
71
+
72
+ 2015-03-17: Allow a has_many association to specify an explicit foreign key via the :as option [Michael B. Klein]
73
+
74
+ v9.0.4
75
+ 2015-03-10: Refactor the AF::Base initializer [Justin Coyne]
76
+
77
+ 2015-03-10: Added missing id setter [Justin Coyne]
78
+
79
+ v9.0.3
80
+ 2015-03-04: Encapsulate solr_escape and make it private [Justin Coyne]
81
+
82
+ 2015-03-04: Update readme [Justin Coyne]
83
+
84
+ 2015-02-28: Use modified RSolr.solr_escape method [Adam Wead]
85
+
1
86
  v9.0.0
2
87
  2015-01-30: When save! is called only validate once [Justin Coyne]
3
88
 
data/README.md CHANGED
@@ -6,12 +6,10 @@ Description
6
6
  [![Dependencies](https://gemnasium.com/projecthydra/active_fedora.png)](https://gemnasium.com/projecthydra/active\_fedora)
7
7
  [![Coverage Status](https://img.shields.io/coveralls/projecthydra/active_fedora.svg)](https://coveralls.io/r/projecthydra/active_fedora)
8
8
 
9
- Rubydora and ActiveFedora provide a set of Ruby gems for creating and
9
+ ActiveFedora is a Ruby gem for creating and
10
10
  managing objects in the Fedora Repository Architecture
11
11
  ([http://fedora-commons.org](http://fedora-commons.org)). ActiveFedora
12
- is loosely based on “ActiveRecord” in Rails. The 3.x series of
13
- ActiveFedora depends on Rails 3, specifically activemodel and
14
- activesupport.
12
+ is loosely based on “ActiveRecord” in Rails. Version 9.0+ works with Fedora 4 and prior versions work on Fedora 3.
15
13
 
16
14
  Getting Help
17
15
  ------------
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_development_dependency "rake"
31
31
  s.add_development_dependency "jettywrapper", ">= 2.0.0"
32
32
  s.add_development_dependency "rspec", "~> 3.0"
33
+ s.add_development_dependency "rspec-its"
33
34
  s.add_development_dependency "equivalent-xml"
34
35
  s.add_development_dependency "simplecov", '~> 0.7.1'
35
36
 
@@ -51,6 +51,10 @@ module ActiveFedora #:nodoc:
51
51
  autoload :ChangeSet
52
52
  autoload :Config
53
53
  autoload :Core
54
+ autoload_under 'core' do
55
+ autoload :FedoraIdTranslator
56
+ autoload :FedoraUriTranslator
57
+ end
54
58
  autoload :Datastream
55
59
  autoload :Datastreams
56
60
  autoload :DelegatedAttribute
@@ -63,6 +67,7 @@ module ActiveFedora #:nodoc:
63
67
  autoload :FixityService
64
68
  autoload :Indexing
65
69
  autoload :IndexingService
70
+ autoload :InheritableAccessors
66
71
  autoload :LdpCache
67
72
  autoload :LdpResource
68
73
  autoload :LdpResourceService
@@ -2,7 +2,7 @@ module ActiveFedora::Associations::Builder
2
2
  class HasMany < CollectionAssociation #:nodoc:
3
3
  self.macro = :has_many
4
4
 
5
- self.valid_options += [:dependent, :inverse_of]
5
+ self.valid_options += [:as, :dependent, :inverse_of]
6
6
 
7
7
  def build
8
8
  reflection = super
@@ -343,29 +343,12 @@ module ActiveFedora
343
343
  def find_reflection
344
344
  return reflection if @reflection.options[:predicate]
345
345
  if @reflection.class_name && @reflection.class_name != 'ActiveFedora::Base' && @reflection.macro != :has_and_belongs_to_many
346
- inverse_relation = @owner.class.to_s.underscore.to_sym
347
- begin
348
- find_reflection_for_relation(@reflection.class_name.constantize)
349
- rescue NameError
350
- raise "No :predicate attribute was set or could be inferred for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class}"
351
- end
346
+ @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}")
352
347
  else
353
348
  raise "Couldn't find reflection"
354
349
  end
355
350
  end
356
351
 
357
- def find_reflection_for_relation(klass, inverse_relation=@owner.class.to_s.underscore.to_sym)
358
- raise "Unable to lookup the :predicate attribute for #{@reflection.macro} #{@reflection.name.inspect} on #{@owner.class} because #{klass} specifies \"class_name: 'ActiveFedora::Base'\". Either specify a specific class_name in #{klass} or set :predicate in the #{@reflection.macro} declaration on #{@owner.class}" if inverse_relation == :'active_fedora/base'
359
- if klass.reflections.key?(inverse_relation)
360
- # Try it singular
361
- return klass.reflections[inverse_relation]
362
- elsif klass.reflections.key?(inverse_relation.to_s.pluralize.to_sym)
363
- # Try it plural
364
- return klass.reflections[inverse_relation.to_s.pluralize.to_sym]
365
- end
366
- find_reflection_for_relation(klass, @owner.class.superclass.to_s.underscore.to_sym)
367
- end
368
-
369
352
  def create_record(attributes, raise = false)
370
353
  attributes.update(@reflection.options[:conditions]) if @reflection.options[:conditions].is_a?(Hash)
371
354
  ensure_owner_is_not_new
@@ -7,7 +7,9 @@ module ActiveFedora
7
7
  end
8
8
 
9
9
  def find_target
10
- reflection.build_association(target_uri)
10
+ reflection.build_association(target_uri).tap do |record|
11
+ configure_datastream(record) if reflection.options[:block]
12
+ end
11
13
  end
12
14
 
13
15
  def target_uri
@@ -18,13 +18,16 @@ module ActiveFedora
18
18
  owner[reflection.foreign_key] ||= []
19
19
  owner[reflection.foreign_key] += [record.id]
20
20
 
21
- if @owner.new_record? and @reflection.options[:inverse_of]
22
- ActiveFedora::Base.logger.warn("has_and_belongs_to_many #{@reflection.inspect} is cowardly refusing to insert the inverse relationship into #{record}, because #{@owner} is not persisted yet.") if ActiveFedora::Base.logger
23
- elsif @reflection.options[:inverse_of]
24
- inverse = @reflection.inverse_of
25
- record[inverse.foreign_key] ||= []
26
- record[inverse.foreign_key] += [owner.id]
27
- record.save
21
+ # Only if they've explicitly stated the inverse in the options
22
+ if reflection.options[:inverse_of]
23
+ inverse = reflection.inverse_of
24
+ if owner.new_record?
25
+ ActiveFedora::Base.logger.warn("has_and_belongs_to_many #{reflection.inspect} is cowardly refusing to insert the inverse relationship into #{record}, because #{owner} is not persisted yet.") if ActiveFedora::Base.logger
26
+ elsif inverse.has_and_belongs_to_many?
27
+ record[inverse.foreign_key] ||= []
28
+ record[inverse.foreign_key] += [owner.id]
29
+ record.save
30
+ end
28
31
  end
29
32
 
30
33
  return true
@@ -76,9 +79,8 @@ module ActiveFedora
76
79
  records.each do |r|
77
80
  owner[reflection.foreign_key] -= [r.id]
78
81
 
79
- if (@reflection.options[:inverse_of])
80
- inverse = @reflection.inverse_of
81
- r[inverse.foreign_key] -= [owner.id]
82
+ if inverse = @reflection.inverse_of
83
+ r[inverse.foreign_key] -= [owner.id] if inverse.has_and_belongs_to_many?
82
84
  r.association(inverse.name).reset
83
85
  r.save
84
86
  end
@@ -53,7 +53,10 @@ module ActiveFedora
53
53
  end
54
54
  end
55
55
 
56
- # Adds datastream to the object.
56
+ # Add an ActiveFedora::File to the object.
57
+ # @param [ActiveFedora::File] file
58
+ # @param [String] file_path
59
+ # @param [Hash] opts
57
60
  # @return [String] path of the added datastream
58
61
  def attach_file(file, file_path, opts={})
59
62
  create_singleton_association(file_path)
@@ -80,9 +83,9 @@ module ActiveFedora
80
83
  add_file(file, opts)
81
84
  end
82
85
 
83
- # Attach the given file to object
86
+ # Attach the given stream/string to object
84
87
  #
85
- # @param [File] file the file to add
88
+ # @param [IO, String] file the file to add
86
89
  # @param [Hash] opts options: :dsid, :prefix, :mime_type
87
90
  # @option opts [String] :path The file path
88
91
  # @option opts [String] :prefix The path prefix (for auto-generated path)
@@ -19,8 +19,8 @@ module ActiveFedora
19
19
 
20
20
  def changes
21
21
  @changes ||= changed_attributes.each_with_object({}) do |key, result|
22
- if m = /^.*_ids?$/.match(key)
23
- predicate = object.association(m[0].to_sym).reflection.predicate
22
+ if object.respond_to?(:association) && object.association(key.to_sym).present?
23
+ predicate = object.association(key.to_sym).reflection.predicate
24
24
  result[predicate] = graph.query(predicate: predicate)
25
25
  elsif object.class.properties.keys.include?(key)
26
26
  predicate = graph.reflections.reflect_on_property(key).predicate
@@ -14,14 +14,25 @@ module ActiveFedora
14
14
  # :singleton-method
15
15
  #
16
16
  # Accepts a proc that takes an id and transforms it to a URI
17
- mattr_accessor :translate_id_to_uri, instance_writer: false
17
+ mattr_reader :translate_id_to_uri do
18
+ FedoraIdTranslator
19
+ end
20
+
21
+ def self.translate_id_to_uri=(translator)
22
+ @@translate_id_to_uri = translator || FedoraIdTranslator
23
+ end
18
24
 
19
25
  ##
20
26
  # :singleton-method
21
27
  #
22
28
  # Accepts a proc that takes a uri and transforms it to an id
23
- mattr_accessor :translate_uri_to_id, instance_writer: false
29
+ mattr_reader :translate_uri_to_id do
30
+ FedoraUriTranslator
31
+ end
24
32
 
33
+ def self.translate_uri_to_id=(translator)
34
+ @@translate_uri_to_id = translator || FedoraUriTranslator
35
+ end
25
36
  end
26
37
 
27
38
  def ldp_source
@@ -33,13 +44,14 @@ module ActiveFedora
33
44
  # Also, if +attrs+ does not contain +:id+ but does contain +:namespace+ it will pass the
34
45
  # +:namespace+ value to Fedora::Repository.nextid to generate the next id available within
35
46
  # the given namespace.
36
- def initialize(attributes_or_resource_or_url = nil, &block)
47
+ def initialize(attributes_or_id = nil, &block)
37
48
  init_internals
38
- attributes = initialize_resource_and_attributes(attributes_or_resource_or_url)
49
+ attributes = initialize_attributes(attributes_or_id)
50
+ @ldp_source = build_ldp_resource(attributes.delete(:id))
39
51
  raise IllegalOperation, "Attempting to recreate existing ldp_source: `#{ldp_source.subject}'" unless ldp_source.new?
40
52
  assert_content_model
41
53
  load_attached_files
42
- self.attributes = attributes if attributes
54
+ self.attributes = attributes
43
55
 
44
56
  yield self if block_given?
45
57
  run_callbacks :initialize
@@ -133,27 +145,14 @@ module ActiveFedora
133
145
  # Transforms an id into a uri
134
146
  # if translate_id_to_uri is set it uses that proc, otherwise just the default
135
147
  def id_to_uri(id)
136
- if translate_id_to_uri
137
- translate_id_to_uri.call(id)
138
- else
139
- id = "/#{id}" unless id.start_with? SLASH
140
- unless ActiveFedora.fedora.base_path == SLASH || id.start_with?("#{ActiveFedora.fedora.base_path}/")
141
- id = ActiveFedora.fedora.base_path + id
142
- end
143
- ActiveFedora.fedora.host + id
144
- end
148
+ translate_id_to_uri.call(id)
145
149
  end
146
150
 
147
151
  ##
148
152
  # Transforms a uri into an id
149
153
  # if translate_uri_to_id is set it uses that proc, otherwise just the default
150
154
  def uri_to_id(uri)
151
- if translate_uri_to_id
152
- translate_uri_to_id.call(uri)
153
- else
154
- id = uri.to_s.sub(ActiveFedora.fedora.host + ActiveFedora.fedora.base_path, '')
155
- id.start_with?('/') ? id[1..-1] : id
156
- end
155
+ translate_uri_to_id.call(uri)
157
156
  end
158
157
 
159
158
  ##
@@ -193,33 +192,22 @@ module ActiveFedora
193
192
  end
194
193
  end
195
194
 
196
- def initialize_resource_and_attributes attributes_or_resource_or_url
197
- case attributes_or_resource_or_url
195
+ def initialize_attributes attributes_or_id
196
+ case attributes_or_id
198
197
  when String
199
- @ldp_source = build_ldp_resource(attributes_or_resource_or_url)
200
- @attributes = {}.with_indifferent_access
198
+ attributes = {id: attributes_or_id}.with_indifferent_access
201
199
  when Hash
202
- attributes = attributes_or_resource_or_url
203
-
204
- id = attributes.delete(:id)
205
-
200
+ attributes = attributes_or_id.with_indifferent_access
206
201
  # TODO: Remove when we decide using 'pid' is no longer supported.
207
- if !id && attributes.has_key?(:pid)
202
+ if !attributes.key?(:id) && attributes.key?(:pid)
208
203
  Deprecation.warn Core, 'Initializing with :pid is deprecated and will be removed in active-fedora 10.0. Use :id instead'
209
- id = attributes.delete(:pid)
204
+ attributes[:id] = attributes.delete(:pid)
210
205
  end
211
206
 
212
- attributes = attributes.with_indifferent_access if attributes
213
- @ldp_source = if id
214
- build_ldp_resource(id)
215
- else
216
- build_ldp_resource
217
- end
218
207
  when NilClass
219
- @ldp_source = build_ldp_resource
220
208
  attributes = {}.with_indifferent_access
221
209
  else
222
- raise ArgumentError, "#{attributes_or_resource_or_url.class} is not acceptable"
210
+ raise ArgumentError, "#{attributes_or_id.class} is not acceptable"
223
211
  end
224
212
  return attributes
225
213
  end
@@ -0,0 +1,12 @@
1
+ module ActiveFedora::Core
2
+ class FedoraIdTranslator
3
+ SLASH = '/'.freeze
4
+ def self.call(id)
5
+ id = "/#{id}" unless id.start_with? SLASH
6
+ unless ActiveFedora.fedora.base_path == SLASH || id.start_with?("#{ActiveFedora.fedora.base_path}/")
7
+ id = ActiveFedora.fedora.base_path + id
8
+ end
9
+ ActiveFedora.fedora.host + id
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module ActiveFedora::Core
2
+ class FedoraUriTranslator
3
+ SLASH = '/'.freeze
4
+ def self.call(uri)
5
+ id = uri.to_s.sub(ActiveFedora.fedora.host + ActiveFedora.fedora.base_path, '')
6
+ id.start_with?(SLASH) ? id[1..-1] : id
7
+ end
8
+ end
9
+ end
@@ -72,4 +72,8 @@ module ActiveFedora #:nodoc:
72
72
  # Transactions are currently incomplete
73
73
  class Rollback < ActiveFedoraError
74
74
  end
75
+
76
+ # Raised when Fedora returns a version without a create date
77
+ class VersionLacksCreateDate < ActiveFedoraError
78
+ end
75
79
  end
@@ -1,11 +1,12 @@
1
1
  module ActiveFedora
2
2
  module FedoraAttributes
3
3
  extend ActiveSupport::Concern
4
+ include InheritableAccessors
4
5
 
5
6
  included do
6
7
  include ActiveTriples::Properties
7
8
  include ActiveTriples::Reflection
8
- delegate :rdf_subject, :get_values, to: :resource
9
+ delegate :rdf_subject, :get_values, :type, to: :resource
9
10
 
10
11
  property :has_model, predicate: ActiveFedora::RDF::Fcrepo::Model.hasModel
11
12
  property :create_date, predicate: ActiveFedora::RDF::Fcrepo4.created
@@ -18,6 +19,8 @@ module ActiveFedora
18
19
  def modified_date
19
20
  super.first
20
21
  end
22
+
23
+ define_inheritable_accessor(:type, :rdf_label)
21
24
  end
22
25
 
23
26
  # Override ActiveTriples method for setting properties
@@ -34,6 +37,12 @@ module ActiveFedora
34
37
  end
35
38
  end
36
39
 
40
+ def id=(id)
41
+ raise "ID has already been set to #{self.id}" if self.id
42
+ @ldp_source = build_ldp_resource(id.to_s)
43
+ end
44
+
45
+
37
46
  # TODO: Remove after we no longer support #pid.
38
47
  def pid
39
48
  Deprecation.warn FedoraAttributes, "#{self.class}#pid is deprecated and will be removed in active-fedora 10.0. Use #{self.class}#id instead."
@@ -56,12 +65,21 @@ module ActiveFedora
56
65
  @resource ||= self.class.resource_class.new(@ldp_source.graph.rdf_subject, @ldp_source.graph)
57
66
  end
58
67
 
68
+ # You can set the URI to use for the rdf_label on ClassMethods.rdf_label, then on
69
+ # the instance, calling rdf_label returns the value of that configured property
70
+ def rdf_label
71
+ resource.rdf_label
72
+ end
73
+
59
74
  module ClassMethods
60
75
  # We make a unique class, because properties belong to a class.
61
76
  # This keeps properties from different objects separate.
77
+ # Since the copy of properties can only happen once, we don't want to invoke it
78
+ # until all properties have been defined.
62
79
  def resource_class
63
80
  @generated_resource_class ||= begin
64
81
  klass = self.const_set(:GeneratedResourceSchema, Class.new(ActiveTriples::Resource))
82
+ klass.configure active_triple_options
65
83
  klass.properties.merge(self.properties).each do |property, config|
66
84
  klass.property(config.term,
67
85
  predicate: config.predicate,
@@ -70,6 +88,12 @@ module ActiveFedora
70
88
  klass
71
89
  end
72
90
  end
91
+
92
+ private
93
+ # @return a Hash of options suitable for passing to ActiveTriples::Base.configure
94
+ def active_triple_options
95
+ { type: type, rdf_label: rdf_label }
96
+ end
73
97
  end
74
98
  end
75
99
  end