diff --git a/lib/code_corps/cloudex/cloudex_test.ex b/lib/code_corps/cloudex/cloudex_test.ex index 962246408..05b8dfa90 100644 --- a/lib/code_corps/cloudex/cloudex_test.ex +++ b/lib/code_corps/cloudex/cloudex_test.ex @@ -14,13 +14,12 @@ defmodule CloudexTest do end end - @spec upload(String.t) :: {:ok, %Cloudex.UploadedImage{}} + @spec upload(String.t) :: {:ok, Cloudex.UploadedImage.t} def upload(_url) do {:ok, %Cloudex.UploadedImage{public_id: fake_cloudinary_id()}} end defp fake_cloudinary_id do - :crypto.strong_rand_bytes(5) - |> Base.encode64 + :crypto.strong_rand_bytes(5) |> Base.encode64() end end diff --git a/lib/code_corps/cloudex/uploader.ex b/lib/code_corps/cloudex/uploader.ex index 88de84782..c7056b70e 100644 --- a/lib/code_corps/cloudex/uploader.ex +++ b/lib/code_corps/cloudex/uploader.ex @@ -2,7 +2,8 @@ defmodule CodeCorps.Cloudex.Uploader do @cloudex Application.get_env(:code_corps, :cloudex) - def upload(url) do - @cloudex.upload(url) + @spec upload(list | String.t) :: Cloudex.upload_result() + def upload(list_or_url) do + @cloudex.upload(list_or_url) end end diff --git a/lib/code_corps/emails/receipt_email.ex b/lib/code_corps/emails/receipt_email.ex index d632da918..3966190c0 100644 --- a/lib/code_corps/emails/receipt_email.ex +++ b/lib/code_corps/emails/receipt_email.ex @@ -30,7 +30,7 @@ defmodule CodeCorps.Emails.ReceiptEmail do end end - @spec get_subscription(String.t) :: Subscription.t | nil + @spec get_subscription(String.t) :: StripeConnectSubscription.t | nil defp get_subscription(subscription_id_from_stripe) do StripeConnectSubscription |> Repo.get_by(id_from_stripe: subscription_id_from_stripe) diff --git a/lib/code_corps/model/organization_invite.ex b/lib/code_corps/model/organization_invite.ex index a66feaed5..0cfe59624 100644 --- a/lib/code_corps/model/organization_invite.ex +++ b/lib/code_corps/model/organization_invite.ex @@ -5,6 +5,8 @@ defmodule CodeCorps.OrganizationInvite do use CodeCorps.Model + @type t :: %__MODULE__{} + schema "organization_invites" do field :code, :string field :email, :string diff --git a/lib/code_corps/model/stripe_connect_subscription.ex b/lib/code_corps/model/stripe_connect_subscription.ex index fe28c05d8..8b83db434 100644 --- a/lib/code_corps/model/stripe_connect_subscription.ex +++ b/lib/code_corps/model/stripe_connect_subscription.ex @@ -63,7 +63,7 @@ defmodule CodeCorps.StripeConnectSubscription do :quantity, :stripe_connect_plan_id, :user_id ] - @spec create_changeset(CodeCorps.StripeConnectPlan.t, map) :: Ecto.Changeset.t + @spec create_changeset(CodeCorps.StripeConnectSubscription.t, map) :: Ecto.Changeset.t def create_changeset(struct, params \\ %{}) do struct |> cast(params, @permitted_params) @@ -75,7 +75,7 @@ defmodule CodeCorps.StripeConnectSubscription do @update_params [:cancelled_at, :current_period_end, :current_period_start, :ended_at, :quantity, :start, :status] - @spec webhook_update_changeset(CodeCorps.StripeConnectPlan.t, map) :: Ecto.Changeset.t + @spec webhook_update_changeset(CodeCorps.StripeConnectSubscription.t, map) :: Ecto.Changeset.t def webhook_update_changeset(struct, params \\ %{}) do struct |> cast(params, @update_params) diff --git a/lib/code_corps/services/markdown_renderer_service.ex b/lib/code_corps/services/markdown_renderer_service.ex index 2a441e779..24bd77ec9 100644 --- a/lib/code_corps/services/markdown_renderer_service.ex +++ b/lib/code_corps/services/markdown_renderer_service.ex @@ -5,25 +5,34 @@ defmodule CodeCorps.Services.MarkdownRendererService do alias Ecto.Changeset - @spec render_markdown_to_html(Changeset.t, atom, atom) :: Changeset.t + @spec render_markdown_to_html(Changeset.t(), atom, atom) :: Changeset.t() def render_markdown_to_html(%Changeset{valid?: false} = changeset, _, _), do: changeset def render_markdown_to_html(changeset, source_field, destination_field) do - case Changeset.get_change(changeset, source_field) do - "" -> Changeset.put_change(changeset, destination_field, nil) - nil -> changeset - markdown -> markdown |> convert_into_html() |> put_into(changeset, destination_field) - end + change = changeset |> Changeset.get_change(source_field) + changeset |> handle_change(change, destination_field) end - @spec convert_into_html(String.t) :: String.t - defp convert_into_html(markdown) do - # Prism.js requires a `language-` prefix in code classes - # See: https://github.com/pragdave/earmark#syntax-highlightning - Earmark.as_html!(markdown, %Earmark.Options{code_class_prefix: "language-"}) + @spec handle_change(Changeset.t(), String.t() | nil, atom) :: Changeset.t() + defp handle_change(changeset, nil, _), do: changeset + defp handle_change(changeset, "", destination_field) do + Changeset.put_change(changeset, destination_field, nil) + end + defp handle_change(changeset, lines, destination_field) when is_binary(lines) do + lines + |> convert_into_html() + |> put_into(changeset, destination_field) + end + + # Prism.js requires a `language-` prefix in code classes + # See: https://github.com/pragdave/earmark#syntax-highlightning + @spec convert_into_html(String.t()) :: String.t() + defp convert_into_html(lines) do + lines + |> Earmark.as_html!(%Earmark.Options{code_class_prefix: "language-"}) end - @spec put_into(String.t, Changeset.t, atom) :: Changeset.t + @spec put_into(String.t(), Changeset.t(), atom) :: Changeset.t() defp put_into(html, changeset, destination_field) do - Changeset.put_change(changeset, destination_field, html) + changeset |> Changeset.put_change(destination_field, html) end end diff --git a/lib/code_corps/services/user_service.ex b/lib/code_corps/services/user_service.ex index ae2a68041..e941335b6 100644 --- a/lib/code_corps/services/user_service.ex +++ b/lib/code_corps/services/user_service.ex @@ -83,7 +83,7 @@ defmodule CodeCorps.Services.UserService do end end - @spec do_update_connect_customers(%StripePlatformCustomer{}, map) :: [%StripeConnectCustomer{}] + @spec do_update_connect_customers(StripePlatformCustomer.t, map) :: [{:ok, StripeConnectCustomer.t}] | [{:error, Stripe.Error.t}] defp do_update_connect_customers(stripe_platform_customer, attributes) do stripe_platform_customer |> Repo.preload([stripe_connect_customers: :stripe_connect_account]) @@ -91,7 +91,7 @@ defmodule CodeCorps.Services.UserService do |> Enum.map(&do_update_connect_customer(&1, attributes)) end - @spec do_update_connect_customer(%StripeConnectCustomer{}, map) :: [%StripeConnectCustomer{}] + @spec do_update_connect_customer(StripeConnectCustomer.t, map) :: {:ok, StripeConnectCustomer.t} | {:error, Stripe.Error.t} defp do_update_connect_customer(%StripeConnectCustomer{} = stripe_connect_customer, attributes) do StripeConnectCustomerService.update(stripe_connect_customer, attributes) end diff --git a/lib/code_corps/stripe_service/events/connect_charge_succeeded.ex b/lib/code_corps/stripe_service/events/connect_charge_succeeded.ex index 3dfa3dcd3..8cb8c2f87 100644 --- a/lib/code_corps/stripe_service/events/connect_charge_succeeded.ex +++ b/lib/code_corps/stripe_service/events/connect_charge_succeeded.ex @@ -9,23 +9,19 @@ defmodule CodeCorps.StripeService.Events.ConnectChargeSucceeded do @api Application.get_env(:code_corps, :stripe) def handle(%{data: %{object: %{id: id_from_stripe}}, user_id: connect_account_id_from_stripe}) do - with {:ok, charge} <- create_charge(id_from_stripe, connect_account_id_from_stripe) do - charge |> track_created + with {:ok, %StripeConnectCharge{} = charge} <- StripeConnectChargeService.create(id_from_stripe, connect_account_id_from_stripe) do + charge |> track_created() charge |> try_create_receipt(connect_account_id_from_stripe) - |> maybe_send_receipt + |> maybe_send_receipt() else failure -> failure end end - defp create_charge(id_from_stripe, account_id_from_stripe) do - StripeConnectChargeService.create(id_from_stripe, account_id_from_stripe) - end - defp try_create_receipt(%StripeConnectCharge{invoice_id_from_stripe: invoice_id} = charge, account_id) do - with {:ok, %Stripe.Invoice{} = invoice} <- retrieve_invoice(invoice_id, account_id), + with {:ok, %Stripe.Invoice{} = invoice} <- @api.Invoice.retrieve(invoice_id, connect_account: account_id), %Bamboo.Email{} = receipt <- Emails.ReceiptEmail.create(charge, invoice) do {:ok, charge, receipt} @@ -34,10 +30,6 @@ defmodule CodeCorps.StripeService.Events.ConnectChargeSucceeded do end end - defp retrieve_invoice(invoice_id, account_id) do - @api.Invoice.retrieve(invoice_id, connect_account: account_id) - end - defp maybe_send_receipt({:ok, charge, receipt}) do with %Bamboo.Email{} = email <- receipt |> Mailer.deliver_now do {:ok, charge, email} diff --git a/lib/code_corps/stripe_service/stripe_connect_charge_service.ex b/lib/code_corps/stripe_service/stripe_connect_charge_service.ex index 5f7805819..815072231 100644 --- a/lib/code_corps/stripe_service/stripe_connect_charge_service.ex +++ b/lib/code_corps/stripe_service/stripe_connect_charge_service.ex @@ -6,7 +6,7 @@ defmodule CodeCorps.StripeService.StripeConnectChargeService do @api Application.get_env(:code_corps, :stripe) - @spec create(String.t, String.t) :: Ecto.Changeset.t + @spec create(String.t, String.t) :: {:ok, StripeConnectCharge.t} | {:error, Ecto.Changeset.t} def create(id_from_stripe, connect_account_id_from_stripe) do with {:ok, %StripeConnectAccount{} = stripe_connect_account} <- get_connect_account(connect_account_id_from_stripe), {:ok, %Stripe.Charge{} = api_charge} <- @api.Charge.retrieve(id_from_stripe, connect_account: connect_account_id_from_stripe), @@ -14,7 +14,7 @@ defmodule CodeCorps.StripeService.StripeConnectChargeService do do %StripeConnectCharge{} |> StripeConnectCharge.create_changeset(params) - |> Repo.insert + |> Repo.insert() end end diff --git a/lib/code_corps/stripe_service/stripe_connect_plan.ex b/lib/code_corps/stripe_service/stripe_connect_plan.ex index f484a844f..648847c06 100644 --- a/lib/code_corps/stripe_service/stripe_connect_plan.ex +++ b/lib/code_corps/stripe_service/stripe_connect_plan.ex @@ -25,12 +25,12 @@ defmodule CodeCorps.StripeService.StripeConnectPlanService do {:ok, %Project{}} <- ProjectCanEnableDonations.validate(project), %{} = create_attributes <- get_create_attributes(project_id), connect_account_id <- project.organization.stripe_connect_account.id_from_stripe, - {:ok, plan} <- @api.Plan.create(create_attributes, connect_account: connect_account_id), + {:ok, %Stripe.Plan{} = plan} <- @api.Plan.create(create_attributes, connect_account: connect_account_id), {:ok, params} <- StripeConnectPlanAdapter.to_params(plan, attributes) do %StripeConnectPlan{} |> StripeConnectPlan.create_changeset(params) - |> Repo.insert + |> Repo.insert() else failure -> failure end diff --git a/lib/code_corps/stripe_service/stripe_connect_subscription_service.ex b/lib/code_corps/stripe_service/stripe_connect_subscription_service.ex index 9feff743f..84f3c1509 100644 --- a/lib/code_corps/stripe_service/stripe_connect_subscription_service.ex +++ b/lib/code_corps/stripe_service/stripe_connect_subscription_service.ex @@ -6,7 +6,7 @@ defmodule CodeCorps.StripeService.StripeConnectSubscriptionService do alias CodeCorps.{ Project, Repo, StripeConnectCustomer, StripeConnectAccount, - StripeConnectPlan, StripeConnectSubscription, User + StripeConnectCard, StripeConnectPlan, StripeConnectSubscription, User } alias CodeCorps.Services.{DonationGoalsService, ProjectService} alias CodeCorps.StripeService.{StripeConnectCardService, StripeConnectCustomerService} @@ -93,7 +93,7 @@ defmodule CodeCorps.StripeService.StripeConnectSubscriptionService do {:ok, connect_customer} <- StripeConnectCustomerService.find_or_create(platform_customer, connect_account, user), {:ok, connect_card} <- StripeConnectCardService.find_or_create(platform_card, connect_customer, platform_customer, connect_account), create_attributes <- api_create_attributes(connect_card, connect_customer, plan, attributes), - {:ok, subscription} <- @api.Subscription.create(create_attributes, connect_account: connect_account.id_from_stripe), + {:ok, %Stripe.Subscription{} = subscription} <- @api.Subscription.create(create_attributes, connect_account: connect_account.id_from_stripe), insert_attributes <- local_insert_attributes(attributes, plan), {:ok, params} <- StripeConnectSubscriptionAdapter.to_params(subscription, insert_attributes), {:ok, %StripeConnectSubscription{} = stripe_connect_subscription} <- insert_subscription(params) @@ -123,18 +123,24 @@ defmodule CodeCorps.StripeService.StripeConnectSubscriptionService do end end + @spec insert_subscription(map) :: {:ok, StripeConnectSubscription.t} | {:error, Ecto.Changeset.t} defp insert_subscription(params) do %StripeConnectSubscription{} |> StripeConnectSubscription.create_changeset(params) - |> Repo.insert + |> Repo.insert() end + @spec api_create_attributes(StripeConnectCard.t, StripeConnectCustomer.t, StripeConnectPlan.t, map) :: map defp api_create_attributes(card, customer, plan, %{"quantity" => quantity}) do %{ application_fee_percent: 5, customer: customer.id_from_stripe, - plan: plan.id_from_stripe, - quantity: quantity, + items: [ + %{ + plan: plan.id_from_stripe, + quantity: quantity + } + ], source: card.id_from_stripe } end @@ -166,6 +172,6 @@ defmodule CodeCorps.StripeService.StripeConnectSubscriptionService do defp update_subscription(%StripeConnectSubscription{} = record, params) do record |> StripeConnectSubscription.webhook_update_changeset(params) - |> Repo.update + |> Repo.update() end end diff --git a/lib/code_corps/stripe_testing/subscription.ex b/lib/code_corps/stripe_testing/subscription.ex index 7a451d243..fddfd4f90 100644 --- a/lib/code_corps/stripe_testing/subscription.ex +++ b/lib/code_corps/stripe_testing/subscription.ex @@ -7,7 +7,7 @@ defmodule CodeCorps.StripeTesting.Subscription do {:ok, do_retrieve(map)} end - defp do_create(%{quantity: quantity}) do + defp do_create(%{items: [%{quantity: quantity}]}) do {:ok, plan} = CodeCorps.StripeTesting.Plan.create(%{}, []) %Stripe.Subscription{ @@ -20,6 +20,22 @@ defmodule CodeCorps.StripeTesting.Subscription do customer: "cus_123", ended_at: nil, id: "sub_123", + items: %{ + object: "list", + data: [ + %{ + id: "sub_123", + object: "subscription_item", + created: 1_479_472_835, + metadata: %{}, + plan: plan, + quantity: quantity + } + ], + has_more: false, + total_count: 1, + url: "/v1/subscription_items?subscription=sub_123" + }, livemode: false, metadata: %{}, plan: plan, @@ -45,6 +61,22 @@ defmodule CodeCorps.StripeTesting.Subscription do customer: "cus_123", ended_at: nil, id: "sub_123", + items: %{ + object: "list", + data: [ + %{ + id: "sub_123", + object: "subscription_item", + created: 1_479_472_835, + metadata: %{}, + plan: plan, + quantity: 1000 + } + ], + has_more: false, + total_count: 1, + url: "/v1/subscription_items?subscription=sub_123" + }, livemode: false, metadata: %{}, plan: plan, diff --git a/lib/code_corps_web/controllers/fallback_controller.ex b/lib/code_corps_web/controllers/fallback_controller.ex index 6fab31836..307862166 100644 --- a/lib/code_corps_web/controllers/fallback_controller.ex +++ b/lib/code_corps_web/controllers/fallback_controller.ex @@ -29,12 +29,12 @@ defmodule CodeCorpsWeb.FallbackController do def call(%Conn{} = conn, {:error, :expired}) do conn |> put_status(:not_found) - |> render(CodeCorpsWeb.ErrorView, "404.json") + |> render(CodeCorpsWeb.ErrorView, "404.json", %{}) end def call(%Conn{} = conn, nil) do conn |> put_status(:not_found) - |> render(CodeCorpsWeb.ErrorView, "404.json") + |> render(CodeCorpsWeb.ErrorView, "404.json", %{}) end def call(%Conn{} = conn, {:error, :github}) do conn diff --git a/lib/code_corps_web/controllers/stripe_connect_plan_controller.ex b/lib/code_corps_web/controllers/stripe_connect_plan_controller.ex index 5074e61bd..e6d64d2db 100644 --- a/lib/code_corps_web/controllers/stripe_connect_plan_controller.ex +++ b/lib/code_corps_web/controllers/stripe_connect_plan_controller.ex @@ -30,7 +30,7 @@ defmodule CodeCorpsWeb.StripeConnectPlanController do defp handle_create_result({:error, :project_not_ready}, conn) do conn |> put_status(422) - |> render(CodeCorpsWeb.ErrorView, "422.json-api") + |> render(CodeCorpsWeb.ErrorView, "422.json-api", %{}) end defp handle_create_result(other, _conn), do: other end diff --git a/mix.exs b/mix.exs index 355912ea6..f020ab45e 100644 --- a/mix.exs +++ b/mix.exs @@ -13,7 +13,7 @@ defmodule CodeCorps.Mixfile do elixir: "~> 1.5.2", elixirc_paths: elixirc_paths(Mix.env), compilers: [:phoenix, :gettext] ++ Mix.compilers, - dialyzer: [plt_add_deps: :transitive], + dialyzer: [plt_add_apps: [:kernel, :stdlib], plt_add_deps: :transitive], build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, aliases: aliases(), diff --git a/mix.lock b/mix.lock index 04e3ecfee..d6131aafb 100644 --- a/mix.lock +++ b/mix.lock @@ -17,11 +17,11 @@ "db_connection": {:hex, :db_connection, "1.1.2", "2865c2a4bae0714e2213a0ce60a1b12d76a6efba0c51fbda59c9ab8d1accc7a8", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, optional: true]}]}, "decimal": {:hex, :decimal, "1.4.1", "ad9e501edf7322f122f7fc151cce7c2a0c9ada96f2b0155b8a09a795c2029770", [:mix], []}, "dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], []}, - "earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], []}, + "earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], [], "hexpm"}, "ecto": {:hex, :ecto, "2.2.6", "3fd1067661d6d64851a0d4db9acd9e884c00d2d1aa41cc09da687226cf894661", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, optional: true]}]}, "ecto_ordered": {:hex, :ecto_ordered, "0.2.0-beta1", "cb066bc608f1c8913cea85af8293261720e6a88e3c99061e6877d7025352f045", [:mix], [{:ecto, "~> 2.0", [hex: :ecto, optional: false]}]}, "elixir_make": {:hex, :elixir_make, "0.4.0", "992f38fabe705bb45821a728f20914c554b276838433349d4f2341f7a687cddf", [:mix], []}, - "ex_aws": {:hex, :ex_aws, "1.1.4", "4bdc4fff91f8d35c7fe2355b9da54cc51f980c92f1137715d8b2d70d8e8511cc", [:mix], [{:configparser_ex, "~> 0.2.1", [hex: :configparser_ex, optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, optional: true]}, {:xml_builder, "~> 0.1.0", [hex: :xml_builder, optional: true]}]}, + "ex_aws": {:hex, :ex_aws, "1.1.4", "4bdc4fff91f8d35c7fe2355b9da54cc51f980c92f1137715d8b2d70d8e8511cc", [:mix], [{:configparser_ex, "~> 0.2.1", [repo: "hexpm", hex: :configparser_ex, optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [repo: "hexpm", hex: :hackney, optional: true]}, {:jsx, "~> 2.8", [repo: "hexpm", hex: :jsx, optional: true]}, {:poison, ">= 1.2.0", [repo: "hexpm", hex: :poison, optional: true]}, {:sweet_xml, "~> 0.6", [repo: "hexpm", hex: :sweet_xml, optional: true]}, {:xml_builder, "~> 0.1.0", [repo: "hexpm", hex: :xml_builder, optional: true]}], "hexpm"}, "ex_doc": {:hex, :ex_doc, "0.18.1", "37c69d2ef62f24928c1f4fdc7c724ea04aecfdf500c4329185f8e3649c915baf", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, optional: false]}]}, "ex_machina": {:hex, :ex_machina, "2.1.0", "4874dc9c78e7cf2d429f24dc3c4005674d4e4da6a08be961ffccc08fb528e28b", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, optional: true]}]}, "excoveralls": {:hex, :excoveralls, "0.7.5", "339e433e5d3bce09400dc8de7b9040741a409c93917849916c136a0f51fdc183", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:hackney, ">= 0.12.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, @@ -60,7 +60,7 @@ "segment": {:hex, :segment, "0.1.1", "47bf9191590e7a533c105d1e21518e0d6da47c91e8d98ebb649c624db5dfc359", [:mix], [{:httpoison, "~> 0.8", [hex: :httpoison, optional: false]}, {:poison, "~> 1.3 or ~> 2.0", [hex: :poison, optional: false]}]}, "sentry": {:hex, :sentry, "6.0.4", "b7f93e77cdc2a44a55ec2bec886c3eeab7d562316fecd3000c04b68d1a6b0392", [:mix], [{:hackney, "~> 1.8 or 1.6.5", [hex: :hackney, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}, {:uuid, "~> 1.0", [hex: :uuid, repo: "hexpm", optional: false]}], "hexpm"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, - "stripity_stripe": {:git, "https://github.com/code-corps/stripity_stripe.git", "dfd9b718ba7783c252d1d36af0ad6c8528884086", [branch: "2.0-beta"]}, + "stripity_stripe": {:git, "https://github.com/code-corps/stripity_stripe.git", "1493e42eb5bd39b135a6686912a20ce200d07375", [branch: "2.0-beta"]}, "sweet_xml": {:hex, :sweet_xml, "0.6.5", "dd9cde443212b505d1b5f9758feb2000e66a14d3c449f04c572f3048c66e6697", [:mix], []}, "timber": {:hex, :timber, "2.6.1", "946dee43730b30748c7a3ed0085abe8690dcbaf4cd96031caba676b938dd40a6", [:mix], [{:ecto, ">= 2.0.0 and < 2.3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:msgpax, "~> 1.0", [hex: :msgpax, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.2.0 and < 1.4.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, ">= 1.2.0 and < 1.5.0", [hex: :plug, repo: "hexpm", optional: true]}, {:poison, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, "timex": {:hex, :timex, "3.1.24", "d198ae9783ac807721cca0c5535384ebdf99da4976be8cefb9665a9262a1e9e3", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]},