From 918e07e7dd2db598d0497dd62d0f8399c1a83f97 Mon Sep 17 00:00:00 2001 From: icyleaf Date: Fri, 31 Aug 2018 12:05:25 +0800 Subject: [PATCH] refactor(mime_type): Rename Halite::MimeTypes to Halite::MimeType, and merge Halite::MimeTypes.register_adapter/register_alias into Halite::MimeType.register --- spec/halite/mime_type_spec.cr | 28 +++++++--------------------- spec/halite/mime_types/json_spec.cr | 6 +++--- src/halite/mime_type.cr | 18 ++++++++---------- src/halite/mime_types/json.cr | 5 ++--- src/halite/response.cr | 4 ++-- 5 files changed, 22 insertions(+), 39 deletions(-) diff --git a/spec/halite/mime_type_spec.cr b/spec/halite/mime_type_spec.cr index 0080fa08..2f85be81 100644 --- a/spec/halite/mime_type_spec.cr +++ b/spec/halite/mime_type_spec.cr @@ -1,7 +1,7 @@ require "../spec_helper" require "yaml" -private class YAMLAdapter < Halite::MimeTypes::Adapter +private class YAMLAdapter < Halite::MimeType::Adapter def decode(string) YAML.parse string end @@ -11,28 +11,14 @@ private class YAMLAdapter < Halite::MimeTypes::Adapter end end -describe Halite::MimeTypes do +describe Halite::MimeType do it "should register an adapter" do - Halite::MimeTypes["yaml"]?.should be_nil - Halite::MimeTypes["yml"]?.should be_nil + Halite::MimeType["yaml"]?.should be_nil + Halite::MimeType["yml"]?.should be_nil - Halite::MimeTypes.register_adapter "application/x-yaml", YAMLAdapter.new - Halite::MimeTypes.register_alias "application/x-yaml", "yaml" - Halite::MimeTypes.register_alias "application/x-yaml", "yml" + Halite::MimeType.register YAMLAdapter.new, "application/x-yaml", "yaml", "yml" - Halite::MimeTypes["yaml"].should be_a YAMLAdapter - Halite::MimeTypes["yml"].should be_a YAMLAdapter - end - - it "should overwrite exists adapter" do - Halite::MimeTypes.register_adapter "application/json", YAMLAdapter.new - Halite::MimeTypes.register_alias "application/json", "json" - - Halite::MimeTypes["json"].should be_a YAMLAdapter - Halite::MimeTypes["json"].should_not be_a Halite::MimeTypes::JSON - - # Restore back for other specs - Halite::MimeTypes.register_adapter "application/json", Halite::MimeTypes::JSON.new - Halite::MimeTypes.register_alias "application/json", "json" + Halite::MimeType["yaml"].should be_a YAMLAdapter + Halite::MimeType["yml"].should be_a YAMLAdapter end end diff --git a/spec/halite/mime_types/json_spec.cr b/spec/halite/mime_types/json_spec.cr index c65a0df9..d2a7c7f7 100644 --- a/spec/halite/mime_types/json_spec.cr +++ b/spec/halite/mime_types/json_spec.cr @@ -3,17 +3,17 @@ require "../../spec_helper" private class Foo end -describe Halite::MimeTypes::JSON do +describe Halite::MimeType::JSON do describe "#encode" do it "shoulds works with to_json class" do - json = Halite::MimeTypes::JSON.new + json = Halite::MimeType::JSON.new json.encode({name: "foo"}).should eq(%Q{{"name":"foo"}}) end end describe "#decode" do it "shoulds works with json string" do - json = Halite::MimeTypes::JSON.new + json = Halite::MimeType::JSON.new json.decode(%Q{{"name": "foo"}}).should be_a(JSON::Any) json.decode(%Q{{"name": "foo"}}).should eq({"name" => "foo"}) end diff --git a/src/halite/mime_type.cr b/src/halite/mime_type.cr index 332443c2..d8acf378 100644 --- a/src/halite/mime_type.cr +++ b/src/halite/mime_type.cr @@ -1,15 +1,14 @@ module Halite - module MimeTypes - @@adapters = {} of String => Adapter - - def self.register_adapter(name : String, adapter : Adapter) - @@adapters[name] = adapter - end - + module MimeType + @@adapters = {} of String => MimeType::Adapter @@aliases = {} of String => String - def self.register_alias(name : String, shortcut : String) - @@aliases[shortcut] = name + def self.register(adapter : MimeType::Adapter, name : String, *shortcuts) + @@adapters[name] = adapter + shortcuts.each do |shortcut| + next unless shortcut.is_a?(String) + @@aliases[shortcut] = name + end unless shortcuts.empty? end def self.[](name : String) @@ -23,7 +22,6 @@ module Halite private def self.normalize(name : String) @@aliases.fetch name, name end - abstract class Adapter abstract def encode(obj) abstract def decode(string) diff --git a/src/halite/mime_types/json.cr b/src/halite/mime_types/json.cr index 4a10083b..65191909 100644 --- a/src/halite/mime_types/json.cr +++ b/src/halite/mime_types/json.cr @@ -1,6 +1,6 @@ require "json" -module Halite::MimeTypes +module Halite::MimeType class JSON < Adapter def encode(obj) obj.to_json @@ -12,5 +12,4 @@ module Halite::MimeTypes end end -Halite::MimeTypes.register_adapter "application/json", Halite::MimeTypes::JSON.new -Halite::MimeTypes.register_alias "application/json", "json" +Halite::MimeType.register Halite::MimeType::JSON.new, "application/json", "json" diff --git a/src/halite/response.cr b/src/halite/response.cr index a1a3feec..4a2f2e15 100644 --- a/src/halite/response.cr +++ b/src/halite/response.cr @@ -79,9 +79,9 @@ module Halite name ||= content_type raise Halite::Error.new("No match MIME type: #{name}") unless name - raise Halite::UnRegisterMimeTypeError.new("unregister MIME type adapter: #{name}") unless MimeTypes[name]? + raise Halite::UnRegisterMimeTypeError.new("unregister MIME type adapter: #{name}") unless MimeType[name]? - MimeTypes[name].decode to_s + MimeType[name].decode to_s end # Return raw of response