Module: Jade::Stdlib
- Extended by:
- Stdlib
- Included in:
- Stdlib
- Defined in:
- lib/jade/stdlib.rb,
lib/jade/stdlib/set.rb,
lib/jade/stdlib/char.rb,
lib/jade/stdlib/dict.rb,
lib/jade/stdlib/list.rb,
lib/jade/stdlib/show.rb,
lib/jade/stdlib/task.rb,
lib/jade/stdlib/bytes.rb,
lib/jade/stdlib/clock.rb,
lib/jade/stdlib/debug.rb,
lib/jade/stdlib/maybe.rb,
lib/jade/stdlib/tuple.rb,
lib/jade/stdlib/basics.rb,
lib/jade/stdlib/decode.rb,
lib/jade/stdlib/encode.rb,
lib/jade/stdlib/result.rb,
lib/jade/stdlib/string.rb,
lib/jade/stdlib/decimal.rb,
lib/jade/stdlib/calendar.rb,
lib/jade/stdlib/compiled.rb,
lib/jade/stdlib/intrinsics.rb,
lib/jade/stdlib/decode/params.rb
Defined Under Namespace
Modules: Basics, Bytes, Calendar, Char, Clock, Compiled, Debug, Decimal, Decode, Dict, Encode, Intrinsics, List, Maybe, Result, Set, Show, String, Task, Tuple
Constant Summary
collapse
- INTRINSICS =
%w[
Basics String List Tuple Char Task
Decode Encode
Bytes
Dict Set
Show Debug
].freeze
- COMPILED =
%w[Maybe Result Decode.Params Calendar Clock Decimal].freeze
- TOPLEVELS =
(INTRINSICS + COMPILED).map { it.split('.', 2).first }.to_set.freeze
- STDLIBS =
[
Stdlib::Basics, Stdlib::Maybe, Stdlib::Tuple, Stdlib::List, Stdlib::Char,
Stdlib::String, Stdlib::Result, Stdlib::Task,
Stdlib::Dict, Stdlib::Set,
Stdlib::Decode, Stdlib::Decode::Params, Stdlib::Encode,
Stdlib::Bytes,
Stdlib::Calendar, Stdlib::Clock, Stdlib::Decimal, Stdlib::Show, Stdlib::Debug,
]
- EXTENSIONS =
Loaded into the registry but not auto-imported into user modules.
[
Stdlib::Dict, Stdlib::Set,
Stdlib::Decode, Stdlib::Decode::Params, Stdlib::Encode,
Stdlib::Calendar, Stdlib::Clock, Stdlib::Decimal, Stdlib::Show, Stdlib::Debug,
]
- PRIVATE_CONSTRUCTORS =
%w[Tuple.Tuple2 Tuple.Tuple3 Tuple.Tuple4].freeze
Instance Method Summary
collapse
Instance Method Details
#apply(registry) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/jade/stdlib.rb', line 55
def apply(registry)
user_entries = registry
.modules
.values
.reject { is_stdlib?(it) }
user_entries
.reduce(registry) do |acc, entry|
add_imports(entry)
.then { acc.add_module(it) }
end
end
|
#is_intrinsic?(entry) ⇒ Boolean
80
81
82
|
# File 'lib/jade/stdlib.rb', line 80
def is_intrinsic?(entry)
INTRINSICS.include? entry.name
end
|
#is_stdlib?(entry) ⇒ Boolean
88
89
90
|
# File 'lib/jade/stdlib.rb', line 88
def is_stdlib?(entry)
is_intrinsic?(entry) || COMPILED.include?(entry.name)
end
|
#load(registry) ⇒ Object
50
51
52
53
|
# File 'lib/jade/stdlib.rb', line 50
def load(registry)
registry
.then { load_stdlib(registry) }
end
|
#private_constructor?(name) ⇒ Boolean
84
85
86
|
# File 'lib/jade/stdlib.rb', line 84
def private_constructor?(name)
PRIVATE_CONSTRUCTORS.include?(name)
end
|
#requires(name) ⇒ Object
69
70
71
72
73
74
75
76
|
# File 'lib/jade/stdlib.rb', line 69
def requires(name)
return [] if COMPILED.include?(name)
prefix = '../' * name.count('.')
COMPILED
.map { it.downcase.tr('.', '/') }
.map { "require_relative '#{prefix}#{it}'" }
end
|
#stdlib_name?(qualified_name) ⇒ Boolean
92
93
94
95
96
|
# File 'lib/jade/stdlib.rb', line 92
def stdlib_name?(qualified_name)
dot = qualified_name.index('.')
first = dot ? qualified_name[0, dot] : qualified_name
TOPLEVELS.include?(first)
end
|