media_types 1.0.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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