simple-sql 0.4.9 → 0.4.10

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.
@@ -203,6 +203,21 @@ describe "Simple::SQL::Scope" do
203
203
  end
204
204
  end
205
205
 
206
+ context "Building with Hash" do
207
+ it "runs with SQL.ask" do
208
+ scope = SQL::Scope.new table: "users", select: "1, 2", where: "id >= 0"
209
+ expect(SQL.all(scope)).to eq([[1,2], [1,2]])
210
+
211
+ scope = SQL::Scope.new table: "users", select: [1,3,4], where: "id >= 0"
212
+ expect(SQL.all(scope)).to eq([[1,3,4], [1,3,4]])
213
+ end
214
+
215
+ it "raises an error with missing or invalid attributes" do
216
+ expect { SQL::Scope.new table: "users", limit: 1 }.to raise_error(ArgumentError)
217
+ expect { SQL::Scope.new select: "*" }.to raise_error(ArgumentError)
218
+ end
219
+ end
220
+
206
221
  context "describe pagination" do
207
222
  let(:scope) do
208
223
  scope = SQL::Scope.new "SELECT 1, 2 FROM users"
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,7 @@ end
6
6
  ENV["RACK_ENV"] = "test"
7
7
  ENV["RAILS_ENV"] = "test"
8
8
 
9
+ require "byebug"
9
10
  require "rspec"
10
11
  require "awesome_print"
11
12
  Dir.glob("./spec/support/**/*.rb").sort.each { |path| load path }
@@ -30,8 +31,7 @@ RSpec.configure do |config|
30
31
  config.example_status_persistence_file_path = ".rspec.data"
31
32
 
32
33
  config.around(:each) do |example|
33
- Simple::SQL.ask "DELETE FROM users"
34
- Simple::SQL.ask "DELETE FROM unique_users"
34
+ Simple::SQL.ask "TRUNCATE TABLE users, unique_users, organizations RESTART IDENTITY CASCADE"
35
35
  example.run
36
36
  end
37
37
  end
@@ -12,11 +12,11 @@ ActiveRecord::Base.logger = Logger.new("log/test.log")
12
12
  ActiveRecord::Schema.define do
13
13
  self.verbose = false
14
14
 
15
- execute "DROP SCHEMA public CASCADE;"
16
- execute "CREATE SCHEMA public;"
17
- execute "CREATE EXTENSION IF NOT EXISTS hstore;"
15
+ execute <<~SQL
16
+ DROP SCHEMA public CASCADE;
17
+ CREATE SCHEMA public;
18
+ CREATE EXTENSION IF NOT EXISTS hstore;
18
19
 
19
- execute <<-SQL
20
20
  DROP TYPE IF EXISTS access_level;
21
21
  CREATE TYPE access_level AS ENUM (
22
22
  'private',
@@ -24,24 +24,30 @@ ActiveRecord::Schema.define do
24
24
  'viewable',
25
25
  'accessible'
26
26
  );
27
- SQL
28
27
 
29
- create_table :users, force: true do |t|
30
- t.integer :role_id
31
- t.string :first_name
32
- t.string :last_name
33
- t.jsonb :metadata
34
- t.column :access_level, :access_level
28
+ CREATE TABLE organizations (
29
+ id SERIAL PRIMARY KEY,
30
+ name VARCHAR
31
+ );
35
32
 
36
- t.timestamps null: true
37
- end
33
+ CREATE TABLE users (
34
+ id SERIAL PRIMARY KEY,
35
+ organization_id INTEGER REFERENCES organizations (id),
36
+ role_id INTEGER,
37
+ first_name VARCHAR,
38
+ last_name VARCHAR,
39
+ metadata JSONB,
40
+ access_level access_level,
41
+ created_at timestamp,
42
+ updated_at timestamp
43
+ );
38
44
 
39
- create_table :unique_users, force: true do |t|
40
- t.string :first_name
41
- t.string :last_name
42
- end
45
+ CREATE TABLE unique_users (
46
+ id SERIAL PRIMARY KEY,
47
+ first_name VARCHAR,
48
+ last_name VARCHAR
49
+ );
43
50
 
44
- execute <<-SQL
45
- CREATE UNIQUE INDEX unique_users_ix1 ON unique_users(first_name, last_name)
51
+ CREATE UNIQUE INDEX unique_users_ix1 ON unique_users(first_name, last_name)
46
52
  SQL
47
53
  end
@@ -21,6 +21,10 @@ def table_attrs(table)
21
21
  first_name: sequence("First {{sequence}}"),
22
22
  last_name: sequence("Last {{sequence}}")
23
23
  }.freeze
24
+ when :organization
25
+ {
26
+ name: sequence("organization {{sequence}}")
27
+ }.freeze
24
28
  else
25
29
  raise ArgumentError, "Invalid table for factory: #{table.inspect}"
26
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - radiospiel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-06 00:00:00.000000000 Z
12
+ date: 2018-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg_array_parser
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.20'
42
+ - !ruby/object:Gem::Dependency
43
+ name: expectation
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: activerecord
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -171,12 +185,18 @@ files:
171
185
  - lib/simple/sql/config.rb
172
186
  - lib/simple/sql/connection.rb
173
187
  - lib/simple/sql/connection_adapter.rb
174
- - lib/simple/sql/decoder.rb
175
188
  - lib/simple/sql/duplicate.rb
176
- - lib/simple/sql/encoder.rb
189
+ - lib/simple/sql/helpers.rb
190
+ - lib/simple/sql/helpers/decoder.rb
191
+ - lib/simple/sql/helpers/encoder.rb
192
+ - lib/simple/sql/helpers/row_converter.rb
177
193
  - lib/simple/sql/insert.rb
178
194
  - lib/simple/sql/logging.rb
179
195
  - lib/simple/sql/reflection.rb
196
+ - lib/simple/sql/result.rb
197
+ - lib/simple/sql/result/association_loader.rb
198
+ - lib/simple/sql/result/records.rb
199
+ - lib/simple/sql/result/rows.rb
180
200
  - lib/simple/sql/scope.rb
181
201
  - lib/simple/sql/scope/filters.rb
182
202
  - lib/simple/sql/scope/order.rb
@@ -189,9 +209,8 @@ files:
189
209
  - spec/manual/threadtest.rb
190
210
  - spec/simple/sql/version_spec.rb
191
211
  - spec/simple/sql_all_into_spec.rb
192
- - spec/simple/sql_ask_into_spec.rb
193
- - spec/simple/sql_ask_into_struct_spec.rb
194
212
  - spec/simple/sql_ask_spec.rb
213
+ - spec/simple/sql_associations_spec.rb
195
214
  - spec/simple/sql_config_spec.rb
196
215
  - spec/simple/sql_conversion_spec.rb
197
216
  - spec/simple/sql_duplicate_spec.rb
@@ -233,9 +252,8 @@ test_files:
233
252
  - spec/manual/threadtest.rb
234
253
  - spec/simple/sql/version_spec.rb
235
254
  - spec/simple/sql_all_into_spec.rb
236
- - spec/simple/sql_ask_into_spec.rb
237
- - spec/simple/sql_ask_into_struct_spec.rb
238
255
  - spec/simple/sql_ask_spec.rb
256
+ - spec/simple/sql_associations_spec.rb
239
257
  - spec/simple/sql_config_spec.rb
240
258
  - spec/simple/sql_conversion_spec.rb
241
259
  - spec/simple/sql_duplicate_spec.rb
@@ -1,27 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Simple::SQL.ask into: argument" do
4
- let!(:users) { 1.upto(USER_COUNT).map { create(:user) } }
5
-
6
- it "calls the database" do
7
- r = SQL.ask("SELECT COUNT(*) AS count FROM users", into: Hash)
8
- expect(r).to eq({count: 2})
9
- end
10
-
11
- it "returns nil when there is no match" do
12
- r = SQL.ask("SELECT * FROM users WHERE FALSE", into: Hash)
13
- expect(r).to be_nil
14
- end
15
-
16
- it "returns a OpenStruct with into: OpenStruct" do
17
- r = SQL.ask("SELECT COUNT(*) AS count FROM users", into: OpenStruct)
18
- expect(r).to be_a(OpenStruct)
19
- expect(r).to eq(OpenStruct.new(count: 2))
20
- end
21
-
22
- it "supports the into: option even with parameters" do
23
- r = SQL.ask("SELECT $1::integer AS count FROM users", 2, into: OpenStruct)
24
- expect(r).to be_a(OpenStruct)
25
- expect(r).to eq(OpenStruct.new(count: 2))
26
- end
27
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Simple::SQL.ask into: :struct" do
4
- let!(:users) { 1.upto(USER_COUNT).map { create(:user) } }
5
-
6
- it "calls the database" do
7
- r = SQL.ask("SELECT COUNT(*) AS count FROM users", into: :struct)
8
- expect(r.count).to eq(2)
9
- expect(r.class.members).to eq([:count])
10
- end
11
-
12
- it "reuses the struct" do
13
- r1 = SQL.ask("SELECT COUNT(*) AS count FROM users", into: :struct)
14
- r2 = SQL.ask("SELECT COUNT(*) AS count FROM users", into: :struct)
15
- expect(r1.class.object_id).to eq(r2.class.object_id)
16
- end
17
- end