Skip to content

Commit

Permalink
refactor(mime_type): Rename Halite::MimeTypes to Halite::MimeType, an…
Browse files Browse the repository at this point in the history
…d merge Halite::MimeTypes.register_adapter/register_alias into Halite::MimeType.register
  • Loading branch information
icyleaf committed Aug 31, 2018
1 parent 1ec66b8 commit 918e07e
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 39 deletions.
28 changes: 7 additions & 21 deletions spec/halite/mime_type_spec.cr
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
6 changes: 3 additions & 3 deletions spec/halite/mime_types/json_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 8 additions & 10 deletions src/halite/mime_type.cr
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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)
Expand Down
5 changes: 2 additions & 3 deletions src/halite/mime_types/json.cr
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require "json"

module Halite::MimeTypes
module Halite::MimeType
class JSON < Adapter
def encode(obj)
obj.to_json
Expand All @@ -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"
4 changes: 2 additions & 2 deletions src/halite/response.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 918e07e

Please sign in to comment.