Class: Literal::Attributable::Generators::Initializer

Inherits:
Base
  • Object
show all
Defined in:
lib/literal/attributable/generators/initializer.rb

Direct Known Subclasses

IVarInitializer, StructInitializer

Instance Attribute Summary

Attributes included from Nodes

#nodes

Instance Method Summary collapse

Methods inherited from Base

#call

Methods included from Nodes

node

Constructor Details

#initialize(attributes) ⇒ Initializer

Returns a new instance of Initializer.



5
6
7
# File 'lib/literal/attributable/generators/initializer.rb', line 5

def initialize(attributes)
	@attributes = attributes
end

Instance Method Details

#assign_default(attribute) ⇒ Object (private)



92
93
94
# File 'lib/literal/attributable/generators/initializer.rb', line 92

def assign_default(attribute)
	DefaultAssignment.new(attribute) if attribute.default?
end

#assign_schemaObject (private)



62
63
64
# File 'lib/literal/attributable/generators/initializer.rb', line 62

def assign_schema
	AssignSchema.new
end

#bodyObject (private)



54
55
56
57
58
59
60
# File 'lib/literal/attributable/generators/initializer.rb', line 54

def body
	[
		assign_schema,
		handle_attributes,
		initializer_callback
	]
end

#check_type(attribute) ⇒ Object (private)



96
97
98
99
100
101
# File 'lib/literal/attributable/generators/initializer.rb', line 96

def check_type(attribute)
	TypeCheck.new(
		attribute_name: attribute.name,
		variable_name: attribute.escaped
	)
end

#coerce_attribute(attribute) ⇒ Object (private)



88
89
90
# File 'lib/literal/attributable/generators/initializer.rb', line 88

def coerce_attribute(attribute)
	AttributeCoercion.new(attribute) if attribute.coercion?
end

#escape_keyword(attribute) ⇒ Object (private)



84
85
86
# File 'lib/literal/attributable/generators/initializer.rb', line 84

def escape_keyword(attribute)
	KeywordEscape.new(attribute) if attribute.escape?
end

#handle_attributesObject (private)



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/literal/attributable/generators/initializer.rb', line 66

def handle_attributes
	Section.new(
		name: "Handle attributes",
		body: @attributes.each_value.map do |attribute|
			Section.new(
				name: attribute.name,
				body: [
					escape_keyword(attribute),
					coerce_attribute(attribute),
					assign_default(attribute),
					check_type(attribute),
					assign_value(attribute)
				].compact
			)
		end
	)
end

#initializer_callbackObject (private)



103
104
105
# File 'lib/literal/attributable/generators/initializer.rb', line 103

def initializer_callback
	InitializerCallback.new
end

#paramsObject (private)



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/literal/attributable/generators/initializer.rb', line 20

def params
	@attributes.each_value.map do |attribute|
		case attribute.special
		when :*
			PositionalSplat.new(attribute:)
		when :**
			KeywordSplat.new(attribute:)
		when :&
			BlockParam.new(attribute:)
		else
			if attribute.positional
				if attribute.default?
					PositionalParam.new(
						name: attribute.name,
						default: "Literal::Null"
					)
				elsif attribute.type === nil
					PositionalParam.new(
						name: attribute.name,
						default: "nil"
					)
				else
					PositionalParam.new(
						name: attribute.name,
						default: nil
					)
				end
			else
				KeywordParam.new(attribute:)
			end
		end
	end
end

#templateObject



9
10
11
12
13
14
15
16
# File 'lib/literal/attributable/generators/initializer.rb', line 9

def template
	Def.new(
		visibility: :public,
		name: "initialize",
		params:,
		body:
	)
end