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.
- checksums.yaml +4 -4
- data/.github/workflows/debian.yml +43 -0
- data/.github/workflows/ruby.yml +3 -0
- data/.gitignore +10 -10
- data/CHANGELOG.md +80 -54
- data/Gemfile +6 -6
- data/Gemfile.lock +43 -114
- data/LICENSE +21 -0
- data/README.md +278 -85
- data/Rakefile +12 -12
- data/lib/media_types.rb +46 -3
- data/lib/media_types/constructable.rb +15 -9
- data/lib/media_types/dsl.rb +66 -31
- data/lib/media_types/dsl/errors.rb +18 -0
- data/lib/media_types/errors.rb +19 -0
- data/lib/media_types/scheme.rb +127 -13
- data/lib/media_types/scheme/errors.rb +66 -0
- data/lib/media_types/scheme/links.rb +15 -0
- data/lib/media_types/scheme/missing_validation.rb +12 -4
- data/lib/media_types/scheme/output_empty_guard.rb +5 -4
- data/lib/media_types/scheme/output_iterator_with_predicate.rb +13 -2
- data/lib/media_types/scheme/output_type_guard.rb +1 -1
- data/lib/media_types/scheme/rules.rb +53 -1
- data/lib/media_types/scheme/rules_exhausted_guard.rb +15 -4
- data/lib/media_types/scheme/validation_options.rb +17 -5
- data/lib/media_types/testing/assertions.rb +20 -0
- data/lib/media_types/validations.rb +29 -7
- data/lib/media_types/version.rb +1 -1
- data/media_types.gemspec +4 -7
- metadata +19 -63
- data/.travis.yml +0 -19
- data/lib/media_types/.dsl.rb.swp +0 -0
- data/lib/media_types/defaults.rb +0 -31
- data/lib/media_types/integrations.rb +0 -32
- data/lib/media_types/integrations/actionpack.rb +0 -21
- data/lib/media_types/integrations/http.rb +0 -47
- data/lib/media_types/minitest/assert_media_type_format.rb +0 -10
- data/lib/media_types/minitest/assert_media_types_registered.rb +0 -166
- 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
|