native-query 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,113 @@
1
+ # encoding: utf-8
2
+ require "native-query/row"
3
+
4
+ module NativeQuery
5
+
6
+ ##
7
+ # Represents ORM query result.
8
+ #
9
+
10
+ class Result
11
+
12
+ ##
13
+ # Brings query object.
14
+ #
15
+
16
+ @query
17
+ attr_reader :query
18
+
19
+ ##
20
+ # Constructor.
21
+ #
22
+
23
+ def initialize(query)
24
+ @query = query
25
+ end
26
+
27
+ ##
28
+ # Returns first field value of first record.
29
+ #
30
+
31
+ def single
32
+ @query.single
33
+ end
34
+
35
+ ##
36
+ # Returns one result row.
37
+ #
38
+
39
+ def one
40
+ Row::new(@query.one)
41
+ end
42
+
43
+ ##
44
+ # Iterates through result.
45
+ #
46
+
47
+ def each
48
+ @query.each do |row|
49
+ yield Row::new(row)
50
+ end
51
+
52
+ self.free!
53
+ end
54
+
55
+ ##
56
+ # Returns all rows.
57
+ #
58
+
59
+ def all
60
+ self.map { |row| row }
61
+ end
62
+
63
+ ##
64
+ # Returns data in complex associative level.
65
+ #
66
+ # According to limitations of equivalent MP::Fluent
67
+ # method. Block is applied to all resultant rows.
68
+ #
69
+
70
+ def assoc(*args, &block)
71
+ @query.assoc(*args) do |row|
72
+ result = Row::new(row)
73
+
74
+ if block
75
+ result = block.call(result)
76
+ end
77
+
78
+ result # returns
79
+ end
80
+ end
81
+
82
+ ##
83
+ # Returns count of the records.
84
+ #
85
+
86
+ def count
87
+ @query.count
88
+ end
89
+
90
+ ##
91
+ # Maps callback to array.
92
+ #
93
+
94
+ def map(&block)
95
+ result = [ ]
96
+
97
+ self.each do |item|
98
+ result << block.call(item)
99
+ end
100
+
101
+ return result
102
+ end
103
+
104
+ ##
105
+ # Frees result resources.
106
+ #
107
+
108
+ def free!
109
+ @query.free!
110
+ end
111
+
112
+ end
113
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+
3
+ module NativeQuery
4
+
5
+ ##
6
+ # Represents one ORM row.
7
+ #
8
+
9
+ class Row
10
+
11
+ ##
12
+ # Brings data.
13
+ #
14
+
15
+ @data
16
+
17
+ ##
18
+ # Processed data cache.
19
+ #
20
+
21
+ @__data
22
+
23
+ ##
24
+ # Constructor.
25
+ #
26
+
27
+ def initialize(data)
28
+ @data = data
29
+ end
30
+
31
+ ##
32
+ # Maps unknown calls to data fields.
33
+ #
34
+
35
+ def method_missing(sym, *args, &block)
36
+ __data[sym]
37
+ end
38
+
39
+ ##
40
+ # Indicates, rows exists.
41
+ #
42
+
43
+ def any?
44
+ not __data.nil?
45
+ end
46
+
47
+ ##
48
+ # Returns data field.
49
+ #
50
+
51
+ private
52
+ def __data
53
+ if @__data.nil?
54
+
55
+ # Calls for data and converts string keys of hash
56
+ # to symbols.
57
+
58
+ data = @data
59
+ @__data = { }
60
+
61
+ if not data.nil?
62
+ @data = nil
63
+ data.each_pair do |k, v|
64
+ @__data[k.to_sym] = v
65
+ end
66
+ else
67
+ @__data = nil
68
+ end
69
+
70
+ end
71
+
72
+ return @__data
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,60 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{native-query}
8
+ s.version = "0.9.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Martin Kozák}]
12
+ s.date = %q{2011-07-14}
13
+ s.email = %q{martinkozak@martinkozak.net}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE.txt",
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ "Gemfile",
21
+ "Gemfile.lock",
22
+ "LICENSE.txt",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lib/native-query/join.rb",
27
+ "lib/native-query/model.rb",
28
+ "lib/native-query/query.rb",
29
+ "lib/native-query/result.rb",
30
+ "lib/native-query/row.rb",
31
+ "native-query.gemspec"
32
+ ]
33
+ s.homepage = %q{http://github.com/martinkozak/native-query}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.5}
37
+ s.summary = %q{Cool way how to speak with database server. It's ellegant and very ruby SQL query helper which works by similar way as Arel or another ORM selecting logic. It's derived from Dibi database layer in its ideas, so is much more simple and (of sure) much more KISS, readable and straightforward.}
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_runtime_dependency(%q<fluent-query>, [">= 0.9.0"])
44
+ s.add_runtime_dependency(%q<hash-utils>, [">= 0.18.0"])
45
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.13"])
46
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
47
+ else
48
+ s.add_dependency(%q<fluent-query>, [">= 0.9.0"])
49
+ s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
50
+ s.add_dependency(%q<bundler>, ["~> 1.0.13"])
51
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
52
+ end
53
+ else
54
+ s.add_dependency(%q<fluent-query>, [">= 0.9.0"])
55
+ s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
56
+ s.add_dependency(%q<bundler>, ["~> 1.0.13"])
57
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
58
+ end
59
+ end
60
+
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: native-query
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.9.0
6
+ platform: ruby
7
+ authors:
8
+ - "Martin Koz\xC3\xA1k"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-14 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fluent-query
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: hash-utils
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.18.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.0.13
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.6.0
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ description:
60
+ email: martinkozak@martinkozak.net
61
+ executables: []
62
+
63
+ extensions: []
64
+
65
+ extra_rdoc_files:
66
+ - LICENSE.txt
67
+ - README.md
68
+ files:
69
+ - .document
70
+ - Gemfile
71
+ - Gemfile.lock
72
+ - LICENSE.txt
73
+ - README.md
74
+ - Rakefile
75
+ - VERSION
76
+ - lib/native-query/join.rb
77
+ - lib/native-query/model.rb
78
+ - lib/native-query/query.rb
79
+ - lib/native-query/result.rb
80
+ - lib/native-query/row.rb
81
+ - native-query.gemspec
82
+ homepage: http://github.com/martinkozak/native-query
83
+ licenses:
84
+ - MIT
85
+ post_install_message:
86
+ rdoc_options: []
87
+
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ hash: 1037557380294456007
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: "0"
105
+ requirements: []
106
+
107
+ rubyforge_project:
108
+ rubygems_version: 1.8.5
109
+ signing_key:
110
+ specification_version: 3
111
+ summary: Cool way how to speak with database server. It's ellegant and very ruby SQL query helper which works by similar way as Arel or another ORM selecting logic. It's derived from Dibi database layer in its ideas, so is much more simple and (of sure) much more KISS, readable and straightforward.
112
+ test_files: []
113
+