skala 0.3.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -4
  3. data/Gemfile +10 -1
  4. data/LICENSE.txt +17 -18
  5. data/README.md +1 -34
  6. data/README.primo_adapter.md +42 -0
  7. data/bin/console +11 -0
  8. data/config/initializers/skala.rb +5 -0
  9. data/config/skala.yml +65 -0
  10. data/db/migrate/20141006133522_create_skala_users.rb +13 -0
  11. data/db/migrate/20141006133649_create_skala_user_watch_lists.rb +14 -0
  12. data/db/migrate/20141006135644_create_skala_user_watch_list_entries.rb +13 -0
  13. data/db/migrate/20141006140435_create_skala_user_notes.rb +16 -0
  14. data/lib/skala.rb +36 -3
  15. data/lib/skala/adapter.rb +122 -4
  16. data/lib/skala/adapter/authenticate_user.rb +4 -0
  17. data/lib/skala/adapter/create_user_hold_request.rb +7 -0
  18. data/lib/skala/adapter/create_user_hold_request/result.rb +10 -0
  19. data/lib/skala/adapter/delete_user_hold_request.rb +7 -0
  20. data/lib/skala/adapter/get_record_holdable_items.rb +5 -0
  21. data/lib/skala/adapter/get_record_holdable_items/result.rb +14 -0
  22. data/lib/skala/adapter/get_record_items.rb +5 -0
  23. data/lib/skala/adapter/get_record_items/result.rb +14 -0
  24. data/lib/skala/adapter/get_records.rb +5 -0
  25. data/lib/skala/adapter/get_records/result.rb +28 -0
  26. data/lib/skala/adapter/get_user.rb +4 -0
  27. data/lib/skala/adapter/get_user_former_loans.rb +5 -0
  28. data/lib/skala/adapter/get_user_former_loans/result.rb +14 -0
  29. data/lib/skala/adapter/get_user_hold_requests.rb +5 -0
  30. data/lib/skala/adapter/get_user_hold_requests/result.rb +14 -0
  31. data/lib/skala/adapter/get_user_inter_library_loans.rb +5 -0
  32. data/lib/skala/adapter/get_user_inter_library_loans/result.rb +14 -0
  33. data/lib/skala/adapter/get_user_loans.rb +5 -0
  34. data/lib/skala/adapter/get_user_loans/result.rb +14 -0
  35. data/lib/skala/adapter/get_user_transactions.rb +5 -0
  36. data/lib/skala/adapter/get_user_transactions/result.rb +14 -0
  37. data/lib/skala/adapter/operation.rb +2 -0
  38. data/lib/skala/adapter/operation/request.rb +6 -0
  39. data/lib/skala/adapter/operation/result.rb +7 -0
  40. data/lib/skala/adapter/renew_user_loan.rb +7 -0
  41. data/lib/skala/adapter/renew_user_loan/result.rb +7 -0
  42. data/lib/skala/adapter/renew_user_loans.rb +5 -0
  43. data/lib/skala/adapter/renew_user_loans/result.rb +9 -0
  44. data/lib/skala/adapter/search.rb +6 -0
  45. data/lib/skala/adapter/search/request.rb +91 -0
  46. data/lib/skala/adapter/search/request/date_histogram_facet.rb +5 -0
  47. data/lib/skala/adapter/search/request/facet.rb +29 -0
  48. data/lib/skala/adapter/search/request/histogram_facet.rb +8 -0
  49. data/lib/skala/adapter/search/request/ids_query.rb +6 -0
  50. data/lib/skala/adapter/search/request/match_query.rb +7 -0
  51. data/lib/skala/adapter/search/request/ordered_terms_query.rb +7 -0
  52. data/lib/skala/adapter/search/request/query.rb +18 -0
  53. data/lib/skala/adapter/search/request/query_string_query.rb +9 -0
  54. data/lib/skala/adapter/search/request/range_facet.rb +10 -0
  55. data/lib/skala/adapter/search/request/range_facet/range.rb +9 -0
  56. data/lib/skala/adapter/search/request/range_query.rb +8 -0
  57. data/lib/skala/adapter/search/request/simple_query_string_query.rb +8 -0
  58. data/lib/skala/adapter/search/request/sort_request.rb +15 -0
  59. data/lib/skala/adapter/search/request/terms_facet.rb +8 -0
  60. data/lib/skala/adapter/search/request/unscored_terms_query.rb +7 -0
  61. data/lib/skala/adapter/search/result.rb +22 -0
  62. data/lib/skala/adapter/search/result/facet.rb +15 -0
  63. data/lib/skala/adapter/search/result/histogram_facet.rb +12 -0
  64. data/lib/skala/adapter/search/result/histogram_facet/entry.rb +8 -0
  65. data/lib/skala/adapter/search/result/hit.rb +13 -0
  66. data/lib/skala/adapter/search/result/terms_facet.rb +14 -0
  67. data/lib/skala/adapter/search/result/terms_facet/term.rb +8 -0
  68. data/lib/skala/adapter/update_user.rb +4 -0
  69. data/lib/skala/aleph_adapter.rb +47 -0
  70. data/lib/skala/aleph_adapter/authenticate_user.rb +27 -0
  71. data/lib/skala/aleph_adapter/create_user_hold_request.rb +63 -0
  72. data/lib/skala/aleph_adapter/delete_user_hold_request.rb +29 -0
  73. data/lib/skala/aleph_adapter/get_record.rb +22 -0
  74. data/lib/skala/aleph_adapter/get_record_holdable_items.rb +29 -0
  75. data/lib/skala/aleph_adapter/get_record_items.rb +111 -0
  76. data/lib/skala/aleph_adapter/get_user.rb +49 -0
  77. data/lib/skala/aleph_adapter/get_user_former_loans.rb +21 -0
  78. data/lib/skala/aleph_adapter/get_user_hold_requests.rb +102 -0
  79. data/lib/skala/aleph_adapter/get_user_inter_library_loans.rb +66 -0
  80. data/lib/skala/aleph_adapter/get_user_loans.rb +93 -0
  81. data/lib/skala/aleph_adapter/get_user_transactions.rb +96 -0
  82. data/lib/skala/aleph_adapter/renew_user_loan.rb +27 -0
  83. data/lib/skala/aleph_adapter/renew_user_loans.rb +39 -0
  84. data/lib/skala/aleph_adapter/resolve_user.rb +19 -0
  85. data/lib/skala/aleph_adapter/update_user.rb +105 -0
  86. data/lib/skala/common_attributes.rb +19 -0
  87. data/lib/skala/elasticsearch_adapter.rb +33 -0
  88. data/lib/skala/elasticsearch_adapter/search.rb +20 -0
  89. data/lib/skala/elasticsearch_adapter/search/request_transformation.rb +20 -0
  90. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_aggregations.rb +50 -0
  91. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_from.rb +10 -0
  92. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_query.rb +107 -0
  93. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_size.rb +12 -0
  94. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_sort.rb +18 -0
  95. data/lib/skala/elasticsearch_adapter/search/request_transformation/add_version.rb +10 -0
  96. data/lib/skala/elasticsearch_adapter/search/result_transformation.rb +21 -0
  97. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_facets.rb +44 -0
  98. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_hits.rb +18 -0
  99. data/lib/skala/elasticsearch_adapter/search/result_transformation/set_total_hits.rb +10 -0
  100. data/lib/skala/engine.rb +14 -0
  101. data/lib/skala/get_user_result.rb +14 -0
  102. data/lib/skala/hold_request.rb +24 -0
  103. data/lib/skala/item.rb +15 -0
  104. data/lib/skala/loan.rb +18 -0
  105. data/lib/skala/primo_adapter.rb +34 -0
  106. data/lib/skala/primo_adapter/get_records.rb +24 -0
  107. data/lib/skala/primo_adapter/search.rb +13 -0
  108. data/lib/skala/primo_adapter/search/request_transformation.rb +40 -0
  109. data/lib/skala/primo_adapter/search/request_transformation/add_queries.rb +97 -0
  110. data/lib/skala/primo_adapter/search/request_transformation/add_sort_by_list.rb +37 -0
  111. data/lib/skala/primo_adapter/search/request_transformation/embed_inner_search_request.rb +13 -0
  112. data/lib/skala/primo_adapter/search/request_transformation/serialize_target_as_xml.rb +11 -0
  113. data/lib/skala/primo_adapter/search/request_transformation/set_bulk_size.rb +12 -0
  114. data/lib/skala/primo_adapter/search/request_transformation/set_institution.rb +12 -0
  115. data/lib/skala/primo_adapter/search/request_transformation/set_languages.rb +15 -0
  116. data/lib/skala/primo_adapter/search/request_transformation/set_locations.rb +19 -0
  117. data/lib/skala/primo_adapter/search/request_transformation/set_on_campus.rb +13 -0
  118. data/lib/skala/primo_adapter/search/request_transformation/set_start_index.rb +12 -0
  119. data/lib/skala/primo_adapter/search/request_transformation/setup_inner_search_request.rb +33 -0
  120. data/lib/skala/primo_adapter/search/request_transformation/setup_target.rb +28 -0
  121. data/lib/skala/primo_adapter/search/request_transformation/toggle_bool_operator.rb +13 -0
  122. data/lib/skala/primo_adapter/search/result_transformation.rb +30 -0
  123. data/lib/skala/primo_adapter/search/result_transformation/add_hits.rb +13 -0
  124. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation.rb +46 -0
  125. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_creator.rb +10 -0
  126. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_description.rb +10 -0
  127. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_edition.rb +10 -0
  128. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_fulltext_available.rb +12 -0
  129. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_id.rb +11 -0
  130. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_identifier.rb +46 -0
  131. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_is_part_of.rb +14 -0
  132. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_language.rb +10 -0
  133. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_metadata.rb +13 -0
  134. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_openurl.rb +23 -0
  135. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_publisher.rb +10 -0
  136. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_source.rb +10 -0
  137. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_subject.rb +10 -0
  138. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_title.rb +10 -0
  139. data/lib/skala/primo_adapter/search/result_transformation/doc_transformation/set_year_of_publication.rb +10 -0
  140. data/lib/skala/primo_adapter/search/result_transformation/fix_primo_facets_bugs.rb +108 -0
  141. data/lib/skala/primo_adapter/search/result_transformation/parse_search_brief_response.rb +20 -0
  142. data/lib/skala/primo_adapter/search/result_transformation/set_facets.rb +71 -0
  143. data/lib/skala/primo_adapter/search/result_transformation/set_total_hits.rb +13 -0
  144. data/lib/skala/primo_adapter/search/result_transformation/sort_terms_facets_terms.rb +14 -0
  145. data/lib/skala/primo_adapter/soap_api.rb +15 -0
  146. data/lib/skala/primo_adapter/soap_api/search_brief.rb +25 -0
  147. data/lib/skala/record.rb +85 -0
  148. data/lib/skala/record/identifier.rb +9 -0
  149. data/lib/skala/record/is_part_of.rb +11 -0
  150. data/lib/skala/record/link.rb +9 -0
  151. data/lib/skala/record/relation.rb +9 -0
  152. data/lib/skala/transaction.rb +13 -0
  153. data/lib/skala/version.rb +1 -1
  154. data/skala.gemspec +21 -12
  155. data/spec/skala/search_request/ordered_terms_query_spec.rb +6 -0
  156. data/spec/spec_helper.rb +7 -28
  157. metadata +237 -85
  158. data/lib/skala/i18n.rb +0 -46
  159. data/lib/skala/transformation.rb +0 -54
  160. data/lib/skala/transformation/step.rb +0 -24
  161. data/spec/assets/locales/de.yml +0 -14
  162. data/spec/assets/locales/en.yml +0 -9
  163. data/spec/assets/transformation/some_class.rb +0 -2
  164. data/spec/skala/adapter/operation_spec.rb +0 -19
  165. data/spec/skala/adapter_spec.rb +0 -2
  166. data/spec/skala/i18n_spec.rb +0 -95
  167. data/spec/skala/transformation/step_spec.rb +0 -36
  168. data/spec/skala/transformation_spec.rb +0 -89
  169. data/spec/skala_spec.rb +0 -2
@@ -0,0 +1,4 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::AuthenticateUser < Skala::Adapter::Operation
4
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::CreateUserHoldRequest < Skala::Adapter::Operation
4
+ class AlreadyRequestedError < Skala::Adapter::RequestFailedError; end
5
+
6
+ require_relative "./create_user_hold_request/result"
7
+ end
@@ -0,0 +1,10 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/hold_request"
3
+ require_relative "../create_user_hold_request"
4
+
5
+ class Skala::Adapter::CreateUserHoldRequest::Result < Skala::Adapter::Operation::Result
6
+ include Virtus.model
7
+
8
+ attribute :hold_request, Skala::HoldRequest
9
+ attribute :source
10
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::DeleteUserHoldRequest < Skala::Adapter::Operation
4
+ class HoldRequestMissingError < Skala::Adapter::RequestFailedError; end
5
+
6
+ class Result < Skala::Adapter::Operation::Result; end
7
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetRecordHoldableItems < Skala::Adapter::Operation
4
+ require_relative "./get_record_holdable_items/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/item"
3
+ require_relative "../get_record_holdable_items"
4
+
5
+ class Skala::Adapter::GetRecordHoldableItems::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :holdable_items, Array[Skala::Item]
10
+
11
+ def each
12
+ block_given? ? holdable_items.each { |_element| yield _element } : holdable_items.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetRecordItems < Skala::Adapter::Operation
4
+ require_relative "./get_record_items/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/item"
3
+ require_relative "../get_record_items"
4
+
5
+ class Skala::Adapter::GetRecordItems::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :items, Array[Skala::Item]
10
+
11
+ def each
12
+ block_given? ? items.each { |_element| yield _element } : items.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetRecords < Skala::Adapter::Operation
4
+ require_relative "./get_records/result"
5
+ end
@@ -0,0 +1,28 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/record"
3
+ require_relative "../get_records"
4
+
5
+ class Skala::Adapter::GetRecords::Result < Skala::Adapter::Operation::Result
6
+ # This is the GetRecords::Result::Record, the object which holds meta informations
7
+ # and has a record property, which holds the actual Skala::Record.
8
+ class Record
9
+ include Virtus.model
10
+
11
+ attribute :found, Boolean, default: false
12
+ attribute :id, String
13
+ attribute :index, String
14
+ attribute :record, Skala::Record
15
+ attribute :type, String
16
+ attribute :version, Integer
17
+ end
18
+
19
+ include Enumerable
20
+ include Virtus.model
21
+
22
+ attribute :records, Array[Record]
23
+ attribute :source, String
24
+
25
+ def each
26
+ block_given? ? records.each { |_element| yield _element } : records.each
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUser < Skala::Adapter::Operation
4
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUserFormerLoans < Skala::Adapter::Operation
4
+ require_relative "./get_user_former_loans/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/loan"
3
+ require_relative "../get_user_former_loans"
4
+
5
+ class Skala::Adapter::GetUserFormerLoans::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :former_loans, Array[Skala::Loan]
10
+
11
+ def each
12
+ block_given? ? former_loans.each { |_element| yield _element } : former_loans.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUserHoldRequests < Skala::Adapter::Operation
4
+ require_relative "./get_user_hold_requests/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/hold_request"
3
+ require_relative "../get_user_hold_requests"
4
+
5
+ class Skala::Adapter::GetUserHoldRequests::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :hold_requests, Array[Skala::HoldRequest]
10
+
11
+ def each
12
+ block_given? ? hold_requests.each { |_element| yield _element } : hold_requests.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUserInterLibraryLoans < Skala::Adapter::Operation
4
+ require_relative "./get_user_inter_library_loans/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/loan"
3
+ require_relative "../get_user_inter_library_loans"
4
+
5
+ class Skala::Adapter::GetUserInterLibraryLoans::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :inter_library_loans, Array[Skala::Loan]
10
+
11
+ def each
12
+ block_given? ? inter_library_loans.each { |_element| yield _element } : inter_library_loans.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUserLoans < Skala::Adapter::Operation
4
+ require_relative "./get_user_loans/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/loan"
3
+ require_relative "../get_user_loans"
4
+
5
+ class Skala::Adapter::GetUserLoans::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :loans, Array[Skala::Loan]
10
+
11
+ def each
12
+ block_given? ? loans.each { |_element| yield _element } : loans.each
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::GetUserTransactions < Skala::Adapter::Operation
4
+ require_relative "./get_user_transactions/result"
5
+ end
@@ -0,0 +1,14 @@
1
+ require "skala/adapter/operation/result"
2
+ require "skala/transaction"
3
+ require_relative "../get_user_transactions"
4
+
5
+ class Skala::Adapter::GetUserTransactions::Result < Skala::Adapter::Operation::Result
6
+ include Enumerable
7
+ include Virtus.model
8
+
9
+ attribute :transactions, Array[Skala::Transaction]
10
+
11
+ def each
12
+ block_given? ? transactions.each { |_element| yield _element } : transactions.each
13
+ end
14
+ end
@@ -1,6 +1,8 @@
1
1
  require_relative "../adapter"
2
2
 
3
3
  class Skala::Adapter::Operation
4
+ require_relative "./operation/result"
5
+
4
6
  attr_accessor :adapter
5
7
 
6
8
  def initialize(adapter)
@@ -0,0 +1,6 @@
1
+ require_relative "../operation"
2
+
3
+ class Skala::Adapter::Operation::Request
4
+ include Skala::DeepDupable
5
+ include Virtus.model
6
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "../operation"
2
+
3
+ class Skala::Adapter::Operation::Result
4
+ include Virtus.model
5
+
6
+ attribute :source
7
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::RenewUserLoan < Skala::Adapter::Operation
4
+ class RenewFailedError < Skala::Adapter::RequestFailedError; end
5
+
6
+ require_relative "./renew_user_loan/result"
7
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "../renew_user_loan"
2
+
3
+ class Skala::Adapter::RenewUserLoan::Result
4
+ include Virtus.model
5
+
6
+ attribute :source
7
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::RenewUserLoans < Skala::Adapter::Operation
4
+ require_relative "./renew_user_loans/result"
5
+ end
@@ -0,0 +1,9 @@
1
+ require "skala/loan"
2
+ require_relative "../renew_user_loans"
3
+
4
+ class Skala::Adapter::RenewUserLoans::Result
5
+ include Virtus.model
6
+
7
+ attribute :renewed_loans, Array[Skala::Loan]
8
+ attribute :source
9
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "../adapter"
2
+
3
+ class Skala::Adapter::Search < Skala::Adapter::Operation
4
+ require_relative "./search/request"
5
+ require_relative "./search/result"
6
+ end
@@ -0,0 +1,91 @@
1
+ require "json"
2
+ require "skala/adapter/operation/request"
3
+ require_relative "../search"
4
+
5
+ class Skala::Adapter::Search::Request < Skala::Adapter::Operation::Request
6
+ # facets
7
+ require_relative "./request/histogram_facet"
8
+ require_relative "./request/range_facet"
9
+ require_relative "./request/terms_facet"
10
+
11
+ # queries
12
+ require_relative "./request/ids_query"
13
+ require_relative "./request/match_query"
14
+ require_relative "./request/ordered_terms_query"
15
+ require_relative "./request/query_string_query"
16
+ require_relative "./request/range_query"
17
+ require_relative "./request/simple_query_string_query"
18
+ require_relative "./request/unscored_terms_query"
19
+
20
+ # sort
21
+ require_relative "./request/sort_request"
22
+
23
+ # attributes
24
+ attribute :facets, Array[Facet], lazy: true
25
+ attribute :facet_queries, Array[Query], lazy: true
26
+ attribute :from, Fixnum, default: 0
27
+ attribute :queries, Array[Query], required: true
28
+ attribute :size, Fixnum, default: 25
29
+ attribute :sort, Array[SortRequest], lazy: true
30
+
31
+ # override facet setter in order to determine facet type
32
+ def facets=(value)
33
+ if sanitized_value = [value].flatten(1).compact.presence
34
+ mapped_values = sanitized_value.map do |_element|
35
+ _element.is_a?(Hash) ? self.class.facet_factory(_element) : _element
36
+ end
37
+
38
+ super(mapped_values)
39
+ end
40
+ end
41
+
42
+ # override (facet_)queries setters in order to determine query type
43
+ def facet_queries=(value)
44
+ if sanitized_value = [value].flatten(1).compact.presence
45
+ mapped_values = sanitized_value.map do |_element|
46
+ _element.is_a?(Hash) ? self.class.query_factory(_element) : _element
47
+ end
48
+
49
+ super(mapped_values)
50
+ end
51
+ end
52
+
53
+ def queries=(value)
54
+ if sanitized_value = [value].flatten(1).compact.presence
55
+ mapped_values = sanitized_value.map do |_element|
56
+ _element.is_a?(Hash) ? self.class.query_factory(_element) : _element
57
+ end
58
+
59
+ super(mapped_values)
60
+ end
61
+ end
62
+
63
+ #
64
+ # helpers to implement facets/queries setters
65
+ #
66
+ def self.factory(postfix) # e.g. :facet or :query which turns to "#{type}_#{postfix}", e.g. "match_query" or "range_facet"
67
+ -> (value) do
68
+ class_name = "#{value[:type] || value["type"]}_#{postfix}".classify
69
+
70
+ if const_defined?(class_name)
71
+ const_get(class_name).new(value)
72
+ else
73
+ raise ArgumentError.new("Unknown #{postfix} type!")
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.facet_factory(value)
79
+ factory(:facet).call(value)
80
+ end
81
+
82
+ def self.query_factory(value)
83
+ factory(:query).call(value)
84
+ end
85
+
86
+ # TODO: move to frontend
87
+ def to_param(*)
88
+ # binding.pry
89
+ to_json
90
+ end
91
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "../request"
2
+ require_relative "./facet"
3
+
4
+ class Skala::Adapter::Search::Request::DateHistogramFacet < Skala::Adapter::Search::Request::Facet
5
+ end
@@ -0,0 +1,29 @@
1
+ require_relative "../request"
2
+
3
+ class Skala::Adapter::Search::Request::Facet
4
+ include Virtus.model
5
+
6
+ attribute :type, String, default: -> (instance, _) do
7
+ class_name = instance.class.to_s.demodulize.underscore
8
+
9
+ if (splitted_class_name = class_name.split("_")).last == "facet"
10
+ splitted_class_name[0..-2].join("_")
11
+ else
12
+ class_name
13
+ end
14
+ end
15
+
16
+ require_relative "./histogram_facet"
17
+ require_relative "./range_facet"
18
+ require_relative "./terms_facet"
19
+
20
+ def self.factory(options)
21
+ if (options[:type] || options["type"]) == "histogram"
22
+ parent::HistogramFacet.new(options)
23
+ elsif (options[:type] || options["type"]) == "range"
24
+ parent::RangeFacet.new(options)
25
+ elsif (options[:type] || options["type"]) == "terms"
26
+ parent::TermsFacet.new(options)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ require_relative "../request"
2
+ require_relative "./facet"
3
+
4
+ class Skala::Adapter::Search::Request::HistogramFacet < Skala::Adapter::Search::Request::Facet
5
+ attribute :field, String, required: true
6
+ attribute :interval, Integer, default: 1
7
+ attribute :name, String, required: true
8
+ end