Merge branch 'feed-urls' into 'master'
fix: Correct rss feed urls See merge request mythic-insight/legendary!16
This commit is contained in:
		
						commit
						f7f5e5bf6b
					
				
					 10 changed files with 97 additions and 58 deletions
				
			
		| 
						 | 
					@ -115,14 +115,16 @@ defmodule Content.Post do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def maybe_put_guid(changeset) do
 | 
					  def maybe_put_guid(changeset) do
 | 
				
			||||||
    import Content.Router.Helpers, only: [posts_url: 3]
 | 
					    import Content.Router.Helpers, only: [url: 1, posts_url: 3]
 | 
				
			||||||
    slug = changeset |> get_field(:name)
 | 
					    slug = changeset |> get_field(:name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case slug do
 | 
					    case slug do
 | 
				
			||||||
      nil -> changeset
 | 
					      nil -> changeset
 | 
				
			||||||
      _ ->
 | 
					      _ ->
 | 
				
			||||||
 | 
					        base = url(CoreWeb.Endpoint)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        changeset
 | 
					        changeset
 | 
				
			||||||
        |> put_default(:guid, posts_url(CoreWeb.Endpoint, :show, slug))
 | 
					        |> put_default(:guid, posts_url(URI.merge(base, "/pages"), :show, slug))
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,6 @@ defmodule Content do
 | 
				
			||||||
        |> Earmark.as_html!()
 | 
					        |> Earmark.as_html!()
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      import CoreWeb.Helpers
 | 
					 | 
				
			||||||
      # Include shared imports and aliases for views
 | 
					      # Include shared imports and aliases for views
 | 
				
			||||||
      unquote(view_helpers())
 | 
					      unquote(view_helpers())
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					@ -76,6 +75,8 @@ defmodule Content do
 | 
				
			||||||
      # Import basic rendering functionality (render, render_layout, etc)
 | 
					      # Import basic rendering functionality (render, render_layout, etc)
 | 
				
			||||||
      import Phoenix.View
 | 
					      import Phoenix.View
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      import CoreWeb.Helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      import Content.ErrorHelpers
 | 
					      import Content.ErrorHelpers
 | 
				
			||||||
      import Content.Gettext
 | 
					      import Content.Gettext
 | 
				
			||||||
      alias Content.Router.Helpers, as: Routes
 | 
					      alias Content.Router.Helpers, as: Routes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,10 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 | 
					<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 | 
				
			||||||
  <channel>
 | 
					  <channel>
 | 
				
			||||||
    <title><%= LayoutView.title(@view_module, @view_template, assigns) %></title>
 | 
					    <title><%= title(@view_module, @view_template, assigns) %></title>
 | 
				
			||||||
    <description><%= LayoutView.excerpt(@view_module, @view_template, assigns) %></description>
 | 
					    <description><%= excerpt(@view_module, @view_template, assigns) %></description>
 | 
				
			||||||
    <link>https://pre.hn</link>
 | 
					    <link><%= Content.Router.Helpers.url(CoreWeb.Endpoint) %></link>
 | 
				
			||||||
    <atom:link href="https://pre.hn<%= @feed_url %>" rel="self" type="application/rss+xml" />
 | 
					    <atom:link href="<%= Content.Router.Helpers.url(CoreWeb.Endpoint) %><%= @feed_url %>" rel="self" type="application/rss+xml" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<%= for post <- @posts do %>
 | 
					<%= for post <- @posts do %>
 | 
				
			||||||
    <item>
 | 
					    <item>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,8 @@ defmodule Content.FeedsView do
 | 
				
			||||||
  use Phoenix.HTML
 | 
					  use Phoenix.HTML
 | 
				
			||||||
  alias Phoenix.HTML
 | 
					  alias Phoenix.HTML
 | 
				
			||||||
  alias Phoenix.HTML.Tag
 | 
					  alias Phoenix.HTML.Tag
 | 
				
			||||||
  alias Content.LayoutView
 | 
					
 | 
				
			||||||
 | 
					  import Content.LayoutView, only: [title: 3, excerpt: 3]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def gravatar_url_for_email(email) do
 | 
					  def gravatar_url_for_email(email) do
 | 
				
			||||||
    email
 | 
					    email
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,22 @@
 | 
				
			||||||
defmodule Content.LayoutView do
 | 
					defmodule Content.LayoutView do
 | 
				
			||||||
  use Content, :view
 | 
					  use Content, :view
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def feed_tag(conn, view_module, view_template, assigns) do
 | 
				
			||||||
 | 
					    ~E"""
 | 
				
			||||||
 | 
					    <link
 | 
				
			||||||
 | 
					      rel="alternate"
 | 
				
			||||||
 | 
					      type="application/rss+xml"
 | 
				
			||||||
 | 
					      title="<%= title(view_module, view_template, assigns) %>"
 | 
				
			||||||
 | 
					      href="<%= corresponding_feed_url(conn, view_module, view_template, assigns) %>"
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def title(Content.PostsView, "index.html", assigns) do
 | 
					  def title(Content.PostsView, "index.html", assigns) do
 | 
				
			||||||
    "Page #{assigns.page} | #{title(nil, nil, nil)}"
 | 
					    "Page #{assigns.page} | #{title(nil, nil, nil)}"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def title(Content.FeedsView, "index.rss", %{category: category}) do
 | 
					  def title(Content.FeedsView, "index.rss", %{category: category}) when not(is_nil(category)) do
 | 
				
			||||||
    "#{category} | #{title(nil, nil, nil)}"
 | 
					    "#{category} | #{title(nil, nil, nil)}"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,45 +24,28 @@ defmodule Content.LayoutView do
 | 
				
			||||||
    (assigns.post.title |> HtmlSanitizeEx.strip_tags()) <> " | " <> title(nil, nil, nil)
 | 
					    (assigns.post.title |> HtmlSanitizeEx.strip_tags()) <> " | " <> title(nil, nil, nil)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def title(_, _, _) do
 | 
					  def title(_, _, _), do: I18n.t! "en", "site.title"
 | 
				
			||||||
    I18n.t! "en", "site.title"
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def excerpt(Content.PostsView, "show.html", assigns) do
 | 
					  def excerpt(Content.PostsView, "show.html", assigns) do
 | 
				
			||||||
    assigns.post.excerpt
 | 
					    assigns.post.excerpt
 | 
				
			||||||
    |> HtmlSanitizeEx.strip_tags()
 | 
					    |> HtmlSanitizeEx.strip_tags()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def excerpt(Content.FeedsView, "index.rss", %{category: category}) do
 | 
					  def excerpt(Content.FeedsView, "index.rss", %{category: category}) when not(is_nil(category))  do
 | 
				
			||||||
    "#{category} | #{excerpt(nil, nil, nil)}"
 | 
					    "#{category} | #{excerpt(nil, nil, nil)}"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def excerpt(_, _, _) do
 | 
					  def excerpt(_, _, _), do: I18n.t! "en", "site.excerpt"
 | 
				
			||||||
    I18n.t! "en", "site.excerpt"
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def author(Content.PostsView, "show.html", assigns) do
 | 
					 | 
				
			||||||
    case assigns do
 | 
					 | 
				
			||||||
      %{author: %{display_name: name}} ->
 | 
					 | 
				
			||||||
        name
 | 
					 | 
				
			||||||
      _ ->
 | 
					 | 
				
			||||||
        "Anonymous"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def author(_, _, _) do
 | 
					 | 
				
			||||||
    "Anonymous"
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def corresponding_feed_url(conn, _, _, %{category: nil}) do
 | 
					  def corresponding_feed_url(conn, _, _, %{category: nil}) do
 | 
				
			||||||
    Routes.index_feed_url(conn, :index)
 | 
					    Content.Router.Helpers.index_feed_url(conn, :index)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def corresponding_feed_url(conn, Content.PostsView, "index.html", %{category: category}) do
 | 
					  def corresponding_feed_url(conn, Content.PostsView, "index.html", %{category: category}) do
 | 
				
			||||||
    Routes.category_feed_url(conn, :index, category)
 | 
					    Content.Router.Helpers.category_feed_url(conn, :index, category)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def corresponding_feed_url(conn, _, _, _) do
 | 
					  def corresponding_feed_url(conn, _, _, _) do
 | 
				
			||||||
    Routes.index_feed_url(conn, :index)
 | 
					    Content.Router.Helpers.index_feed_url(conn, :index)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,5 @@
 | 
				
			||||||
defmodule Content.LayoutViewTest do
 | 
					defmodule Content.LayoutViewTest do
 | 
				
			||||||
  use Content.ConnCase
 | 
					  use Content.ConnCase, async: true
 | 
				
			||||||
 | 
					 | 
				
			||||||
  # When testing helpers, you may want to import Phoenix.HTML and
 | 
					 | 
				
			||||||
  # use functions such as safe_to_string() to convert the helper
 | 
					 | 
				
			||||||
  # result into an HTML string.
 | 
					 | 
				
			||||||
  # import Phoenix.HTML
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  import Content.LayoutView
 | 
					  import Content.LayoutView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,10 +19,6 @@ defmodule Content.LayoutViewTest do
 | 
				
			||||||
    test "for category" do
 | 
					    test "for category" do
 | 
				
			||||||
      assert title(Content.PostsView, "show.html", %{post: %{title: "Test"}}) =~ "Test | #{default_title()}"
 | 
					      assert title(Content.PostsView, "show.html", %{post: %{title: "Test"}}) =~ "Test | #{default_title()}"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					 | 
				
			||||||
    test "for nil" do
 | 
					 | 
				
			||||||
      title(nil, nil, nil)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe "excerpt/3" do
 | 
					  describe "excerpt/3" do
 | 
				
			||||||
| 
						 | 
					@ -40,16 +31,6 @@ defmodule Content.LayoutViewTest do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe "author/3" do
 | 
					 | 
				
			||||||
    test "with a display name" do
 | 
					 | 
				
			||||||
      assert author(Content.PostsView, "show.html", %{author: %{display_name: "Rufus"}}) =~ "Rufus"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    test "without a display name" do
 | 
					 | 
				
			||||||
      assert author(Content.PostsView, "show.html", %{}) =~ "Anonymous"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe "corresponding_feed_url/4" do
 | 
					  describe "corresponding_feed_url/4" do
 | 
				
			||||||
    setup %{conn: conn} do
 | 
					    setup %{conn: conn} do
 | 
				
			||||||
      %{conn: put_private(conn, :phoenix_router_url, "/pages")}
 | 
					      %{conn: put_private(conn, :phoenix_router_url, "/pages")}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,9 @@
 | 
				
			||||||
    <meta charset="utf-8"/>
 | 
					    <meta charset="utf-8"/>
 | 
				
			||||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
 | 
					    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
 | 
				
			||||||
    <title><%= I18n.t! "en", "site.title" %></title>
 | 
					    <title><%= title(@view_module, @view_template, assigns) %></title>
 | 
				
			||||||
    <link rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/>
 | 
					    <link rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/>
 | 
				
			||||||
 | 
					    <%= feed_tag(@conn, @view_module, @view_template, assigns) %>
 | 
				
			||||||
    <script defer type="text/javascript" src="<%= Routes.static_path(@conn, "/js/app.js") %>"></script>
 | 
					    <script defer type="text/javascript" src="<%= Routes.static_path(@conn, "/js/app.js") %>"></script>
 | 
				
			||||||
  </head>
 | 
					  </head>
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,39 @@
 | 
				
			||||||
defmodule CoreWeb.LayoutView do
 | 
					defmodule CoreWeb.LayoutView do
 | 
				
			||||||
  use CoreWeb, :view
 | 
					  use CoreWeb, :view
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def title(view_module, template, assigns) do
 | 
				
			||||||
 | 
					    delegate_with_default(view_module, :title, [view_module, template, assigns], I18n.t!("en", "site.title"))
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def excerpt(view_module, template, assigns) do
 | 
				
			||||||
 | 
					    delegate_with_default(view_module, :excerpt, [view_module, template, assigns], I18n.t!("en", "site.excerpt"))
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def feed_tag(conn, view_module, view_template, assigns) do
 | 
				
			||||||
 | 
					    delegate_with_default(view_module, :feed_tag, [conn, view_module, view_template, assigns], nil)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  defp delegate_with_default(nil, _, _, default), do: default
 | 
				
			||||||
 | 
					  defp delegate_with_default(view_module, function_name, args, default) do
 | 
				
			||||||
 | 
					    sibling_layout = sibling_layout_view(view_module)
 | 
				
			||||||
 | 
					    if function_exported?(sibling_layout, function_name, args |> Enum.count()) do
 | 
				
			||||||
 | 
					      apply(sibling_layout, function_name, args)
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      default
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  defp sibling_layout_view(view_module) do
 | 
				
			||||||
 | 
					    view_module
 | 
				
			||||||
 | 
					    |> parent_module()
 | 
				
			||||||
 | 
					    |> Module.concat("LayoutView")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  defp parent_module(mod) do
 | 
				
			||||||
 | 
					    [_|tail] = Module.split(mod) |> Enum.reverse()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tail
 | 
				
			||||||
 | 
					    |> Enum.reverse()
 | 
				
			||||||
 | 
					    |> Module.concat()
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,31 @@
 | 
				
			||||||
defmodule CoreWeb.LayoutViewTest do
 | 
					defmodule CoreWeb.LayoutViewTest do
 | 
				
			||||||
  use CoreWeb.ConnCase, async: true
 | 
					  use CoreWeb.ConnCase, async: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # When testing helpers, you may want to import Phoenix.HTML and
 | 
					  import CoreWeb.LayoutView
 | 
				
			||||||
  # use functions such as safe_to_string() to convert the helper
 | 
					
 | 
				
			||||||
  # result into an HTML string.
 | 
					  describe "title/3" do
 | 
				
			||||||
  # import Phoenix.HTML
 | 
					    def default_title do
 | 
				
			||||||
 | 
					      I18n.t! "en", "site.title"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test "for nil" do
 | 
				
			||||||
 | 
					      assert title(nil, nil, nil) =~ default_title()
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "excerpt/3" do
 | 
				
			||||||
 | 
					    def default_excerpt do
 | 
				
			||||||
 | 
					      I18n.t! "en", "site.excerpt"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test "for nil" do
 | 
				
			||||||
 | 
					      assert excerpt(nil, nil, nil) =~ default_excerpt()
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "feed_tag/4" do
 | 
				
			||||||
 | 
					    test "for nil" do
 | 
				
			||||||
 | 
					      assert feed_tag(nil, nil, nil, nil) == nil
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								mix.lock
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								mix.lock
									
									
									
									
									
								
							| 
						 | 
					@ -36,7 +36,7 @@
 | 
				
			||||||
  "linguist": {:hex, :linguist, "0.3.0", "2984dfce6720d1212ddd7bba82496f92627a39aecd4d32c7016ec00393e1f925", [:mix], [{:ex_cldr, "~> 2.0", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.0", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "1923876545db22b63334c9d203ef56397a2946daa018117767b068f856be41e4"},
 | 
					  "linguist": {:hex, :linguist, "0.3.0", "2984dfce6720d1212ddd7bba82496f92627a39aecd4d32c7016ec00393e1f925", [:mix], [{:ex_cldr, "~> 2.0", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.0", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "1923876545db22b63334c9d203ef56397a2946daa018117767b068f856be41e4"},
 | 
				
			||||||
  "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"},
 | 
					  "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"},
 | 
				
			||||||
  "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
 | 
					  "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
 | 
				
			||||||
  "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"},
 | 
					  "mime": {:hex, :mime, "1.4.0", "5066f14944b470286146047d2f73518cf5cca82f8e4815cf35d196b58cf07c47", [:mix], [], "hexpm", "75fa42c4228ea9a23f70f123c74ba7cece6a03b1fd474fe13f6a7a85c6ea4ff6"},
 | 
				
			||||||
  "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
 | 
					  "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
 | 
				
			||||||
  "mochiweb": {:hex, :mochiweb, "2.12.2", "80804ad342afa3d7f3524040d4eed66ce74b17a555de454ac85b07c479928e46", [:make, :rebar], [], "hexpm", "d3e681d4054b74a96cf2efcd09e94157ab83a5f55ddc4ce69f90b8144673bd7a"},
 | 
					  "mochiweb": {:hex, :mochiweb, "2.12.2", "80804ad342afa3d7f3524040d4eed66ce74b17a555de454ac85b07c479928e46", [:make, :rebar], [], "hexpm", "d3e681d4054b74a96cf2efcd09e94157ab83a5f55ddc4ce69f90b8144673bd7a"},
 | 
				
			||||||
  "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"},
 | 
					  "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue