Skip to content

Commit d5ea973

Browse files
committed
Add pattern matching in function header
1 parent f7793e6 commit d5ea973

7 files changed

Lines changed: 58 additions & 42 deletions

File tree

lib/sanbase/alerts/trigger/settings/screener_trigger_settings.ex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,11 @@ defmodule Sanbase.Alert.Trigger.ScreenerTriggerSettings do
9191
end
9292
end
9393

94-
defp fill_current_state(trigger) do
95-
%{settings: settings} = trigger
94+
defp fill_current_state(%Sanbase.Alert.Trigger{} = trigger) do
95+
%{settings: %ScreenerTriggerSettings{} = settings} = trigger
9696

9797
with {:ok, slugs} <- get_data(settings) do
9898
settings = %{settings | state: %{slugs_in_screener: slugs}}
99-
10099
trigger = %{trigger | settings: settings}
101100
{:ok, trigger}
102101
end

lib/sanbase/alerts/trigger/settings/trending_words_trigger_settings.ex

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
100100

101101
defp build_result(
102102
top_words,
103-
%{operation: %{send_at_predefined_time: true, trigger_time: trigger_time}} = settings
103+
%TrendingWordsTriggerSettings{
104+
operation: %{send_at_predefined_time: true, trigger_time: trigger_time}
105+
} = settings
104106
) do
105107
trigger_time = Sanbase.DateTimeUtils.time_from_iso8601!(trigger_time)
106108
now = Time.utc_now()
@@ -121,7 +123,10 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
121123

122124
defp build_result(
123125
top_words,
124-
%{operation: %{trending_word: true}, filtered_target: %{list: words}} = settings
126+
%TrendingWordsTriggerSettings{
127+
operation: %{trending_word: true},
128+
filtered_target: %{list: words}
129+
} = settings
125130
) do
126131
top_words = top_words |> Enum.map(&String.downcase(&1.word))
127132

@@ -144,7 +149,10 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
144149

145150
defp build_result(
146151
top_words,
147-
%{operation: %{trending_project: true}, filtered_target: %{list: slugs}} = settings
152+
%TrendingWordsTriggerSettings{
153+
operation: %{trending_project: true},
154+
filtered_target: %{list: slugs}
155+
} = settings
148156
) do
149157
projects = Project.List.by_slugs(slugs)
150158

@@ -183,7 +191,9 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
183191
end
184192

185193
defp template_kv(
186-
%{operation: %{send_at_predefined_time: true, trigger_time: trigger_time}} = settings,
194+
%TrendingWordsTriggerSettings{
195+
operation: %{send_at_predefined_time: true, trigger_time: trigger_time}
196+
} = settings,
187197
top_words
188198
) do
189199
max_len = get_max_len(top_words)
@@ -221,7 +231,10 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
221231
|> maybe_extend_with_explanation(settings)
222232
end
223233

224-
defp template_kv(%{operation: %{trending_word: true}} = settings, [word]) do
234+
defp template_kv(
235+
%TrendingWordsTriggerSettings{operation: %{trending_word: true}} = settings,
236+
[word]
237+
) do
225238
kv = %{
226239
type: TrendingWordsTriggerSettings.type(),
227240
operation: settings.operation,
@@ -239,7 +252,10 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
239252
|> maybe_extend_with_explanation(settings)
240253
end
241254

242-
defp template_kv(%{operation: %{trending_word: true}} = settings, [_, _ | _] = words) do
255+
defp template_kv(
256+
%TrendingWordsTriggerSettings{operation: %{trending_word: true}} = settings,
257+
[_, _ | _] = words
258+
) do
243259
{last, previous} = List.pop_at(words, -1)
244260
words_str = (Enum.map(previous, &"**#{&1}**") |> Enum.join(",")) <> " and **#{last}**"
245261

@@ -260,7 +276,10 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
260276
|> maybe_extend_with_explanation(settings)
261277
end
262278

263-
defp template_kv(%{operation: %{trending_project: true}} = settings, project) do
279+
defp template_kv(
280+
%TrendingWordsTriggerSettings{operation: %{trending_project: true}} = settings,
281+
project
282+
) do
264283
kv = %{
265284
type: TrendingWordsTriggerSettings.type(),
266285
operation: settings.operation,
@@ -304,7 +323,7 @@ defmodule Sanbase.Alert.Trigger.TrendingWordsTriggerSettings do
304323
{template, kv}
305324
end
306325

307-
defp maybe_extend_with_explanation({template, kv}, settings) do
326+
defp maybe_extend_with_explanation({template, kv}, %TrendingWordsTriggerSettings{} = settings) do
308327
default_explanation =
309328
case settings.include_default_explanation do
310329
true -> @default_explanation

lib/sanbase/alerts/trigger/settings/wallet/wallet_assets_held_trigger_settings.ex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ defmodule Sanbase.Alert.Trigger.WalletAssetsHeldTriggerSettings do
5858
@spec type() :: String.t()
5959
def type(), do: @trigger_type
6060

61-
def post_create_process(trigger), do: fill_current_state(trigger)
62-
def post_update_process(trigger), do: fill_current_state(trigger)
61+
def post_create_process(%Sanbase.Alert.Trigger{} = trigger), do: fill_current_state(trigger)
62+
def post_update_process(%Sanbase.Alert.Trigger{} = trigger), do: fill_current_state(trigger)
6363

64-
defp fill_current_state(trigger) do
65-
%{settings: settings} = trigger
64+
defp fill_current_state(%Sanbase.Alert.Trigger{} = trigger) do
65+
%{settings: %WalletAssetsHeldTriggerSettings{} = settings} = trigger
6666

6767
temp_settings =
6868
Map.put(settings, :filtered_target, Sanbase.Alert.Trigger.get_filtered_target(trigger))
@@ -80,7 +80,7 @@ defmodule Sanbase.Alert.Trigger.WalletAssetsHeldTriggerSettings do
8080
@doc ~s"""
8181
Return a list of the `settings.metric` values for the necessary time range
8282
"""
83-
def get_data(%__MODULE__{
83+
def get_data(%WalletAssetsHeldTriggerSettings{
8484
filtered_target: %{list: target_list},
8585
selector: selector
8686
}) do
@@ -109,7 +109,7 @@ defmodule Sanbase.Alert.Trigger.WalletAssetsHeldTriggerSettings do
109109
{:ok, data}
110110
end
111111

112-
defp assets_held(selector) do
112+
defp assets_held(%{} = selector) do
113113
cache_key =
114114
{__MODULE__, :assets_held, selector, round_datetime(DateTime.utc_now())}
115115
|> Sanbase.Cache.hash()
@@ -167,7 +167,7 @@ defmodule Sanbase.Alert.Trigger.WalletAssetsHeldTriggerSettings do
167167
])
168168
end
169169

170-
defp template_kv(values, settings) do
170+
defp template_kv(values, %WalletAssetsHeldTriggerSettings{} = settings) do
171171
%{added_slugs: added_slugs, removed_slugs: removed_slugs} = values
172172

173173
kv = %{

lib/sanbase/external_services/etherscan/scraper.ex

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ defmodule Sanbase.ExternalServices.Etherscan.Scraper do
22
# credo:disable-for-this-file
33
use Tesla
44

5-
alias Decimal, as: D
65
alias Sanbase.ExternalServices.RateLimiting
7-
alias Sanbase.ExternalServices.ProjectInfo
86
alias Sanbase.ExternalServices.ErrorCatcher
97

108
require Logger
@@ -131,8 +129,8 @@ defmodule Sanbase.ExternalServices.Etherscan.Scraper do
131129
match ->
132130
Floki.text(match)
133131
|> parse_total_supply()
134-
|> D.round()
135-
|> D.to_integer()
132+
|> Decimal.round()
133+
|> Decimal.to_integer()
136134
end
137135
end
138136

@@ -171,6 +169,6 @@ defmodule Sanbase.ExternalServices.Etherscan.Scraper do
171169
|> String.split()
172170
|> Enum.find(fn x -> String.starts_with?(x, "Supply") end)
173171
|> (fn supply -> String.trim(supply, "Supply:") end).()
174-
|> D.new()
172+
|> Decimal.new()
175173
end
176174
end

lib/sanbase/external_services/project_info.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ defmodule Sanbase.ExternalServices.ProjectInfo do
7070
missing_values? or !Project.has_contract_address?(project)
7171
end
7272

73-
def from_project(project) do
73+
def from_project(%Project{} = project) do
7474
project_info =
7575
struct(__MODULE__, Map.to_list(project))
7676
|> struct(Map.to_list(find_or_create_initial_ico(project)))
@@ -140,7 +140,7 @@ defmodule Sanbase.ExternalServices.ProjectInfo do
140140
end
141141

142142
defp maybe_add_contract_address(
143-
project,
143+
%Project{} = project,
144144
%{main_contract_address: contract_address} = project_info_map
145145
)
146146
when is_binary(contract_address) do
@@ -161,9 +161,9 @@ defmodule Sanbase.ExternalServices.ProjectInfo do
161161
Repo.preload(project, [:contract_addresses], force: true)
162162
end
163163

164-
defp maybe_add_contract_address(project, _project_info_map), do: project
164+
defp maybe_add_contract_address(%Project{} = project, _project_info_map), do: project
165165

166-
defp insert_tag({:ok, project}, project_info) do
166+
defp insert_tag({:ok, %Project{} = project}, %ProjectInfo{} = project_info) do
167167
do_insert_tag(project, project_info)
168168
{:ok, project}
169169
end
@@ -188,7 +188,7 @@ defmodule Sanbase.ExternalServices.ProjectInfo do
188188

189189
defp do_insert_tag(_, _), do: :ok
190190

191-
defp find_or_create_initial_ico(project) do
191+
defp find_or_create_initial_ico(%Project{} = project) do
192192
case Project.initial_ico(project) do
193193
nil -> %Ico{project_id: project.id}
194194
ico -> ico

lib/sanbase_web/graphql/middlewares/access_control/access_control.ex

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,11 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
138138

139139
# The auth method is not `basic` and the slug is not one of the freely available slugs
140140
# all of the required checks are done
141-
defp check_has_access(resolution, opts) do
141+
defp check_has_access(%Resolution{} = resolution, opts) do
142142
full_check_has_access(resolution, opts)
143143
end
144144

145-
defp full_check_has_access(resolution, opts) do
145+
defp full_check_has_access(%Resolution{} = resolution, opts) do
146146
resolution
147147
|> apply_if_not_resolved(&check_experimental_metric_access/1)
148148
|> apply_if_not_resolved(&check_plan_has_access/1)
@@ -161,7 +161,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
161161
resolution
162162
end
163163

164-
defp apply_if_not_resolved(resolution, fun) do
164+
defp apply_if_not_resolved(%Resolution{} = resolution, fun) do
165165
fun.(resolution)
166166
end
167167

@@ -183,7 +183,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
183183

184184
defp check_experimental_metric_access(%Resolution{} = resolution), do: resolution
185185

186-
defp do_check_experimental_metric(current_user, metric, resolution) do
186+
defp do_check_experimental_metric(current_user, metric, %Resolution{} = resolution) do
187187
if user_can_access_metric?(current_user, metric.status) do
188188
resolution
189189
else
@@ -223,7 +223,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
223223
#
224224
# The shared access token is checked first and if it gives access to the
225225
# request, the user plan access is bypassed
226-
defp check_plan_has_access(resolution) do
226+
defp check_plan_has_access(%Resolution{} = resolution) do
227227
case check_shared_access_token_has_access?(resolution) do
228228
true -> resolution
229229
false -> check_user_plan_has_access(resolution)
@@ -299,7 +299,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
299299

300300
# If the query is marked as having free realtime and historical data
301301
# do not restrict anything
302-
defp maybe_apply_restrictions(resolution, %{
302+
defp maybe_apply_restrictions(%Resolution{} = resolution, %{
303303
allow_realtime_data: true,
304304
allow_historical_data: true
305305
}) do
@@ -322,11 +322,11 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
322322
end
323323
end
324324

325-
defp maybe_apply_restrictions(resolution, _) do
325+
defp maybe_apply_restrictions(%Resolution{} = resolution, _) do
326326
resolution
327327
end
328328

329-
defp restricted_query(resolution, middleware_args, query_or_argument) do
329+
defp restricted_query(%Resolution{} = resolution, middleware_args, query_or_argument) do
330330
args =
331331
case restricted_query_shared_access_token(
332332
resolution,
@@ -383,7 +383,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
383383
}
384384
end
385385

386-
defp restricted_query_shared_access_token(_, _, _), do: nil
386+
defp restricted_query_shared_access_token(%Resolution{} = _, _, _), do: nil
387387

388388
defp restricted_query_user_plan(
389389
%Resolution{arguments: %{from: from, to: to}, context: context},
@@ -440,7 +440,7 @@ defmodule SanbaseWeb.Graphql.Middlewares.AccessControl do
440440
end
441441
end
442442

443-
defp not_restricted_query(resolution, _middleware_args) do
443+
defp not_restricted_query(%Resolution{} = resolution, _middleware_args) do
444444
resolution
445445
end
446446

lib/sanbase_web/graphql/middlewares/transform_resolution.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,28 @@ defmodule SanbaseWeb.Graphql.Middlewares.TransformResolution do
1616
|> do_call(resolution)
1717
end
1818

19-
defp do_call(:get_metric, %{context: context} = resolution) do
19+
defp do_call(:get_metric, %Resolution{context: context} = resolution) do
2020
%{arguments: %{metric: metric}} = resolution
2121
selectors = get_selectors(resolution)
2222
elem = {:get_metric, metric, selectors}
2323

2424
%{resolution | context: Map.update(context, :__get_query_name_arg__, [elem], &[elem | &1])}
2525
end
2626

27-
defp do_call(:get_signal, %{context: context} = resolution) do
27+
defp do_call(:get_signal, %Resolution{context: context} = resolution) do
2828
%{arguments: %{signal: signal}} = resolution
2929
selectors = get_selectors(resolution)
3030
elem = {:get_signal, signal, selectors}
3131

3232
%{resolution | context: Map.update(context, :__get_query_name_arg__, [elem], &[elem | &1])}
3333
end
3434

35-
defp do_call(_query_field, resolution) do
35+
defp do_call(_query_field, %Resolution{} = resolution) do
3636
resolution
3737
end
3838

3939
@fields_with_selector ["timeseriesData", "timeseriesDataPerSlug", "aggregatedTimeseriesData"]
40-
defp get_selectors(resolution) do
40+
defp get_selectors(%Resolution{} = resolution) do
4141
resolution.definition.selections
4242
|> Enum.map(fn %{name: name} = field ->
4343
case Inflex.camelize(name, :lower) do

0 commit comments

Comments
 (0)