sql_query 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 009df4df82b72078bd0ac55ecc561782d3e807cd
4
- data.tar.gz: 40b8ecd5c19a9a926dc28c97aad2ed46e6c488ed
3
+ metadata.gz: dd5a1fd8db226ffab78b0ed0cfd6c52bdcb0be54
4
+ data.tar.gz: 6b7e65e29f6d9feb80b1d8f0969e429c1be2687b
5
5
  SHA512:
6
- metadata.gz: a89bc2585da42c4aa61604186efdbefbff685ce035b9349e87363b338e33b53b15b0d282a230c4512e6344c3662932594a6d95c7a027e318fbc8b8f087d2ee35
7
- data.tar.gz: 4f560eeb5d953480a2a6493cba61e1b912dcde3640af6a0c0ce1a477b6905df3588c0f8f7d2fe98b62a837a02ad17a8fd06b98ce014bee8536385e2e9cabf915
6
+ metadata.gz: c9c888ada8499947bec7a29225b837a4d834522eec0ebc34804d61570cb946147a287a634be18965294a81e54341797a1cc7b052e3a24a58259d23b3c4cc315d
7
+ data.tar.gz: 9d748e7bb3b793e4b0f717568c42872d040227f1ca2b83ccd5cc2e2f1bcfae11d7555bdb205b56ded42116a24d5351ff8159419bcee4f720eff7a3c04d318d08
data/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SqlQuery change log
2
2
 
3
- ## 0.0.1 / Unreleased
3
+ ## 0.2.1 / Unreleased
4
4
 
5
5
  * [Added]
6
6
 
@@ -10,6 +10,16 @@
10
10
 
11
11
  * [Fixed]
12
12
 
13
+ ## 0.2.0 / 2015-05-01
14
+
15
+ * [Added] First argument in initialize as sql file name with path
16
+
17
+ * [Deprecated]
18
+
19
+ * [Removed] sql_name and sql_path in options hash
20
+
21
+ * [Fixed]
22
+
13
23
  ## 0.1.0 / 2015-04-27
14
24
 
15
25
  * [Added] support for .erb.sql extension
data/README.md CHANGED
@@ -6,12 +6,14 @@
6
6
 
7
7
  # SqlQuery
8
8
 
9
- Ruby gem to load SQL queries from `.sql.erb` templates using ERB.
9
+ Ruby gem to load SQL queries from templates using ERB.
10
10
 
11
11
  It makes working with pure SQL easier with syntax highlighting.
12
12
 
13
13
  Let's you clean your Ruby code from SQL strings.
14
14
 
15
+ Supported extensions: `.sql.erb` or `.erb.sql`
16
+
15
17
  ## Installation
16
18
 
17
19
  Add this line to your application's Gemfile:
@@ -41,7 +43,7 @@ WHERE email = <%= quote @email %>
41
43
  You can use SQL like this:
42
44
 
43
45
  ```ruby
44
- > query = SqlQuery.new(sql_name: :get_player_by_email, email: 'e@mail.dev')
46
+ > query = SqlQuery.new(:get_player_by_email, email: 'e@mail.dev')
45
47
 
46
48
  > query.execute
47
49
  (0.6ms) SELECT * FROM players WHERE email = 'e@mail.dev'
@@ -68,6 +70,15 @@ FROM players
68
70
  WHERE email = 'e@mail.dev'
69
71
  ```
70
72
 
73
+ ### initialization
74
+
75
+ If you need to have nested paths to your queries like ```player/get_by_email``` just use string instead of symbol as file name.
76
+
77
+ Example:
78
+ ```ruby
79
+ SqlQuery.new('player/get_by_email', email: 'e@mail.dev')
80
+ ```
81
+
71
82
  ### Methods
72
83
 
73
84
  - **execute** - executes query and returns result data.
data/lib/sql_query.rb CHANGED
@@ -3,7 +3,11 @@ require 'erb'
3
3
  class SqlQuery
4
4
  attr_reader :connection
5
5
 
6
- def initialize(options = {})
6
+ def initialize(file_name, options = {})
7
+ unless file_name.is_a?(String) || file_name.is_a?(Symbol)
8
+ fail ArgumentError, 'SQL file name should be String or Symbol'
9
+ end
10
+ @sql_filename = file_name
7
11
  prepare_variables(options)
8
12
  @connection = ActiveRecord::Base.connection
9
13
  end
@@ -73,7 +77,7 @@ class SqlQuery
73
77
  def file_path
74
78
  files = Dir.glob(path)
75
79
  if files.size == 0
76
- raise "File not found with name: #{ @sql_name } in #{self.class.config.path}#{ @file_path }"
80
+ raise "File not found: #{ @sql_filename }"
77
81
  elsif files.size > 1
78
82
  raise "More than one file found: #{ files.join(', ')}"
79
83
  else
@@ -84,7 +88,7 @@ class SqlQuery
84
88
  def path
85
89
  root = defined?(Rails) ? Rails.root.to_s : Dir.pwd
86
90
  tmp_path = "#{ root }#{self.class.config.path}"
87
- tmp_path += "#{ @sql_path }/#{ @sql_name }.{sql.erb,erb.sql}"
91
+ tmp_path += "/#{ @sql_filename }.{sql.erb,erb.sql}"
88
92
  tmp_path
89
93
  end
90
94
  end
@@ -2,8 +2,32 @@ require 'spec_helper'
2
2
 
3
3
  describe SqlQuery do
4
4
 
5
- let(:options) { { sql_name: :get_player_by_email, email: 'e@mail.dev' } }
6
- let(:query) { described_class.new(options) }
5
+ let(:options) { { email: 'e@mail.dev' } }
6
+ let(:file_name) { :get_player_by_email }
7
+ let(:query) { described_class.new(file_name, options) }
8
+
9
+ describe '#initialize' do
10
+
11
+ it 'sets instance variables for all options' do
12
+ expect(query.instance_variable_get(:@email)).to eq 'e@mail.dev'
13
+ end
14
+
15
+ context 'when options are set not in parentheses' do
16
+ let(:query) { described_class.new(file_name, email: 'e@mail.dev') }
17
+
18
+ it 'sets instance variables for all options' do
19
+ expect(query.instance_variable_get(:@email)).to eq 'e@mail.dev'
20
+ end
21
+ end
22
+
23
+ context 'file_name argument is not Symbol or String' do
24
+ let(:file_name) { { do: 'something' } }
25
+
26
+ it 'raises ArgumentError' do
27
+ expect{ query }.to raise_error(ArgumentError, 'SQL file name should be String or Symbol')
28
+ end
29
+ end
30
+ end
7
31
 
8
32
  describe '#file_path' do
9
33
  context 'when there is only one file with name' do
@@ -12,15 +36,15 @@ describe SqlQuery do
12
36
  end
13
37
  end
14
38
  context 'when there are no files' do
15
- let(:options) { { sql_name: :not_exists } }
39
+ let(:file_name) { :not_exists }
16
40
 
17
41
  it 'raises error' do
18
- expect{ query.send(:file_path) }.to raise_error('File not found with name: not_exists in /spec/sql_queries')
42
+ expect{ query.send(:file_path) }.to raise_error('File not found: not_exists')
19
43
  end
20
44
  end
21
45
 
22
46
  context 'when there are more than one matching files' do
23
- let(:options) { { sql_name: :duplicated } }
47
+ let(:file_name) { :duplicated }
24
48
 
25
49
  it 'raises error' do
26
50
  expect{ query.send(:file_path) }.to raise_error.with_message(/More than one file found:/)
@@ -34,7 +58,8 @@ describe SqlQuery do
34
58
  end
35
59
 
36
60
  context 'when file is .erb.sql' do
37
- let(:options) { { sql_name: :erb_sql, fake: 12 } }
61
+ let(:options) { { fake: 12 } }
62
+ let(:file_name) { :erb_sql }
38
63
 
39
64
  it 'returns query string' do
40
65
  expect(query.sql).to eq "SELECT 12\n"
@@ -65,6 +90,7 @@ describe SqlQuery do
65
90
  "INSERT INTO players (email) VALUES ('e@mail.dev')"
66
91
  )
67
92
  end
93
+
68
94
  after do
69
95
  ActiveRecord::Base.connection.execute(
70
96
  "DELETE FROM players"
data/sql_query.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "sql_query"
7
- spec.version = "0.1.0"
7
+ spec.version = "0.2.0"
8
8
  spec.authors = ["sufleR"]
9
9
  spec.email = ["szymon.fracczak@netguru.co"]
10
10
  spec.summary = %q{Ruby gem to load and execute SQL queries from `.sql.erb` templates}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sufleR
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord