diff --git a/.rubocop.yml b/.rubocop.yml index 123f19ee..c9775f40 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -13,3 +13,21 @@ AllCops: DisplayCopNames: true DisplayStyleGuide: true StyleGuideCopsOnly: false + +Style/AlignParameters: + EnforcedStyle: with_fixed_indentation + +Style/DotPosition: + EnforcedStyle: trailing + +# The Ruby Style Guide says: +# +# > Use \ instead of + or << to concatenate two string literals at line end. +# +# but in my experience the `\` style is rarely used and less readable. Please +# concatenate multiline strings with `+` or use a HEREDOC. +Style/LineEndConcatenation: + Enabled: false + +Metrics/LineLength: + Max: 100 diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 1c969d01..4205c792 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -46,20 +46,13 @@ Metrics/BlockNesting: Metrics/CyclomaticComplexity: Max: 14 -# Offense count: 98 -# Configuration parameters: AllowURI, URISchemes. -Metrics/LineLength: - Max: 147 - # Offense count: 15 # Configuration parameters: CountComments. Metrics/MethodLength: Max: 51 -# Offense count: 3 -# Configuration parameters: CountComments. Metrics/ModuleLength: - Max: 257 + Enabled: false # Offense count: 7 Metrics/PerceivedComplexity: @@ -83,14 +76,6 @@ Style/AlignHash: Exclude: - 'lib/generators/paper_trail/install_generator.rb' -# Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/AlignParameters: - Exclude: - - 'doc/bug_report_template.rb' - - 'lib/paper_trail/has_paper_trail.rb' - # Offense count: 1 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. @@ -131,12 +116,6 @@ Style/DeprecatedHashMethods: Style/Documentation: Enabled: false -# Offense count: 31 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/DotPosition: - Enabled: false - # Offense count: 5 Style/DoubleNegation: Exclude: @@ -232,13 +211,6 @@ Style/Lambda: - 'lib/paper_trail/has_paper_trail.rb' - 'lib/paper_trail/version_concern.rb' -# Offense count: 3 -# Cop supports --auto-correct. -Style/LineEndConcatenation: - Exclude: - - 'lib/generators/paper_trail/install_generator.rb' - - 'lib/paper_trail/config.rb' - # Offense count: 1 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. diff --git a/lib/generators/paper_trail/templates/create_version_associations.rb b/lib/generators/paper_trail/templates/create_version_associations.rb index 12c8f064..17767f91 100644 --- a/lib/generators/paper_trail/templates/create_version_associations.rb +++ b/lib/generators/paper_trail/templates/create_version_associations.rb @@ -6,12 +6,15 @@ class CreateVersionAssociations < ActiveRecord::Migration t.integer :foreign_key_id end add_index :version_associations, [:version_id] - add_index :version_associations, [:foreign_key_name, :foreign_key_id], :name => 'index_version_associations_on_foreign_key' + add_index :version_associations, + [:foreign_key_name, :foreign_key_id], + :name => 'index_version_associations_on_foreign_key' end def self.down remove_index :version_associations, [:version_id] - remove_index :version_associations, :name => 'index_version_associations_on_foreign_key' + remove_index :version_associations, + :name => 'index_version_associations_on_foreign_key' drop_table :version_associations end -end \ No newline at end of file +end diff --git a/lib/paper_trail/cleaner.rb b/lib/paper_trail/cleaner.rb index ca43e2eb..d4c59316 100644 --- a/lib/paper_trail/cleaner.rb +++ b/lib/paper_trail/cleaner.rb @@ -32,7 +32,9 @@ module PaperTrail # set, versions will be narrowed to those pointing at items with those ids # that were created on specified date. def gather_versions(item_id = nil, date = :all) - raise ArgumentError.new("`date` argument must receive a Timestamp or `:all`") unless date == :all || date.respond_to?(:to_date) + unless date == :all || date.respond_to?(:to_date) + raise ArgumentError.new("`date` argument must receive a Timestamp or `:all`") + end versions = item_id ? PaperTrail::Version.where(:item_id => item_id) : PaperTrail::Version versions = versions.between(date.to_date, date.to_date + 1.day) unless date == :all diff --git a/lib/paper_trail/config.rb b/lib/paper_trail/config.rb index 05020d8b..e9c311f0 100644 --- a/lib/paper_trail/config.rb +++ b/lib/paper_trail/config.rb @@ -40,7 +40,8 @@ module PaperTrail # Indicates whether PaperTrail is on or off. def enabled - PaperTrail.paper_trail_store[:paper_trail_enabled].nil? || PaperTrail.paper_trail_store[:paper_trail_enabled] + PaperTrail.paper_trail_store[:paper_trail_enabled].nil? || + PaperTrail.paper_trail_store[:paper_trail_enabled] end def enabled= enable diff --git a/lib/paper_trail/has_paper_trail.rb b/lib/paper_trail/has_paper_trail.rb index 52f8c577..10476207 100644 --- a/lib/paper_trail/has_paper_trail.rb +++ b/lib/paper_trail/has_paper_trail.rb @@ -76,8 +76,9 @@ module PaperTrail self.paper_trail_options = options.dup [:ignore, :skip, :only].each do |k| - paper_trail_options[k] = - [paper_trail_options[k]].flatten.compact.map { |attr| attr.is_a?(Hash) ? attr.stringify_keys : attr.to_s } + paper_trail_options[k] = [paper_trail_options[k]].flatten.compact.map { |attr| + attr.is_a?(Hash) ? attr.stringify_keys : attr.to_s + } end paper_trail_options[:meta] ||= {} @@ -118,9 +119,7 @@ module PaperTrail fail ArgumentError, 'recording order can only be "after" or "before"' end - send "#{recording_order}_destroy", - :record_destroy, - :if => :save_version? + send "#{recording_order}_destroy", :record_destroy, :if => :save_version? return if paper_trail_options[:on].include?(:destroy) paper_trail_options[:on] << :destroy @@ -128,10 +127,8 @@ module PaperTrail # Record version after "update" event def paper_trail_on_update - before_save :reset_timestamp_attrs_for_update_if_needed!, - :on => :update - after_update :record_update, - :if => :save_version? + before_save :reset_timestamp_attrs_for_update_if_needed!, :on => :update + after_update :record_update, :if => :save_version? after_update :clear_version_instance! return if paper_trail_options[:on].include?(:update) @@ -140,8 +137,7 @@ module PaperTrail # Record version after "create" event def paper_trail_on_create - after_create :record_create, - :if => :save_version? + after_create :record_create, :if => :save_version? return if paper_trail_options[:on].include?(:create) paper_trail_options[:on] << :create @@ -277,7 +273,9 @@ module PaperTrail # Returns the object (not a Version) as it was most recently. def previous_version - preceding_version = source_version ? source_version.previous : send(self.class.versions_association_name).last + preceding_version = source_version ? + source_version.previous : + send(self.class.versions_association_name).last preceding_version.reify if preceding_version end @@ -507,7 +505,9 @@ module PaperTrail assoc_version_args.merge!(:foreign_key_id => send(assoc.foreign_key)) end - PaperTrail::VersionAssociation.create(assoc_version_args) if assoc_version_args.has_key?(:foreign_key_id) + if assoc_version_args.has_key?(:foreign_key_id) + PaperTrail::VersionAssociation.create(assoc_version_args) + end end end @@ -550,7 +550,8 @@ module PaperTrail def attributes_before_change attributes.tap do |prev| enums = self.respond_to?(:defined_enums) ? self.defined_enums : {} - changed_attributes.select { |k,v| self.class.column_names.include?(k) }.each do |attr, before| + attrs = changed_attributes.select { |k, v| self.class.column_names.include?(k) } + attrs.each do |attr, before| before = enums[attr][before] if enums[attr] prev[attr] = before end @@ -592,7 +593,10 @@ module PaperTrail # Remove Hash arguments and then evaluate whether the attributes (the # keys of the hash) should also get pushed into the collection. only.delete_if do |obj| - obj.is_a?(Hash) && obj.each { |attr, condition| only << attr if condition.respond_to?(:call) && condition.call(self) } + obj.is_a?(Hash) && + obj.each { |attr, condition| + only << attr if condition.respond_to?(:call) && condition.call(self) + } end only.empty? ? changed_and_not_ignored : (changed_and_not_ignored & only) end @@ -602,14 +606,19 @@ module PaperTrail # Remove Hash arguments and then evaluate whether the attributes (the # keys of the hash) should also get pushed into the collection. ignore.delete_if do |obj| - obj.is_a?(Hash) && obj.each { |attr, condition| ignore << attr if condition.respond_to?(:call) && condition.call(self) } + obj.is_a?(Hash) && + obj.each { |attr, condition| + ignore << attr if condition.respond_to?(:call) && condition.call(self) + } end skip = self.paper_trail_options[:skip] changed - ignore - skip end def paper_trail_switched_on? - PaperTrail.enabled? && PaperTrail.enabled_for_controller? && self.paper_trail_enabled_for_model? + PaperTrail.enabled? && + PaperTrail.enabled_for_controller? && + self.paper_trail_enabled_for_model? end def save_version? diff --git a/lib/paper_trail/version_concern.rb b/lib/paper_trail/version_concern.rb index 50d55484..f5cb20c2 100644 --- a/lib/paper_trail/version_concern.rb +++ b/lib/paper_trail/version_concern.rb @@ -85,7 +85,8 @@ module PaperTrail end obj = obj.send(PaperTrail.timestamp_field) if obj.is_a?(self) - where(arel_table[PaperTrail.timestamp_field].lt(obj)).order(self.timestamp_sort_order('desc')) + where(arel_table[PaperTrail.timestamp_field].lt(obj)). + order(self.timestamp_sort_order('desc')) end def between(start_time, end_time) @@ -136,7 +137,8 @@ module PaperTrail where_conditions = "object_changes @> '#{args.to_json}'::jsonb" elsif columns_hash['object'].type == :json where_conditions = args.map do |field, value| - "((object_changes->>'#{field}' ILIKE '[#{value.to_json},%') OR (object_changes->>'#{field}' ILIKE '[%,#{value.to_json}]%'))" + "((object_changes->>'#{field}' ILIKE '[#{value.to_json},%') " + + "OR (object_changes->>'#{field}' ILIKE '[%,#{value.to_json}]%'))" end where_conditions = where_conditions.join(" AND ") else diff --git a/paper_trail.gemspec b/paper_trail.gemspec index d429e098..8844e791 100644 --- a/paper_trail.gemspec +++ b/paper_trail.gemspec @@ -37,7 +37,9 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry-nav', '~> 0.2.4' s.add_development_dependency 'rubocop', '~> 0.35.1' - # Allow time travel in testing. timecop is only supported after 1.9.2 but does a better cleanup at 'return' + # Allow time travel in testing. timecop is only supported after 1.9.2 but + # does a better cleanup at 'return'. + # TODO: We can remove delorean, as we no longer support ruby < 1.9.3 if RUBY_VERSION < "1.9.2" s.add_development_dependency 'delorean' else