class RailsVueHelpers::VueComponentBuilder
Public Class Methods
new(template, component_name, **props)
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 3 def initialize(template, component_name, **props) @component_name = component_name @props = props @template = template @raw = @props[:raw] end
Public Instance Methods
sanitized_component_name()
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 18 def sanitized_component_name ActiveSupport::Inflector.underscore(@component_name.to_s).tr('_', '-') end
to_html(&block)
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 10 def to_html(&block) if block_given? ActiveSupport::SafeBuffer.new("<#{sanitized_component_name} #{attributes} #{@raw}>#{capture(&block)}</#{sanitized_component_name}>") else ActiveSupport::SafeBuffer.new("<#{sanitized_component_name} #{attributes} #{@raw}></#{sanitized_component_name}>") end end
Private Instance Methods
attributes()
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 24 def attributes [binded_props, event_props, regular_props].flatten.join(' ') end
binded_props()
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 28 def binded_props binded_props = @props[:binded] || {} binded_props.map { |key, value| transpile_binded_prop(key, value) } end
event_props()
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 33 def event_props event_props = @props[:events] || {} event_props.map { |key, value| transpile_event_prop(key, value) } end
regular_props()
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 38 def regular_props regular_props = @props.reject { |key, value| [:events, :binded, :raw].include?(key) } regular_props.map { |key, value| transpile_regular_prop(key, value) } end
transpile_binded_prop(key, value)
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 55 def transpile_binded_prop(key, value) normalized_key = ActiveSupport::Inflector.underscore(key.to_s).tr('_', '-') normalized_value = value unless value.is_a?(String) # if there are some single quotes in the text, make them in ASCII # so HTML doesn't brake normalized_value = value.to_json.gsub("'", "'") end "v-bind:#{normalized_key}='#{normalized_value}'" end
transpile_event_prop(key, value)
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 66 def transpile_event_prop(key, value) normalized_key = key.to_s.underscore.tr('_', '-') "v-on:#{normalized_key}='#{value}'" end
transpile_regular_prop(key, value)
click to toggle source
# File lib/rails_vue_helpers/vue_component_builder.rb, line 43 def transpile_regular_prop(key, value) normalized_key = key.to_s.underscore.tr('_', '-') normalized_value = value if value.is_a?(Array) normalized_value = value.to_s.tr('"', '\'') elsif value =~ /"/ normalized_value = value.tr('"', '\'') end "#{normalized_key}=\"#{normalized_value}\" " end