ddr-models 2.4.0.rc2 → 2.4.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
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