rom-yesql 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -5
- data/.rubocop_todo.yml +12 -6
- data/.travis.yml +2 -2
- data/CHANGELOG.md +8 -4
- data/Gemfile +1 -6
- data/README.md +5 -18
- data/lib/rom/yesql/gateway.rb +51 -30
- data/lib/rom/yesql/relation.rb +10 -6
- data/lib/rom/yesql/relation/class_interface.rb +4 -2
- data/lib/rom/yesql/version.rb +1 -1
- data/rakelib/rubocop.rake +1 -1
- data/rom-yesql.gemspec +2 -2
- data/spec/integration/adapter_spec.rb +10 -10
- data/spec/spec_helper.rb +1 -3
- metadata +7 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aedcc9a8aee73d1d75cf44cf9ffcea7c2750e64
|
4
|
+
data.tar.gz: fb51885ac908e9131e4ceca401549ad214097391
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae27fce18a060dcb5f88b6c0bb8eab3acbf5dd37e8996dd3b38a8012d4a84f4bd1c4d5285076272f9ccb6c1cae187e4fa3351d0ad1594fe5849cf622aaba2343
|
7
|
+
data.tar.gz: bec60620f2ae3ae65e806b00ff320c04fb291a8895691ee170fcce48ea65602618bb4c40290d649fedd7e714cac626c91ad4c6e20e6877cfe7f2ec077194c7e5
|
data/.rubocop.yml
CHANGED
@@ -29,7 +29,7 @@ Style/AsciiComments:
|
|
29
29
|
Enabled: false
|
30
30
|
|
31
31
|
# Allow using braces for value-returning blocks
|
32
|
-
Style/
|
32
|
+
Style/BlockDelimiters:
|
33
33
|
Enabled: false
|
34
34
|
|
35
35
|
# Documentation checked by Inch CI
|
@@ -53,10 +53,6 @@ Style/OpMethod:
|
|
53
53
|
Exclude:
|
54
54
|
- lib/rom/command_registry.rb
|
55
55
|
|
56
|
-
# Even a single escaped slash can be confusing
|
57
|
-
Style/RegexpLiteral:
|
58
|
-
MaxSlashes: 0
|
59
|
-
|
60
56
|
# Don’t introduce semantic fail/raise distinction
|
61
57
|
Style/SignalException:
|
62
58
|
EnforcedStyle: only_raise
|
data/.rubocop_todo.yml
CHANGED
@@ -1,15 +1,21 @@
|
|
1
|
-
# This configuration was generated by
|
2
|
-
#
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2015-09-26 18:14:52 +0200 using RuboCop version 0.34.2.
|
3
4
|
# The point is for the user to remove these configuration records
|
4
5
|
# one by one as the offenses are removed from the code base.
|
5
6
|
# Note that changes in the inspected code, or installation of new
|
6
7
|
# versions of RuboCop, may require this file to be generated again.
|
7
8
|
|
8
9
|
# Offense count: 1
|
9
|
-
|
10
|
-
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 19
|
11
12
|
|
12
|
-
# Offense count:
|
13
|
+
# Offense count: 4
|
13
14
|
# Configuration parameters: AllowURI, URISchemes.
|
14
15
|
Metrics/LineLength:
|
15
|
-
Max:
|
16
|
+
Max: 83
|
17
|
+
|
18
|
+
# Offense count: 1
|
19
|
+
# Configuration parameters: CountComments.
|
20
|
+
Metrics/MethodLength:
|
21
|
+
Max: 11
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
## v0.3.0 2016-07-31
|
2
|
+
|
3
|
+
Updated to work with rom 2.0.0
|
4
|
+
|
1
5
|
## v0.2.0 2015-08-19
|
2
6
|
|
3
|
-
Updated to work with
|
7
|
+
Updated to work with rom 0.9.0
|
4
8
|
|
5
9
|
[Compare v0.1.1...v0.2.0](https://github.com/rom-rb/rom-yaml/compare/v0.1.0...v0.2.0)
|
6
10
|
|
@@ -8,17 +12,17 @@ Updated to work with ROM 0.9.0
|
|
8
12
|
|
9
13
|
### Changed
|
10
14
|
|
11
|
-
* Updated to work with
|
15
|
+
* Updated to work with rom 0.8 (solnic)
|
12
16
|
|
13
17
|
[Compare v0.1.0...v0.1.1](https://github.com/rom-rb/rom-yaml/compare/v0.1.0...v0.1.1)
|
14
18
|
|
15
19
|
## v0.1.0 2015-03-22
|
16
20
|
|
17
|
-
Bump
|
21
|
+
Bump rom dep to 0.6.0 final
|
18
22
|
|
19
23
|
## v0.0.2 2015-03-21
|
20
24
|
|
21
|
-
Update to work with
|
25
|
+
Update to work with rom 0.6.0
|
22
26
|
|
23
27
|
## v0.0.1 2015-03-01
|
24
28
|
|
data/Gemfile
CHANGED
@@ -3,18 +3,13 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :test do
|
6
|
-
gem 'rom', github: 'rom-rb/rom', branch: 'master'
|
7
6
|
gem 'inflecto'
|
8
|
-
gem 'rspec', '~> 3.
|
7
|
+
gem 'rspec', '~> 3.5'
|
9
8
|
gem 'codeclimate-test-reporter', require: false
|
10
9
|
gem 'sqlite3', platforms: [:mri, :rbx]
|
11
10
|
gem 'jdbc-sqlite3', platforms: :jruby
|
12
11
|
end
|
13
12
|
|
14
13
|
group :tools do
|
15
|
-
gem 'guard'
|
16
14
|
gem 'byebug', platforms: [:mri]
|
17
|
-
gem 'guard-rspec'
|
18
|
-
gem 'guard-rubocop'
|
19
|
-
gem 'rubocop', '~> 0.28'
|
20
15
|
end
|
data/README.md
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
[codeclimate]: https://codeclimate.com/github/rom-rb/rom-yesql
|
5
5
|
[inchpages]: http://inch-ci.org/github/rom-rb/rom-yesql
|
6
6
|
|
7
|
-
#
|
7
|
+
# rom-yesql
|
8
8
|
|
9
9
|
[][gem]
|
10
10
|
[][travis]
|
11
|
-
[][gemnasium]
|
12
12
|
[][codeclimate]
|
13
13
|
[][codeclimate]
|
14
14
|
[][inchpages]
|
@@ -16,6 +16,9 @@
|
|
16
16
|
|
17
17
|
[Yesql](https://github.com/krisajenkins/yesql)-like adapter for [Ruby Object Mapper](https://github.com/rom-rb/rom).
|
18
18
|
|
19
|
+
* [API docs](http://rubydoc.info/gems/rom-yesql)
|
20
|
+
* [ROM user docs](http://rom-rb.org/learn)
|
21
|
+
|
19
22
|
## Installation
|
20
23
|
|
21
24
|
Add this line to your application's Gemfile:
|
@@ -32,22 +35,6 @@ Or install it yourself as:
|
|
32
35
|
|
33
36
|
$ gem install rom-yesql
|
34
37
|
|
35
|
-
## Synopsis
|
36
|
-
|
37
|
-
``` ruby
|
38
|
-
# given sql/my_queries/users.sql includes "SELECT * FROM users WHERE name = '%{name}'"
|
39
|
-
|
40
|
-
ROM.setup(:yesql, ['sqlite://path/to/your/db', path: './sql'])
|
41
|
-
|
42
|
-
class MyQueries < ROM::Relation[:yesql]
|
43
|
-
end
|
44
|
-
|
45
|
-
rom = ROM.finalize.env
|
46
|
-
|
47
|
-
my_queries = rom.relations[:my_queries]
|
48
|
-
my_queries.users(name: 'Jane').to_a # => gets the users
|
49
|
-
```
|
50
|
-
|
51
38
|
## License
|
52
39
|
|
53
40
|
See `LICENSE` file.
|
data/lib/rom/yesql/gateway.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'sequel'
|
2
2
|
|
3
|
+
require 'rom/support/options'
|
4
|
+
|
3
5
|
require 'rom/yesql/dataset'
|
4
6
|
require 'rom/yesql/relation'
|
5
7
|
|
@@ -7,49 +9,60 @@ module ROM
|
|
7
9
|
module Yesql
|
8
10
|
# Yesql gateway exposes access to configured SQL queries
|
9
11
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# ROM::Yesql::Gateway.new(uri, path: '/path/to/my_queries')
|
13
|
-
#
|
14
|
-
# # Provide queries explicitly using a hash
|
15
|
-
# ROM::Yesql::Gateway.new(uri, queries: {
|
16
|
-
# reports: {
|
17
|
-
# all_users: 'SELECT * FROM users'
|
18
|
-
# }
|
19
|
-
# })
|
20
|
-
#
|
21
|
-
# # Override default query proc handler
|
22
|
-
# ROM::Yesql::Gateway.new(uri, query_proc: proc { |name, query, *args|
|
23
|
-
# # do something to return an sql string
|
24
|
-
# })
|
12
|
+
# Relations created with datasets provided by this gateway automatically
|
13
|
+
# expose access to gateway's queries.
|
25
14
|
#
|
26
15
|
# @api public
|
27
16
|
class Gateway < ROM::Gateway
|
28
17
|
include Options
|
29
18
|
|
19
|
+
# @!attribute [r] path
|
20
|
+
# @return [String] a path to files with SQL queries
|
30
21
|
option :path, reader: true
|
31
|
-
|
32
|
-
|
22
|
+
|
23
|
+
# @!attribute [r] queries
|
24
|
+
# @return [Hash] a hash with queries
|
25
|
+
option :queries, type: Hash, default: EMPTY_HASH, reader: true
|
26
|
+
|
27
|
+
# @!attribute [r] query_proc
|
28
|
+
# This defaults to simple interpolation of the query using option hash passed to a relation
|
29
|
+
# @return [Proc] custom query proc for pre-processing a query string
|
30
|
+
option :query_proc, reader: true, default: proc { |_gateway|
|
33
31
|
proc do |_name, query, opts|
|
34
32
|
query % opts
|
35
33
|
end
|
36
34
|
}
|
37
35
|
|
38
|
-
#
|
39
|
-
#
|
40
|
-
# @return [Sequel::Database]
|
41
|
-
#
|
42
|
-
# @api private
|
36
|
+
# @!attribute [r] connection
|
37
|
+
# @return [Sequel::Database] Sequel database connection
|
43
38
|
attr_reader :connection
|
44
39
|
|
45
|
-
#
|
40
|
+
# Initializes a yesql gateway
|
46
41
|
#
|
47
|
-
# @
|
42
|
+
# @example
|
43
|
+
# # Load all queries from a specific path
|
44
|
+
# ROM::Yesql::Gateway.new(uri, path: '/path/to/my_queries')
|
48
45
|
#
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
#
|
46
|
+
# # Provide queries explicitly using a hash
|
47
|
+
# ROM::Yesql::Gateway.new(uri, queries: {
|
48
|
+
# reports: {
|
49
|
+
# all_users: 'SELECT * FROM users'
|
50
|
+
# }
|
51
|
+
# })
|
52
|
+
#
|
53
|
+
# # Override default query proc handler
|
54
|
+
# ROM::Yesql::Gateway.new(uri, query_proc: proc { |name, query, *args|
|
55
|
+
# # do something to return an sql string
|
56
|
+
# })
|
57
|
+
#
|
58
|
+
# @param uri [String]
|
59
|
+
#
|
60
|
+
# @param options [Hash]
|
61
|
+
# @option :path [String]
|
62
|
+
# @option :queries [Hash]
|
63
|
+
# @option :query_proc [Proc]
|
64
|
+
#
|
65
|
+
# @api public
|
53
66
|
def initialize(uri, options = {})
|
54
67
|
super
|
55
68
|
@connection = Sequel.connect(uri, options)
|
@@ -59,15 +72,23 @@ module ROM
|
|
59
72
|
Relation.load_queries(queries)
|
60
73
|
end
|
61
74
|
|
62
|
-
#
|
75
|
+
# Initializes a dataset
|
63
76
|
#
|
64
77
|
# Since all relations use the same dataset we simply create one instance
|
65
78
|
#
|
79
|
+
# @return [Dataset]
|
80
|
+
#
|
66
81
|
# @api private
|
67
82
|
def dataset(_name)
|
68
83
|
@dataset ||= Dataset.new(connection)
|
69
84
|
end
|
70
85
|
|
86
|
+
# Returns if a dataset with the given name exists
|
87
|
+
#
|
88
|
+
# This always returns true because all relations use the same dataset
|
89
|
+
#
|
90
|
+
# @return [True]
|
91
|
+
#
|
71
92
|
# @api private
|
72
93
|
def dataset?(_name)
|
73
94
|
! @dataset.nil?
|
@@ -75,7 +96,7 @@ module ROM
|
|
75
96
|
|
76
97
|
private
|
77
98
|
|
78
|
-
#
|
99
|
+
# Loads queries from filesystem if :path was provided
|
79
100
|
#
|
80
101
|
# @api private
|
81
102
|
def initialize_queries
|
data/lib/rom/yesql/relation.rb
CHANGED
@@ -11,7 +11,9 @@ module ROM
|
|
11
11
|
# It also supports overriding query_proc
|
12
12
|
#
|
13
13
|
# @example
|
14
|
-
# ROM.
|
14
|
+
# conf = ROM::Configuration.new(
|
15
|
+
# :yesql, ['sqlite::memory', path: '/my/sql/queries/are/here']
|
16
|
+
# )
|
15
17
|
#
|
16
18
|
# class Reports < ROM::Relation[:yesql]
|
17
19
|
# query_proc(proc { |name, query, *args|
|
@@ -19,9 +21,11 @@ module ROM
|
|
19
21
|
# })
|
20
22
|
# end
|
21
23
|
#
|
22
|
-
#
|
24
|
+
# conf.register_relation(Reports)
|
23
25
|
#
|
24
|
-
# rom.
|
26
|
+
# rom = ROM.container(conf)
|
27
|
+
#
|
28
|
+
# rom.relations[:reports] # use like a normal rom relation
|
25
29
|
#
|
26
30
|
# @api public
|
27
31
|
class Relation < ROM::Relation
|
@@ -46,7 +50,7 @@ module ROM
|
|
46
50
|
define_query_methods(klass, queries[klass.dataset] || {})
|
47
51
|
end
|
48
52
|
|
49
|
-
#
|
53
|
+
# Extends provided klass with query methods
|
50
54
|
#
|
51
55
|
# @param [Class] klass A relation class
|
52
56
|
# @param [Hash] queries A hash with name, query pairs for the relation
|
@@ -66,7 +70,7 @@ module ROM
|
|
66
70
|
#
|
67
71
|
# @return [Hash]
|
68
72
|
#
|
69
|
-
# @api
|
73
|
+
# @api private
|
70
74
|
def self.queries
|
71
75
|
@queries || {}
|
72
76
|
end
|
@@ -86,7 +90,7 @@ module ROM
|
|
86
90
|
@queries
|
87
91
|
end
|
88
92
|
|
89
|
-
#
|
93
|
+
# Returns query proc set on a relation class
|
90
94
|
#
|
91
95
|
# By default this returns whatever was set in the gateway or the default
|
92
96
|
# one which simply uses hash % query to evaluate a query string
|
@@ -2,11 +2,13 @@ module ROM
|
|
2
2
|
module Yesql
|
3
3
|
class Relation < ROM::Relation
|
4
4
|
module ClassInterface
|
5
|
-
#
|
5
|
+
# Sets dataset name for the relation class
|
6
6
|
#
|
7
7
|
# The class will be extended with queries registered under that name.
|
8
8
|
# By default dataset name is derived from the class name, which doesn't
|
9
|
-
# have to match
|
9
|
+
# have to match the key under which its queries were registered
|
10
|
+
#
|
11
|
+
# @param name [String]
|
10
12
|
#
|
11
13
|
# @return [Symbol]
|
12
14
|
#
|
data/lib/rom/yesql/version.rb
CHANGED
data/rakelib/rubocop.rake
CHANGED
data/rom-yesql.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency
|
22
|
-
spec.add_runtime_dependency 'sequel', '~> 4.
|
21
|
+
spec.add_runtime_dependency "rom", "~> 2.0"
|
22
|
+
spec.add_runtime_dependency 'sequel', '~> 4.27'
|
23
23
|
spec.add_development_dependency "bundler"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
end
|
@@ -3,23 +3,21 @@ require 'spec_helper'
|
|
3
3
|
describe 'ROM / Yesql' do
|
4
4
|
include_context 'users and tasks'
|
5
5
|
|
6
|
-
let(:
|
6
|
+
let(:container) { ROM.container(configuration) }
|
7
7
|
|
8
|
-
let!(:
|
9
|
-
ROM.
|
8
|
+
let!(:configuration) do
|
9
|
+
ROM::Configuration.new(:yesql, [uri, path: path, queries: { reports: report_queries }])
|
10
10
|
end
|
11
11
|
|
12
12
|
let(:report_queries) { { all_users: 'SELECT * FROM users ORDER BY %{order}' } }
|
13
13
|
|
14
|
-
let(:users) {
|
15
|
-
let(:tasks) {
|
16
|
-
let(:reports) {
|
14
|
+
let(:users) { container.relation(:users) }
|
15
|
+
let(:tasks) { container.relation(:tasks) }
|
16
|
+
let(:reports) { container.relation(:reports) }
|
17
17
|
|
18
18
|
before do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
class Tasks < ROM::Relation[:yesql]
|
19
|
+
configuration.relation(:users)
|
20
|
+
configuration.relation(:tasks) do
|
23
21
|
query_proc(proc { |_name, query, opts| query.gsub(':id:', opts[:id].to_s) })
|
24
22
|
end
|
25
23
|
|
@@ -28,6 +26,8 @@ describe 'ROM / Yesql' do
|
|
28
26
|
dataset :reports
|
29
27
|
end
|
30
28
|
end
|
29
|
+
|
30
|
+
configuration.register_relation(Test::Reports)
|
31
31
|
end
|
32
32
|
|
33
33
|
describe 'query method' do
|
data/spec/spec_helper.rb
CHANGED
@@ -16,7 +16,7 @@ require 'logger'
|
|
16
16
|
|
17
17
|
begin
|
18
18
|
require 'byebug'
|
19
|
-
rescue LoadError
|
19
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
20
20
|
end
|
21
21
|
|
22
22
|
LOGGER = Logger.new(File.open('./log/test.log', 'a'))
|
@@ -35,5 +35,3 @@ RSpec.configure do |config|
|
|
35
35
|
added_constants.each { |name| Object.send(:remove_const, name) }
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
39
|
-
ROM.use :auto_registration
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-yesql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rom
|
@@ -16,34 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.0
|
19
|
+
version: '2.0'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.9.0
|
26
|
+
version: '2.0'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: sequel
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: 4.
|
33
|
+
version: '4.27'
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: 4.
|
40
|
+
version: '4.27'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: bundler
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
123
|
version: '0'
|
130
124
|
requirements: []
|
131
125
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.5.1
|
133
127
|
signing_key:
|
134
128
|
specification_version: 4
|
135
129
|
summary: Yesql adapter for ROM
|