geoblacklight_admin 0.0.1 → 0.1.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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -3
  3. data/Rakefile +30 -12
  4. data/app/assets/javascripts/geoblacklight_admin.js +1 -0
  5. data/app/assets/stylesheets/geoblacklight_admin/_core.scss +5 -0
  6. data/app/assets/stylesheets/geoblacklight_admin/modules/_chosen.scss +425 -0
  7. data/app/controllers/admin/admin_controller.rb +4 -2
  8. data/app/controllers/admin/advanced_search_controller.rb +123 -103
  9. data/app/controllers/admin/api_controller.rb +123 -108
  10. data/app/controllers/admin/bookmarks_controller.rb +4 -4
  11. data/app/controllers/admin/bulk_actions_controller.rb +9 -4
  12. data/app/controllers/admin/concerns/upload_util.rb +2 -0
  13. data/app/controllers/admin/document_accesses_controller.rb +10 -4
  14. data/app/controllers/admin/document_assets_controller.rb +14 -11
  15. data/app/controllers/admin/document_downloads_controller.rb +12 -10
  16. data/app/controllers/admin/documents_controller.rb +16 -8
  17. data/app/controllers/admin/elements_controller.rb +6 -5
  18. data/app/controllers/admin/form_elements_controller.rb +4 -4
  19. data/app/controllers/admin/ids_controller.rb +107 -87
  20. data/app/controllers/admin/import_documents_controller.rb +1 -1
  21. data/app/controllers/admin/imports_controller.rb +7 -3
  22. data/app/controllers/admin/mappings_controller.rb +6 -4
  23. data/app/controllers/admin/notifications_controller.rb +1 -1
  24. data/app/controllers/admin/search_controller.rb +1 -1
  25. data/app/controllers/admin/users_controller.rb +1 -1
  26. data/app/helpers/form_input_helper.rb +4 -4
  27. data/app/helpers/geoblacklight_admin_helper.rb +1 -1
  28. data/app/jobs/export_job.rb +2 -1
  29. data/app/models/admin/bookmark.rb +18 -0
  30. data/app/models/api_search_builder.rb +3 -1
  31. data/app/models/document/bbox_validator.rb +9 -5
  32. data/app/models/document/date_range_validator.rb +13 -10
  33. data/app/models/document/geom_validator.rb +4 -2
  34. data/app/models/document.rb +15 -7
  35. data/app/models/element.rb +9 -7
  36. data/app/models/form_control.rb +2 -0
  37. data/app/models/form_element.rb +2 -0
  38. data/app/models/form_feature.rb +2 -0
  39. data/app/models/form_group.rb +2 -0
  40. data/app/models/form_header.rb +2 -0
  41. data/app/models/geoblacklight_admin/schema.rb +5 -2
  42. data/app/models/geoblacklight_admin.rb +2 -0
  43. data/app/models/import/csv_duplicates_validator.rb +2 -1
  44. data/app/models/import/csv_header_validator.rb +2 -1
  45. data/app/models/import.rb +4 -7
  46. data/app/models/user.rb +1 -1
  47. data/app/services/export_csv_service.rb +5 -1
  48. data/app/views/admin/advanced_search/facets.json.jbuilder +9 -8
  49. data/app/views/admin/advanced_search/index.json.jbuilder +8 -7
  50. data/app/views/admin/api/_field.json.jbuilder +1 -1
  51. data/app/views/admin/api/fetch.json.jbuilder +8 -7
  52. data/app/views/admin/api/index.json.jbuilder +8 -7
  53. data/app/views/admin/bookmarks/index.html.erb +2 -2
  54. data/app/views/admin/bulk_actions/index.html.erb +3 -3
  55. data/app/views/admin/bulk_actions/show.html.erb +1 -1
  56. data/app/views/admin/document_accesses/_form.html.erb +1 -1
  57. data/app/views/admin/document_accesses/destroy_all.html.erb +2 -2
  58. data/app/views/admin/document_accesses/edit.html.erb +1 -1
  59. data/app/views/admin/document_accesses/import.html.erb +2 -2
  60. data/app/views/admin/document_accesses/index.html.erb +9 -9
  61. data/app/views/admin/document_accesses/new.html.erb +1 -1
  62. data/app/views/admin/document_downloads/_form.html.erb +1 -1
  63. data/app/views/admin/document_downloads/destroy_all.html.erb +1 -1
  64. data/app/views/admin/document_downloads/edit.html.erb +2 -3
  65. data/app/views/admin/document_downloads/import.html.erb +1 -1
  66. data/app/views/admin/document_downloads/index.html.erb +9 -9
  67. data/app/views/admin/document_downloads/new.html.erb +1 -1
  68. data/app/views/admin/document_downloads/show.html.erb +2 -2
  69. data/app/views/admin/documents/_document_bookmark.html.erb +1 -1
  70. data/app/views/admin/documents/_form_nav.html.erb +1 -1
  71. data/app/views/admin/documents/_json_btaa_aardvark.jbuilder +1 -3
  72. data/app/views/admin/documents/edit.html.erb +1 -1
  73. data/app/views/admin/documents/features/_multiple_download_links.html.erb +2 -2
  74. data/app/views/admin/documents/index.html.erb +2 -4
  75. data/app/views/admin/documents/versions.html.erb +1 -1
  76. data/app/views/admin/elements/_element.json.jbuilder +4 -1
  77. data/app/views/admin/elements/_form.html.erb +1 -1
  78. data/app/views/admin/elements/edit.html.erb +2 -2
  79. data/app/views/admin/elements/index.html.erb +3 -3
  80. data/app/views/admin/elements/index.json.jbuilder +2 -0
  81. data/app/views/admin/elements/new.html.erb +1 -1
  82. data/app/views/admin/elements/show.html.erb +6 -6
  83. data/app/views/admin/elements/show.json.jbuilder +2 -0
  84. data/app/views/admin/form_elements/_form.html.erb +1 -1
  85. data/app/views/admin/form_elements/_form_element.json.jbuilder +2 -0
  86. data/app/views/admin/form_elements/edit.html.erb +2 -2
  87. data/app/views/admin/form_elements/index.html.erb +1 -1
  88. data/app/views/admin/form_elements/index.json.jbuilder +2 -0
  89. data/app/views/admin/form_elements/new.html.erb +1 -1
  90. data/app/views/admin/form_elements/show.html.erb +2 -2
  91. data/app/views/admin/form_elements/show.json.jbuilder +2 -0
  92. data/app/views/admin/ids/fetch.json.jbuilder +8 -7
  93. data/app/views/admin/ids/index.json.jbuilder +3 -2
  94. data/app/views/admin/import_documents/show.html.haml +1 -1
  95. data/app/views/admin/imports/_import.json.jbuilder +2 -1
  96. data/app/views/admin/imports/_show_failed_tab.html.erb +2 -2
  97. data/app/views/admin/imports/_show_success_tab.html.erb +1 -1
  98. data/app/views/admin/imports/edit.html.erb +3 -3
  99. data/app/views/admin/imports/index.html.erb +3 -3
  100. data/app/views/admin/layouts/application.html.erb +4 -4
  101. data/app/views/admin/mappings/_form.html.erb +1 -1
  102. data/app/views/admin/mappings/_mapping.json.jbuilder +2 -1
  103. data/app/views/admin/mappings/edit.html.erb +2 -2
  104. data/app/views/admin/mappings/new.html.erb +1 -1
  105. data/app/views/admin/mappings/show.html.erb +2 -2
  106. data/app/views/admin/notifications/index.html.erb +3 -3
  107. data/app/views/admin/search/index.html.erb +2 -2
  108. data/app/views/admin/shared/_navbar.html.erb +8 -3
  109. data/app/views/catalog/_show_gbl_admin.html.erb +3 -0
  110. data/config/routes.rb +37 -33
  111. data/db/migrate/20230316183001_add_geoblacklight_admin_gem.rb +408 -0
  112. data/db/seeds.rb +7 -5
  113. data/lib/generators/geoblacklight_admin/config_generator.rb +43 -31
  114. data/lib/generators/geoblacklight_admin/install_generator.rb +2 -3
  115. data/lib/generators/geoblacklight_admin/jobs_generator.rb +3 -2
  116. data/lib/generators/geoblacklight_admin/models_generator.rb +0 -1
  117. data/lib/generators/geoblacklight_admin/templates/_show_sidebar.html.erb +19 -0
  118. data/lib/generators/geoblacklight_admin/templates/_user_util_links.html.erb +1 -1
  119. data/lib/generators/geoblacklight_admin/templates/config/database.yml +9 -5
  120. data/lib/generators/geoblacklight_admin/templates/config/initializers/geoblacklight_admin.rb +1 -2
  121. data/lib/generators/geoblacklight_admin/templates/config/initializers/pagy.rb +150 -68
  122. data/lib/generators/geoblacklight_admin/templates/config/settings.yml +241 -0
  123. data/lib/generators/geoblacklight_admin/templates/package.json +1 -0
  124. data/lib/generators/geoblacklight_admin/views_generator.rb +0 -1
  125. data/lib/geoblacklight_admin/engine.rb +5 -6
  126. data/lib/geoblacklight_admin/version.rb +1 -1
  127. data/lib/geoblacklight_admin.rb +1 -1
  128. data/lib/tasks/geoblacklight_admin.rake +10 -6
  129. metadata +79 -48
  130. data/.editorconfig +0 -18
  131. data/.gitignore +0 -75
  132. data/.standard.yml +0 -4
  133. data/Gemfile +0 -59
  134. data/LICENSE +0 -21
  135. data/app/assets/images/.keep +0 -0
  136. data/app/controllers/admin/concerns/.keep +0 -0
  137. data/app/models/bookmark.rb +0 -17
  138. data/app/models/concerns/.keep +0 -0
  139. data/db/migrate/20230316183001_add_geoblacklight_admin.rb +0 -399
  140. data/geoblacklight_admin.gemspec +0 -67
  141. data/lib/generators/geoblacklight_admin/templates/.env.development.example +0 -28
  142. data/lib/generators/geoblacklight_admin/templates/.solr_wrapper.yml +0 -7
  143. data/lib/generators/geoblacklight_admin/templates/solr/snapshots/.keep +0 -0
  144. data/lib/tasks/.keep +0 -0
  145. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -35
  146. data/template.rb +0 -16
@@ -48,4 +48,4 @@ module Admin
48
48
  @notification = Notification.find(params[:id])
49
49
  end
50
50
  end
51
- end
51
+ end
@@ -7,4 +7,4 @@ module Admin
7
7
  @facet_options = BlacklightApiFacets.new.facets
8
8
  end
9
9
  end
10
- end
10
+ end
@@ -7,4 +7,4 @@ module Admin
7
7
  @users = User.all
8
8
  end
9
9
  end
10
- end
10
+ end
@@ -47,7 +47,7 @@ module FormInputHelper
47
47
  category_list = [existing_category_value] + category_list unless category_list.include?(existing_category_value)
48
48
 
49
49
  # Turn category list into values and human labels, using i18n or rails humanizing.
50
- category_list = category_list.collect { |key|
50
+ category_list = category_list.collect do |key|
51
51
  value = if key.nil?
52
52
  key
53
53
  elsif model_class.respond_to?(:model_name) && key.present?
@@ -59,15 +59,15 @@ module FormInputHelper
59
59
  end
60
60
 
61
61
  [value, key]
62
- }.to_h
62
+ end.to_h
63
63
 
64
64
  tag.div(class: "form-row category-and-value") do
65
65
  tag.div(class: "col-left category") {
66
66
  builder.input category_key, collection: category_list, label: false, include_blank: false
67
67
  } +
68
- tag.div(class: "col-sm value") {
68
+ tag.div(class: "col-sm value") do
69
69
  builder.input value_key, label: false, input_html: {data: input_data_attributes}
70
- }
70
+ end
71
71
  end
72
72
  end
73
73
  end
@@ -5,7 +5,7 @@ module GeoblacklightAdminHelper
5
5
  # @TODO:
6
6
  # Cannot generate app if uncommented...
7
7
  # Uncomment after app is generated to fix view errors
8
- # include ::Pagy::Frontend
8
+ include ::Pagy::Frontend if defined?(Pagy)
9
9
 
10
10
  # jbuilder helper
11
11
  def no_json_blanks(value)
@@ -41,7 +41,8 @@ class ExportJob < ApplicationJob
41
41
  notification.deliver(current_user)
42
42
 
43
43
  # Attach CSV file (can only attach after persisted)
44
- notification.record.file.attach(io: @tempfile, filename: "geomg-export-#{Time.zone.today}.csv", content_type: "text/csv")
44
+ notification.record.file.attach(io: @tempfile, filename: "geomg-export-#{Time.zone.today}.csv",
45
+ content_type: "text/csv")
45
46
 
46
47
  # Update UI
47
48
  ActionCable.server.broadcast("export_channel", {
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Admin::Bookmark
4
+ module Admin
5
+ class Bookmark < ApplicationRecord
6
+ belongs_to :user, polymorphic: true
7
+ belongs_to :document, polymorphic: true
8
+ validates :user_id, presence: true
9
+
10
+ def document_id
11
+ document_id
12
+ end
13
+
14
+ def document_type
15
+ Kithe::Model
16
+ end
17
+ end
18
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ApiSearchBuilder < Blacklight::SearchBuilder
2
4
  include Blacklight::Solr::SearchBuilderBehavior
3
5
  include BlacklightAdvancedSearch::AdvancedSearchBuilder
4
6
  # include B1gDateRangeQueryConcern::RangeLimitBuilder
5
7
 
6
- self.default_processor_chain += [:add_advanced_parse_q_to_solr, :add_advanced_search_to_solr]
8
+ self.default_processor_chain += %i[add_advanced_parse_q_to_solr add_advanced_search_to_solr]
7
9
 
8
10
  # Remove GBL Spatial, otherwise it will hide all suppressed docs
9
11
  # from API search results
@@ -14,7 +14,10 @@ class Document
14
14
  valid_geom = true
15
15
 
16
16
  # Sane for W,S,E,N?
17
- proper_bounding_box(record, valid_geom) unless record.send(GeoblacklightAdmin::Schema.instance.solr_fields[:bounding_box]).nil?
17
+ unless record.send(GeoblacklightAdmin::Schema.instance.solr_fields[:bounding_box]).nil?
18
+ proper_bounding_box(record,
19
+ valid_geom)
20
+ end
18
21
 
19
22
  valid_geom
20
23
  end
@@ -57,10 +60,11 @@ class Document
57
60
  # Reject ENVELOPE(-118.00.0000,-88.00.0000,51.00.0000,42.00.0000
58
61
  # - Double period float-ish things?
59
62
  geom.each do |val|
60
- if val.count(".") >= 2
61
- valid_geom = false
62
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:bounding_box], "invalid ENVELOPE(W,E,N,S) syntax - found multiple periods in a coordinate value.")
63
- end
63
+ next unless val.count(".") >= 2
64
+
65
+ valid_geom = false
66
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:bounding_box],
67
+ "invalid ENVELOPE(W,E,N,S) syntax - found multiple periods in a coordinate value.")
64
68
  end
65
69
  end
66
70
 
@@ -18,7 +18,8 @@ class Document
18
18
 
19
19
  # Must split into two via '-'
20
20
  if date_range.split("-").size != 2
21
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range], "invalid date range present - missing YYYY-YYYY value")
21
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range],
22
+ "invalid date range present - missing YYYY-YYYY value")
22
23
  valid_date_ranges = false
23
24
  return valid_date_ranges
24
25
  end
@@ -26,28 +27,30 @@ class Document
26
27
  start_date, end_date = date_range.split("-")
27
28
 
28
29
  unless valid_yyyy(start_date)
29
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range], "invalid start date - bad YYYY-YYYY value, only integers or the wildcard '*' allowed")
30
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range],
31
+ "invalid start date - bad YYYY-YYYY value, only integers or the wildcard '*' allowed")
30
32
  valid_date_ranges = false
31
33
  end
32
34
 
33
35
  unless valid_yyyy(end_date)
34
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range], "invalid end date - bad YYYY-YYYY value, only integers or the wildcard '*' allowed")
36
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range],
37
+ "invalid end date - bad YYYY-YYYY value, only integers or the wildcard '*' allowed")
35
38
  valid_date_ranges = false
36
39
  end
37
40
 
38
41
  # Allow only 1 wildcard
39
42
  if start_date == "*" && end_date == "*"
40
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range], "invalid only one wildcard can be used")
43
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range],
44
+ "invalid only one wildcard can be used")
41
45
  valid_date_ranges = false
42
46
  end
43
47
 
44
48
  # Avoid 1996-1946
45
- if start_date[/\d+/] && end_date[/\d+/]
46
- unless start_date.to_i <= end_date.to_i
47
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range], "invalid start date must be less than the end date")
48
- valid_date_ranges = false
49
- end
50
- end
49
+ next unless start_date[/\d+/] && end_date[/\d+/] && start_date.to_i > end_date.to_i
50
+
51
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:date_range],
52
+ "invalid start date must be less than the end date")
53
+ valid_date_ranges = false
51
54
  end
52
55
  valid_date_ranges
53
56
  end
@@ -37,7 +37,8 @@ class Document
37
37
  end
38
38
 
39
39
  unless valid_geom
40
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:geometry], "Invalid envelope: #{error_message}")
40
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:geometry],
41
+ "Invalid envelope: #{error_message}")
41
42
  end
42
43
 
43
44
  valid_geom
@@ -60,7 +61,8 @@ class Document
60
61
  # Guard against a whole world polygons
61
62
  if geom == "POLYGON((-180 90, 180 90, 180 -90, -180 -90, -180 90))"
62
63
  valid_geom = false
63
- record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:geometry], "Invalid polygon: all points are coplanar input, Solr will not index")
64
+ record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[:geometry],
65
+ "Invalid polygon: all points are coplanar input, Solr will not index")
64
66
  end
65
67
 
66
68
  valid_geom
@@ -11,7 +11,8 @@ class Document < Kithe::Work
11
11
  belongs_to :import, optional: true
12
12
 
13
13
  # Statesman
14
- has_many :document_transitions, foreign_key: "kithe_model_id", autosave: false, dependent: :destroy, inverse_of: :document
14
+ has_many :document_transitions, foreign_key: "kithe_model_id", autosave: false, dependent: :destroy,
15
+ inverse_of: :document
15
16
 
16
17
  # DocumentAccesses
17
18
  has_many :document_accesses, primary_key: "friendlier_id", foreign_key: "friendlier_id", autosave: false, dependent: :destroy,
@@ -69,7 +70,9 @@ class Document < Kithe::Work
69
70
  # Index Transformations - *_json functions
70
71
  def references_json
71
72
  references = ActiveSupport::HashWithIndifferentAccess.new
72
- send(GeoblacklightAdmin::Schema.instance.solr_fields[:reference]).each { |ref| references[Document::Reference::REFERENCE_VALUES[ref.category.to_sym][:uri]] = ref.value }
73
+ send(GeoblacklightAdmin::Schema.instance.solr_fields[:reference]).each do |ref|
74
+ references[Document::Reference::REFERENCE_VALUES[ref.category.to_sym][:uri]] = ref.value
75
+ end
73
76
  references = apply_downloads(references)
74
77
  references.to_json
75
78
  end
@@ -79,7 +82,10 @@ class Document < Kithe::Work
79
82
  # Make sure downloads exist!
80
83
  if document_downloads.present?
81
84
  multiple_downloads = multiple_downloads_array
82
- multiple_downloads << {label: download_text(send(GeoblacklightAdmin::Schema.instance.solr_fields[:format])), url: dct_downloads} if dct_downloads.present?
85
+ if dct_downloads.present?
86
+ multiple_downloads << {label: download_text(send(GeoblacklightAdmin::Schema.instance.solr_fields[:format])),
87
+ url: dct_downloads}
88
+ end
83
89
  references[:"http://schema.org/downloadUrl"] = multiple_downloads
84
90
  end
85
91
  references
@@ -178,7 +184,9 @@ class Document < Kithe::Work
178
184
  end
179
185
 
180
186
  def dct_references_s_to_csv(key, destination)
181
- send(destination).detect { |ref| ref.category == GeoblacklightAdmin::Schema.instance.dct_references_mappings[key] }.value
187
+ send(destination).detect do |ref|
188
+ ref.category == GeoblacklightAdmin::Schema.instance.dct_references_mappings[key]
189
+ end.value
182
190
  rescue NoMethodError
183
191
  nil
184
192
  end
@@ -219,9 +227,9 @@ class Document < Kithe::Work
219
227
  end
220
228
 
221
229
  def set_geometry
222
- if locn_geometry.blank? && self&.dcat_bbox&.present?
223
- self.locn_geometry = derive_polygon
224
- end
230
+ return unless locn_geometry.blank? && self&.dcat_bbox&.present?
231
+
232
+ self.locn_geometry = derive_polygon
225
233
  end
226
234
 
227
235
  # Convert GEOM for Solr Indexing
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Element < ApplicationRecord
2
4
  serialize :html_attributes
3
5
 
@@ -21,13 +23,13 @@ class Element < ApplicationRecord
21
23
  # Validations
22
24
  validates :label, :solr_field, :field_type, presence: true
23
25
 
24
- FIELD_TYPES = [
25
- "string",
26
- "text",
27
- "integer",
28
- "boolean",
29
- "datetime"
30
- ]
26
+ FIELD_TYPES = %w[
27
+ string
28
+ text
29
+ integer
30
+ boolean
31
+ datetime
32
+ ].freeze
31
33
 
32
34
  # Find by solr_field shortcut
33
35
  def self.at(field)
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FormControl < FormElement
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FormElement < ApplicationRecord
2
4
  belongs_to :element, optional: true
3
5
 
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FormFeature < FormElement
2
4
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FormGroup < FormElement
2
4
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FormHeader < FormElement
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "singleton"
2
4
 
3
5
  module GeoblacklightAdmin
@@ -11,12 +13,12 @@ module GeoblacklightAdmin
11
13
  end
12
14
 
13
15
  def solr_fields
14
- elements.map { |elm|
16
+ elements.map do |elm|
15
17
  [
16
18
  elm.label.parameterize(separator: "_").to_sym,
17
19
  elm.solr_field
18
20
  ]
19
- }.to_h
21
+ end.to_h
20
22
  end
21
23
 
22
24
  def importable_fields
@@ -40,6 +42,7 @@ module GeoblacklightAdmin
40
42
  Element.exportable.order(:position).each do |elm|
41
43
  # Skip References
42
44
  next if elm.solr_field == "dct_references_s"
45
+
43
46
  @fields[elm.label.to_sym] = {
44
47
  destination: elm.solr_field,
45
48
  delimited: elm.repeatable,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightAdmin
2
4
  include GeoblacklightAdmin::IsoLanguageCodes
3
5
  end
@@ -15,7 +15,8 @@ class Import
15
15
  duplicate_id = validate_csv_file(record.csv_file)
16
16
  unless duplicate_id.nil?
17
17
  valid_csv_file = false
18
- record.errors.add(:csv_file, "Duplicate ID value found: #{duplicate_id}. Please clean up the CSV file and reimport.")
18
+ record.errors.add(:csv_file,
19
+ "Duplicate ID value found: #{duplicate_id}. Please clean up the CSV file and reimport.")
19
20
  end
20
21
 
21
22
  valid_csv_file
@@ -10,7 +10,8 @@ class Import
10
10
  valid_csv_header = true
11
11
  unless valid_csv_headers?(record.csv_file)
12
12
  valid_csv_header = false
13
- record.errors.add(:csv_file, "Missing a required CSV header. Title, Resource Class, Access Rights, and ID are required.")
13
+ record.errors.add(:csv_file,
14
+ "Missing a required CSV header. Title, Resource Class, Access Rights, and ID are required.")
14
15
  end
15
16
 
16
17
  valid_csv_header
data/app/models/import.rb CHANGED
@@ -94,9 +94,7 @@ class Import < ApplicationRecord
94
94
  # logger.debug("Mapping: #{mapping.source_header} to #{mapping.destination_field}")
95
95
 
96
96
  # Handle discards
97
- if mapping.destination_field == "Discard"
98
- next
99
- end
97
+ next if mapping.destination_field == "Discard"
100
98
 
101
99
  # Handle repeatable dct_references_s entries
102
100
  if mapping.destination_field == "dct_references_s"
@@ -118,7 +116,8 @@ class Import < ApplicationRecord
118
116
 
119
117
  # Split delimited field values, if field has a value present
120
118
  if mapping.delimited?
121
- transformed_data[mapping.destination_field] = transformed_data[mapping.destination_field].present? ? transformed_data[mapping.destination_field].split(klass_delimiter) : ""
119
+ transformed_data[mapping.destination_field] =
120
+ transformed_data[mapping.destination_field].present? ? transformed_data[mapping.destination_field].split(klass_delimiter) : ""
122
121
  end
123
122
  end
124
123
 
@@ -175,9 +174,7 @@ class Import < ApplicationRecord
175
174
  required_mapping = {}
176
175
  required_mapping[key] = value
177
176
 
178
- unless data_hash.has_key?(key)
179
- data_hash.merge!(required_mapping.stringify_keys)
180
- end
177
+ data_hash.merge!(required_mapping.stringify_keys) unless data_hash.key?(key)
181
178
  end
182
179
  end
183
180
 
data/app/models/user.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # User
4
4
  class User < ApplicationRecord
5
5
  include Blacklight::User
6
-
6
+
7
7
  # Include default devise modules. Others available are:
8
8
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
9
9
  devise :invitable, :database_authenticatable,
@@ -20,7 +20,11 @@ class ExportCsvService
20
20
  Rails.logger.debug { "\n\nExportCsvService: #{document_ids.inspect}\n\n" }
21
21
 
22
22
  CSV.generate(headers: true) do |_csv|
23
- Rails.logger.debug { "\n\n CSV Fields: #{GeoblacklightAdmin::Schema.instance.exportable_fields.map { |k, _v| k.to_s }} \n\n" }
23
+ Rails.logger.debug do
24
+ "\n\n CSV Fields: #{GeoblacklightAdmin::Schema.instance.exportable_fields.map do |k, _v|
25
+ k.to_s
26
+ end} \n\n"
27
+ end
24
28
 
25
29
  csv_file << GeoblacklightAdmin::Schema.instance.exportable_fields.map { |k, _v| k.to_s }
26
30
  document_ids.each_slice(slice_count) do |slice|
@@ -9,10 +9,10 @@ json.data do
9
9
  doc_presenter = index_presenter(document)
10
10
 
11
11
  doc_presenter.fields_to_render.each do |field_name, field|
12
- json.partial! 'field', field: field,
13
- field_name: field_name,
14
- document_url: document_url,
15
- doc_presenter: doc_presenter
12
+ json.partial! "field", field: field,
13
+ field_name: field_name,
14
+ document_url: document_url,
15
+ doc_presenter: doc_presenter
16
16
  end
17
17
  end
18
18
 
@@ -24,7 +24,7 @@ end
24
24
 
25
25
  json.included do
26
26
  json.array! @presenter.search_facets do |facet|
27
- json.type 'facet'
27
+ json.type "facet"
28
28
  json.id facet.name
29
29
  json.attributes do
30
30
  facet_config = facet_configuration_for_field(facet.name)
@@ -41,7 +41,8 @@ json.included do
41
41
  Deprecation.silence(Blacklight::FacetsHelperBehavior) do
42
42
  if facet_in_params?(facet.name, item.value)
43
43
  Deprecation.silence(Blacklight::SearchState) do
44
- json.remove admin_advanced_search_action_path(search_state.remove_facet_params(facet.name, item.value))
44
+ json.remove admin_advanced_search_action_path(search_state.remove_facet_params(facet.name,
45
+ item.value))
45
46
  end
46
47
  else
47
48
  json.self path_for_facet(facet.name, item.value, only_path: false)
@@ -57,7 +58,7 @@ json.included do
57
58
  end
58
59
 
59
60
  json.array! search_fields do |(label, key)|
60
- json.type 'search_field'
61
+ json.type "search_field"
61
62
  json.id key
62
63
  json.attributes do
63
64
  json.label label
@@ -68,7 +69,7 @@ json.included do
68
69
  end
69
70
 
70
71
  json.array! active_sort_fields do |key, field|
71
- json.type 'sort'
72
+ json.type "sort"
72
73
  json.id key
73
74
  json.attributes do
74
75
  json.label field.label
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  json.links do
3
4
  json.self url_for(search_state.to_h.merge(only_path: false))
4
5
  json.prev url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s)) if @response.prev_page
@@ -19,10 +20,10 @@ json.data do
19
20
  doc_presenter = document_presenter(document)
20
21
 
21
22
  doc_presenter.fields_to_render.each do |field_name, field|
22
- json.partial! 'field', field: field,
23
- field_name: field_name,
24
- document_url: document_url,
25
- doc_presenter: doc_presenter
23
+ json.partial! "field", field: field,
24
+ field_name: field_name,
25
+ document_url: document_url,
26
+ doc_presenter: doc_presenter
26
27
  end
27
28
  end
28
29
 
@@ -34,7 +35,7 @@ end
34
35
 
35
36
  json.included do
36
37
  json.array! @presenter.search_facets do |facet|
37
- json.type 'facet'
38
+ json.type "facet"
38
39
  json.id facet.name
39
40
  json.attributes do
40
41
  facet_config = facet_configuration_for_field(facet.name)
@@ -67,7 +68,7 @@ json.included do
67
68
  end
68
69
 
69
70
  json.array! search_fields do |(label, key)|
70
- json.type 'search_field'
71
+ json.type "search_field"
71
72
  json.id key
72
73
  json.attributes do
73
74
  json.label label
@@ -78,7 +79,7 @@ json.included do
78
79
  end
79
80
 
80
81
  json.array! active_sort_fields do |key, field|
81
- json.type 'sort'
82
+ json.type "sort"
82
83
  json.id key
83
84
  json.attributes do
84
85
  json.label field.label
@@ -2,7 +2,7 @@
2
2
 
3
3
  json.set!(field_name) do
4
4
  json.id "#{document_url}##{field_name}"
5
- json.type 'document_value'
5
+ json.type "document_value"
6
6
  json.attributes do
7
7
  json.value doc_presenter.field_value(field)
8
8
  json.label field.label
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  json.links do
3
4
  json.self url_for(search_state.to_h.merge(only_path: false))
4
5
  json.prev url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s)) if @response.prev_page
@@ -19,10 +20,10 @@ json.data do
19
20
  doc_presenter = index_presenter(document)
20
21
 
21
22
  doc_presenter.fields_to_render.each do |field_name, field|
22
- json.partial! 'field', field: field,
23
- field_name: field_name,
24
- document_url: document_url,
25
- doc_presenter: doc_presenter
23
+ json.partial! "field", field: field,
24
+ field_name: field_name,
25
+ document_url: document_url,
26
+ doc_presenter: doc_presenter
26
27
  end
27
28
  end
28
29
 
@@ -34,7 +35,7 @@ end
34
35
 
35
36
  json.included do
36
37
  json.array! @presenter.search_facets do |facet|
37
- json.type 'facet'
38
+ json.type "facet"
38
39
  json.id facet.name
39
40
  json.attributes do
40
41
  facet_config = facet_configuration_for_field(facet.name)
@@ -63,7 +64,7 @@ json.included do
63
64
  end
64
65
 
65
66
  json.array! search_fields do |(label, key)|
66
- json.type 'search_field'
67
+ json.type "search_field"
67
68
  json.id key
68
69
  json.attributes do
69
70
  json.label label
@@ -74,7 +75,7 @@ json.included do
74
75
  end
75
76
 
76
77
  json.array! active_sort_fields do |key, field|
77
- json.type 'sort'
78
+ json.type "sort"
78
79
  json.id key
79
80
  json.attributes do
80
81
  json.label field.label
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  json.links do
3
4
  json.self url_for(search_state.to_h.merge(only_path: false))
4
5
  json.prev url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s)) if @response.prev_page
@@ -19,10 +20,10 @@ json.data do
19
20
  doc_presenter = document_presenter(document)
20
21
 
21
22
  doc_presenter.fields_to_render.each do |field_name, field|
22
- json.partial! 'field', field: field,
23
- field_name: field_name,
24
- document_url: document_url,
25
- doc_presenter: doc_presenter
23
+ json.partial! "field", field: field,
24
+ field_name: field_name,
25
+ document_url: document_url,
26
+ doc_presenter: doc_presenter
26
27
  end
27
28
  end
28
29
 
@@ -34,7 +35,7 @@ end
34
35
 
35
36
  json.included do
36
37
  json.array! @presenter.search_facets do |facet|
37
- json.type 'facet'
38
+ json.type "facet"
38
39
  json.id facet.name
39
40
  json.attributes do
40
41
  facet_config = facet_configuration_for_field(facet.name)
@@ -67,7 +68,7 @@ json.included do
67
68
  end
68
69
 
69
70
  json.array! search_fields do |(label, key)|
70
- json.type 'search_field'
71
+ json.type "search_field"
71
72
  json.id key
72
73
  json.attributes do
73
74
  json.label label
@@ -78,7 +79,7 @@ json.included do
78
79
  end
79
80
 
80
81
  json.array! active_sort_fields do |key, field|
81
- json.type 'sort'
82
+ json.type "sort"
82
83
  json.id key
83
84
  json.attributes do
84
85
  json.label field.label
@@ -1,6 +1,6 @@
1
1
  <p id="notice"><%= notice %></p>
2
2
 
3
- <h1>Bookmarks (<%= current_user.bookmarks.size %>)</h1>
3
+ <h1>Bookmarks (<%= current_user.bookmarks.where(document_type: 'Kithe::Model').size %>)</h1>
4
4
 
5
5
  <p>
6
6
  <%= render "admin/documents/result_toggle" %>
@@ -16,6 +16,6 @@
16
16
 
17
17
  <ol id='results' class='list-unstyled' data-controller='results'>
18
18
  <% @bookmarks.each_with_index do |bookmark, index| %>
19
- <%= render 'admin/documents/document', document: bookmark.document, index: index %>
19
+ <%= render 'admin/documents/document', document: Kithe::Model.find(bookmark.document_id), index: index %>
20
20
  <% end %>
21
21
  </ol>