@@ -31,44 +31,51 @@ defmodule Unity.CLI do
3131 """
3232 @ spec main ( [ String . t ( ) ] ) :: :ok
3333 def main ( args ) do
34- { options , positional , _invalid } =
35- OptionParser . parse ( args ,
36- aliases: [
37- v: :verbose ,
38- t: :terse ,
39- q: :quiet ,
40- h: :help ,
41- d: :digits ,
42- e: :exponential ,
43- o: :output_format ,
44- s: :strict ,
45- f: :file
46- ] ,
47- switches: [
48- verbose: :boolean ,
49- terse: :boolean ,
50- quiet: :boolean ,
51- strict: :boolean ,
52- exponential: :boolean ,
53- one_line: :boolean ,
54- no_color: :boolean ,
55- locale: :string ,
56- digits: :integer ,
57- output_format: :string ,
58- file: :keep ,
59- conformable: :string ,
60- list: :string ,
61- version: :boolean ,
62- help: :boolean
63- ]
64- )
34+ { options , positional , _invalid } = parse_args ( args )
6535
6636 # Load custom unit files before any evaluation
6737 load_custom_unit_files ( options )
6838
6939 # Configure color output
7040 if options [ :no_color ] , do: Application . put_env ( :unity , :no_color , true )
7141
42+ dispatch ( options , positional )
43+ end
44+
45+ defp parse_args ( args ) do
46+ OptionParser . parse ( args ,
47+ aliases: [
48+ v: :verbose ,
49+ t: :terse ,
50+ q: :quiet ,
51+ h: :help ,
52+ d: :digits ,
53+ e: :exponential ,
54+ o: :output_format ,
55+ s: :strict ,
56+ f: :file
57+ ] ,
58+ switches: [
59+ verbose: :boolean ,
60+ terse: :boolean ,
61+ quiet: :boolean ,
62+ strict: :boolean ,
63+ exponential: :boolean ,
64+ one_line: :boolean ,
65+ no_color: :boolean ,
66+ locale: :string ,
67+ digits: :integer ,
68+ output_format: :string ,
69+ file: :keep ,
70+ conformable: :string ,
71+ list: :string ,
72+ version: :boolean ,
73+ help: :boolean
74+ ]
75+ )
76+ end
77+
78+ defp dispatch ( options , positional ) do
7279 cond do
7380 options [ :version ] ->
7481 IO . puts ( "Unity v#{ @ version } " )
@@ -102,24 +109,27 @@ defmodule Unity.CLI do
102109 format_options = build_format_options ( options , nil )
103110
104111 IO . stream ( :stdio , :line )
105- |> Enum . each ( fn line ->
106- expression = String . trim ( line )
112+ |> Enum . each ( & evaluate_stdin_line ( & 1 , format_options ) )
113+ end
107114
108- if expression != "" do
109- expr_options = Keyword . put ( format_options , :input , expression )
115+ defp evaluate_stdin_line ( line , format_options ) do
116+ expression = String . trim ( line )
110117
111- case Unity . eval ( expression ) do
112- { :ok , result , _env } ->
113- case Unity.Formatter . format ( result , expr_options ) do
114- { :ok , formatted } -> IO . puts ( formatted )
115- { :error , reason } -> IO . puts ( :stderr , Unity.Error . format ( reason ) )
116- end
118+ if expression != "" do
119+ expr_options = Keyword . put ( format_options , :input , expression )
117120
118- { :error , message } ->
119- IO . puts ( :stderr , Unity.Error . format ( message ) )
120- end
121+ case Unity . eval ( expression ) do
122+ { :ok , result , _env } -> print_result ( result , expr_options )
123+ { :error , message } -> IO . puts ( :stderr , Unity.Error . format ( message ) )
121124 end
122- end )
125+ end
126+ end
127+
128+ defp print_result ( result , expr_options ) do
129+ case Unity.Formatter . format ( result , expr_options ) do
130+ { :ok , formatted } -> IO . puts ( formatted )
131+ { :error , reason } -> IO . puts ( :stderr , Unity.Error . format ( reason ) )
132+ end
123133 end
124134
125135 defp io_tty? do
@@ -134,34 +144,37 @@ defmodule Unity.CLI do
134144 Localize . put_locale ( locale )
135145 end
136146
137- expression =
138- case positional do
139- # "units - feet" reads from stdin for the source
140- [ "-" , target ] ->
141- source = IO . read ( :stdio , :eof ) |> String . trim ( )
142- "#{ source } to #{ target } "
147+ expression = expression_from ( positional )
148+ format_options = build_format_options ( options , expression )
143149
144- [ expr ] ->
145- expr
150+ case Unity . eval ( expression ) do
151+ { :ok , result , _env } -> print_result_or_exit ( result , format_options )
152+ { :error , message } -> error_exit ( message )
153+ end
154+ end
146155
147- [ from , to ] ->
148- "#{ from } to #{ to } "
156+ defp expression_from ( positional ) do
157+ case positional do
158+ # "units - feet" reads from stdin for the source
159+ [ "-" , target ] ->
160+ source = IO . read ( :stdio , :eof ) |> String . trim ( )
161+ "#{ source } to #{ target } "
149162
150- _ ->
151- Enum . join ( positional , " " )
152- end
163+ [ expr ] ->
164+ expr
153165
154- format_options = build_format_options ( options , expression )
166+ [ from , to ] ->
167+ "#{ from } to #{ to } "
155168
156- case Unity . eval ( expression ) do
157- { :ok , result , _env } ->
158- case Unity.Formatter . format ( result , format_options ) do
159- { :ok , formatted } -> IO . puts ( formatted )
160- { :error , reason } -> error_exit ( reason )
161- end
169+ _ ->
170+ Enum . join ( positional , " " )
171+ end
172+ end
162173
163- { :error , message } ->
164- error_exit ( message )
174+ defp print_result_or_exit ( result , format_options ) do
175+ case Unity.Formatter . format ( result , format_options ) do
176+ { :ok , formatted } -> IO . puts ( formatted )
177+ { :error , reason } -> error_exit ( reason )
165178 end
166179 end
167180
0 commit comments