quo 1.0.0.beta2 → 2.0.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/.devcontainer/Dockerfile +17 -0
- data/.devcontainer/compose.yml +10 -0
- data/.devcontainer/devcontainer.json +12 -0
- data/Appraisals +4 -12
- data/CHANGELOG.md +112 -1
- data/CLAUDE.md +19 -0
- data/Gemfile +7 -1
- data/LICENSE.txt +1 -1
- data/README.md +496 -203
- data/Rakefile +66 -6
- data/UPGRADING.md +216 -0
- data/badges/coverage_badge_total.svg +35 -0
- data/badges/rubycritic_badge_score.svg +35 -0
- data/claude-skill/README.md +100 -0
- data/claude-skill/SKILL.md +442 -0
- data/claude-skill/references/API_REFERENCE.md +462 -0
- data/claude-skill/references/COMPOSITION.md +396 -0
- data/claude-skill/references/PAGINATION.md +396 -0
- data/claude-skill/references/QUERY_TYPES.md +297 -0
- data/claude-skill/references/TRANSFORMERS.md +282 -0
- data/context/01-core-architecture.md +247 -0
- data/context/02-query-types-implementation.md +355 -0
- data/context/03-composition-transformation.md +441 -0
- data/context/04-pagination-results.md +485 -0
- data/context/05-testing-configuration.md +491 -0
- data/context/06-advanced-patterns-examples.md +153 -0
- data/gemfiles/rails_8.0.gemfile +10 -5
- data/gemfiles/rails_8.1.gemfile +20 -0
- data/lib/generators/quo/install/USAGE +21 -0
- data/lib/generators/quo/install/install_generator.rb +63 -0
- data/lib/quo/collection_backed_query.rb +21 -15
- data/lib/quo/collection_results.rb +1 -0
- data/lib/quo/composed_collection_backed_query.rb +42 -0
- data/lib/quo/composed_instance.rb +144 -0
- data/lib/quo/composed_query.rb +43 -178
- data/lib/quo/composed_relation_backed_query.rb +42 -0
- data/lib/quo/composing/base_strategy.rb +22 -0
- data/lib/quo/composing/class_strategy.rb +86 -0
- data/lib/quo/composing/class_strategy_registry.rb +31 -0
- data/lib/quo/composing/query_classes_strategy.rb +38 -0
- data/lib/quo/composing.rb +81 -0
- data/lib/quo/engine.rb +1 -0
- data/lib/quo/minitest/helpers.rb +14 -24
- data/lib/quo/preloadable.rb +1 -0
- data/lib/quo/query.rb +22 -5
- data/lib/quo/relation_backed_query.rb +24 -18
- data/lib/quo/relation_backed_query_specification.rb +44 -25
- data/lib/quo/relation_results.rb +1 -0
- data/lib/quo/results.rb +31 -2
- data/lib/quo/rspec/helpers.rb +15 -26
- data/lib/quo/testing/collection_backed_fake.rb +1 -0
- data/lib/quo/testing/fake_helpers.rb +30 -0
- data/lib/quo/testing/relation_backed_fake.rb +1 -0
- data/lib/quo/version.rb +1 -1
- data/lib/quo/wrapped_collection_backed_query.rb +21 -0
- data/lib/quo/wrapped_relation_backed_query.rb +21 -0
- data/lib/quo.rb +8 -0
- data/quo.png +0 -0
- data/sig/generated/quo/collection_backed_query.rbs +10 -4
- data/sig/generated/quo/collection_results.rbs +1 -0
- data/sig/generated/quo/composed_collection_backed_query.rbs +25 -0
- data/sig/generated/quo/composed_instance.rbs +61 -0
- data/sig/generated/quo/composed_query.rbs +23 -56
- data/sig/generated/quo/composed_relation_backed_query.rbs +25 -0
- data/sig/generated/quo/composing/base_strategy.rbs +16 -0
- data/sig/generated/quo/composing/class_strategy.rbs +38 -0
- data/sig/generated/quo/composing/class_strategy_registry.rbs +16 -0
- data/sig/generated/quo/composing/query_classes_strategy.rbs +24 -0
- data/sig/generated/quo/composing.rbs +40 -0
- data/sig/generated/quo/engine.rbs +1 -0
- data/sig/generated/quo/minitest/helpers.rbs +12 -0
- data/sig/generated/quo/preloadable.rbs +1 -0
- data/sig/generated/quo/query.rbs +15 -4
- data/sig/generated/quo/relation_backed_query.rbs +15 -5
- data/sig/generated/quo/relation_backed_query_specification.rbs +47 -39
- data/sig/generated/quo/relation_results.rbs +1 -0
- data/sig/generated/quo/results.rbs +11 -0
- data/sig/generated/quo/rspec/helpers.rbs +12 -0
- data/sig/generated/quo/testing/collection_backed_fake.rbs +1 -0
- data/sig/generated/quo/testing/fake_helpers.rbs +14 -0
- data/sig/generated/quo/testing/relation_backed_fake.rbs +1 -0
- data/sig/generated/quo/wrapped_collection_backed_query.rbs +13 -0
- data/sig/generated/quo/wrapped_relation_backed_query.rbs +13 -0
- data/sig/generated/quo.rbs +1 -0
- data/website/.gitignore +6 -0
- data/website/.nojekyll +0 -0
- data/website/404.html +26 -0
- data/website/Gemfile +24 -0
- data/website/_config.yml +50 -0
- data/website/_data/navigation.yml +8 -0
- data/website/_data/sidebar.yml +2 -0
- data/website/_data/social_links.yml +3 -0
- data/website/_docs/api.md +261 -0
- data/website/_docs/get-started.md +289 -0
- data/website/assets/quo.png +0 -0
- data/website/index.md +141 -0
- metadata +70 -13
- data/gemfiles/rails_7.0.gemfile +0 -15
- data/gemfiles/rails_7.1.gemfile +0 -15
- data/gemfiles/rails_7.2.gemfile +0 -15
data/sig/generated/quo/query.rbs
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
# Generated from lib/quo/query.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
module Quo
|
|
4
|
+
# Base class for query objects with pagination and composition support
|
|
4
5
|
class Query < Literal::Struct
|
|
5
6
|
include Literal::Types
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
# @rbs override
|
|
9
|
+
def self.inspect: ...
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
# @rbs override
|
|
12
|
+
def self.to_s: ...
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
# @rbs override
|
|
15
|
+
def inspect: ...
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
# @rbs override
|
|
18
|
+
def to_s: ...
|
|
14
19
|
|
|
15
20
|
# TODO: put this in a module with the composer and merge_instances methods
|
|
16
21
|
# Compose is aliased as `+`. Can optionally take `joins` parameters to add joins on merged relation.
|
|
@@ -19,6 +24,12 @@ module Quo
|
|
|
19
24
|
# @rbs return: Quo::Query & Quo::ComposedQuery
|
|
20
25
|
def self.compose: (Quo::Query | ActiveRecord::Relation | Object & Enumerable[untyped] right, ?joins: Symbol | Hash[Symbol, untyped] | Array[Symbol | Hash[Symbol, untyped]]) -> (Quo::Query & Quo::ComposedQuery)
|
|
21
26
|
|
|
27
|
+
# Helper method to define properties on a dynamically created class
|
|
28
|
+
# @rbs klass: Class
|
|
29
|
+
# @rbs props: Hash[Symbol, untyped]
|
|
30
|
+
# @rbs return: void
|
|
31
|
+
def self.define_props_on_class: (Class klass, Hash[Symbol, untyped] props) -> void
|
|
32
|
+
|
|
22
33
|
COERCE_TO_INT: untyped
|
|
23
34
|
|
|
24
35
|
attr_accessor page(): Integer?
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
# Generated from lib/quo/relation_backed_query.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
module Quo
|
|
4
|
+
# Query object backed by ActiveRecord relations
|
|
4
5
|
class RelationBackedQuery < Query
|
|
5
|
-
# @rbs query: ActiveRecord::Relation | Quo::
|
|
6
|
+
# @rbs query: ActiveRecord::Relation | Quo::RelationBackedQuery
|
|
6
7
|
# @rbs props: Hash[Symbol, untyped]
|
|
7
|
-
# @rbs &block: () -> ActiveRecord::Relation | Quo::Query
|
|
8
|
+
# @rbs &block: ? () -> (ActiveRecord::Relation | Quo::Query)
|
|
8
9
|
# @rbs return: Quo::RelationBackedQuery
|
|
9
|
-
def self.wrap: (?ActiveRecord::Relation | Quo::
|
|
10
|
+
def self.wrap: (?ActiveRecord::Relation | Quo::RelationBackedQuery query, ?props: Hash[Symbol, untyped]) ?{ () -> (ActiveRecord::Relation | Quo::Query) } -> Quo::RelationBackedQuery
|
|
11
|
+
|
|
12
|
+
# @rbs relation: ActiveRecord::Relation
|
|
13
|
+
# @rbs return: Quo::WrappedRelationBackedQuery
|
|
14
|
+
def self.from: (ActiveRecord::Relation relation) -> Quo::WrappedRelationBackedQuery
|
|
10
15
|
|
|
11
16
|
# @rbs conditions: untyped?
|
|
12
17
|
# @rbs return: String
|
|
@@ -32,13 +37,18 @@ module Quo
|
|
|
32
37
|
# @rbs return: Quo::Query
|
|
33
38
|
def with: (?Hash[Symbol, untyped] options) -> Quo::Query
|
|
34
39
|
|
|
40
|
+
def model: () -> (untyped | nil)
|
|
41
|
+
|
|
42
|
+
def klass: () -> (untyped | nil)
|
|
43
|
+
|
|
44
|
+
# @rbs total_count: Integer?
|
|
35
45
|
# @rbs return: Quo::CollectionBackedQuery
|
|
36
|
-
def to_collection: (?total_count:
|
|
46
|
+
def to_collection: (?total_count: Integer?) -> Quo::CollectionBackedQuery
|
|
37
47
|
|
|
38
48
|
def results: () -> Quo::Results
|
|
39
49
|
|
|
40
50
|
# Return the SQL string for this query if its a relation type query object
|
|
41
|
-
def to_sql: () -> String
|
|
51
|
+
def to_sql: () -> String?
|
|
42
52
|
|
|
43
53
|
# Implements a fluent API for query methods
|
|
44
54
|
# This allows methods to be chained like query.where(...).order(...).limit(...)
|
|
@@ -13,82 +13,90 @@ module Quo
|
|
|
13
13
|
def initialize: (?Hash[Symbol, untyped] options) -> untyped
|
|
14
14
|
|
|
15
15
|
# Creates a new specification with merged options
|
|
16
|
-
# @rbs new_options: Hash[Symbol, untyped]
|
|
17
|
-
# @rbs return: Quo::
|
|
18
|
-
def merge: (Hash[Symbol, untyped] new_options) -> Quo::
|
|
16
|
+
# @rbs new_options: Hash[Symbol, untyped] | RelationBackedQuerySpecification
|
|
17
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
18
|
+
def merge: (Hash[Symbol, untyped] | RelationBackedQuerySpecification new_options) -> Quo::RelationBackedQuerySpecification
|
|
19
19
|
|
|
20
20
|
# Apply all the specification options to the given ActiveRecord relation
|
|
21
21
|
# @rbs relation: ActiveRecord::Relation
|
|
22
22
|
# @rbs return: ActiveRecord::Relation
|
|
23
23
|
def apply_to: (ActiveRecord::Relation relation) -> ActiveRecord::Relation
|
|
24
24
|
|
|
25
|
+
# @rbs key: Symbol
|
|
26
|
+
# @rbs return: bool
|
|
27
|
+
def has?: (Symbol key) -> bool
|
|
28
|
+
|
|
29
|
+
# @rbs key: Symbol
|
|
30
|
+
# @rbs return: untyped
|
|
31
|
+
def []: (Symbol key) -> untyped
|
|
32
|
+
|
|
25
33
|
# @rbs *fields: untyped
|
|
26
|
-
# @rbs return: Quo::
|
|
27
|
-
def select: (*untyped fields) -> Quo::
|
|
34
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
35
|
+
def select: (*untyped fields) -> Quo::RelationBackedQuerySpecification
|
|
28
36
|
|
|
29
37
|
# @rbs conditions: untyped
|
|
30
|
-
# @rbs return: Quo::
|
|
31
|
-
def where: (untyped conditions) -> Quo::
|
|
38
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
39
|
+
def where: (untyped conditions) -> Quo::RelationBackedQuerySpecification
|
|
32
40
|
|
|
33
41
|
# @rbs order_clause: untyped
|
|
34
|
-
# @rbs return: Quo::
|
|
35
|
-
def order: (untyped order_clause) -> Quo::
|
|
42
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
43
|
+
def order: (untyped order_clause) -> Quo::RelationBackedQuerySpecification
|
|
36
44
|
|
|
37
45
|
# @rbs *columns: untyped
|
|
38
|
-
# @rbs return: Quo::
|
|
39
|
-
def group: (*untyped columns) -> Quo::
|
|
46
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
47
|
+
def group: (*untyped columns) -> Quo::RelationBackedQuerySpecification
|
|
40
48
|
|
|
41
49
|
# @rbs value: Integer
|
|
42
|
-
# @rbs return: Quo::
|
|
43
|
-
def limit: (Integer value) -> Quo::
|
|
50
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
51
|
+
def limit: (Integer value) -> Quo::RelationBackedQuerySpecification
|
|
44
52
|
|
|
45
53
|
# @rbs value: Integer
|
|
46
|
-
# @rbs return: Quo::
|
|
47
|
-
def offset: (Integer value) -> Quo::
|
|
54
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
55
|
+
def offset: (Integer value) -> Quo::RelationBackedQuerySpecification
|
|
48
56
|
|
|
49
|
-
# @rbs tables: untyped
|
|
50
|
-
# @rbs return: Quo::
|
|
51
|
-
def joins: (untyped tables) -> Quo::
|
|
57
|
+
# @rbs *tables: untyped
|
|
58
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
59
|
+
def joins: (*untyped tables) -> Quo::RelationBackedQuerySpecification
|
|
52
60
|
|
|
53
|
-
# @rbs tables: untyped
|
|
54
|
-
# @rbs return: Quo::
|
|
55
|
-
def left_outer_joins: (untyped tables) -> Quo::
|
|
61
|
+
# @rbs *tables: untyped
|
|
62
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
63
|
+
def left_outer_joins: (*untyped tables) -> Quo::RelationBackedQuerySpecification
|
|
56
64
|
|
|
57
65
|
# @rbs *associations: untyped
|
|
58
|
-
# @rbs return: Quo::
|
|
59
|
-
def includes: (*untyped associations) -> Quo::
|
|
66
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
67
|
+
def includes: (*untyped associations) -> Quo::RelationBackedQuerySpecification
|
|
60
68
|
|
|
61
69
|
# @rbs *associations: untyped
|
|
62
|
-
# @rbs return: Quo::
|
|
63
|
-
def preload: (*untyped associations) -> Quo::
|
|
70
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
71
|
+
def preload: (*untyped associations) -> Quo::RelationBackedQuerySpecification
|
|
64
72
|
|
|
65
73
|
# @rbs *associations: untyped
|
|
66
|
-
# @rbs return: Quo::
|
|
67
|
-
def eager_load: (*untyped associations) -> Quo::
|
|
74
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
75
|
+
def eager_load: (*untyped associations) -> Quo::RelationBackedQuerySpecification
|
|
68
76
|
|
|
69
77
|
# @rbs enabled: bool
|
|
70
|
-
# @rbs return: Quo::
|
|
71
|
-
def distinct: (?bool enabled) -> Quo::
|
|
78
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
79
|
+
def distinct: (?bool enabled) -> Quo::RelationBackedQuerySpecification
|
|
72
80
|
|
|
73
81
|
# @rbs order_clause: untyped
|
|
74
|
-
# @rbs return: Quo::
|
|
75
|
-
def reorder: (untyped order_clause) -> Quo::
|
|
82
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
83
|
+
def reorder: (untyped order_clause) -> Quo::RelationBackedQuerySpecification
|
|
76
84
|
|
|
77
85
|
# @rbs *modules: untyped
|
|
78
|
-
# @rbs return: Quo::
|
|
79
|
-
def extending: (*untyped modules) -> Quo::
|
|
86
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
87
|
+
def extending: (*untyped modules) -> Quo::RelationBackedQuerySpecification
|
|
80
88
|
|
|
81
89
|
# @rbs *args: untyped
|
|
82
|
-
# @rbs return: Quo::
|
|
83
|
-
def unscope: (*untyped args) -> Quo::
|
|
90
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
91
|
+
def unscope: (*untyped args) -> Quo::RelationBackedQuerySpecification
|
|
84
92
|
|
|
85
93
|
# Builds a new specification from a hash of options
|
|
86
94
|
# @rbs options: Hash[Symbol, untyped]
|
|
87
|
-
# @rbs return: Quo::
|
|
88
|
-
def self.build: (?Hash[Symbol, untyped] options) -> Quo::
|
|
95
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
96
|
+
def self.build: (?Hash[Symbol, untyped] options) -> Quo::RelationBackedQuerySpecification
|
|
89
97
|
|
|
90
98
|
# Returns a blank specification
|
|
91
|
-
# @rbs return: Quo::
|
|
92
|
-
def self.blank: () -> Quo::
|
|
99
|
+
# @rbs return: Quo::RelationBackedQuerySpecification
|
|
100
|
+
def self.blank: () -> Quo::RelationBackedQuerySpecification
|
|
93
101
|
end
|
|
94
102
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Generated from lib/quo/relation_results.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
module Quo
|
|
4
|
+
# Results wrapper for relation-backed queries providing pagination and counting
|
|
4
5
|
class RelationResults < Results
|
|
5
6
|
# @rbs query: Quo::Query
|
|
6
7
|
# @rbs transformer: (^(untyped, ?Integer) -> untyped)?
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Generated from lib/quo/results.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
module Quo
|
|
4
|
+
# Base results wrapper providing enumeration with optional transformation
|
|
4
5
|
class Results
|
|
5
6
|
def empty?: () -> bool
|
|
6
7
|
|
|
@@ -13,6 +14,12 @@ module Quo
|
|
|
13
14
|
# Alias for page_count
|
|
14
15
|
def page_size: () -> Integer
|
|
15
16
|
|
|
17
|
+
FILTER_METHODS: untyped
|
|
18
|
+
|
|
19
|
+
PAIR_FILTER_METHODS: untyped
|
|
20
|
+
|
|
21
|
+
PASSTHROUGH_METHODS: untyped
|
|
22
|
+
|
|
16
23
|
# @rbs &block: (untyped, *untyped) -> untyped
|
|
17
24
|
# @rbs return: Hash[untyped, Array[untyped]]
|
|
18
25
|
def group_by: () { (untyped, *untyped) -> untyped } -> Hash[untyped, Array[untyped]]
|
|
@@ -35,5 +42,9 @@ module Quo
|
|
|
35
42
|
# @rbs results: untyped
|
|
36
43
|
# @rbs return: untyped
|
|
37
44
|
def transform_results: (untyped results) -> untyped
|
|
45
|
+
|
|
46
|
+
# @rbs pair: untyped
|
|
47
|
+
# @rbs return: untyped
|
|
48
|
+
def transform_pair: (untyped pair) -> untyped
|
|
38
49
|
end
|
|
39
50
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Generated from lib/quo/rspec/helpers.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Quo
|
|
4
|
+
module Rspec
|
|
5
|
+
# Test helpers for stubbing query objects in RSpec
|
|
6
|
+
module Helpers
|
|
7
|
+
include Quo::Testing::FakeHelpers
|
|
8
|
+
|
|
9
|
+
def fake_query: (untyped query_class, ?with: untyped, ?results: untyped, ?total_count: untyped, ?page_count: untyped) ?{ (?) -> untyped } -> untyped
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Generated from lib/quo/testing/fake_helpers.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Quo
|
|
4
|
+
module Testing
|
|
5
|
+
# Shared helpers for creating fake query objects in tests
|
|
6
|
+
module FakeHelpers
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @rbs query_class: Class
|
|
10
|
+
# @rbs return: Class
|
|
11
|
+
def build_fake_class: (Class query_class) -> Class
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Generated from lib/quo/wrapped_collection_backed_query.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Quo
|
|
4
|
+
class WrappedCollectionBackedQuery
|
|
5
|
+
@wrapped: Enumerable[untyped]
|
|
6
|
+
|
|
7
|
+
# @rbs override
|
|
8
|
+
def collection: ...
|
|
9
|
+
|
|
10
|
+
# @rbs override
|
|
11
|
+
def inspect: ...
|
|
12
|
+
end
|
|
13
|
+
end
|
data/sig/generated/quo.rbs
CHANGED
data/website/.gitignore
ADDED
data/website/.nojekyll
ADDED
|
File without changes
|
data/website/404.html
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
permalink: /404.html
|
|
3
|
+
layout: default
|
|
4
|
+
title: Page not found
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<style type="text/css" media="screen">
|
|
8
|
+
.container {
|
|
9
|
+
margin: 10px auto;
|
|
10
|
+
max-width: 600px;
|
|
11
|
+
text-align: center;
|
|
12
|
+
}
|
|
13
|
+
h1 {
|
|
14
|
+
margin: 30px 0;
|
|
15
|
+
font-size: 4em;
|
|
16
|
+
line-height: 1;
|
|
17
|
+
letter-spacing: -1px;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
|
|
21
|
+
<div class="container">
|
|
22
|
+
<h1>404</h1>
|
|
23
|
+
|
|
24
|
+
<p><strong>Page not found</strong></p>
|
|
25
|
+
<p>The requested page could not be found.</p>
|
|
26
|
+
</div>
|
data/website/Gemfile
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "jekyll", "~> 4.4"
|
|
6
|
+
gem "jekyll-vitepress-theme", "~> 1.4"
|
|
7
|
+
|
|
8
|
+
group :jekyll_plugins do
|
|
9
|
+
gem "jekyll-feed", "~> 0.12"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
13
|
+
# and associated library.
|
|
14
|
+
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
|
15
|
+
gem "tzinfo", ">= 1", "< 3"
|
|
16
|
+
gem "tzinfo-data"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Performance-booster for watching directories on Windows
|
|
20
|
+
gem "wdm", "~> 0.1", platforms: [:mingw, :x64_mingw, :mswin]
|
|
21
|
+
|
|
22
|
+
# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
|
|
23
|
+
# do not have a Java counterpart.
|
|
24
|
+
gem "http_parser.rb", "~> 0.6.0", platforms: [:jruby]
|
data/website/_config.yml
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
title: Quo
|
|
4
|
+
email: stevegeek@gmail.com
|
|
5
|
+
description: >-
|
|
6
|
+
Quo is a query object gem for Ruby on Rails. Query objects are composable, testable, and reusable.
|
|
7
|
+
Build complex database queries and collection transformations with a clean, fluent API.
|
|
8
|
+
baseurl: ""
|
|
9
|
+
url: ""
|
|
10
|
+
github_username: stevegeek
|
|
11
|
+
github_repo: quo
|
|
12
|
+
|
|
13
|
+
theme: jekyll-vitepress-theme
|
|
14
|
+
plugins:
|
|
15
|
+
- jekyll-feed
|
|
16
|
+
- jekyll-vitepress-theme
|
|
17
|
+
|
|
18
|
+
collections:
|
|
19
|
+
docs:
|
|
20
|
+
output: true
|
|
21
|
+
permalink: /:path/
|
|
22
|
+
|
|
23
|
+
defaults:
|
|
24
|
+
- scope:
|
|
25
|
+
path: ""
|
|
26
|
+
type: docs
|
|
27
|
+
values:
|
|
28
|
+
layout: default
|
|
29
|
+
|
|
30
|
+
jekyll_vitepress:
|
|
31
|
+
branding:
|
|
32
|
+
site_title: Quo
|
|
33
|
+
logo:
|
|
34
|
+
default: /assets/quo.png
|
|
35
|
+
alt: Quo
|
|
36
|
+
width: 28
|
|
37
|
+
height: 28
|
|
38
|
+
syntax:
|
|
39
|
+
light_theme: github
|
|
40
|
+
dark_theme: github.dark
|
|
41
|
+
github_star:
|
|
42
|
+
repository: stevegeek/quo
|
|
43
|
+
text: Star
|
|
44
|
+
show_count: true
|
|
45
|
+
footer:
|
|
46
|
+
enabled: true
|
|
47
|
+
show_on_docs: true
|
|
48
|
+
copyright: >-
|
|
49
|
+
Quo | Copyright © 2025. Licensed under the
|
|
50
|
+
<a href="https://github.com/stevegeek/quo/blob/main/LICENSE.txt">MIT License</a>.
|