diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d6ae177..e87a704c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,7 @@ jobs: - "2.6" - "2.7" - "3.0" + - "3.1" gemfile: - Gemfile - gemfiles/rails_5_2.gemfile @@ -70,6 +71,10 @@ jobs: ruby: 3.0 - gemfile: gemfiles/rails_5_2_graphiti_rails.gemfile ruby: 3.0 + - gemfile: gemfiles/rails_5_2.gemfile + ruby: 3.1 + - gemfile: gemfiles/rails_5_2_graphiti_rails.gemfile + ruby: 3.1 # Raise 7 can't run on 2.6 - gemfile: gemfiles/rails_7.gemfile ruby: 2.6 diff --git a/Appraisals b/Appraisals index 80c6f2ff..34484a86 100644 --- a/Appraisals +++ b/Appraisals @@ -10,8 +10,7 @@ appraise "rails-5_2-graphiti-rails" do gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" - gem "rescue_registry" - gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" + gem "graphiti-rails", "~> 0.4.0" end appraise "rails-6" do @@ -26,8 +25,7 @@ appraise "rails-6-graphiti-rails" do gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" - gem "rescue_registry" - gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" + gem "graphiti-rails", "~> 0.4.0" end appraise "rails-7" do @@ -42,6 +40,5 @@ appraise "rails-7-graphiti-rails" do gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" - gem "rescue_registry" - gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" + gem "graphiti-rails", "~> 0.4.0" end diff --git a/gemfiles/rails_5_2_graphiti_rails.gemfile b/gemfiles/rails_5_2_graphiti_rails.gemfile index 3d3bc15d..0f483569 100644 --- a/gemfiles/rails_5_2_graphiti_rails.gemfile +++ b/gemfiles/rails_5_2_graphiti_rails.gemfile @@ -6,8 +6,7 @@ gem "rails", "~> 5.2.0" gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" -gem "rescue_registry" -gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" +gem "graphiti-rails", "~> 0.4.0" group :test do gem "pry" diff --git a/gemfiles/rails_6_graphiti_rails.gemfile b/gemfiles/rails_6_graphiti_rails.gemfile index 3160432e..ea204ff2 100644 --- a/gemfiles/rails_6_graphiti_rails.gemfile +++ b/gemfiles/rails_6_graphiti_rails.gemfile @@ -6,8 +6,7 @@ gem "rails", "~> 6.0" gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" -gem "rescue_registry" -gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" +gem "graphiti-rails", "~> 0.4.0" group :test do gem "pry" diff --git a/gemfiles/rails_7_graphiti_rails.gemfile b/gemfiles/rails_7_graphiti_rails.gemfile index 814011d3..0aae1f4d 100644 --- a/gemfiles/rails_7_graphiti_rails.gemfile +++ b/gemfiles/rails_7_graphiti_rails.gemfile @@ -6,8 +6,7 @@ gem "rails", "~> 7.0" gem "rspec-rails" gem "sqlite3", "~> 1.4.0" gem "database_cleaner" -gem "rescue_registry" -gem "graphiti-rails", git: "https://github.com/graphiti-api/graphiti-rails.git", branch: "master" +gem "graphiti-rails", "~> 0.4.0" group :test do gem "pry" diff --git a/graphiti.gemspec b/graphiti.gemspec index ef1d55ac..40f9589a 100644 --- a/graphiti.gemspec +++ b/graphiti.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.required_ruby_version = [">= 2.6", "< 3.1"] + spec.required_ruby_version = ">= 2.6" spec.add_dependency "jsonapi-serializable", "~> 0.3.0" spec.add_dependency "jsonapi-renderer", "~> 0.2", ">= 0.2.2" @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "kaminari", "~> 0.17" spec.add_development_dependency "bundler" spec.add_development_dependency "rake", ">= 10.0" - spec.add_development_dependency "standard", "~> 1.0.0" + spec.add_development_dependency "standard", "~> 1.4.0" spec.add_development_dependency "activemodel", ">= 5.2" spec.add_development_dependency "graphiti_spec_helpers", "1.0.beta.4" end diff --git a/lib/graphiti/adapters/active_record.rb b/lib/graphiti/adapters/active_record.rb index 79107652..b2ca701c 100644 --- a/lib/graphiti/adapters/active_record.rb +++ b/lib/graphiti/adapters/active_record.rb @@ -317,7 +317,7 @@ def column_for(scope, name) end def sanitized_like_for(scope, attribute, value, &block) - escape_char = '\\' + escape_char = "\\" column = column_for(scope, attribute) map = value.map { |v| v = v.downcase diff --git a/lib/graphiti/adapters/persistence/associations.rb b/lib/graphiti/adapters/persistence/associations.rb index 4c8ab2bc..b4286de5 100644 --- a/lib/graphiti/adapters/persistence/associations.rb +++ b/lib/graphiti/adapters/persistence/associations.rb @@ -5,22 +5,20 @@ module Associations def process_belongs_to(persistence, attributes) parents = [].tap do |processed| persistence.iterate(only: [:polymorphic_belongs_to, :belongs_to]) do |x| - begin - id = x.dig(:attributes, :id) - x[:object] = x[:resource] - .persist_with_relationships(x[:meta], x[:attributes], x[:relationships]) + id = x.dig(:attributes, :id) + x[:object] = x[:resource] + .persist_with_relationships(x[:meta], x[:attributes], x[:relationships]) + processed << x + rescue Graphiti::Errors::RecordNotFound + if Graphiti.config.raise_on_missing_sidepost + path = "relationships/#{x.dig(:meta, :jsonapi_type)}" + raise Graphiti::Errors::RecordNotFound.new(x[:sideload].name, id, path) + else + pointer = "data/relationships/#{x.dig(:meta, :jsonapi_type)}" + object = Graphiti::Errors::NullRelation.new(id.to_s, pointer) + object.errors.add(:base, :not_found, message: "could not be found") + x[:object] = object processed << x - rescue Graphiti::Errors::RecordNotFound - if Graphiti.config.raise_on_missing_sidepost - path = "relationships/#{x.dig(:meta, :jsonapi_type)}" - raise Graphiti::Errors::RecordNotFound.new(x[:sideload].name, id, path) - else - pointer = "data/relationships/#{x.dig(:meta, :jsonapi_type)}" - object = Graphiti::Errors::NullRelation.new(id.to_s, pointer) - object.errors.add(:base, :not_found, message: "could not be found") - x[:object] = object - processed << x - end end end end diff --git a/lib/graphiti/extensions/temp_id.rb b/lib/graphiti/extensions/temp_id.rb index 4da6e1db..39f003ae 100644 --- a/lib/graphiti/extensions/temp_id.rb +++ b/lib/graphiti/extensions/temp_id.rb @@ -13,7 +13,7 @@ module SerializableTempId # Common interface for jsonapi-rb extensions def as_jsonapi(*) super.tap do |hash| - if (temp_id = @object.instance_variable_get(:'@_jsonapi_temp_id')) + if (temp_id = @object.instance_variable_get(:@_jsonapi_temp_id)) hash[:'temp-id'] = temp_id end end diff --git a/lib/graphiti/filter_operators.rb b/lib/graphiti/filter_operators.rb index 5acbeba7..8d5d0979 100644 --- a/lib/graphiti/filter_operators.rb +++ b/lib/graphiti/filter_operators.rb @@ -17,7 +17,6 @@ def initialize(resource, type_name, opts) end end - # rubocop: disable Style/MethodMissingSuper def method_missing(name, *args, &blk) @procs[name] = blk end diff --git a/lib/graphiti/resource/dsl.rb b/lib/graphiti/resource/dsl.rb index 933e8c52..f33be74c 100644 --- a/lib/graphiti/resource/dsl.rb +++ b/lib/graphiti/resource/dsl.rb @@ -189,9 +189,9 @@ def apply_extra_attributes_to_serializer def attribute_option(options, name, exclusive = false) if options[name] != false default = if (only = options[:only]) && !exclusive - Array(only).include?(name) ? true : false + Array(only).include?(name) elsif (except = options[:except]) && !exclusive - Array(except).include?(name) ? false : true + !Array(except).include?(name) else send(:"attributes_#{name}_by_default") end diff --git a/lib/graphiti/sideload/polymorphic_belongs_to.rb b/lib/graphiti/sideload/polymorphic_belongs_to.rb index 9500dd3d..141ad5e1 100644 --- a/lib/graphiti/sideload/polymorphic_belongs_to.rb +++ b/lib/graphiti/sideload/polymorphic_belongs_to.rb @@ -7,7 +7,6 @@ def initialize(name) @calls = [] end - # rubocop: disable Style/MethodMissingSuper def method_missing(name, *args, &blk) @calls << [name, args, blk] end @@ -56,9 +55,9 @@ def apply(sideload, resource_class) args = call[1] opts = args.extract_options! opts.merge! as: sideload.name, - parent: sideload, - group_name: group.name, - polymorphic_child: true + parent: sideload, + group_name: group.name, + polymorphic_child: true unless sideload.resource.class.abstract_class? opts[:foreign_key] ||= sideload.foreign_key opts[:primary_key] ||= sideload.primary_key diff --git a/lib/graphiti/stats/dsl.rb b/lib/graphiti/stats/dsl.rb index f2a6e2a5..ea571120 100644 --- a/lib/graphiti/stats/dsl.rb +++ b/lib/graphiti/stats/dsl.rb @@ -46,7 +46,6 @@ def initialize(adapter, config) # # ...will hit +method_missing+ and store the proc for future reference. # @api private - # rubocop: disable Style/MethodMissingSuper def method_missing(meth, *args, &blk) @calculations[meth] = blk end diff --git a/spec/configuration_spec.rb b/spec/configuration_spec.rb index 3d21b231..22acf1f4 100644 --- a/spec/configuration_spec.rb +++ b/spec/configuration_spec.rb @@ -26,7 +26,7 @@ # FIXME: Deprecated describe "when rails is defined" do - let(:logger) { double('debug?': false) } + let(:logger) { double(debug?: false) } let(:rails) do double(root: Pathname.new("/foo/bar"), logger: logger) @@ -53,7 +53,7 @@ # FIXME: Deprecated context "when rails logger is debug level" do - let(:logger) { double('debug?': true) } + let(:logger) { double(debug?: true) } it { is_expected.to eq(true) } end diff --git a/spec/filtering_spec.rb b/spec/filtering_spec.rb index ab2b7d55..a47f2619 100644 --- a/spec/filtering_spec.rb +++ b/spec/filtering_spec.rb @@ -433,11 +433,11 @@ def self.name context "one level" do let!(:pos1) do PORO::Position.create title: "foo", - employee_id: employee1.id + employee_id: employee1.id end let!(:pos2) do PORO::Position.create title: "bar", - employee_id: employee1.id + employee_id: employee1.id end before do @@ -460,11 +460,11 @@ def self.name let!(:department2) { PORO::Department.create(name: "bar") } let!(:pos1) do PORO::Position.create department_id: department1.id, - employee_id: employee1.id + employee_id: employee1.id end let!(:pos2) do PORO::Position.create department_id: department2.id, - employee_id: employee1.id + employee_id: employee1.id end before do diff --git a/spec/integration/rails/finders_spec.rb b/spec/integration/rails/finders_spec.rb index 066d6dc5..325d0abd 100644 --- a/spec/integration/rails/finders_spec.rb +++ b/spec/integration/rails/finders_spec.rb @@ -24,29 +24,29 @@ def resource let!(:author1) do Legacy::Author.create! first_name: "Stephen", - age: 70, - active: true, - float_age: 70.03, - decimal_age: 70.033, - state: state, - organization: org1, - dwelling: house, - created_at: one_day_ago, - last_login: one_day_ago, - created_at_date: one_day_ago.to_date, - identifier: SecureRandom.uuid + age: 70, + active: true, + float_age: 70.03, + decimal_age: 70.033, + state: state, + organization: org1, + dwelling: house, + created_at: one_day_ago, + last_login: one_day_ago, + created_at_date: one_day_ago.to_date, + identifier: SecureRandom.uuid end let!(:author2) do Legacy::Author.create! first_name: "George", - age: 65, - active: false, - float_age: 70.01, - decimal_age: 70.011, - dwelling: condo, - created_at: two_days_ago, - last_login: one_day_ago, - created_at_date: two_days_ago.to_date, - identifier: SecureRandom.uuid + age: 65, + active: false, + float_age: 70.01, + decimal_age: 70.011, + dwelling: condo, + created_at: two_days_ago, + last_login: one_day_ago, + created_at_date: two_days_ago.to_date, + identifier: SecureRandom.uuid end let!(:book1) { Legacy::Book.create!(author: author1, genre: genre, title: "The Shining") } let!(:book2) { Legacy::Book.create!(author: author1, genre: genre, title: "The Stand") } @@ -208,14 +208,14 @@ def resource let!(:author3) do Legacy::Author.create! first_name: "GeOrge", - age: 72, - identifier: "AbC123", - active: true, - float_age: 70.05, - decimal_age: 70.055, - last_login: nil, - created_at: 1.day.from_now, - created_at_date: 1.day.from_now.to_date + age: 72, + identifier: "AbC123", + active: true, + float_age: 70.05, + decimal_age: 70.055, + last_login: nil, + created_at: 1.day.from_now, + created_at_date: 1.day.from_now.to_date end context "when multiple operators" do diff --git a/spec/integration/rails/persistence_spec.rb b/spec/integration/rails/persistence_spec.rb index e72a3bca..420db6aa 100644 --- a/spec/integration/rails/persistence_spec.rb +++ b/spec/integration/rails/persistence_spec.rb @@ -807,12 +807,10 @@ def self.name context "when a has_many relationship has validation error" do around do |e| - begin - Position.validates :title, presence: true - e.run - ensure - Position.clear_validators! - end + Position.validates :title, presence: true + e.run + ensure + Position.clear_validators! end before do @@ -848,12 +846,10 @@ def self.name context "when a belongs_to relationship has a validation error" do around do |e| - begin - Department.validates :name, presence: true - e.run - ensure - Department.clear_validators! - end + Department.validates :name, presence: true + e.run + ensure + Department.clear_validators! end before do @@ -889,12 +885,10 @@ def self.name context "when a many_to_many relationship has a validation error" do around do |e| - begin - Team.validates :name, presence: true - e.run - ensure - Team.clear_validators! - end + Team.validates :name, presence: true + e.run + ensure + Team.clear_validators! end before do @@ -1496,7 +1490,7 @@ def self.name context "when destroying" do let!(:location) do Location.create locatable_id: employee.id, - locatable_type: "Employee" + locatable_type: "Employee" end let(:location_id) { location.id.to_s } let(:location_id_key) { :id } @@ -1511,7 +1505,7 @@ def self.name context "when disassociating" do let!(:location) do Location.create locatable_id: employee.id, - locatable_type: "Employee" + locatable_type: "Employee" end let(:location_id) { location.id.to_s } let(:location_id_key) { :id } @@ -1582,7 +1576,7 @@ def self.name context "when destroying" do let!(:note) do Note.create notable_id: employee.id, - notable_type: "Employee" + notable_type: "Employee" end let(:note_id) { note.id.to_s } let(:note_id_key) { :id } @@ -1599,7 +1593,7 @@ def self.name context "when disassociating" do let!(:note) do Note.create notable_id: employee.id, - notable_type: "Employee" + notable_type: "Employee" end let(:note_id) { note.id.to_s } let(:note_id_key) { :id } diff --git a/spec/relationship_identifier_spec.rb b/spec/relationship_identifier_spec.rb index 2ecc75f9..e9d9c1e8 100644 --- a/spec/relationship_identifier_spec.rb +++ b/spec/relationship_identifier_spec.rb @@ -10,11 +10,11 @@ let!(:employee2) { PORO::Employee.create } let!(:position1) do PORO::Position.create employee_id: employee.id, - department_id: department1.id + department_id: department1.id end let!(:position2) do PORO::Position.create employee_id: employee.id, - department_id: department2.id + department_id: department2.id end let!(:department1) { PORO::Department.create } let!(:department2) { PORO::Department.create } diff --git a/spec/rendering_spec.rb b/spec/rendering_spec.rb index eb377cfb..683875c4 100644 --- a/spec/rendering_spec.rb +++ b/spec/rendering_spec.rb @@ -13,25 +13,25 @@ def self.name let!(:employee1) do PORO::Employee.create first_name: "John", - last_name: "Doe", - age: 33 + last_name: "Doe", + age: 33 end let!(:employee2) do PORO::Employee.create first_name: "Jane", - last_name: "Dougherty", - age: 44 + last_name: "Dougherty", + age: 44 end let!(:position1) do PORO::Position.create title: "title1", - rank: 1, - employee_id: 1, - department_id: 1 + rank: 1, + employee_id: 1, + department_id: 1 end let!(:position2) do PORO::Position.create title: "title2", - rank: 2, - employee_id: 2, - department_id: 2 + rank: 2, + employee_id: 2, + department_id: 2 end let!(:department1) do PORO::Department.create(name: "dep1", description: "dep1desc") diff --git a/spec/schema_spec.rb b/spec/schema_spec.rb index 5dffec92..a27fc1cd 100644 --- a/spec/schema_spec.rb +++ b/spec/schema_spec.rb @@ -997,12 +997,10 @@ def self.name context "but FORCE_SCHEMA set" do around do |e| - begin - ENV["FORCE_SCHEMA"] = "true" - e.run - ensure - ENV["FORCE_SCHEMA"] = nil - end + ENV["FORCE_SCHEMA"] = "true" + e.run + ensure + ENV["FORCE_SCHEMA"] = nil end it "writes the file" do diff --git a/spec/sideloading_spec.rb b/spec/sideloading_spec.rb index d50be655..767b4695 100644 --- a/spec/sideloading_spec.rb +++ b/spec/sideloading_spec.rb @@ -26,11 +26,11 @@ class PositionSideload < ::Graphiti::Sideload::HasMany let!(:employee) { PORO::Employee.create } let!(:position1) do PORO::Position.create employee_id: employee.id, - department_id: department1.id + department_id: department1.id end let!(:position2) do PORO::Position.create employee_id: employee.id, - department_id: department2.id + department_id: department2.id end let!(:department1) { PORO::Department.create } let!(:department2) { PORO::Department.create } @@ -340,16 +340,16 @@ def self.name let!(:paypal) { PORO::Paypal.create } let!(:employee2) do PORO::Employee.create credit_card_type: "Mastercard", - credit_card_id: mastercard.id + credit_card_id: mastercard.id end let!(:employee3) do PORO::Employee.create credit_card_type: "Paypal", - credit_card_id: paypal.id + credit_card_id: paypal.id end before do employee.update_attributes credit_card_type: "Visa", - credit_card_id: visa.id + credit_card_id: visa.id params[:include] = "credit_card" end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 13f130d3..4d22b2c4 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -60,6 +60,6 @@ def check! require "rails_spec_helper" ActiveRecord::Migration.verbose = false ActiveRecord::Base.establish_connection adapter: "sqlite3", - database: ":memory:" + database: ":memory:" Dir[File.dirname(__FILE__) + "/fixtures/**/*.rb"].sort.each { |f| require f } end diff --git a/spec/stats_spec.rb b/spec/stats_spec.rb index e4e71d2b..0a943654 100644 --- a/spec/stats_spec.rb +++ b/spec/stats_spec.rb @@ -7,11 +7,11 @@ let!(:employee1) do PORO::Employee.create first_name: "Stephen", - last_name: "King" + last_name: "King" end let!(:employee1) do PORO::Employee.create first_name: "Stephen", - last_name: "King" + last_name: "King" end context "when total count requested" do diff --git a/spec/support/pagination_link_helper.rb b/spec/support/pagination_link_helper.rb index a684ae07..dec05376 100644 --- a/spec/support/pagination_link_helper.rb +++ b/spec/support/pagination_link_helper.rb @@ -30,9 +30,9 @@ def self.name let(:pagination_delegate) { Graphiti::Delegates::Pagination.new(proxy) } let(:collection) do double(total_pages: total_pages, - prev_page: prev_page, - next_page: next_page, - current_per_page: current_per_page) + prev_page: prev_page, + next_page: next_page, + current_per_page: current_per_page) end let(:total_pages) { 3 } let(:prev_page) { 1 }