Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
require:
plugins:
- rubocop-rspec

Layout/LineLength:
Max: 120
AllowedPatterns: ['\A#']

Style/Documentation:
Enabled: false

RSpec/NestedGroups:
Max: 4

Expand Down
16 changes: 14 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
# frozen_string_literal: true

source "https://rubygems.org"
source 'https://rubygems.org'

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

# Specify your gem's dependencies in jsonapi-query_builder.gemspec
gem 'activerecord'
gem 'bundler', '~> 2.0'
gem 'bundler-audit'
gem 'kaminari', '~> 1.2'
gem 'lefthook'
gem 'pry'
gem 'rake', '~> 13.0'
gem 'rspec', '~> 3.0'
gem 'rubocop-rspec'
gem 'sqlite3'
gem 'standard'
gem 'standardrb'

gemspec
178 changes: 0 additions & 178 deletions Gemfile.lock

This file was deleted.

4 changes: 2 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

require "bundler/gem_tasks"
require "rspec/core/rake_task"
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

Expand Down
6 changes: 3 additions & 3 deletions bin/console
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

require "bundler/setup"
require "jsonapi/query_builder"
require 'bundler/setup'
require 'jsonapi/query_builder'

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.
Expand All @@ -11,5 +11,5 @@ require "jsonapi/query_builder"
# require "pry"
# Pry.start

require "irb"
require 'irb'
IRB.start(__FILE__)
60 changes: 23 additions & 37 deletions jsonapi-query_builder.gemspec
Original file line number Diff line number Diff line change
@@ -1,56 +1,42 @@
# frozen_string_literal: true

lib = File.expand_path("../lib", __FILE__)
lib = File.expand_path('lib', __dir__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "jsonapi/query_builder/version"
require 'jsonapi/query_builder/version'

Gem::Specification.new do |spec|
spec.name = "jsonapi-query_builder"
spec.name = 'jsonapi-query_builder'
spec.version = Jsonapi::QueryBuilder::VERSION
spec.authors = ["Jure Cindro"]
spec.email = ["jure.cindro@infinum.co"]
spec.authors = ['Jure Cindro']
spec.email = ['jure.cindro@infinum.co']

spec.summary = "Support `json:api` querying with ease!"
spec.summary = 'Support `json:api` querying with ease!'
spec.description = <<~MD
`Jsonapi::QueryBuilder` serves the purpose of adding the json api query related SQL conditions to the already scoped collection, usually used in controller index actions.

With the query builder we can easily define logic for query filters, attributes by which we can sort, and delegate pagination parameters to the underlying paginator. Included relationships are automatically included via the `ActiveRecord::QueryMethods#includes`, to prevent N+1 query problems.
MD
spec.homepage = "https://github.com/infinum/jsonapi-query_builder"
spec.license = "MIT"

if spec.respond_to?(:metadata)
spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = "https://github.com/infinum/jsonapi-query_builder"
spec.metadata["changelog_uri"] = "https://github.com/infinum/jsonapi-query_builder/blob/master/CHANGELOG.md"
else
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
end
spec.homepage = 'https://github.com/infinum/jsonapi-query_builder'
spec.license = 'MIT'

raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.' unless spec.respond_to?(:metadata)

spec.metadata['homepage_uri'] = spec.homepage
spec.metadata['source_code_uri'] = 'https://github.com/infinum/jsonapi-query_builder'
spec.metadata['changelog_uri'] = 'https://github.com/infinum/jsonapi-query_builder/blob/master/CHANGELOG.md'
spec.metadata['rubygems_mfa_required'] = 'true'

# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
spec.files = Dir.chdir(File.expand_path(__dir__)) do
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
end
spec.bindir = "exe"
spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]

spec.required_ruby_version = ">= 3.2"

spec.add_runtime_dependency "activerecord", ">= 7.2"
spec.add_runtime_dependency "pagy", ">= 3.5"

spec.add_development_dependency "bundler", "~> 2.0"
spec.add_development_dependency "bundler-audit"
spec.add_development_dependency "rake", "~> 13.0"
spec.add_development_dependency "rspec", "~> 3.0"
spec.add_development_dependency "standardrb"
spec.add_development_dependency "standard"
spec.add_development_dependency "rubocop-rspec"
spec.add_development_dependency "lefthook"
spec.add_development_dependency "kaminari", "~> 1.2"
spec.add_development_dependency "activerecord"
spec.add_development_dependency "sqlite3"
spec.add_development_dependency "pry"
spec.require_paths = ['lib']

spec.required_ruby_version = '>= 3.2'

spec.add_dependency 'activerecord', '>= 7.2'
spec.add_dependency 'pagy', '~> 3.5'
end
18 changes: 9 additions & 9 deletions lib/jsonapi/query_builder.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# frozen_string_literal: true

require "active_support/concern"
require "active_support/core_ext/array/conversions"
require "active_support/core_ext/hash/keys"
require "active_support/core_ext/string/inflections"
require 'active_support/concern'
require 'active_support/core_ext/array/conversions'
require 'active_support/core_ext/hash/keys'
require 'active_support/core_ext/string/inflections'

require "jsonapi/query_builder/version"
require "jsonapi/query_builder/base_query"
require "jsonapi/query_builder/base_filter"
require "jsonapi/query_builder/base_sort"
require "jsonapi/query_builder/dynamic_sort"
require 'jsonapi/query_builder/version'
require 'jsonapi/query_builder/base_query'
require 'jsonapi/query_builder/base_filter'
require 'jsonapi/query_builder/base_sort'
require 'jsonapi/query_builder/dynamic_sort'
21 changes: 11 additions & 10 deletions lib/jsonapi/query_builder/base_query.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# frozen_string_literal: true

require "jsonapi/query_builder/mixins/filter"
require "jsonapi/query_builder/mixins/include"
require "jsonapi/query_builder/mixins/paginate"
require "jsonapi/query_builder/mixins/sort"
require 'jsonapi/query_builder/mixins/filter'
require 'jsonapi/query_builder/mixins/include'
require 'jsonapi/query_builder/mixins/paginate'
require 'jsonapi/query_builder/mixins/sort'

require "jsonapi/query_builder/paginator"
require 'jsonapi/query_builder/paginator'

module Jsonapi
module QueryBuilder
Expand All @@ -26,13 +26,14 @@ def initialize(collection, params)

# @return [ActiveRecord::Relation] A collection with eager loaded relationships based on include params, filtered,
# ordered and lastly, paginated.
# @note Pagination details are saved to an instance variable and can be accessed via the #pagination_details attribute reader
# @note Pagination details are saved to an instance variable and can be accessed via the #pagination_details
# attribute reader
def results
collection
.yield_self(&method(:add_includes))
.yield_self(&method(:sort))
.yield_self(&method(:filter))
.yield_self(&method(:paginate))
.then(&method(:add_includes))
.then(&method(:sort))
.then(&method(:filter))
.then(&method(:paginate))
end

# @param [integer, string] id
Expand Down
2 changes: 1 addition & 1 deletion lib/jsonapi/query_builder/dynamic_sort.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

require "jsonapi/query_builder/base_sort"
require 'jsonapi/query_builder/base_sort'

module Jsonapi
module QueryBuilder
Expand Down
Loading
Loading