Skip to content

Commit

Permalink
fix issue with method_defined?
Browse files Browse the repository at this point in the history
method_defined? method doesn't work with ActiveRecord
  • Loading branch information
kelevro committed Dec 24, 2019
1 parent 8e974ae commit e0fc221
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ source "https://rubygems.org"
# gem "activemodel", "4.2.10"
# gem "activemodel", "5.2.1"
# gem "activemodel", "6.0.0"
# gem "activerecord", "6.0.0"
# gem "json"
# gem "sqlite3", "~> 1.4.2"

# Specify your gem's dependencies in attr_filters.gemspec
gemspec
3 changes: 3 additions & 0 deletions gemfiles/rails_6.0.0.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
source "https://rubygems.org"

gem "activemodel", "6.0.0"
gem "activerecord", "6.0.0"
gem "json"
gem "sqlite3", "~> 1.4.2"

gemspec path: "../"
8 changes: 7 additions & 1 deletion lib/attr_filters/filters_macro.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,16 @@ def register_filters(filters, attrs)
def check_attributes!(attrs)
attrs.each do |attr|
setter = "#{attr}="
unknown_attribute!(setter) unless method_defined?(setter)
unknown_attribute!(setter) unless writer_exists?(setter)
end
end

def writer_exists?(setter)
return attribute_method?(setter) if respond_to?(:attribute_method?)

method_defined?(setter)
end

def check_filters!(filters)
filters.each do |filter|
unknown_filter!(filter) unless AttrFilters::Filters::LIST.key?(filter)
Expand Down
25 changes: 25 additions & 0 deletions spec/attr_filters/active_record_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true

require "spec_helper"

RSpec.describe "ActiveRecord integration using AttrFilters::ActiveModel", if: active_record? do
context "attributes lazy loading" do
it "should success add filter to an attribute" do
ActiveRecord::Base.establish_connection(
adapter: "sqlite3",
database: ":memory:"
)
ActiveRecord::Base.connection.execute(%(CREATE TABLE IF NOT EXISTS users (name TEXT, age INT);))
class User < ActiveRecord::Base
include AttrFilters::ActiveModel

filters :name, trim: true
end

user = User.new(name: " Mike Dou")
user.valid?

expect(user.name).to eq("Mike Dou")
end
end
end
5 changes: 5 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
require_relative "./support/utils"
require_relative "./support/active_model/name" if active_model?

if active_record?
require "sqlite3"
require "active_record"
end

RSpec.configure do |config|
config.example_status_persistence_file_path = ".rspec_status"

Expand Down
4 changes: 4 additions & 0 deletions spec/support/utils.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@
def active_model?
AttrFilters::Utils.satisfied_spec?("activemodel")
end

def active_record?
AttrFilters::Utils.satisfied_spec?("activerecord")
end

0 comments on commit e0fc221

Please sign in to comment.