ddr-models 2.4.0.rc2 → 2.4.0.rc3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1c49fbe59e6c5428bb0bc0386cc8540645a68a4
4
- data.tar.gz: 2d4611d4cb06dd91ff9cada3c9e9cf6f4ec27ced
3
+ metadata.gz: 80b4bf4ac88afd31bc2ec1941a081a7e5002928e
4
+ data.tar.gz: 3454977d7ae1e765bebf7454d3957d4e57e7ff79
5
5
  SHA512:
6
- metadata.gz: 26122a595e168eebe097b956e44f91e4b06465fe62c02a443036a3b848b436987fecceab9fc007608216fd2c255b27d810b0ecbe548997a503a07e02a48fb434
7
- data.tar.gz: 28c0e57885bab002e0309f293b72c6f53c51cbbd9227a0fcd50411c267c3b61167c7089e9cf1ba445d590ebad8051171acd009401a875304b644e85ef3f13ddc
6
+ metadata.gz: 56a5f5fca3277ea75bbba6766b6b14b570b059cb889e6511abd27a085cf56daf7430dac82afb005806a208ae7a11ff6716cebaee543733a6fd6d4969c08e73fd
7
+ data.tar.gz: 9b5f82ad467a6b6fdec25048c3a70e01c4a2ccb7ddc6ebbae8652e112d9ee4bdaac48ece550dc6059b45efe0efa7f659d2d0241e880a9dfaf791e1bd2619bdf4
@@ -0,0 +1,74 @@
1
+ en:
2
+ ddr:
3
+ index:
4
+ fields:
5
+ id:
6
+ label: "Fedora PID"
7
+ heading: pid
8
+ active_fedora_model:
9
+ label: Model
10
+ heading: model
11
+ aspace_id:
12
+ label: "ArchivesSpace ID"
13
+ doi:
14
+ label: DOI
15
+ ead_id:
16
+ label: "EAD ID"
17
+ local_id:
18
+ label: "Local ID"
19
+ system_create:
20
+ label: "Creation Date"
21
+ heading: creation_date
22
+ system_modified:
23
+ label: "Modification Date"
24
+ heading: modification_date
25
+ permanent_id:
26
+ label: "Permanent ID"
27
+ permanent_url:
28
+ label: "Permanent URL"
29
+ techmd_color_space:
30
+ label: "Color Space"
31
+ heading: color_space
32
+ techmd_creating_application:
33
+ label: "Creating Application"
34
+ heading: creating_application
35
+ techmd_creation_time:
36
+ label: "Creation Time"
37
+ heading: creation_time
38
+ techmd_file_size:
39
+ label: "File Size"
40
+ heading: "file_size"
41
+ techmd_fits_version:
42
+ label: "FITS Version"
43
+ heading: fits_version
44
+ techmd_fits_datetime:
45
+ label: "FITS Run At"
46
+ heading: fits_datetime
47
+ techmd_format_label:
48
+ label: "Format Label"
49
+ heading: format_label
50
+ techmd_format_version:
51
+ label: "Format Version"
52
+ heading: format_version
53
+ techmd_image_height:
54
+ label: "Image Height"
55
+ heading: image_height
56
+ techmd_image_width:
57
+ label: "Image Width"
58
+ heading: image_width
59
+ techmd_media_type:
60
+ label: "Media Type"
61
+ heading: media_type
62
+ techmd_modification_time:
63
+ label: "Modification Time"
64
+ heading: modification_time
65
+ techmd_pronom_identifier:
66
+ label: "PRONOM Unique ID"
67
+ heading: "pronom_uid"
68
+ techmd_valid:
69
+ label: Valid
70
+ heading: valid
71
+ techmd_well_formed:
72
+ label: "Well-formed"
73
+ heading: well_formed
74
+
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.add_dependency "net-ldap", "~> 0.11"
33
33
  s.add_dependency "cancancan", "~> 1.12"
34
34
  s.add_dependency "ddr-antivirus", "~> 2.1.1"
35
+ s.add_dependency "virtus", "~> 1.0.5"
35
36
 
36
37
  s.add_development_dependency "bundler", "~> 1.7"
37
38
  s.add_development_dependency "rake"
@@ -11,16 +11,19 @@ module Ddr
11
11
  autoload :Filter
12
12
  autoload :Filters
13
13
  autoload :LegacyLicenseFields
14
+ autoload :Queries
14
15
  autoload :Query
15
16
  autoload :QueryBuilder
16
17
  autoload :QueryClause
18
+ autoload :QueryParams
17
19
  autoload :QueryResult
18
20
  autoload :QueryValue
19
21
  autoload :Response
22
+ autoload :SortOrder
20
23
  autoload :UniqueKeyField
21
24
 
22
25
  def self.pids
23
- builder = QueryBuilder.new
26
+ builder = QueryBuilder.new { field UniqueKeyField.instance }
24
27
  query = builder.query
25
28
  query.pids
26
29
  end
@@ -10,7 +10,7 @@ module Ddr::Index
10
10
 
11
11
  SOLR_CSV_OPTS = {
12
12
  "csv.header" => "false",
13
- "csv.mv.separator" => "|",
13
+ "csv.mv.separator" => ";",
14
14
  "wt" => "csv",
15
15
  }.freeze
16
16
 
@@ -16,7 +16,17 @@ module Ddr::Index
16
16
  end
17
17
 
18
18
  def label
19
- I18n.t "ddr.index.fields.#{base}", default: base.titleize
19
+ I18n.t "#{i18n_base}.label", default: base.titleize
20
+ end
21
+
22
+ def heading
23
+ I18n.t "#{i18n_base}.heading", default: base
24
+ end
25
+
26
+ private
27
+
28
+ def i18n_base
29
+ "ddr.index.fields.#{base}"
20
30
  end
21
31
 
22
32
  end
@@ -2,16 +2,6 @@ module Ddr::Index
2
2
  module Fields
3
3
  extend Deprecation
4
4
 
5
- def self.const_missing(name)
6
- if const = LegacyLicenseFields.const_get(name)
7
- Deprecation.warn(Ddr::Index::Fields,
8
- "The constant `#{name}` is deprecated and will be removed in ddr-models 3.0.")
9
- const
10
- else
11
- super
12
- end
13
- end
14
-
15
5
  def self.get(name)
16
6
  const_get(name.to_s.upcase, false)
17
7
  end
@@ -23,7 +13,6 @@ module Ddr::Index
23
13
  end
24
14
 
25
15
  ID = UniqueKeyField.instance
26
- PID = UniqueKeyField.instance
27
16
 
28
17
  ACCESS_ROLE = Field.new :access_role, :stored_sortable
29
18
  ACTIVE_FEDORA_MODEL = Field.new :active_fedora_model, :stored_sortable
@@ -96,5 +85,20 @@ module Ddr::Index
96
85
  WORKFLOW_STATE = Field.new :workflow_state, :stored_sortable
97
86
  YEAR_FACET = Field.new :year_facet, solr_name: "year_facet_iim"
98
87
 
88
+ def self.const_missing(name)
89
+ if name == :PID
90
+ Deprecation.warn(Ddr::Index::Fields,
91
+ "`Ddr::Index::Fields::#{name}` is deprecated." \
92
+ " Use `Ddr::Index::Fields::ID` instead.")
93
+ return ID
94
+ end
95
+ if const = LegacyLicenseFields.const_get(name)
96
+ Deprecation.warn(Ddr::Index::Fields,
97
+ "`Ddr::Index::Fields::#{name}` is deprecated and will be removed in ddr-models 3.0.")
98
+ return const
99
+ end
100
+ super
101
+ end
102
+
99
103
  end
100
104
  end
@@ -1,14 +1,24 @@
1
+ require "forwardable"
2
+
1
3
  module Ddr::Index
2
4
  class Filter
3
5
 
4
6
  class << self
5
- delegate :where, :raw, :before_days, :before, :present, :absent, to: :new
7
+ extend Forwardable
8
+
9
+ def_delegators :new, :raw, :where, :absent, :present, :negative, :before, :before_days
6
10
  end
7
11
 
8
12
  attr_accessor :clauses
9
13
 
10
- def initialize
11
- @clauses = [ ]
14
+ def initialize(clauses = nil)
15
+ @clauses = Array(clauses)
16
+ end
17
+
18
+ # Adds clause (String) w/o escaping
19
+ def raw(*clauses)
20
+ self.clauses.push *clauses
21
+ self
12
22
  end
13
23
 
14
24
  def where(conditions)
@@ -23,26 +33,28 @@ module Ddr::Index
23
33
  raw *clauses
24
34
  end
25
35
 
26
- # Adds clause (String) w/o escaping
27
- def raw(*clauses)
28
- self.clauses += clauses
29
- self
36
+ def absent(*args)
37
+ raw QueryClause.absent(*args)
38
+ end
39
+
40
+ def present(*args)
41
+ raw QueryClause.present(*args)
30
42
  end
31
43
 
32
- def present(field)
33
- raw QueryClause.present(field)
44
+ def negative(*args)
45
+ raw QueryClause.negative(*args)
34
46
  end
35
47
 
36
- def absent(field)
37
- raw QueryClause.absent(field)
48
+ def before(*args)
49
+ raw QueryClause.before(*args)
38
50
  end
39
51
 
40
- def before(field, date_time)
41
- raw QueryClause.before(field, date_time)
52
+ def before_days(*args)
53
+ raw QueryClause.before_days(*args)
42
54
  end
43
55
 
44
- def before_days(field, days)
45
- raw QueryClause.before_days(field, days)
56
+ def ==(other)
57
+ other.instance_of?(self.class) && (other.clauses == self.clauses)
46
58
  end
47
59
 
48
60
  end
@@ -1,19 +1,39 @@
1
1
  module Ddr::Index
2
2
  module Filters
3
+ extend Deprecation
3
4
 
4
- HAS_CONTENT = Filter.where(Fields::ACTIVE_FEDORA_MODEL => ["Component", "Attachment", "Target"])
5
+ def self.has_content
6
+ Filter.where(Fields::ACTIVE_FEDORA_MODEL => ["Component", "Attachment", "Target"])
7
+ end
5
8
 
6
- class << self
7
- def is_governed_by(pid)
8
- Filter.where(Fields::IS_GOVERNED_BY => internal_uri(pid))
9
- end
9
+ def self.is_governed_by(object_or_id)
10
+ Filter.where(Fields::IS_GOVERNED_BY => internal_uri(object_or_id))
11
+ end
12
+
13
+ def self.is_member_of_collection(object_or_id)
14
+ Filter.where(Fields::IS_MEMBER_OF_COLLECTION => internal_uri(object_or_id))
15
+ end
16
+
17
+ private
10
18
 
11
- def internal_uri(pid)
12
- ActiveFedora::Base.internal_uri(pid)
19
+ def self.const_missing(name)
20
+ if name == :HAS_CONTENT
21
+ Deprecation.warn(self,
22
+ "`Ddr::Index::Filters::#{name}` is deprecated and will be removed in ddr-models 3.0." \
23
+ " Use `Ddr::Index::Filters.has_content` instead.")
24
+ has_content
25
+ else
26
+ super
13
27
  end
14
28
  end
15
29
 
16
- private_class_method :internal_uri
30
+ def self.internal_uri(object_or_id)
31
+ if object_or_id.respond_to?(:internal_uri)
32
+ object_or_id.internal_uri
33
+ else
34
+ ActiveFedora::Base.internal_uri(object_or_id)
35
+ end
36
+ end
17
37
 
18
38
  end
19
39
  end
@@ -0,0 +1,20 @@
1
+ module Ddr::Index
2
+ module Queries
3
+
4
+ # Returns a query for a single index document.
5
+ # @param doc_id [String] the index document id
6
+ # @return [Query] the query
7
+ def self.id(doc_id)
8
+ builder = QueryBuilder.new { id doc_id }
9
+ builder.query
10
+ end
11
+
12
+ # Returns a query for the index document for an object.
13
+ # @param obj [ActiveFedora::Base] the object
14
+ # @return [Query] the query
15
+ def self.object(obj)
16
+ id(obj.pid)
17
+ end
18
+
19
+ end
20
+ end
@@ -1,9 +1,18 @@
1
+ require "virtus"
2
+ require "forwardable"
3
+
1
4
  module Ddr::Index
2
5
  class Query
6
+ include Virtus.model
7
+ extend Forwardable
3
8
 
4
- attr_reader :q, :fields, :filters, :sort, :rows
9
+ attribute :q, String
10
+ attribute :fields, Array[String], default: [ ]
11
+ attribute :filters, Array[Filter], default: [ ]
12
+ attribute :sort, Array[String], default: [ ]
13
+ attribute :rows, Integer
5
14
 
6
- delegate :count, :docs, :pids, :each_pid, :all, to: :result
15
+ def_delegators :result, :count, :docs, :pids, :each_pid, :all
7
16
 
8
17
  def inspect
9
18
  "#<#{self.class.name} q=#{q.inspect}, filters=#{filters.inspect}," \
@@ -15,12 +24,7 @@ module Ddr::Index
15
24
  end
16
25
 
17
26
  def params
18
- { q: q,
19
- fq: filters.map(&:clauses).flatten,
20
- fl: fields.join(","),
21
- sort: sort.join(","),
22
- rows: rows,
23
- }.select { |k, v| v.present? }
27
+ QueryParams.new(self).params
24
28
  end
25
29
 
26
30
  def result
@@ -1,25 +1,28 @@
1
1
  module Ddr::Index
2
+ #
3
+ # QueryBuilder - Provides a DSL for building a Query.
4
+ #
2
5
  class QueryBuilder
6
+ extend Deprecation
3
7
 
8
+ # Builds a Query object
9
+ # @yield [builder] a new QueryBuilder instance.
10
+ # @return [Query]
4
11
  def self.build
12
+ Deprecation.warn(self,
13
+ "`Ddr::Index::QueryBuilder.build` is deprecated and will be removed in ddr-models 3.0." \
14
+ " Use `Ddr::Index::QueryBuilder.new` instead.")
5
15
  builder = new
6
16
  yield builder
7
17
  builder.query
8
18
  end
9
19
 
10
- def initialize
11
- @q = nil
12
- @fields = [ ]
13
- @filters = [ ]
14
- @sort = [ ]
15
- @rows = nil
16
- end
20
+ attr_reader :query
17
21
 
18
- def query
19
- Query.new.tap do |qry|
20
- instance_variables.each do |var|
21
- qry.instance_variable_set(var, instance_variable_get(var))
22
- end
22
+ def initialize(&block)
23
+ @query = Query.new
24
+ if block_given?
25
+ instance_eval &block
23
26
  end
24
27
  end
25
28
 
@@ -28,47 +31,81 @@ module Ddr::Index
28
31
  limit 1
29
32
  end
30
33
 
31
- def filter(*fltrs)
32
- @filters.push *fltrs
34
+ def filter(*filters)
35
+ query.filters.push(*filters)
33
36
  self
34
37
  end
38
+ alias_method :filters, :filter
39
+
40
+ def raw(*args)
41
+ filter Filter.raw(*args)
42
+ end
43
+
44
+ def where(*args)
45
+ filter Filter.where(*args)
46
+ end
47
+
48
+ def absent(*args)
49
+ filter Filter.absent(*args)
50
+ end
51
+
52
+ def present(*args)
53
+ filter Filter.present(*args)
54
+ end
55
+
56
+ def negative(*args)
57
+ filter Filter.negative(*args)
58
+ end
59
+
60
+ def before(*args)
61
+ filter Filter.before(*args)
62
+ end
63
+
64
+ def before_days(*args)
65
+ filter Filter.before_days(*args)
66
+ end
35
67
 
36
- def fields(*flds)
37
- @fields.push *flds
68
+ def field(*fields)
69
+ query.fields.push(*fields)
38
70
  self
39
71
  end
72
+ alias_method :fields, :field
40
73
 
41
74
  def limit(num)
42
- @rows = num
75
+ query.rows = num
43
76
  self
44
77
  end
78
+ alias_method :rows, :limit
45
79
 
46
- def order_by(field, order)
47
- @sort << [field, order].join(" ")
80
+ def order_by(*args)
81
+ unless args.first.is_a? Hash
82
+ Deprecation.warn(QueryBuilder, "`order_by` will require a hash of orderings in ddr-models 3.0.")
83
+ field, order = args
84
+ return order_by(field => order)
85
+ end
86
+ query.sort += args.first.map { |field, order| SortOrder.new(field: field, order: order) }
48
87
  self
49
88
  end
89
+ alias_method :sort, :order_by
50
90
 
51
91
  def asc(field)
52
- order_by field, "asc"
92
+ Deprecation.warn(QueryBuilder,
93
+ "`asc(field)` is deprecated and will be removed from ddr-models 3.0." \
94
+ " Use `order_by(field => \"asc\")` instead.")
95
+ order_by(field => SortOrder::ASC)
53
96
  end
54
97
 
55
98
  def desc(field)
56
- order_by field, "desc"
99
+ Deprecation.warn(QueryBuilder,
100
+ "`desc(field)` is deprecated and will be removed from ddr-models 3.0." \
101
+ " Use `order_by(field => \"desc\")` instead.")
102
+ order_by(field => SortOrder::DESC)
57
103
  end
58
104
 
59
105
  def q(q)
60
- @q = q
106
+ query.q = q
61
107
  self
62
108
  end
63
109
 
64
- protected
65
-
66
- def method_missing(name, *args, &block)
67
- if Filter.respond_to? name
68
- return filter Filter.send(name, *args, &block)
69
- end
70
- super
71
- end
72
-
73
110
  end
74
111
  end