media_types-serialization 0.8.1 → 1.0.1

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +10 -1
  3. data/.gitignore +12 -12
  4. data/.idea/.rakeTasks +5 -5
  5. data/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. data/.idea/runConfigurations/test.xml +19 -19
  7. data/CHANGELOG.md +18 -0
  8. data/CODE_OF_CONDUCT.md +74 -74
  9. data/Gemfile +4 -4
  10. data/Gemfile.lock +58 -61
  11. data/LICENSE.txt +21 -21
  12. data/README.md +640 -173
  13. data/Rakefile +10 -10
  14. data/bin/console +14 -14
  15. data/bin/setup +8 -8
  16. data/lib/media_types/problem.rb +64 -0
  17. data/lib/media_types/serialization.rb +431 -172
  18. data/lib/media_types/serialization/base.rb +111 -91
  19. data/lib/media_types/serialization/error.rb +178 -0
  20. data/lib/media_types/serialization/fake_validator.rb +52 -0
  21. data/lib/media_types/serialization/serialization_dsl.rb +117 -0
  22. data/lib/media_types/serialization/serialization_registration.rb +235 -0
  23. data/lib/media_types/serialization/serializers/api_viewer.rb +133 -0
  24. data/lib/media_types/serialization/serializers/common_css.rb +168 -0
  25. data/lib/media_types/serialization/serializers/endpoint_description_serializer.rb +80 -0
  26. data/lib/media_types/serialization/serializers/fallback_not_acceptable_serializer.rb +85 -0
  27. data/lib/media_types/serialization/serializers/fallback_unsupported_media_type_serializer.rb +58 -0
  28. data/lib/media_types/serialization/serializers/input_validation_error_serializer.rb +89 -0
  29. data/lib/media_types/serialization/serializers/problem_serializer.rb +87 -0
  30. data/lib/media_types/serialization/version.rb +1 -1
  31. data/media_types-serialization.gemspec +50 -50
  32. metadata +40 -43
  33. data/.travis.yml +0 -17
  34. data/lib/generators/media_types/serialization/api_viewer/api_viewer_generator.rb +0 -25
  35. data/lib/generators/media_types/serialization/api_viewer/templates/api_viewer.html.erb +0 -98
  36. data/lib/generators/media_types/serialization/api_viewer/templates/initializer.rb +0 -33
  37. data/lib/generators/media_types/serialization/api_viewer/templates/template_controller.rb +0 -23
  38. data/lib/media_types/serialization/media_type/register.rb +0 -4
  39. data/lib/media_types/serialization/migrations_command.rb +0 -38
  40. data/lib/media_types/serialization/migrations_support.rb +0 -50
  41. data/lib/media_types/serialization/mime_type_support.rb +0 -64
  42. data/lib/media_types/serialization/no_content_type_given.rb +0 -11
  43. data/lib/media_types/serialization/no_media_type_serializers.rb +0 -11
  44. data/lib/media_types/serialization/no_serializer_for_content_type.rb +0 -15
  45. data/lib/media_types/serialization/renderer.rb +0 -41
  46. data/lib/media_types/serialization/renderer/register.rb +0 -4
  47. data/lib/media_types/serialization/wrapper.rb +0 -13
  48. data/lib/media_types/serialization/wrapper/html_wrapper.rb +0 -45
  49. data/lib/media_types/serialization/wrapper/media_collection_wrapper.rb +0 -61
  50. data/lib/media_types/serialization/wrapper/media_index_wrapper.rb +0 -61
  51. data/lib/media_types/serialization/wrapper/media_object_wrapper.rb +0 -55
  52. data/lib/media_types/serialization/wrapper_support.rb +0 -38
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'delegate'
4
-
5
- require 'active_support/core_ext/string/inflections'
6
-
7
- module MediaTypes
8
- module Serialization
9
- module Wrapper
10
- class MediaObjectWrapper < SimpleDelegator
11
-
12
- delegate :to_json, to: :to_hash
13
- delegate :class, :set, :current_view, :current_media_type, to: :__getobj__
14
-
15
- mattr_accessor :auto_unwrap_klazzes
16
-
17
- self.auto_unwrap_klazzes = [Array, defined?(ActiveRecord) ? ActiveRecord::Relation : nil].compact
18
-
19
- def initialize(serializer)
20
- __setobj__ serializer
21
- end
22
-
23
- def to_hash
24
- set unwrapped_serializable
25
- { root_key => serializable && super || nil }
26
- end
27
-
28
- alias to_h to_hash
29
-
30
- def header_links(view: current_view)
31
- __getobj__.send(:header_links, view: view)
32
- end
33
-
34
- def inspect
35
- "#{__getobj__.inspect} (wrapped by MediaObjectWrapper #{self.object_id})"
36
- end
37
-
38
- protected
39
-
40
- def unwrapped_serializable
41
- return __getobj__.unwrapped_serializable if __getobj__.respond_to?(:unwrapped_serializable)
42
- auto_unwrap_klazzes.any? { |klazz| serializable.is_a?(klazz) } ? serializable.first : serializable
43
- end
44
-
45
- def extract_links(view: current_view)
46
- __getobj__.send(:extract_set_links, view: view)
47
- end
48
-
49
- def root_key(view: current_view)
50
- __getobj__.class.root_key(view: view)
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,38 +0,0 @@
1
- require 'active_support/concern'
2
-
3
- require 'media_types/views'
4
- require 'media_types/serialization/wrapper'
5
-
6
- module MediaTypes
7
- module Serialization
8
- module WrapperSupport
9
- extend ActiveSupport::Concern
10
-
11
- AUTO_WRAPPER_MAPPING = {
12
- ::MediaTypes::INDEX_VIEW => ::MediaTypes::Serialization::Wrapper::MediaIndexWrapper,
13
- ::MediaTypes::COLLECTION_VIEW => ::MediaTypes::Serialization::Wrapper::MediaCollectionWrapper,
14
- ::MediaTypes::CREATE_VIEW => ::MediaTypes::Serialization::Wrapper::MediaObjectWrapper,
15
- nil => ::MediaTypes::Serialization::Wrapper::MediaObjectWrapper
16
- }.freeze
17
-
18
- DEFAULT_WRAPPER = ::MediaTypes::Serialization::Wrapper::MediaObjectWrapper
19
-
20
- class_methods do
21
- def wrap(serializer, view: nil)
22
- wrapper = AUTO_WRAPPER_MAPPING.fetch(String(view)) { DEFAULT_WRAPPER }
23
- wrapper.new(serializer)
24
- end
25
-
26
- def root_key(view:)
27
- chomped = name.demodulize.chomp(::MediaTypes::Serialization.common_suffix || 'Serializer')
28
- base = (chomped.presence || parent.name.demodulize).underscore
29
- collection_view?(view) ? base.pluralize : base.singularize
30
- end
31
-
32
- def collection_view?(view)
33
- view == ::MediaTypes::INDEX_VIEW || view == ::MediaTypes::COLLECTION_VIEW
34
- end
35
- end
36
- end
37
- end
38
- end