querybuilder 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,4 +1,10 @@
1
- == 0.9.4
1
+ == 0.9.5
2
+
3
+ * Major enhancements
4
+ * Better quoting when connection quote uses backslash (eval removes backslash).
5
+ * Fixed a bug when paginating without a limit clause.
6
+
7
+ == 0.9.4 2010-12-02
2
8
 
3
9
  * 1 Minor enhancement
4
10
  * Should only raise QueryBuilder::Error on initialize.
@@ -1,3 +1,3 @@
1
1
  module QueryBuilder
2
- VERSION = '0.9.4'
2
+ VERSION = '0.9.5'
3
3
  end
@@ -568,7 +568,7 @@ module QueryBuilder
568
568
 
569
569
  def process_paginate(query, paginate_fld)
570
570
  process(query)
571
- raise QueryBuilder::SyntaxError.new("Invalid paginate clause '#{paginate}' (used without limit).") unless @query.limit
571
+ raise QueryBuilder::SyntaxError.new("Invalid paginate clause (used without limit).") unless @query.limit
572
572
  context[:processing] = :paginate
573
573
  fld = process(paginate_fld)
574
574
  if fld && (page_size = @query.limit[/ LIMIT (\d+)/,1])
@@ -812,7 +812,9 @@ module QueryBuilder
812
812
  end
813
813
 
814
814
  def quote(arg)
815
- connection.quote(arg)
815
+ # we must backslash twice because 'eval' will take one out:
816
+ # 'l\\'avion' ==> 'l\'avion' ==> ok
817
+ connection.quote(arg).gsub('\\','\\\\\\\\') # we need 8
816
818
  end
817
819
 
818
820
  def connection
data/querybuilder.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{querybuilder}
8
- s.version = "0.9.4"
8
+ s.version = "0.9.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gaspard Bucher"]
12
- s.date = %q{2010-12-02}
12
+ s.date = %q{2011-02-11}
13
13
  s.description = %q{QueryBuilder is an interpreter for the "pseudo sql" language. This language
14
14
  can be used for two purposes:
15
15
 
@@ -173,9 +173,6 @@ end
173
173
 
174
174
 
175
175
  class DummyClass
176
- # Mock connection and quoting
177
- def self.connection; self; end
178
- def self.quote(obj)
179
- obj.kind_of?(String) ? "'#{obj}'" : obj
180
- end
176
+ # Mock connection
177
+ def self.connection; ActiveRecord::Base.connection; end
181
178
  end
@@ -1,8 +1,5 @@
1
1
  class TestUser
2
- def self.connection; self; end
3
- def self.quote(obj)
4
- obj.kind_of?(String) ? "'#{obj}'" : obj
5
- end
2
+ def self.connection; ActiveRecord::Base.connection; end
6
3
  end
7
4
 
8
5
  class UserProcessor < QueryBuilder::Processor
@@ -14,6 +14,10 @@ offset_without_limit:
14
14
  src: "objects in project offset 3"
15
15
  res: "Invalid offset (used without limit)."
16
16
 
17
+ paginate_without_limit:
18
+ src: "objects in site paginate p"
19
+ res: "Invalid paginate clause (used without limit)."
20
+
17
21
  legacy_many_clauses:
18
22
  src: letters or foo
19
23
  res: "Unknown relation 'foo'."
@@ -159,4 +159,8 @@ filter_in_single_literal:
159
159
  filter_not_in_literal:
160
160
  src: "objects where id not in (1, 2 , 3,4) in site"
161
161
  sxp: '[:query, [:scope, [:filter, [:relation, "objects"], [:not, [:in, [:field, "id"], [:integer, "1"], [:integer, "2"], [:integer, "3"], [:integer, "4"]]]], "site"]]'
162
- sql: "SELECT objects.* FROM objects WHERE objects.id NOT IN (1,2,3,4)"
162
+ sql: "SELECT objects.* FROM objects WHERE objects.id NOT IN (1,2,3,4)"
163
+
164
+ filter_quote_string:
165
+ src: "objects where name = \"l'avion\""
166
+ sql: "SELECT objects.* FROM objects WHERE objects.name = 'l''avion' AND objects.parent_id = 123"
@@ -16,7 +16,6 @@ class DummyQueryBuilder < Test::Unit::TestCase
16
16
  def id; 123; end
17
17
  def parent_id; 333; end
18
18
  def project_id; 9999; end
19
- def connection; self; end
20
19
 
21
20
  context 'A query processor' do
22
21
  subject do
@@ -75,7 +74,7 @@ class DummyQueryBuilder < Test::Unit::TestCase
75
74
  should 'respond to select_keys' do
76
75
  assert_equal %w{a number c}, subject.select_keys
77
76
  end
78
-
77
+
79
78
  should 'not include star keys' do
80
79
  assert !subject.select_keys.include?('*')
81
80
  end
data/test/test_helper.rb CHANGED
@@ -10,4 +10,8 @@ require 'yamltest'
10
10
 
11
11
  require 'mock/dummy_processor'
12
12
  require 'mock/user_processor'
13
- require 'mock/dummy'
13
+ require 'mock/dummy'
14
+
15
+ require 'active_record'
16
+ # in order to use connection for quoting and such
17
+ ActiveRecord::Base.establish_connection(:adapter=>'sqlite3', :database=>':memory:')
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: querybuilder
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 4
10
- version: 0.9.4
9
+ - 5
10
+ version: 0.9.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gaspard Bucher
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-02 00:00:00 +01:00
18
+ date: 2011-02-11 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency