media_types 1.0.0 → 2.1.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/debian.yml +43 -0
  3. data/.github/workflows/ruby.yml +3 -0
  4. data/.gitignore +10 -10
  5. data/CHANGELOG.md +80 -54
  6. data/Gemfile +6 -6
  7. data/Gemfile.lock +43 -114
  8. data/LICENSE +21 -0
  9. data/README.md +278 -85
  10. data/Rakefile +12 -12
  11. data/lib/media_types.rb +46 -3
  12. data/lib/media_types/constructable.rb +15 -9
  13. data/lib/media_types/dsl.rb +66 -31
  14. data/lib/media_types/dsl/errors.rb +18 -0
  15. data/lib/media_types/errors.rb +19 -0
  16. data/lib/media_types/scheme.rb +127 -13
  17. data/lib/media_types/scheme/errors.rb +66 -0
  18. data/lib/media_types/scheme/links.rb +15 -0
  19. data/lib/media_types/scheme/missing_validation.rb +12 -4
  20. data/lib/media_types/scheme/output_empty_guard.rb +5 -4
  21. data/lib/media_types/scheme/output_iterator_with_predicate.rb +13 -2
  22. data/lib/media_types/scheme/output_type_guard.rb +1 -1
  23. data/lib/media_types/scheme/rules.rb +53 -1
  24. data/lib/media_types/scheme/rules_exhausted_guard.rb +15 -4
  25. data/lib/media_types/scheme/validation_options.rb +17 -5
  26. data/lib/media_types/testing/assertions.rb +20 -0
  27. data/lib/media_types/validations.rb +29 -7
  28. data/lib/media_types/version.rb +1 -1
  29. data/media_types.gemspec +4 -7
  30. metadata +19 -63
  31. data/.travis.yml +0 -19
  32. data/lib/media_types/.dsl.rb.swp +0 -0
  33. data/lib/media_types/defaults.rb +0 -31
  34. data/lib/media_types/integrations.rb +0 -32
  35. data/lib/media_types/integrations/actionpack.rb +0 -21
  36. data/lib/media_types/integrations/http.rb +0 -47
  37. data/lib/media_types/minitest/assert_media_type_format.rb +0 -10
  38. data/lib/media_types/minitest/assert_media_types_registered.rb +0 -166
  39. data/lib/media_types/registrar.rb +0 -148
@@ -1,148 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module MediaTypes
4
- class Registerable
5
- def initialize(media_type, symbol:, aliases: [])
6
- self.media_type = media_type
7
- self.symbol = symbol
8
- self.aliases = aliases
9
-
10
- freeze
11
- end
12
-
13
- def to_s
14
- String(media_type)
15
- end
16
-
17
- def to_sym
18
- symbol
19
- end
20
-
21
- attr_accessor :media_type, :symbol, :aliases
22
-
23
- alias synonyms aliases
24
- alias mime_type to_s
25
-
26
- end
27
-
28
- ##
29
- # Holds all the configuration options in order to call {MediaTypes.register} exactly enough times to register the
30
- # media type in its entirety.
31
- #
32
- # @see Registerable
33
- #
34
- class Registrar
35
-
36
- ##
37
- # Creates a new registry with default values
38
- #
39
- # @param [Class] klazz the class that has {MediaTypes::Dsl} included
40
- # @param [Symbol, NilClass] symbol the symbol the base view (nil view) should be registered under
41
- #
42
- def initialize(klazz, symbol: nil, &block)
43
- self.base_media_type = klazz.to_constructable
44
-
45
- self.registered_views = symbol ? { nil => { symbol: String(symbol).to_sym } } : {}
46
- self.registered_versions = [base_media_type.version]
47
- self.registered_aliases = []
48
- self.registered_suffixes = [String(base_media_type.suffix).to_sym]
49
-
50
- instance_exec(&block) if block_given?
51
- end
52
-
53
- ##
54
- # Resolves all the permutations and returns a list of {Registerable}
55
- #
56
- # @return [Array<Registerable>] the registerables based on all the permutations of +self+
57
- #
58
- def to_a
59
- result = []
60
-
61
- each_resolved do |media_type, symbol|
62
- result << Registerable.new(media_type, symbol: symbol, aliases: aliases(media_type))
63
- end
64
-
65
- result
66
- end
67
-
68
- private
69
-
70
- attr_accessor :registered_views, :registered_versions, :registered_aliases, :registered_suffixes,
71
- :symbol_base, :base_media_type
72
-
73
- ##
74
- # Registers a +view+ with a +symbol+
75
- #
76
- # @param [String, Symbol] view the view
77
- # @param [String, Symbol] symbol the symbol base for this view
78
- #
79
- def view(view, symbol)
80
- registered_views[String(view)] = { symbol: String(symbol).to_sym }
81
- self
82
- end
83
-
84
- ##
85
- # Registers +versions+
86
- #
87
- # @param [*Numeric] versions the versions to register
88
- #
89
- def versions(*versions)
90
- registered_versions.push(*versions)
91
- self
92
- end
93
-
94
- ##
95
- # Registers a type alias. This will become a synonym when registering the media type
96
- #
97
- # @param [String] alias_name the name of the alias
98
- #
99
- def type_alias(alias_name)
100
- registered_aliases.push(String(alias_name))
101
- self
102
- end
103
-
104
- ##
105
- # Registers a suffix
106
- #
107
- # @param [String, Symbol] suffix the suffix to register
108
- #
109
- def suffix(suffix)
110
- registered_suffixes.push(String(suffix).to_sym)
111
- self
112
- end
113
-
114
- ##
115
- # Calculates the aliased media types for a media type
116
- #
117
- # @param [Constructable] media_type the media type constructable
118
- # @return [Array<String>] the resolved aliases
119
- #
120
- def aliases(media_type)
121
- registered_aliases.map { |a| media_type.type(a).to_s }
122
- end
123
-
124
- def each_combination
125
- iterable(registered_versions).each do |version|
126
- registered_views.each do |view, view_opts|
127
- iterable(registered_suffixes).each do |suffix|
128
- opts = { view: view_opts }
129
- yield version, view, suffix, opts
130
- end
131
- end
132
- end
133
- end
134
-
135
- def iterable(source)
136
- source.compact.uniq
137
- end
138
-
139
- def each_resolved
140
- each_combination do |version, view, suffix, opts|
141
- media_type = base_media_type.version(version).view(view).suffix(suffix)
142
- symbol = iterable([opts[:view][:symbol], "v#{version}", suffix]).join('_').to_sym
143
-
144
- yield media_type, symbol
145
- end
146
- end
147
- end
148
- end