sql_query_executor 0.5.2 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sql_query_executor/base.rb +6 -5
- data/lib/sql_query_executor/operators/base.rb +7 -2
- data/lib/sql_query_executor/operators/between.rb +2 -2
- data/lib/sql_query_executor/operators/in.rb +2 -2
- data/lib/sql_query_executor/query/sentence.rb +2 -2
- data/lib/sql_query_executor/query/sub_query.rb +15 -5
- data/lib/sql_query_executor/version.rb +1 -1
- data/spec/sql_query_executor/base_spec.rb +25 -11
- data/sql_query_executor.gemspec +4 -4
- metadata +44 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25f7708c09ade0472e649ff1dda4f6d3b42501a6
|
4
|
+
data.tar.gz: 85c07c4235dd569b5c5b3713ad4ae1523e392c7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b64b60611d73070e52eb98465afba8d414524637e6849a40a0007859810490ff02eeaf9c82bdf2755cbdeaf60fb0e38e3db11d59a33fbdf662ac4efeb218f72e
|
7
|
+
data.tar.gz: d7ef08257d169a250717d1e98a4b2e66e6cb5a38dc66afac2844b277845a437a8c35d850747fb12dc5653aac08a141c6ffd3eee9c62b32cec6921ec846a4853e
|
@@ -21,6 +21,7 @@ module SqlQueryExecutor #:nodoc:
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def execute!(collection)
|
24
|
+
return [] if @query.empty?
|
24
25
|
set_collection(collection)
|
25
26
|
|
26
27
|
convert_query.execute!(@collection)
|
@@ -62,11 +63,9 @@ module SqlQueryExecutor #:nodoc:
|
|
62
63
|
end
|
63
64
|
|
64
65
|
def set_collection(collection)
|
65
|
-
if collection
|
66
|
-
|
67
|
-
|
68
|
-
@collection = conforming_collection?(collection) ? collection : []
|
69
|
-
end
|
66
|
+
return if @collection
|
67
|
+
|
68
|
+
@collection = collection
|
70
69
|
end
|
71
70
|
|
72
71
|
def convert_collection(collection=[])
|
@@ -83,6 +82,8 @@ module SqlQueryExecutor #:nodoc:
|
|
83
82
|
end
|
84
83
|
|
85
84
|
def check_query
|
85
|
+
return if @query.empty?
|
86
|
+
|
86
87
|
if @query.is_a?(Array) && !@query.first.is_a?(String)
|
87
88
|
"First element from array must be a String. eg: [\"name = ?\", \"John\"]"
|
88
89
|
end
|
@@ -12,12 +12,17 @@ module SqlQueryExecutor
|
|
12
12
|
{ @field => @value }
|
13
13
|
end
|
14
14
|
|
15
|
-
def logic
|
15
|
+
def logic(is_hash=false)
|
16
16
|
initialize_attributes(true)
|
17
|
-
|
17
|
+
|
18
|
+
"#{field(is_hash)} #{@operator} #{@value || 'nil'}"
|
18
19
|
end
|
19
20
|
|
20
21
|
protected
|
22
|
+
def field(is_hash)
|
23
|
+
is_hash ? "self[:#{@field}]" : "#{@field}"
|
24
|
+
end
|
25
|
+
|
21
26
|
def initialize_attributes(logic=false)
|
22
27
|
return if @array
|
23
28
|
|
@@ -8,10 +8,10 @@ module SqlQueryExecutor
|
|
8
8
|
{ @field => { "$gte" => @value.first, "$lte" => @value.last }}
|
9
9
|
end
|
10
10
|
|
11
|
-
def logic
|
11
|
+
def logic(is_hash=false)
|
12
12
|
initialize_attributes(true)
|
13
13
|
|
14
|
-
"
|
14
|
+
"#{field(is_hash)} >= #{@value[0]} && #{field(is_hash)} <= #{@value[1]}"
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
@@ -8,10 +8,10 @@ module SqlQueryExecutor
|
|
8
8
|
{ @field => { "$in" => @value }}
|
9
9
|
end
|
10
10
|
|
11
|
-
def logic
|
11
|
+
def logic(is_hash=false)
|
12
12
|
initialize_attributes(true)
|
13
13
|
|
14
|
-
"[#{@value.join(', ')}].include?(
|
14
|
+
"[#{@value.join(', ')}].include?(#{field(is_hash)})"
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
@@ -14,9 +14,19 @@ module SqlQueryExecutor
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def execute!(collection, data=[])
|
17
|
-
|
17
|
+
is_hash = collection.first.is_a?(Hash)
|
18
|
+
method_eval = logic(is_hash)
|
19
|
+
klass = collection.first.class
|
18
20
|
|
19
|
-
|
21
|
+
klass.instance_eval do
|
22
|
+
eval("define_method(:this_method_will_be_removed_in_a_little_while) { #{method_eval} }")
|
23
|
+
end
|
24
|
+
|
25
|
+
result = collection.select{ |object| object.this_method_will_be_removed_in_a_little_while }
|
26
|
+
|
27
|
+
klass.class_eval { undef :this_method_will_be_removed_in_a_little_while }
|
28
|
+
|
29
|
+
is_hash ? result.sort_by{ |hash| hash[:id] } : result.sort_by(&:id)
|
20
30
|
end
|
21
31
|
|
22
32
|
def selector
|
@@ -38,15 +48,15 @@ module SqlQueryExecutor
|
|
38
48
|
SqlQueryExecutor::Query::Normalizers::QueryNormalizer.clean_query(@query)
|
39
49
|
end
|
40
50
|
|
41
|
-
def logic
|
51
|
+
def logic(is_hash=false)
|
42
52
|
string = ''
|
43
53
|
|
44
54
|
@children.each do |child|
|
45
55
|
if child.respond_to?(:binding_operator) && child.binding_operator
|
46
56
|
operator = BINDING_OPERATORS.invert[child.binding_operator]
|
47
|
-
string = "(#{string} #{operator} #{child.logic})"
|
57
|
+
string = "(#{string} #{operator} #{child.logic(is_hash)})"
|
48
58
|
else
|
49
|
-
string += child.logic
|
59
|
+
string += child.logic(is_hash)
|
50
60
|
end
|
51
61
|
end
|
52
62
|
|
@@ -6,13 +6,21 @@ require 'sql_query_executor/base'
|
|
6
6
|
describe SqlQueryExecutor::Base do
|
7
7
|
describe ".where" do
|
8
8
|
let(:data) do
|
9
|
-
[
|
10
|
-
|
11
|
-
|
12
|
-
{id:
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
array = [{id: 1, name: "US", language: 'English'}]
|
10
|
+
|
11
|
+
500.times do |i|
|
12
|
+
array.push({id: i+2, name: "Name-#{i}", language: 'English'})
|
13
|
+
end
|
14
|
+
|
15
|
+
array
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when initialized with an empty string' do
|
19
|
+
subject { described_class.where('') }
|
20
|
+
|
21
|
+
it '' do
|
22
|
+
expect(subject).to be_empty
|
23
|
+
end
|
16
24
|
end
|
17
25
|
|
18
26
|
context 'conforming collection' do
|
@@ -45,7 +53,10 @@ describe SqlQueryExecutor::Base do
|
|
45
53
|
end
|
46
54
|
|
47
55
|
it 'initializes with a conforming collection' do
|
48
|
-
|
56
|
+
data
|
57
|
+
result = described_class.where(Collection.new(data).all, id: 1)
|
58
|
+
|
59
|
+
expect(data.first).to eq (data.first)
|
49
60
|
end
|
50
61
|
|
51
62
|
context "when invalid query is passed" do
|
@@ -57,9 +68,12 @@ describe SqlQueryExecutor::Base do
|
|
57
68
|
end
|
58
69
|
end
|
59
70
|
|
60
|
-
context '
|
61
|
-
it 'initializes with a conforming collection' do
|
62
|
-
|
71
|
+
context 'non conforming collection' do
|
72
|
+
it 'initializes with a non conforming collection' do
|
73
|
+
data
|
74
|
+
result = described_class.where(data, id: 1)
|
75
|
+
|
76
|
+
expect(described_class.where(data, id: 1)).to eq([data.first])
|
63
77
|
end
|
64
78
|
|
65
79
|
context "when invalid query is passed" do
|
data/sql_query_executor.gemspec
CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |gem|
|
|
25
25
|
"spec/sql_query_executor/base_spec.rb"
|
26
26
|
]
|
27
27
|
|
28
|
-
gem.add_development_dependency(%q<rspec>, [">= 2.2.0"])
|
29
|
-
gem.add_development_dependency('rake', [">= 10.0.0"])
|
30
|
-
gem.add_development_dependency('coveralls')
|
31
|
-
gem.add_development_dependency('pry')
|
28
|
+
gem.add_development_dependency(%q<rspec>, ["~> 2.2", ">= 2.2.0"])
|
29
|
+
gem.add_development_dependency('rake', ["~> 10.0", ">= 10.0.0"])
|
30
|
+
gem.add_development_dependency('coveralls', ["~> 0.7", ">= 0.7.0"])
|
31
|
+
gem.add_development_dependency('pry', ["~> 0.9", ">= 0.9.12"])
|
32
32
|
end
|
metadata
CHANGED
@@ -1,71 +1,95 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sql_query_executor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caio Torres
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
- - ">="
|
18
21
|
- !ruby/object:Gem::Version
|
19
22
|
version: 2.2.0
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.2'
|
30
|
+
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
26
32
|
version: 2.2.0
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- -
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '10.0'
|
40
|
+
- - ">="
|
32
41
|
- !ruby/object:Gem::Version
|
33
42
|
version: 10.0.0
|
34
43
|
type: :development
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- -
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '10.0'
|
50
|
+
- - ">="
|
39
51
|
- !ruby/object:Gem::Version
|
40
52
|
version: 10.0.0
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: coveralls
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
|
-
- -
|
57
|
+
- - "~>"
|
46
58
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
59
|
+
version: '0.7'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.7.0
|
48
63
|
type: :development
|
49
64
|
prerelease: false
|
50
65
|
version_requirements: !ruby/object:Gem::Requirement
|
51
66
|
requirements:
|
52
|
-
- -
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.7'
|
70
|
+
- - ">="
|
53
71
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
72
|
+
version: 0.7.0
|
55
73
|
- !ruby/object:Gem::Dependency
|
56
74
|
name: pry
|
57
75
|
requirement: !ruby/object:Gem::Requirement
|
58
76
|
requirements:
|
59
|
-
- -
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0.9'
|
80
|
+
- - ">="
|
60
81
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
82
|
+
version: 0.9.12
|
62
83
|
type: :development
|
63
84
|
prerelease: false
|
64
85
|
version_requirements: !ruby/object:Gem::Requirement
|
65
86
|
requirements:
|
66
|
-
- -
|
87
|
+
- - "~>"
|
67
88
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
89
|
+
version: '0.9'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 0.9.12
|
69
93
|
description: Gem to run SQL like queries on array of hashes or similar objects
|
70
94
|
email:
|
71
95
|
- efreesen@gmail.com
|
@@ -73,9 +97,10 @@ executables: []
|
|
73
97
|
extensions: []
|
74
98
|
extra_rdoc_files: []
|
75
99
|
files:
|
100
|
+
- Gemfile
|
76
101
|
- LICENSE
|
77
102
|
- README.md
|
78
|
-
- sql_query_executor.
|
103
|
+
- lib/sql_query_executor.rb
|
79
104
|
- lib/sql_query_executor/base.rb
|
80
105
|
- lib/sql_query_executor/operators/base.rb
|
81
106
|
- lib/sql_query_executor/operators/between.rb
|
@@ -88,9 +113,8 @@ files:
|
|
88
113
|
- lib/sql_query_executor/query/sentence.rb
|
89
114
|
- lib/sql_query_executor/query/sub_query.rb
|
90
115
|
- lib/sql_query_executor/version.rb
|
91
|
-
- lib/sql_query_executor.rb
|
92
|
-
- Gemfile
|
93
116
|
- spec/sql_query_executor/base_spec.rb
|
117
|
+
- sql_query_executor.gemspec
|
94
118
|
homepage: http://github.com/efreesen/sql_query_executor
|
95
119
|
licenses:
|
96
120
|
- GPLv2
|
@@ -101,17 +125,17 @@ require_paths:
|
|
101
125
|
- lib
|
102
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
103
127
|
requirements:
|
104
|
-
- -
|
128
|
+
- - ">="
|
105
129
|
- !ruby/object:Gem::Version
|
106
130
|
version: '0'
|
107
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
132
|
requirements:
|
109
|
-
- -
|
133
|
+
- - ">="
|
110
134
|
- !ruby/object:Gem::Version
|
111
135
|
version: '0'
|
112
136
|
requirements: []
|
113
137
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.2.2
|
115
139
|
signing_key:
|
116
140
|
specification_version: 4
|
117
141
|
summary: With SqlQueryExecutor you can run SQL like queries on any array of hashes
|