Changeset 1117

Show
Ignore:
Timestamp:
2008-07-20 14:58:45 (6 months ago)
Author:
gaspard
Message:

Fixed bugs when sql finder could not be generated.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/parser/lib/rules/zena.rb

    r1116 r1117  
    8383    end 
    8484     
    85     def self.parse_class(node_class) 
    86       if node_class.kind_of?(Array) 
    87         if node_class[0].kind_of?(String) 
    88           [Module::const_get(node_class[0])] 
    89         else 
    90           node_class 
    91         end 
    92       else 
    93         if node_class.kind_of?(String) 
    94           Module::const_get(node_class) 
    95         else 
    96           node_class 
     85    def self.parse_class(klass) 
     86      if klass.kind_of?(Array) 
     87        if klass[0].kind_of?(String) 
     88          [Module::const_get(klass[0])] 
     89        else 
     90          klass 
     91        end 
     92      else 
     93        if klass.kind_of?(String) 
     94          Module::const_get(klass) 
     95        else 
     96          klass 
    9797        end 
    9898      end 
     
    10421042        # relation 
    10431043        list_finder, klass = build_finder_for(:all, values) 
     1044        return unless list_finder 
    10441045        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    10451046      end 
     
    15381539      if !@params[:in] && !@params[:where] && !@params[:from] && !@params[:find] 
    15391540        finder, klass = build_finder_for(:first, 'icon', @params.merge(:or => 'image')) 
     1541        return unless finder 
    15401542        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    15411543        do_var(finder, :node_class => klass) 
     
    16551657        unless lnode = find_stored(Node, @params[:href]) 
    16561658          finder, klass = build_finder_for(:first, @params[:href]) 
     1659          return unless finder 
    16571660          return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    16581661          opts << ", :href=>#{finder}" 
     
    16861689      if sharp_in = @params[:in] 
    16871690        finder, klass = build_finder_for(:first, sharp_in, {}) 
     1691        return unless finder 
    16881692        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    16891693        opts << ", :sharp_in=>#{finder}" 
     
    17321736      if @params[:src] 
    17331737        finder, klass = build_finder_for(:first, @params[:src]) 
     1738        return unless finder 
    17341739        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    17351740        img = finder 
     
    17441749      res += ")" 
    17451750      if @params[:link] 
    1746         link, klass = build_finder_for(:first, @params[:link]) 
     1751        finder, klass = build_finder_for(:first, @params[:link]) 
     1752        return unless finder 
    17471753        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    1748         res  = "node_link(:node=>#{link}, :text=>#{res})" 
     1754        res  = "node_link(:node=>#{finder}, :text=>#{res})" 
    17491755      end 
    17501756      "<%= #{res} %>" 
     
    17901796         
    17911797        finder, klass = build_finder_for(:all, finder, @params, [@date_scope]) 
     1798        return unless finder 
    17921799        return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    17931800        res = <<-END_TXT 
     
    18741881        count ||= Node.plural_relation?(method) ? :all : :first 
    18751882        finder, klass = build_finder_for(count, method, @params) 
     1883        return unless finder 
    18761884        if count == :all 
    18771885          # plural 
     
    19261934      if (count == :first) 
    19271935        if rel == 'self' 
    1928           return [node, self.node_class] 
     1936          return [node, node_class] 
    19291937        elsif rel == 'main' 
    19301938          return ["@node", Node] 
     
    19641972       
    19651973      unless sql_query 
    1966         # is 'out' here a good idea ? 
    19671974        out parser_error(query_errors.join(' '), pseudo_sql.join(', ')) 
    1968         return ['nil', NilClass] 
     1975        return nil 
    19691976      end 
    19701977       
     
    21402147    end 
    21412148     
    2142     # TODO: replace symbols by real classes 
     2149    # Class of the current 'node' object (can be Version, Comment, Node, DataEntry, etc) 
    21432150    def node_class 
    21442151      @context[:node_class] || Node 
     
    28622869          # relation 
    28632870          nodes, klass = build_finder_for(:all, nodes) 
     2871          return unless nodes 
    28642872          return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node) 
    28652873        end   
  • trunk/test/helpers/zena_parser/errors.yml

    r1042 r1117  
    1818bad_query: 
    1919  src: "<r:images where='foo bar baz'>ok</r:images>" 
    20   tem: "<span class='parser_error'>[images where foo bar baz] invalid field or value \"foo\"</span><% if nil -%>ok<% end -%>" 
    21   res: "<span class='parser_error'>[images where foo bar baz] invalid field or value \"foo\"</span>" 
     20  tem: "<span class='parser_error'>[images where foo bar baz] invalid field or value \"foo\"</span>" 
    2221 
    2322bad_field_in_query: 
     
    2726bad_relation: 
    2827  src: "<div do='categories in site' do='each' join=', ' do='[name]'/>" 
    29   tem: "/<% if nil -%>/" 
    30   res: "<span class='parser_error'>[categories in site] unknown relation 'categories'</span>" 
     28  tem: "<div><span class='parser_error'>[categories in site] unknown relation 'categories'</span></div>" 
    3129 
    3230bad_order_clause: