active-fedora 1.0.4 → 1.0.5

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.
@@ -0,0 +1,26 @@
1
+ 1.0.5 2009-07-17
2
+
3
+ Minor update.
4
+
5
+ * Bug #387: Base.deserialize should mark all datastreams as not new
6
+ * ToDo #389: Base.update_attributes and Base.update_indexed_attributes should accept :datastream limiter
7
+ * Feature #388: Base.update_attributes and Base.update_indexed_attributes should support deleting fields
8
+
9
+ 1.0.4 2009-07-10
10
+
11
+ !! Not Backwards Compatible with Fedora < 3.2.* !!
12
+
13
+ * 1 major enhancement:
14
+ * ruby-fedora is now compatible with Fedora 3.2.1
15
+
16
+ Changelog:
17
+ * ToDo #272: Datastream.new should accept a :prefix option for auto-incrementing DSIDs
18
+ * ToDo #275: Update RubyFedora to work with Fedora 3.2 REST API
19
+ * ToDo #308: ActiveFedora::FedoraObject.datatsreams should load label as well as pid and dsId
20
+ * ToDo #318: Intelligent FileDatastream and FileAsset Management
21
+ * Bug #312: Base.delete should delete the solr record as well as the Fedora Object
22
+ * Feature #46: Improve OSX Fedora/Solr Disk Image
23
+ * Feature #284: solr document id should by a config option instead of hard coded as "id"
24
+ * Feature #307: ActiveFedora::Base should provide a label setter.
25
+ * Feature #314: Relationship finder should provide a "response_format" option, default to format of "objects"
26
+ * Feature #327: Option to turn off solr updates (assume that something else will update Solr for you)
@@ -4,7 +4,7 @@
4
4
  * Further documentation is available at <http://projects.mediashelf.us/show/active-fedora>
5
5
  * Community Discussions & Mailing List are located at <http://groups.google.com/group/active-fedora>
6
6
 
7
- = afed-regem
7
+ = active-fedora gem
8
8
 
9
9
  * FIX (url)
10
10
 
@@ -26,7 +26,7 @@ FIX (describe your package)
26
26
 
27
27
  == INSTALL:
28
28
 
29
- * FIX (sudo gem install, anything else)
29
+ sudo gem install active-fedora
30
30
 
31
31
  == LICENSE:
32
32
 
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  gem 'ruby-fedora'
3
3
  gem 'solr-ruby'
4
4
  module ActiveFedora #:nodoc:
5
- VERSION='1.0.4'
5
+ VERSION='1.0.5'
6
6
  end
7
7
 
8
8
  SOLR_DOCUMENT_ID = "id" unless defined?(SOLR_DOCUMENT_ID)
@@ -22,3 +22,16 @@ require 'active_fedora/rels_ext_datastream.rb'
22
22
  require 'active_fedora/semantic_node.rb'
23
23
  require 'active_fedora/solr_service.rb'
24
24
 
25
+
26
+ if ![].respond_to?(:count)
27
+ class Array
28
+ puts "active_fedora is Adding count method to Array"
29
+ def count(&action)
30
+ count = 0
31
+ self.each { |v| count = count + 1}
32
+ # self.each { |v| count = count + 1 if action.call(v) }
33
+ return count
34
+ end
35
+ end
36
+ end
37
+
@@ -40,7 +40,12 @@ module ActiveFedora
40
40
  def new_object?
41
41
  @new_object
42
42
  end
43
-
43
+
44
+ def new_object=(bool)
45
+ @new_object = bool
46
+ inner_object.new_object = bool
47
+ end
48
+
44
49
  # Constructor. If +attrs+ does not comtain +:pid+, we assume we're making a new one,
45
50
  # and call off to the Fedora Rest API for the next available Fedora pid, and mark as new object.
46
51
  #
@@ -51,7 +56,7 @@ module ActiveFedora
51
56
  attrs = attrs.merge!({:pid=>Fedora::Repository.instance.nextid})
52
57
  @new_object=true
53
58
  else
54
- @new_object=false;
59
+ @new_object=false
55
60
  end
56
61
  @inner_object = Fedora::FedoraObject.new(attrs)
57
62
  @datastreams = {}
@@ -186,7 +191,7 @@ module ActiveFedora
186
191
  # Example: if there are already datastreams with IDs DS1 and DS2, this method will return DS3. If you specify FOO as the prefix, it will return FOO1.
187
192
  def generate_dsid(prefix="DS")
188
193
  keys = datastreams.keys
189
- next_index = keys.select {|v| v =~ /(#{prefix}\d*$)/}.count + 1
194
+ next_index = keys.select {|v| v =~ /(#{prefix}\d*$)/}.length + 1
190
195
  new_dsid = prefix.to_s + next_index.to_s
191
196
  # while keys.include?(new_dsid)
192
197
  # next_index += 1
@@ -289,6 +294,10 @@ module ActiveFedora
289
294
  def owner_id
290
295
  @inner_object.owner_id
291
296
  end
297
+
298
+ def owner_id=(owner_id)
299
+ @inner_object.owner_id=(owner_id)
300
+ end
292
301
 
293
302
  #return the create_date of the inner object (unless it's a new object)
294
303
  def create_date
@@ -317,8 +326,10 @@ module ActiveFedora
317
326
 
318
327
  def self.deserialize(doc) #:nodoc:
319
328
  pid = doc.elements['/foxml:digitalObject'].attributes['PID']
329
+
320
330
  proto = self.new(:pid=>pid)
321
331
  proto.datastreams.each do |name,ds|
332
+ ds.new_object = false
322
333
  doc.elements.each("//foxml:datastream[@ID='#{name}']") do |el|
323
334
  proto.datastreams[name]=ds.class.from_xml(ds, el)
324
335
  end
@@ -369,12 +380,33 @@ module ActiveFedora
369
380
 
370
381
  # An ActiveRecord-ism to udpate metadata values.
371
382
  #
372
- # Passing a hash into this method will attempt to set the values into the
373
- # appropriate fields (for all datastreams, which means a.name and b.name
374
- # fields are _both_ overwritten)
375
- def update_attributes(params={})
383
+ # Example Usage:
384
+ #
385
+ # m.update_attributes(:fubar=>'baz')
386
+ #
387
+ # This will attempt to set the values for any fields named fubar in any of
388
+ # the object's datastreams. This means DS1.fubar_values and DS2.fubar_values
389
+ # are _both_ overwritten.
390
+ #
391
+ # If you want to specify which datastream(s) to update,
392
+ # use the :datastreams argument like so:
393
+ # m.update_attributes({:fubar=>'baz'}, :datastreams=>"my_ds")
394
+ # or
395
+ # m.update_attributes({:fubar=>'baz'}, :datastreams=>["my_ds", "my_other_ds"])
396
+ def update_attributes(params={}, opts={})
376
397
  params.each do |k,v|
377
- datastreams.values.each do |d|
398
+ if v == :delete || v == "" || v == nil
399
+ v = []
400
+ end
401
+ if opts[:datastreams]
402
+ ds_array = []
403
+ opts[:datastreams].each do |dsname|
404
+ ds_array << datastreams[dsname]
405
+ end
406
+ else
407
+ ds_array = datastreams.values
408
+ end
409
+ ds_array.each do |d|
378
410
  if d.fields[k.to_sym]
379
411
  d.send("#{k}_values=", v)
380
412
  end
@@ -391,11 +423,25 @@ module ActiveFedora
391
423
  # An index of -1 will insert a new value. any existing value at the relevant index
392
424
  # will be overwritten.
393
425
  #
394
- # As in update_attributes, this overwrites _all_ available fields.
426
+ # As in update_attributes, this overwrites _all_ available fields by default.
395
427
  #
396
- def update_indexed_attributes(params={})
428
+ # If you want to specify which datastream(s) to update,
429
+ # use the :datastreams argument like so:
430
+ # m.update_attributes({"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}, :datastreams=>"my_ds")
431
+ # or
432
+ # m.update_attributes({"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}, :datastreams=>["my_ds", "my_other_ds"])
433
+ #
434
+ def update_indexed_attributes(params={}, opts={})
435
+ if opts[:datastreams]
436
+ ds_array = []
437
+ opts[:datastreams].each do |dsname|
438
+ ds_array << datastreams[dsname]
439
+ end
440
+ else
441
+ ds_array = datastreams.values
442
+ end
397
443
  params.each do |key,value|
398
- datastreams.each do |dsn, dstream|
444
+ ds_array.each do |dstream|
399
445
  if dstream.fields[key.to_sym]
400
446
  aname="#{key}_values"
401
447
  curval = dstream.send("#{aname}")
@@ -409,6 +455,7 @@ module ActiveFedora
409
455
  end
410
456
  end
411
457
  cpv.each { |y,z| curval<<z}#just append everything left
458
+ curval.delete_if {|x| x == :delete || x == "" || x == nil}
412
459
  dstream.send("#{aname}=", curval) #write it back to the ds
413
460
  end
414
461
  end
@@ -81,6 +81,10 @@ module ActiveFedora
81
81
  #At some point, these modifiers will be ported up to work for any +ActiveFedora::MetadataDatastream+.
82
82
  #
83
83
  #There is quite a good example of this class in use in spec/examples/oral_history.rb
84
+ #
85
+ #!! Careful: If you declare two fields that correspond to the same xml node without any qualifiers to differentiate them,
86
+ #you will end up replicating the values in the underlying datastream, resulting in mysterious dubling, quadrupling, etc.
87
+ #whenever you edit the field's values.
84
88
  def field(name, tupe, opts={})
85
89
  @fields[name.to_s.to_sym]={:type=>tupe, :values=>[]}.merge(opts)
86
90
  eval <<-EOS
@@ -35,7 +35,7 @@ module ActiveFedora
35
35
  query = ""
36
36
  pid_array.each_index do |i|
37
37
  query << "#{SOLR_DOCUMENT_ID}:#{escape_uri_for_query(pid_array[i])}"
38
- query << " OR " if i != pid_array.count-1
38
+ query << " OR " if i != pid_array.length-1
39
39
  end
40
40
  query = "id:NEVER_USE_THIS_ID" if query.empty? || query == "id:"
41
41
  return query
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fedora
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - MediaShelf Inc.
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-10 00:00:00 -05:00
12
+ date: 2009-07-20 00:00:00 -03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.0.3
23
+ version: 1.0.4
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: solr-ruby