rest_framework 0.9.7 → 0.9.8

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
  SHA256:
3
- metadata.gz: 8a9201bc66da6f1038a27aad8e0754d3b14973c20ca5bb3486b545c081e1cf31
4
- data.tar.gz: af160d2b5f66a1d2ab4b40dcd366e5f10d46e5b4f075ac01926cfbcbc03a5c62
3
+ metadata.gz: 5b06a61592498f8debce6f504b4eee90ceeef6fdff63dbb769bd70c623cd9631
4
+ data.tar.gz: ab5b1284a3504104b77cc38278bad01a1dfa30ce7ebcd65323b73e0dd31e58a2
5
5
  SHA512:
6
- metadata.gz: 756aa93e81e2cd240a6d383df774c8003a4063e514bd19acce8857a36ae6844c4ee3dddafdd2c9a246ab4f213f9c9b01bd52bcf2758d84b6ec09b59f73ae3257
7
- data.tar.gz: e7b9e1e1730604c3702e9e1c8b744c87ac6d474db8cb70f32457467ddbc25817bc94404b26560c4b19f3ac0ecdd4704ff9393cbd7a88216052ee13071a97a23a
6
+ metadata.gz: ed04505314f252ac1058732a875711090fb07499edac42814bf72e5b15f90f833040e40399df279654727041af30789c8a931e06d83b9fc1c67f46d4f0da850f
7
+ data.tar.gz: abd68ae8ab71f2fff8f7a933270a467811143096f7cdde16d21c99ac3faeadc8f958cb0bcdde94c1b57f1d620fc278f8d9b5e3b4e2cec5851fb4616f9c325d41
data/.yardopts ADDED
@@ -0,0 +1,5 @@
1
+ --private
2
+ --protected
3
+ -
4
+ LICENSE
5
+ README.md
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.7
1
+ 0.9.8
@@ -1,5 +1,5 @@
1
1
  <!doctype html>
2
- <html class="rrf-mode">
2
+ <html lang="en" class="rrf-mode">
3
3
  <head>
4
4
  <title><%= @title %></title>
5
5
 
@@ -1,4 +1,4 @@
1
- class RESTFramework::BaseFilter
1
+ class RESTFramework::Filters::BaseFilter
2
2
  def initialize(controller:)
3
3
  @controller = controller
4
4
  end
@@ -7,3 +7,6 @@ class RESTFramework::BaseFilter
7
7
  raise NotImplementedError
8
8
  end
9
9
  end
10
+
11
+ # Alias for convenience.
12
+ RESTFramework::BaseFilter = RESTFramework::Filters::BaseFilter
@@ -1,5 +1,5 @@
1
1
  # A filter backend which handles ordering of the recordset.
2
- class RESTFramework::ModelOrderingFilter < RESTFramework::BaseFilter
2
+ class RESTFramework::Filters::ModelOrderingFilter < RESTFramework::Filters::BaseFilter
3
3
  # Get a list of ordering fields for the current action.
4
4
  def _get_fields
5
5
  return @controller.ordering_fields&.map(&:to_s) || @controller.get_fields
@@ -46,3 +46,6 @@ class RESTFramework::ModelOrderingFilter < RESTFramework::BaseFilter
46
46
  return data
47
47
  end
48
48
  end
49
+
50
+ # Alias for convenience.
51
+ RESTFramework::ModelOrderingFilter = RESTFramework::Filters::ModelOrderingFilter
@@ -1,5 +1,5 @@
1
1
  # A simple filtering backend that supports filtering a recordset based on query parameters.
2
- class RESTFramework::ModelQueryFilter < RESTFramework::BaseFilter
2
+ class RESTFramework::Filters::ModelQueryFilter < RESTFramework::Filters::BaseFilter
3
3
  # Get a list of filterset fields for the current action.
4
4
  def _get_fields
5
5
  # Always return a list of strings; `@controller.get_fields` already does this.
@@ -49,3 +49,6 @@ class RESTFramework::ModelQueryFilter < RESTFramework::BaseFilter
49
49
  return data
50
50
  end
51
51
  end
52
+
53
+ # Alias for convenience.
54
+ RESTFramework::ModelQueryFilter = RESTFramework::Filters::ModelQueryFilter
@@ -1,5 +1,5 @@
1
1
  # Multi-field text searching on models.
2
- class RESTFramework::ModelSearchFilter < RESTFramework::BaseFilter
2
+ class RESTFramework::Filters::ModelSearchFilter < RESTFramework::Filters::BaseFilter
3
3
  # Get a list of search fields for the current action.
4
4
  def _get_fields
5
5
  if search_fields = @controller.search_fields
@@ -39,3 +39,6 @@ class RESTFramework::ModelSearchFilter < RESTFramework::BaseFilter
39
39
  return data
40
40
  end
41
41
  end
42
+
43
+ # Alias for convenience.
44
+ RESTFramework::ModelSearchFilter = RESTFramework::Filters::ModelSearchFilter
@@ -1,5 +1,5 @@
1
1
  # Adapter for the `ransack` gem.
2
- class RESTFramework::RansackFilter < RESTFramework::BaseFilter
2
+ class RESTFramework::Filters::RansackFilter < RESTFramework::Filters::BaseFilter
3
3
  # Filter data according to the request query parameters.
4
4
  def get_filtered_data(data)
5
5
  q = @controller.request.query_parameters[@controller.ransack_query_param]
@@ -23,3 +23,6 @@ class RESTFramework::RansackFilter < RESTFramework::BaseFilter
23
23
  return data
24
24
  end
25
25
  end
26
+
27
+ # Alias for convenience.
28
+ RESTFramework::RansackFilter = RESTFramework::Filters::RansackFilter
@@ -1,9 +1,9 @@
1
1
  module RESTFramework::Filters
2
2
  end
3
3
 
4
- require_relative "filters/base"
4
+ require_relative "filters/base_filter"
5
5
 
6
- require_relative "filters/model_ordering"
7
- require_relative "filters/model_query"
8
- require_relative "filters/model_search"
9
- require_relative "filters/ransack"
6
+ require_relative "filters/model_ordering_filter"
7
+ require_relative "filters/model_query_filter"
8
+ require_relative "filters/model_search_filter"
9
+ require_relative "filters/ransack_filter"
@@ -1,11 +1,7 @@
1
- require_relative "../errors"
2
- require_relative "../serializers"
3
- require_relative "../utils"
4
-
5
1
  # This module provides the common functionality for any controller mixins, a `root` action, and
6
2
  # the ability to route arbitrary actions with `extra_actions`. This is also where `api_response`
7
3
  # is defined.
8
- module RESTFramework::BaseControllerMixin
4
+ module RESTFramework::Mixins::BaseControllerMixin
9
5
  RRF_BASE_CONFIG = {
10
6
  extra_actions: nil,
11
7
  extra_member_actions: nil,
@@ -348,3 +344,6 @@ module RESTFramework::BaseControllerMixin
348
344
  return api_response(self.get_options_metadata)
349
345
  end
350
346
  end
347
+
348
+ # Alias for convenience.
349
+ RESTFramework::BaseControllerMixin = RESTFramework::Mixins::BaseControllerMixin
@@ -1,8 +1,8 @@
1
- require_relative "models"
1
+ require_relative "model_controller_mixin"
2
2
 
3
3
  # Mixin for creating records in bulk. This is unique compared to update/destroy because we overload
4
4
  # the existing `create` action to support bulk creation.
5
- module RESTFramework::BulkCreateModelMixin
5
+ module RESTFramework::Mixins::BulkCreateModelMixin
6
6
  # While bulk update/destroy are obvious because they create new router endpoints, bulk create
7
7
  # overloads the existing collection `POST` endpoint, so we add a special key to the options
8
8
  # metadata to indicate bulk create is supported.
@@ -31,8 +31,11 @@ module RESTFramework::BulkCreateModelMixin
31
31
  end
32
32
  end
33
33
 
34
+ # Alias for convenience.
35
+ RESTFramework::BulkCreateModelMixin = RESTFramework::Mixins::BulkCreateModelMixin
36
+
34
37
  # Mixin for updating records in bulk.
35
- module RESTFramework::BulkUpdateModelMixin
38
+ module RESTFramework::Mixins::BulkUpdateModelMixin
36
39
  def update_all
37
40
  records = self.update_all!
38
41
  serialized_records = self.bulk_serialize(records)
@@ -56,8 +59,11 @@ module RESTFramework::BulkUpdateModelMixin
56
59
  end
57
60
  end
58
61
 
62
+ # Alias for convenience.
63
+ RESTFramework::BulkUpdateModelMixin = RESTFramework::Mixins::BulkUpdateModelMixin
64
+
59
65
  # Mixin for destroying records in bulk.
60
- module RESTFramework::BulkDestroyModelMixin
66
+ module RESTFramework::Mixins::BulkDestroyModelMixin
61
67
  def destroy_all
62
68
  if params[:_json].is_a?(Array)
63
69
  records = self.destroy_all!
@@ -83,8 +89,11 @@ module RESTFramework::BulkDestroyModelMixin
83
89
  end
84
90
  end
85
91
 
92
+ # Alias for convenience.
93
+ RESTFramework::BulkDestroyModelMixin = RESTFramework::Mixins::BulkDestroyModelMixin
94
+
86
95
  # Mixin that includes all the CRUD bulk mixins.
87
- module RESTFramework::BulkModelControllerMixin
96
+ module RESTFramework::Mixins::BulkModelControllerMixin
88
97
  include RESTFramework::ModelControllerMixin
89
98
 
90
99
  include RESTFramework::BulkCreateModelMixin
@@ -95,3 +104,6 @@ module RESTFramework::BulkModelControllerMixin
95
104
  RESTFramework::ModelControllerMixin.included(base)
96
105
  end
97
106
  end
107
+
108
+ # Alias for convenience.
109
+ RESTFramework::BulkModelControllerMixin = RESTFramework::Mixins::BulkModelControllerMixin
@@ -1,8 +1,5 @@
1
- require_relative "base"
2
- require_relative "../filters"
3
-
4
1
  # This module provides the core functionality for controllers based on models.
5
- module RESTFramework::BaseModelControllerMixin
2
+ module RESTFramework::Mixins::BaseModelControllerMixin
6
3
  BASE64_REGEX = /data:(.*);base64,(.*)/
7
4
  BASE64_TRANSLATE = ->(field, value) {
8
5
  _, content_type, payload = value.match(BASE64_REGEX).to_a
@@ -552,54 +549,28 @@ module RESTFramework::BaseModelControllerMixin
552
549
  alias_method :get_create_params, :get_body_params
553
550
  alias_method :get_update_params, :get_body_params
554
551
 
555
- # Get the set of records this controller has access to. The return value is cached and exposed to
556
- # the view as the `@recordset` instance variable.
552
+ # Get the set of records this controller has access to.
557
553
  def get_recordset
558
- return @recordset if instance_variable_defined?(:@recordset)
559
- return (@recordset = self.class.recordset) if self.class.recordset
554
+ return self.class.recordset if self.class.recordset
560
555
 
561
556
  # If there is a model, return that model's default scope (all records by default).
562
- if (model = self.class.get_model)
563
- return @recordset = model.all
564
- end
565
-
566
- return @recordset = nil
567
- end
568
-
569
- # Get the recordset but with any associations included to avoid N+1 queries.
570
- def get_recordset_with_includes
571
- reflections = self.class.get_model.reflections
572
- associations = self.get_fields.map { |f|
573
- if reflections.key?(f)
574
- f.to_sym
575
- elsif reflections.key?("rich_text_#{f}")
576
- :"rich_text_#{f}"
577
- elsif reflections.key?("#{f}_attachment")
578
- :"#{f}_attachment"
579
- elsif reflections.key?("#{f}_attachments")
580
- :"#{f}_attachments"
581
- end
582
- }.compact
583
-
584
- if associations.any?
585
- return self.get_recordset.includes(associations)
557
+ if model = self.class.get_model
558
+ return model.all
586
559
  end
587
560
 
588
- return self.get_recordset
561
+ return nil
589
562
  end
590
563
 
591
564
  # Get the records this controller has access to *after* any filtering is applied.
592
565
  def get_records
593
- return @records if instance_variable_defined?(:@records)
594
-
595
- return @records = self.get_filtered_data(self.get_recordset_with_includes)
566
+ return @records ||= self.get_filtered_data(self.get_recordset)
596
567
  end
597
568
 
598
569
  # Get a single record by primary key or another column, if allowed. The return value is cached and
599
570
  # exposed to the view as the `@record` instance variable.
600
571
  def get_record
601
572
  # Cache the result.
602
- return @record if instance_variable_defined?(:@record)
573
+ return @record if @record
603
574
 
604
575
  recordset = self.get_recordset
605
576
  find_by_key = self.class.get_model.primary_key
@@ -660,8 +631,11 @@ module RESTFramework::BaseModelControllerMixin
660
631
  end
661
632
  end
662
633
 
634
+ # Alias for convenience.
635
+ RESTFramework::BaseModelControllerMixin = RESTFramework::Mixins::BaseModelControllerMixin
636
+
663
637
  # Mixin for listing records.
664
- module RESTFramework::ListModelMixin
638
+ module RESTFramework::Mixins::ListModelMixin
665
639
  def index
666
640
  return api_response(self.get_index_records)
667
641
  end
@@ -688,15 +662,21 @@ module RESTFramework::ListModelMixin
688
662
  end
689
663
  end
690
664
 
665
+ # Alias for convenience.
666
+ RESTFramework::ListModelMixin = RESTFramework::Mixins::ListModelMixin
667
+
691
668
  # Mixin for showing records.
692
- module RESTFramework::ShowModelMixin
669
+ module RESTFramework::Mixins::ShowModelMixin
693
670
  def show
694
671
  return api_response(self.get_record)
695
672
  end
696
673
  end
697
674
 
675
+ # Alias for convenience.
676
+ RESTFramework::ShowModelMixin = RESTFramework::Mixins::ShowModelMixin
677
+
698
678
  # Mixin for creating records.
699
- module RESTFramework::CreateModelMixin
679
+ module RESTFramework::Mixins::CreateModelMixin
700
680
  def create
701
681
  return api_response(self.create!, status: :created)
702
682
  end
@@ -707,8 +687,11 @@ module RESTFramework::CreateModelMixin
707
687
  end
708
688
  end
709
689
 
690
+ # Alias for convenience.
691
+ RESTFramework::CreateModelMixin = RESTFramework::Mixins::CreateModelMixin
692
+
710
693
  # Mixin for updating records.
711
- module RESTFramework::UpdateModelMixin
694
+ module RESTFramework::Mixins::UpdateModelMixin
712
695
  def update
713
696
  return api_response(self.update!)
714
697
  end
@@ -721,8 +704,11 @@ module RESTFramework::UpdateModelMixin
721
704
  end
722
705
  end
723
706
 
707
+ # Alias for convenience.
708
+ RESTFramework::UpdateModelMixin = RESTFramework::Mixins::UpdateModelMixin
709
+
724
710
  # Mixin for destroying records.
725
- module RESTFramework::DestroyModelMixin
711
+ module RESTFramework::Mixins::DestroyModelMixin
726
712
  def destroy
727
713
  self.destroy!
728
714
  return api_response("")
@@ -734,8 +720,11 @@ module RESTFramework::DestroyModelMixin
734
720
  end
735
721
  end
736
722
 
723
+ # Alias for convenience.
724
+ RESTFramework::DestroyModelMixin = RESTFramework::Mixins::DestroyModelMixin
725
+
737
726
  # Mixin that includes show/list mixins.
738
- module RESTFramework::ReadOnlyModelControllerMixin
727
+ module RESTFramework::Mixins::ReadOnlyModelControllerMixin
739
728
  include RESTFramework::BaseModelControllerMixin
740
729
 
741
730
  include RESTFramework::ListModelMixin
@@ -746,8 +735,11 @@ module RESTFramework::ReadOnlyModelControllerMixin
746
735
  end
747
736
  end
748
737
 
738
+ # Alias for convenience.
739
+ RESTFramework::ReadOnlyModelControllerMixin = RESTFramework::Mixins::ReadOnlyModelControllerMixin
740
+
749
741
  # Mixin that includes all the CRUD mixins.
750
- module RESTFramework::ModelControllerMixin
742
+ module RESTFramework::Mixins::ModelControllerMixin
751
743
  include RESTFramework::BaseModelControllerMixin
752
744
 
753
745
  include RESTFramework::ListModelMixin
@@ -760,3 +752,6 @@ module RESTFramework::ModelControllerMixin
760
752
  RESTFramework::BaseModelControllerMixin.included(base)
761
753
  end
762
754
  end
755
+
756
+ # Alias for convenience.
757
+ RESTFramework::ModelControllerMixin = RESTFramework::Mixins::ModelControllerMixin
@@ -0,0 +1,7 @@
1
+ module RESTFramework::Mixins
2
+ end
3
+
4
+ require_relative "mixins/base_controller_mixin"
5
+
6
+ require_relative "mixins/bulk_model_controller_mixin"
7
+ require_relative "mixins/model_controller_mixin"
@@ -0,0 +1,19 @@
1
+ class RESTFramework::Paginators::BasePaginator
2
+ def initialize(data:, controller:, **kwargs)
3
+ @data = data
4
+ @controller = controller
5
+ end
6
+
7
+ # Get the page and return it so the caller can serialize it.
8
+ def get_page
9
+ raise NotImplementedError
10
+ end
11
+
12
+ # Wrap the serialized page with appropriate metadata.
13
+ def get_paginated_response(serialized_page)
14
+ raise NotImplementedError
15
+ end
16
+ end
17
+
18
+ # Alias for convenience.
19
+ RESTFramework::BasePaginator = RESTFramework::Paginators::BasePaginator
@@ -0,0 +1,73 @@
1
+ # A simple paginator based on page numbers.
2
+ #
3
+ # Example: http://example.com/api/users/?page=3&page_size=50
4
+ class RESTFramework::Paginators::PageNumberPaginator < RESTFramework::Paginators::BasePaginator
5
+ def initialize(**kwargs)
6
+ super
7
+ # Exclude any `select` clauses since that would cause `count` to fail with a SQL `SyntaxError`.
8
+ @count = @data.except(:select).count
9
+ @page_size = self._page_size
10
+
11
+ @total_pages = @count / @page_size
12
+ @total_pages += 1 if @count % @page_size != 0
13
+ end
14
+
15
+ def _page_size
16
+ page_size = nil
17
+
18
+ # Get from context, if allowed.
19
+ if @controller.page_size_query_param
20
+ if page_size = @controller.params[@controller.page_size_query_param].presence
21
+ page_size = page_size.to_i
22
+ end
23
+ end
24
+
25
+ # Otherwise, get from config.
26
+ if !page_size && @controller.page_size
27
+ page_size = @controller.page_size
28
+ end
29
+
30
+ # Ensure we don't exceed the max page size.
31
+ if @controller.max_page_size && page_size > @controller.max_page_size
32
+ page_size = @controller.max_page_size
33
+ end
34
+
35
+ # Ensure we return at least 1.
36
+ return page_size.zero? ? 1 : page_size
37
+ end
38
+
39
+ # Get the page and return it so the caller can serialize it.
40
+ def get_page(page_number=nil)
41
+ # If page number isn't provided, infer from the params or use 1 as a fallback value.
42
+ unless page_number
43
+ page_number = @controller&.params&.[](@controller.page_query_param&.to_sym)
44
+ if page_number.blank?
45
+ page_number = 1
46
+ else
47
+ page_number = page_number.to_i
48
+ if page_number.zero?
49
+ page_number = 1
50
+ end
51
+ end
52
+ end
53
+ @page_number = page_number
54
+
55
+ # Get the data page and return it so the caller can serialize the data in the proper format.
56
+ page_index = @page_number - 1
57
+ return @data.limit(@page_size).offset(page_index * @page_size)
58
+ end
59
+
60
+ # Wrap the serialized page with appropriate metadata. TODO: include links.
61
+ def get_paginated_response(serialized_page)
62
+ return {
63
+ count: @count,
64
+ page: @page_number,
65
+ page_size: @page_size,
66
+ total_pages: @total_pages,
67
+ results: serialized_page,
68
+ }
69
+ end
70
+ end
71
+
72
+ # Alias for convenience.
73
+ RESTFramework::PageNumberPaginator = RESTFramework::Paginators::PageNumberPaginator
@@ -1,90 +1,9 @@
1
- class RESTFramework::BasePaginator
2
- def initialize(data:, controller:, **kwargs)
3
- @data = data
4
- @controller = controller
5
- end
6
-
7
- # Get the page and return it so the caller can serialize it.
8
- def get_page
9
- raise NotImplementedError
10
- end
11
-
12
- # Wrap the serialized page with appropriate metadata.
13
- def get_paginated_response(serialized_page)
14
- raise NotImplementedError
15
- end
1
+ module RESTFramework::Paginators
16
2
  end
17
3
 
18
- # A simple paginator based on page numbers.
19
- #
20
- # Example: http://example.com/api/users/?page=3&page_size=50
21
- class RESTFramework::PageNumberPaginator < RESTFramework::BasePaginator
22
- def initialize(**kwargs)
23
- super
24
- # Exclude any `select` clauses since that would cause `count` to fail with a SQL `SyntaxError`.
25
- @count = @data.except(:select).count
26
- @page_size = self._page_size
27
-
28
- @total_pages = @count / @page_size
29
- @total_pages += 1 if @count % @page_size != 0
30
- end
31
-
32
- def _page_size
33
- page_size = nil
34
-
35
- # Get from context, if allowed.
36
- if @controller.page_size_query_param
37
- if page_size = @controller.params[@controller.page_size_query_param].presence
38
- page_size = page_size.to_i
39
- end
40
- end
41
-
42
- # Otherwise, get from config.
43
- if !page_size && @controller.page_size
44
- page_size = @controller.page_size
45
- end
4
+ require_relative "paginators/base_paginator"
46
5
 
47
- # Ensure we don't exceed the max page size.
48
- if @controller.max_page_size && page_size > @controller.max_page_size
49
- page_size = @controller.max_page_size
50
- end
51
-
52
- # Ensure we return at least 1.
53
- return page_size.zero? ? 1 : page_size
54
- end
55
-
56
- # Get the page and return it so the caller can serialize it.
57
- def get_page(page_number=nil)
58
- # If page number isn't provided, infer from the params or use 1 as a fallback value.
59
- unless page_number
60
- page_number = @controller&.params&.[](@controller.page_query_param&.to_sym)
61
- if page_number.blank?
62
- page_number = 1
63
- else
64
- page_number = page_number.to_i
65
- if page_number.zero?
66
- page_number = 1
67
- end
68
- end
69
- end
70
- @page_number = page_number
71
-
72
- # Get the data page and return it so the caller can serialize the data in the proper format.
73
- page_index = @page_number - 1
74
- return @data.limit(@page_size).offset(page_index * @page_size)
75
- end
76
-
77
- # Wrap the serialized page with appropriate metadata. TODO: include links.
78
- def get_paginated_response(serialized_page)
79
- return {
80
- count: @count,
81
- page: @page_number,
82
- page_size: @page_size,
83
- total_pages: @total_pages,
84
- results: serialized_page,
85
- }
86
- end
87
- end
6
+ require_relative "paginators/page_number_paginator"
88
7
 
89
8
  # TODO: implement this
90
9
  # class RESTFramework::CountOffsetPaginator
@@ -1,5 +1,4 @@
1
1
  require "action_dispatch/routing/mapper"
2
- require_relative "utils"
3
2
 
4
3
  module ActionDispatch::Routing
5
4
  class Mapper
@@ -0,0 +1,20 @@
1
+ # This is a helper factory to wrap an ActiveModelSerializer to provide a `serialize` method which
2
+ # accepts both collections and individual records. Use `.for` to build adapters.
3
+ class RESTFramework::Serializers::ActiveModelSerializerAdapterFactory
4
+ def self.for(active_model_serializer)
5
+ return Class.new(active_model_serializer) do
6
+ def serialize
7
+ if self.object.respond_to?(:to_ary)
8
+ return self.object.map { |r| self.class.superclass.new(r).serializable_hash }
9
+ end
10
+
11
+ return self.serializable_hash
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ # Alias for convenience.
18
+ # rubocop:disable Layout/LineLength
19
+ RESTFramework::ActiveModelSerializerAdapterFactory = RESTFramework::Serializers::ActiveModelSerializerAdapterFactory
20
+ # rubocop:enable Layout/LineLength
@@ -0,0 +1,40 @@
1
+ # The base serializer defines the interface for all REST Framework serializers.
2
+ class RESTFramework::Serializers::BaseSerializer
3
+ # Add `object` accessor to be compatible with `ActiveModel::Serializer`.
4
+ attr_accessor :object
5
+
6
+ # Accept/ignore `*args` to be compatible with the `ActiveModel::Serializer#initialize` signature.
7
+ def initialize(object=nil, *args, controller: nil, **kwargs)
8
+ @object = object
9
+ @controller = controller
10
+ end
11
+
12
+ # The primary interface for extracting a native Ruby types. This works both for records and
13
+ # collections. We accept and ignore `*args` for compatibility with `active_model_serializers`.
14
+ def serialize(*args)
15
+ raise NotImplementedError
16
+ end
17
+
18
+ # Synonym for `serialize` for compatibility with `active_model_serializers`.
19
+ def serializable_hash(*args)
20
+ return self.serialize(*args)
21
+ end
22
+
23
+ # For compatibility with `active_model_serializers`.
24
+ def self.cache_enabled?
25
+ return false
26
+ end
27
+
28
+ # For compatibility with `active_model_serializers`.
29
+ def self.fragment_cache_enabled?
30
+ return false
31
+ end
32
+
33
+ # For compatibility with `active_model_serializers`.
34
+ def associations(*args, **kwargs)
35
+ return []
36
+ end
37
+ end
38
+
39
+ # Alias for convenience.
40
+ RESTFramework::BaseSerializer = RESTFramework::Serializers::BaseSerializer