update benchmark with results on my imac + tweak ui in order to reflect changes about with liquid inheritance

This commit is contained in:
dinedine 2010-08-08 15:16:32 +02:00
parent 4f06dab51e
commit fbda6a17f9
7 changed files with 67 additions and 55 deletions

View File

@ -6,6 +6,8 @@ module Models
extend ActiveSupport::Concern
included do
embeds_many :parts, :class_name => 'PagePart'
before_validation do |p|
if p.parts.empty?
p.parts << PagePart.build_body_part(p.respond_to?(:body) ? p.body : nil)

View File

@ -4,9 +4,9 @@ module Models
module Render
def render(context)
# ::Liquid::Template.parse(self.layout_template)
self.template.render(context)
# FIXME : old code based on layout / parts
# self.template.render(context)
#
# if self.layout

View File

@ -1,8 +1,8 @@
class Layout < LiquidTemplate
## associations ##
references_many :pages
embeds_many :parts, :class_name => 'PagePart'
# references_many :pages
# embeds_many :parts, :class_name => 'PagePart'
## callbacks ##
# before_save :build_parts_from_value
@ -13,36 +13,36 @@ class Layout < LiquidTemplate
## methods ##
protected
def build_parts_from_value
if self.value_changed? || self.new_record?
self.parts.each { |p| p.disabled = true }
self.value.scan(Locomotive::Regexps::CONTENT_FOR).each do |attributes|
slug = attributes[0].strip.downcase
name = slug.humanize
name = I18n.t('attributes.defaults.page_parts.name') if slug == 'layout'
if part = self.parts.detect { |p| p.slug == slug }
part.name = name if name.present?
part.disabled = false
else
self.parts.build :slug => slug, :name => name || slug
end
end
# body always first
body = self.parts.detect { |p| p.slug == 'layout' }
self.parts.delete(body)
self.parts.insert(0, body)
@_update_pages = true if self.value_changed?
end
end
def update_parts_in_pages
self.pages.each { |p| p.send(:update_parts!, self.parts) } if @_update_pages
end
# protected
#
# def build_parts_from_value
# if self.value_changed? || self.new_record?
# self.parts.each { |p| p.disabled = true }
#
# self.value.scan(Locomotive::Regexps::CONTENT_FOR).each do |attributes|
# slug = attributes[0].strip.downcase
# name = slug.humanize
# name = I18n.t('attributes.defaults.page_parts.name') if slug == 'layout'
#
# if part = self.parts.detect { |p| p.slug == slug }
# part.name = name if name.present?
# part.disabled = false
# else
# self.parts.build :slug => slug, :name => name || slug
# end
# end
#
# # body always first
# body = self.parts.detect { |p| p.slug == 'layout' }
# self.parts.delete(body)
# self.parts.insert(0, body)
#
# @_update_pages = true if self.value_changed?
# end
# end
#
# def update_parts_in_pages
# self.pages.each { |p| p.send(:update_parts!, self.parts) } if @_update_pages
# end
end

View File

@ -15,15 +15,14 @@ class Page
field :published, :type => Boolean, :default => false
field :cache_strategy, :default => 'none'
field :layout_template # FIXME: liquid inheritance
field :layout_template # FIXME: added for liquid inheritance
# allows newly pages to have a default body
attr_accessor :body
## associations ##
referenced_in :site
referenced_in :layout
embeds_many :parts, :class_name => 'PagePart'
# referenced_in :layout
## callbacks ##
before_validation :normalize_slug

View File

@ -6,7 +6,7 @@
= f.input :title
= f.input :layout_id, :as => :select, :collection => current_site.layouts.all.to_a, :input_html => { :data_url => admin_layout_page_parts_url('_id_to_replace_') }
/ = f.input :layout_id, :as => :select, :collection => current_site.layouts.all.to_a, :input_html => { :data_url => admin_layout_page_parts_url('_id_to_replace_') }
- if not @page.index? and not @page.not_found?
= f.input :parent_id, :as => :select, :collection => parent_pages_options, :include_blank => false
@ -23,18 +23,25 @@
= f.input :cache_strategy, :as => :select, :collection => options_for_page_cache_strategy, :include_blank => false
#page-parts
.nav
- @page.parts.each_with_index do |part, index|
= link_to content_tag(:span, part.name), "#parts-#{index + 1}", :id => "control-part-#{part.slug}", :class => "part-#{index} #{'on' if index == 0}", :style => "#{'display: none' if part.disabled?}"
.clear
= f.foldable_inputs :name => :code do
= f.custom_input :value, :css => 'code full', :with_label => false do
%code{ :class => 'html' }
= f.text_area :layout_template
/ .more
/ = link_to t('admin.image_picker.link'), admin_theme_assets_path, :id => 'image-picker-link'
.wrapper
%ul{ :id => "parts" }
= f.fields_for :parts do |g|
%li{ :style => "#{'display: none' if g.object.disabled?}" }
= g.label :value, g.object.name, :style => "display:none"
%code= g.text_area :value
= g.hidden_field :name
= g.hidden_field :slug
= g.hidden_field :disabled, :class => 'disabled'
/ #page-parts
/ .nav
/ - @page.parts.each_with_index do |part, index|
/ = link_to content_tag(:span, part.name), "#parts-#{index + 1}", :id => "control-part-#{part.slug}", :class => "part-#{index} #{'on' if index == 0}", :style => "#{'display: none' if part.disabled?}"
/ .clear
/
/ .wrapper
/ %ul{ :id => "parts" }
/ = f.fields_for :parts do |g|
/ %li{ :style => "#{'display: none' if g.object.disabled?}" }
/ = g.label :value, g.object.name, :style => "display:none"
/ %code= g.text_area :value
/ = g.hidden_field :name
/ = g.hidden_field :slug
/ = g.hidden_field :disabled, :class => 'disabled'

View File

@ -8,7 +8,8 @@ defaults: &defaults
development:
<<: *defaults
database: locomotive_dev
# database: locomotive_dev
database: locomotive_le_dev # FIXME: new db for our tests
test:
<<: *defaults

View File

@ -59,5 +59,8 @@ Benchmark.bm do |bm|
end
end
# without liquify (macbook white): User System Total Real
# Rendering page 10k times 22.650000 6.220000 28.870000 ( 30.294338)
# without liquify (macbook white): User System Total Real
# Rendering page 10k times 22.650000 6.220000 28.870000 ( 30.294338)
# without liquify (imac 27'): User System Total Real
# Rendering page 10k times 13.390000 1.700000 15.090000 ( 15.654966)