Skip to content

Commit

Permalink
fast
Browse files Browse the repository at this point in the history
  • Loading branch information
joeldrapper committed Jun 25, 2024
1 parent 3ba2e30 commit 6afc611
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 12 deletions.
6 changes: 4 additions & 2 deletions lib/literal/properties/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ def initialize(properties_index: {}, sorted_properties: [])
@mutex = Mutex.new
end

attr_reader :properties_index

def [](key)
@properties_index[key]
end

def <<(value)
@mutex.synchronize do
@properties_index[value.name] = value
@properties_index[value.name.to_sym] = value
@sorted_properties = @properties_index.values.sort!
end

Expand Down Expand Up @@ -99,7 +101,7 @@ def generate_initializer_params(buffer = +"")
end

def generate_initializer_body(buffer = +"")
buffer << "@literal_properties = properties = self.class.literal_properties\n"
buffer << "@literal_properties = properties = self.class.literal_properties.properties_index\n"
generate_initializer_handle_properties(@sorted_properties, buffer)
buffer << "after_initialize if respond_to?(:after_initialize)\n"
end
Expand Down
21 changes: 11 additions & 10 deletions lib/literal/property.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,9 @@ def generate_reader_method(buffer = +"")
@name <<
"\nvalue = @" <<
@name <<
"\n@literal_properties['" <<
"\n@literal_properties[:" <<
@name <<
"'].check(value)\n" <<
"].check(value)\n" <<
"value\nend\n"
end
end
Expand All @@ -117,15 +117,16 @@ def generate_writer_method(buffer = +"")
" def " <<
@name <<
"=(value)\n" <<
"@literal_properties['" <<
"@literal_properties[:" <<
@name <<
"'].check(value)\n" <<
"].check(value)\n" <<
"@#{@name} = value\nend\n"
end
end

def generate_initializer_handle_property(buffer = +"")
buffer << "# " << @name << "\n"
buffer << "# " << @name << "\n" <<
"property = properties[:" << @name << "]\n"

if @kind == :keyword && ruby_keyword?
generate_initializer_escape_keyword(buffer)
Expand Down Expand Up @@ -159,7 +160,7 @@ def generate_initializer_escape_keyword(buffer = +"")
def generate_initializer_coerce_property(buffer = +"")
buffer <<
escaped_name <<
"= properties['" << @name << "']" << ".coerce(" <<
"= property.coerce(" <<
escaped_name <<
", context: self)\n"
end
Expand All @@ -172,14 +173,14 @@ def generate_initializer_assign_default(buffer = +"")
escaped_name <<
"\n" <<
escaped_name <<
" = properties['" << @name << "'].default_value\nend\n"
" = property.default_value\nend\n"
end

def generate_initializer_check_type(buffer = +"")
buffer <<
"properties['" << @name << "'].check(" <<
escaped_name <<
")\n"
"unless property.type === " << escaped_name << "\n" <<
"raise Literal::TypeError.expected(" << escaped_name << ", to_be_a: " << "properties[:" << @name << "].type)\n" <<
"end\n"
end

def generate_initializer_assign_value(buffer = +"")
Expand Down

0 comments on commit 6afc611

Please sign in to comment.