media_types 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'delegate'
4
+
5
+ module MediaTypes
6
+ class Scheme
7
+ class CaseEqualityWithNil < SimpleDelegator
8
+ def ===(other)
9
+ other.nil? || super
10
+ end
11
+ end
12
+
13
+ # noinspection RubyInstanceMethodNamingConvention
14
+ def AllowNil(klazz) # rubocop:disable Naming/MethodName
15
+ CaseEqualityWithNil.new(klazz)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MediaTypes
4
+ class Scheme
5
+ class Attribute
6
+ def initialize(type, allow_nil: false)
7
+ self.type = type
8
+ self.allow_nil = allow_nil
9
+
10
+ freeze
11
+ end
12
+
13
+ def validate!(output, options, **_opts)
14
+ if output.nil?
15
+ return true if allow_nil
16
+ end
17
+
18
+ return true if type === output # rubocop:disable Style/CaseEquality
19
+ raise ValidationError,
20
+ format(
21
+ 'Expected %<type>s, got %<actual>s at [%<backtrace>s]',
22
+ type: type,
23
+ actual: output.inspect,
24
+ backtrace: options.backtrace.join('->')
25
+ )
26
+ end
27
+
28
+ private
29
+
30
+ attr_accessor :allow_nil, :type
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MediaTypes
4
+ class Scheme
5
+ class Links
6
+ def initialize
7
+ self.links = {}
8
+ end
9
+
10
+ def link(key, allow_nil: false, &block)
11
+ scheme = Scheme.new
12
+ scheme.attribute :href, String, allow_nil: allow_nil
13
+ scheme.instance_exec(&block) if block_given?
14
+
15
+ links[key] = scheme
16
+ end
17
+
18
+ def validate!(output, options, **_opts)
19
+ links.all? do |key, value|
20
+ value.validate!(
21
+ output[key],
22
+ options.trace(key).exhaustive!
23
+ )
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ attr_accessor :links
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MediaTypes
4
+ class Scheme
5
+ class MissingValidation
6
+
7
+ def validate!(_output, options, context:, **_opts)
8
+ # Check that no unknown keys are present
9
+ return true unless options.strict
10
+ raise_strict!(key: context.key, strict_keys: context.validations, backtrace: options.backtrace)
11
+ end
12
+
13
+ def raise_strict!(key:, backtrace:, strict_keys:)
14
+ raise StrictValidationError, format(
15
+ 'Unknown key %<key>s in output at [%<backtrace>s]. Expected one of: %<strict_keys>s',
16
+ key: key.inspect,
17
+ backtrace: backtrace.join('->'),
18
+ strict_keys: strict_keys
19
+ )
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MediaTypes
4
+ class Scheme
5
+ class NotStrict
6
+ def validate!(*_args, **_opts)
7
+ true
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module MediaTypes
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'media_types/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'media_types'
9
+ spec.version = MediaTypes::VERSION
10
+ spec.authors = ['Derk-Jan Karrenbeld']
11
+ spec.email = ['derk-jan+github@karrenbeld.info']
12
+
13
+ spec.summary = 'Library to create media type definitions, schemes and validations'
14
+ spec.description = 'Media Types as mime types are not easily supported by frameworks such as rails. '
15
+ spec.homepage = 'https://github.com/SleeplessBytes/media-types-ruby'
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = 'exe'
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ['lib']
25
+
26
+ spec.add_development_dependency 'bundler', '~> 1.16'
27
+ spec.add_development_dependency 'minitest', '~> 5.0'
28
+ spec.add_development_dependency 'minitest-ci'
29
+ spec.add_development_dependency 'minitest-reporters'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'simplecov'
32
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: media_types
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Derk-Jan Karrenbeld
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-ci
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: 'Media Types as mime types are not easily supported by frameworks such
98
+ as rails. '
99
+ email:
100
+ - derk-jan+github@karrenbeld.info
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rubocop.yml"
107
+ - ".travis.yml"
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - lib/media_types.rb
115
+ - lib/media_types/base.rb
116
+ - lib/media_types/base/collector.rb
117
+ - lib/media_types/constructable_mime_type.rb
118
+ - lib/media_types/minitest/assert_media_type_format.rb
119
+ - lib/media_types/minitest/assert_media_types_registered.rb
120
+ - lib/media_types/scheme.rb
121
+ - lib/media_types/scheme/allow_nil.rb
122
+ - lib/media_types/scheme/attribute.rb
123
+ - lib/media_types/scheme/links.rb
124
+ - lib/media_types/scheme/missing_validation.rb
125
+ - lib/media_types/scheme/not_strict.rb
126
+ - lib/media_types/version.rb
127
+ - media_types.gemspec
128
+ homepage: https://github.com/SleeplessBytes/media-types-ruby
129
+ licenses: []
130
+ metadata: {}
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 2.6.14.1
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: Library to create media type definitions, schemes and validations
151
+ test_files: []