Skip to content

Commit

Permalink
Implemented 'tag_cloud' support in sqliss.
Browse files Browse the repository at this point in the history
  • Loading branch information
gaspard committed Mar 6, 2013
1 parent 773fc13 commit c43d071
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 51 deletions.
1 change: 1 addition & 0 deletions History.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* Added "in_group" zafu method on visitor. <== TODO: Document
* Added [upload_field] method to zafu to allow custom upload forms. <== TODO: Document
* Added support for custom images on nodes with the "img_tag_{mode}" string attribute or the 'img_tag' hash attribute. <== TODO: Document
* Added support for tag clouds through sqliss (<r:void do='tag_cloud from nodes in site' do='each' join=', '><r:name/> (<r:link_count/>)</r:void>). <== TODO: Document

* Minor changes
* Support for 'lang_list' when creating vhost file <== TODO: Document
Expand Down
14 changes: 14 additions & 0 deletions app/models/link.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
class Link < ActiveRecord::Base
include Zena::Use::QueryLink::ModelMethods

include RubyLess
safe_attribute :status, :comment, :date
# Used in tag cloud
safe_method :name => String
safe_method :link_count => Number

attr_reader :relation
attr_accessor :start, :side
Expand Down Expand Up @@ -118,4 +123,13 @@ def relation_proxy(node=nil)
def role
relation_proxy.other_role
end

# Used by tags
def name
comment
end

def link_count
read_attribute('link_count') || 0
end
end
6 changes: 5 additions & 1 deletion bricks/tags/zena/test/zafu/tags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,8 @@ tag_names:

checkbox_tagged:
src: "<r:input type='checkbox' name='tagged[blue]'/>"
res: "<input type='hidden' name='node[tagged][blue]' value=''/><input type='checkbox' name='node[tagged][blue]' value='blue' checked='checked'/>"
res: "<input type='hidden' name='node[tagged][blue]' value=''/><input type='checkbox' name='node[tagged][blue]' value='blue' checked='checked'/>"

tag_cloud:
src: "<r:void do='tag_cloud from nodes in site' do='each' join=', '><r:name/> (<r:link_count/>)</r:void>"
res: "blue (2), sky (1)"
57 changes: 57 additions & 0 deletions lib/zena/use/query_link.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
require 'querybuilder'

module Zena
module Use
class QueryLink

module ModelMethods
def self.included(base)
base.send(:include, ::QueryBuilder)
base.extend ClassMethods
base.query_compiler = Zena::Use::QueryLink::Compiler
end
end

module ClassMethods
# Find a node and propagate visitor
def do_find(count, query)
case count
when :all
res = find_by_sql(query)
res.empty? ? nil : res
when :first
find_by_sql(query).first
when :count
count_by_sql(query)
else
nil
end
end
end


class Compiler < ::QueryBuilder::Processor
attr_reader :node_name
set_main_table 'links'
set_main_class 'Link'
set_default :order, 'comment ASC'

# Overwrite this and take car to check for valid fields.
def process_field(field_name)
if %w{comment status date name}.include?(field_name)
field_name = 'comment' if field_name == 'name'
"#{table}.#{field_name}"
else
super # raise an error
end
end

def map_attr(fld)
# error
nil
end
end # Compiler

end # QueryLink
end # Use
end # Zena
18 changes: 18 additions & 0 deletions lib/zena/use/query_node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,24 @@ def class_relation(relation)
add_filter "#{table('comments')}.discussion_id = #{table('discussions')}.id"
# after_parse
end
when 'tag_cloud'
# tag cloud
if last?
change_processor Link.query_compiler, :rubyless_helper => @rubyless_helper
# no need to load discussions, versions and all the mess
add_table('links')
lnk = table('links')
add_filter "(#{lnk}.source_id = #{process_attr('id')} OR #{lnk}.target_id = #{process_attr('id')}) AND #{lnk}.relation_id IS NULL"
else
after_process # Make sure we secure the current part
change_processor Link.query_compiler, :rubyless_helper => @rubyless_helper

add_table('links')
lnk = table('links')
add_filter "(#{lnk}.source_id = #{table('nodes')}.id OR #{lnk}.target_id = #{table('nodes')}.id) AND #{lnk}.relation_id IS NULL"
end
@query.group = " GROUP BY #{lnk}.comment"
add_select("COUNT(#{table('nodes')}.id)", 'link_count')
else
return nil
end
Expand Down
3 changes: 2 additions & 1 deletion test/integration/zafu_compiler/display.yml
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,7 @@ with_a_custom_img_tag_field_with_JS:
src: "<r:zazen text='A:!22!'/> C:<r:img/>"
res: "<div class='zazen'><p>A:blah blah blah blah </p></div> C:blah blah blah blah "
js: "/\nsome js\nmore JS\nsome js\nmore JS\n/"

invalid_document:
src: "<r:zazen text='!21!'/>"
res: "/images/ext/project.png/"
res: "/images/ext/project.png/"
99 changes: 50 additions & 49 deletions zena.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Gem::Specification.new do |s|

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Gaspard Bucher"]
s.date = %q{2013-03-01}
s.date = %q{2013-03-06}
s.default_executable = %q{zena}
s.description = %q{zena is a Ruby on Rails CMS (content managment system) with a focus on usability, ease of customization and web 2.0 goodness (application like behaviour).}
s.email = %q{gaspard@teti.ch}
Expand Down Expand Up @@ -679,6 +679,7 @@ Gem::Specification.new do |s|
"lib/zena/use/prop_eval.rb",
"lib/zena/use/query_builder.rb",
"lib/zena/use/query_comment.rb",
"lib/zena/use/query_link.rb",
"lib/zena/use/query_node.rb",
"lib/zena/use/recursion.rb",
"lib/zena/use/refactor.rb",
Expand Down Expand Up @@ -2473,83 +2474,83 @@ Gem::Specification.new do |s|

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<gettext>, ["= 2.1.0"])
s.add_runtime_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_runtime_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_runtime_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_runtime_dependency(%q<json>, ["= 1.5.1"])
s.add_runtime_dependency(%q<property>, ["= 2.3.2"])
s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
s.add_runtime_dependency(%q<rails>, ["= 2.3.11"])
s.add_runtime_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
s.add_runtime_dependency(%q<open4>, [">= 0"])
s.add_runtime_dependency(%q<property>, ["= 2.3.2"])
s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
s.add_runtime_dependency(%q<daemons>, [">= 0"])
s.add_runtime_dependency(%q<rubyless>, ["= 0.8.8"])
s.add_runtime_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
s.add_runtime_dependency(%q<httparty>, ["= 0.7.8"])
s.add_runtime_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_runtime_dependency(%q<versions>, ["= 0.3.1"])
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
s.add_runtime_dependency(%q<json>, ["= 1.5.1"])
s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_runtime_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_runtime_dependency(%q<will_paginate>, ["~> 2.3.12"])
s.add_runtime_dependency(%q<httparty>, ["= 0.7.8"])
s.add_runtime_dependency(%q<open4>, [">= 0"])
s.add_runtime_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_runtime_dependency(%q<rails>, ["= 2.3.11"])
s.add_runtime_dependency(%q<differ>, ["= 0.1.2"])
s.add_runtime_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_runtime_dependency(%q<gem_plugin>, [">= 0"])
s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
s.add_runtime_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_runtime_dependency(%q<simple_xlsx_writer>, [">= 0"])
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
s.add_runtime_dependency(%q<daemons>, [">= 0"])
s.add_runtime_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_runtime_dependency(%q<versions>, ["= 0.3.1"])
else
s.add_dependency(%q<gettext>, ["= 2.1.0"])
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_dependency(%q<json>, ["= 1.5.1"])
s.add_dependency(%q<property>, ["= 2.3.2"])
s.add_dependency(%q<syntax>, ["= 1.0.0"])
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
s.add_dependency(%q<rails>, ["= 2.3.11"])
s.add_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_dependency(%q<hpricot>, [">= 0"])
s.add_dependency(%q<open4>, [">= 0"])
s.add_dependency(%q<property>, ["= 2.3.2"])
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_dependency(%q<tzinfo>, [">= 0"])
s.add_dependency(%q<daemons>, [">= 0"])
s.add_dependency(%q<rubyless>, ["= 0.8.8"])
s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
s.add_dependency(%q<httparty>, ["= 0.7.8"])
s.add_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_dependency(%q<versions>, ["= 0.3.1"])
s.add_dependency(%q<jeweler>, [">= 0"])
s.add_dependency(%q<json>, ["= 1.5.1"])
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
s.add_dependency(%q<httparty>, ["= 0.7.8"])
s.add_dependency(%q<open4>, [">= 0"])
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_dependency(%q<rails>, ["= 2.3.11"])
s.add_dependency(%q<differ>, ["= 0.1.2"])
s.add_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_dependency(%q<gem_plugin>, [">= 0"])
s.add_dependency(%q<tzinfo>, [">= 0"])
s.add_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
s.add_dependency(%q<jeweler>, [">= 0"])
s.add_dependency(%q<hpricot>, [">= 0"])
s.add_dependency(%q<daemons>, [">= 0"])
s.add_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_dependency(%q<versions>, ["= 0.3.1"])
end
else
s.add_dependency(%q<gettext>, ["= 2.1.0"])
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_dependency(%q<json>, ["= 1.5.1"])
s.add_dependency(%q<property>, ["= 2.3.2"])
s.add_dependency(%q<syntax>, ["= 1.0.0"])
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
s.add_dependency(%q<rails>, ["= 2.3.11"])
s.add_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_dependency(%q<hpricot>, [">= 0"])
s.add_dependency(%q<open4>, [">= 0"])
s.add_dependency(%q<property>, ["= 2.3.2"])
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_dependency(%q<tzinfo>, [">= 0"])
s.add_dependency(%q<daemons>, [">= 0"])
s.add_dependency(%q<rubyless>, ["= 0.8.8"])
s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
s.add_dependency(%q<httparty>, ["= 0.7.8"])
s.add_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_dependency(%q<versions>, ["= 0.3.1"])
s.add_dependency(%q<jeweler>, [">= 0"])
s.add_dependency(%q<json>, ["= 1.5.1"])
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
s.add_dependency(%q<httparty>, ["= 0.7.8"])
s.add_dependency(%q<open4>, [">= 0"])
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
s.add_dependency(%q<rails>, ["= 2.3.11"])
s.add_dependency(%q<differ>, ["= 0.1.2"])
s.add_dependency(%q<shoulda>, ["= 2.10.3"])
s.add_dependency(%q<gem_plugin>, [">= 0"])
s.add_dependency(%q<tzinfo>, [">= 0"])
s.add_dependency(%q<yamltest>, ["= 0.7.0"])
s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
s.add_dependency(%q<jeweler>, [">= 0"])
s.add_dependency(%q<hpricot>, [">= 0"])
s.add_dependency(%q<daemons>, [">= 0"])
s.add_dependency(%q<querybuilder>, ["= 1.2.0"])
s.add_dependency(%q<versions>, ["= 0.3.1"])
end
end

0 comments on commit c43d071

Please sign in to comment.