sql_record 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
- source "http://rubygems.org"
1
+ source :rubygems
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
- # gem "activesupport", ">= 2.3.5"
4
+ gem "activerecord", ">= 2.3.0"
5
5
 
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
@@ -1,8 +1,21 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activemodel (3.0.5)
5
+ activesupport (= 3.0.5)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4)
8
+ activerecord (3.0.5)
9
+ activemodel (= 3.0.5)
10
+ activesupport (= 3.0.5)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.5)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
4
16
  diff-lcs (1.1.2)
5
17
  git (1.2.5)
18
+ i18n (0.5.0)
6
19
  jeweler (1.5.2)
7
20
  bundler (~> 1.0.0)
8
21
  git (>= 1.2.5)
@@ -18,12 +31,14 @@ GEM
18
31
  rspec-expectations (2.3.0)
19
32
  diff-lcs (~> 1.1.2)
20
33
  rspec-mocks (2.3.0)
34
+ tzinfo (0.3.25)
21
35
  yard (0.6.7)
22
36
 
23
37
  PLATFORMS
24
38
  ruby
25
39
 
26
40
  DEPENDENCIES
41
+ activerecord (>= 2.3.0)
27
42
  bundler (~> 1.0.0)
28
43
  jeweler (~> 1.5.2)
29
44
  rcov
@@ -8,7 +8,7 @@ Well that's what SQLRecord does.
8
8
 
9
9
  == Example
10
10
 
11
- class UserWithAccount << SQLRecord::Base
11
+ class UserWithAccount < SQLRecord::Base
12
12
 
13
13
  with_opts :class => User do
14
14
  column :id
@@ -22,9 +22,9 @@ Well that's what SQLRecord does.
22
22
 
23
23
  column :account_id, :from => :id, :class => Account
24
24
 
25
- query do |params, default_columns|
25
+ query do |params|
26
26
  [
27
- "SELECT #{default_columns} " +
27
+ "SELECT #{sql_select_columns.join(', ')} " +
28
28
  "FROM users INNER JOIN accounts " +
29
29
  "ON users.account_id = accounts.id " +
30
30
  "WHERE users.id = ?",
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.0.5
@@ -29,6 +29,12 @@ module SQLRecord
29
29
  @default_opts = nil
30
30
  end
31
31
 
32
+ # Sugar for with
33
+ def with_class klass, opts = {}, &block
34
+ opts[:class] = klass
35
+ with_opts opts, &block
36
+ end
37
+
32
38
  # Specifies the mapping from an ActiveRecord#column_definition to an SQLRecord instance attribute.
33
39
  # @param [Symbol] attribute_name the attribute you are defining for this model
34
40
  # @option opts [Class] :class the active record this attribute will use to type_cast from
@@ -59,10 +65,6 @@ module SQLRecord
59
65
  (@sql_select_columns ||= []) << select_column
60
66
  end
61
67
 
62
- def sql_select_helper
63
- @sql_select_columns.join(', ')
64
- end
65
-
66
68
  end
67
69
  end
68
70
  end
@@ -11,6 +11,15 @@ module SQLRecord
11
11
  end
12
12
  end
13
13
 
14
+ # Specifies the query to execute
15
+ # @yield the block that will be executed with each {#find}
16
+ # @yieldparam [Hash] params the parametrs passed in from {#find}
17
+ # @yieldreturn [Array, String] Either the sql string or a sanitize array to be executed.
18
+ # @note
19
+ # do not try to sanitize identifiers, only values will sanitize well
20
+ # ["where id = ?", 1] => "where id = 1"
21
+ # ["where name = ?", "hello"] => "where id = 'hello'"
22
+ # ["ORDER BY ? ASC", "id"] => "ORDER BY 'id' ASC" << not legitimate SQL
14
23
  def query &deferred
15
24
  @query_proc = deferred
16
25
  end
@@ -18,12 +27,18 @@ module SQLRecord
18
27
  protected
19
28
 
20
29
  # @todo check that this logs the sql
30
+ # @todo Write own sanitizer: (http://www.ruby-forum.com/topic/187658)
31
+ # sanitize_sql_array sanitizes values correctly, not identifiers, eg:
32
+ # ["where id = ?", 1] => "where id = 1"
33
+ # ["where name = ?", "hello"] => "where id = 'hello'"
34
+ # ["ORDER BY ? ASC", "id"] => "ORDER BY 'id' ASC" << not legitimate SQL
21
35
  def execute_query params={}
22
- sql = ActiveRecord::Base.send(:sanitize_sql_array, get_query_array(params))
36
+ sql = get_query(params)
37
+ sql = ActiveRecord::Base.send(:sanitize_sql_array, sql) if sql.is_a?(Array)
23
38
  ActiveRecord::Base.connection.execute(sql)
24
39
  end
25
40
 
26
- def get_query_array(params)
41
+ def get_query(params)
27
42
  @query_proc.call(params)
28
43
  end
29
44
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sql_record}
8
- s.version = "1.0.4"
8
+ s.version = "1.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rasheed Abdul-Aziz"]
12
- s.date = %q{2011-04-08}
12
+ s.date = %q{2011-04-11}
13
13
  s.description = %q{Do you use ActiveRecord::Connection.execute for speed sometimes? Does it bother you that the results are not mapped to your schema and type-cast as ActiveRecord would? Well that's what SQLRecord does.}
14
14
  s.email = %q{rasheed@visfleet.com}
15
15
  s.extra_rdoc_files = [
@@ -52,6 +52,7 @@ Gem::Specification.new do |s|
52
52
  s.specification_version = 3
53
53
 
54
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.3.0"])
55
56
  s.add_development_dependency(%q<rdoc>, [">= 0"])
56
57
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
57
58
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
59
60
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
60
61
  s.add_development_dependency(%q<rcov>, [">= 0"])
61
62
  else
63
+ s.add_dependency(%q<activerecord>, [">= 2.3.0"])
62
64
  s.add_dependency(%q<rdoc>, [">= 0"])
63
65
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
64
66
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -67,6 +69,7 @@ Gem::Specification.new do |s|
67
69
  s.add_dependency(%q<rcov>, [">= 0"])
68
70
  end
69
71
  else
72
+ s.add_dependency(%q<activerecord>, [">= 2.3.0"])
70
73
  s.add_dependency(%q<rdoc>, [">= 0"])
71
74
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
72
75
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_record
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 4
10
- version: 1.0.4
9
+ - 5
10
+ version: 1.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rasheed Abdul-Aziz
@@ -15,12 +15,28 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-08 00:00:00 +00:00
18
+ date: 2011-04-11 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rdoc
22
+ name: activerecord
23
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 2
31
+ - 3
32
+ - 0
33
+ version: 2.3.0
34
+ prerelease: false
35
+ type: :runtime
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rdoc
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
24
40
  none: false
25
41
  requirements:
26
42
  - - ">="
@@ -31,10 +47,10 @@ dependencies:
31
47
  version: "0"
32
48
  prerelease: false
33
49
  type: :development
34
- requirement: *id001
50
+ requirement: *id002
35
51
  - !ruby/object:Gem::Dependency
36
52
  name: rspec
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
38
54
  none: false
39
55
  requirements:
40
56
  - - ~>
@@ -47,10 +63,10 @@ dependencies:
47
63
  version: 2.3.0
48
64
  prerelease: false
49
65
  type: :development
50
- requirement: *id002
66
+ requirement: *id003
51
67
  - !ruby/object:Gem::Dependency
52
68
  name: yard
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
69
+ version_requirements: &id004 !ruby/object:Gem::Requirement
54
70
  none: false
55
71
  requirements:
56
72
  - - ~>
@@ -63,10 +79,10 @@ dependencies:
63
79
  version: 0.6.0
64
80
  prerelease: false
65
81
  type: :development
66
- requirement: *id003
82
+ requirement: *id004
67
83
  - !ruby/object:Gem::Dependency
68
84
  name: bundler
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
70
86
  none: false
71
87
  requirements:
72
88
  - - ~>
@@ -79,10 +95,10 @@ dependencies:
79
95
  version: 1.0.0
80
96
  prerelease: false
81
97
  type: :development
82
- requirement: *id004
98
+ requirement: *id005
83
99
  - !ruby/object:Gem::Dependency
84
100
  name: jeweler
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
86
102
  none: false
87
103
  requirements:
88
104
  - - ~>
@@ -95,10 +111,10 @@ dependencies:
95
111
  version: 1.5.2
96
112
  prerelease: false
97
113
  type: :development
98
- requirement: *id005
114
+ requirement: *id006
99
115
  - !ruby/object:Gem::Dependency
100
116
  name: rcov
101
- version_requirements: &id006 !ruby/object:Gem::Requirement
117
+ version_requirements: &id007 !ruby/object:Gem::Requirement
102
118
  none: false
103
119
  requirements:
104
120
  - - ">="
@@ -109,7 +125,7 @@ dependencies:
109
125
  version: "0"
110
126
  prerelease: false
111
127
  type: :development
112
- requirement: *id006
128
+ requirement: *id007
113
129
  description: Do you use ActiveRecord::Connection.execute for speed sometimes? Does it bother you that the results are not mapped to your schema and type-cast as ActiveRecord would? Well that's what SQLRecord does.
114
130
  email: rasheed@visfleet.com
115
131
  executables: []