From ca6b193fcb220c052cdadfde55c78ab1efccc961 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Sun, 20 Sep 2015 17:56:06 -0500 Subject: [PATCH 1/2] Enforce Rails-style (line-count-based) block style --- .rubocop.yml | 4 ++++ .rubocop_todo.yml | 6 ------ lib/active_model/serializer/adapter.rb | 4 ++-- lib/active_model/serializer/adapter/json_api.rb | 13 +++++-------- lib/active_model/serializer/array_serializer.rb | 4 ++-- test/action_controller/serialization_test.rb | 16 ++++++++-------- test/capture_warnings.rb | 4 ++-- 7 files changed, 23 insertions(+), 28 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index e7d729cc..8e00e2dc 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -47,3 +47,7 @@ Style/Documentation: Style/MultilineOperationIndentation: EnforcedStyle: indented + +Style/BlockDelimiters: + Enabled: true + EnforcedStyle: line_count_based diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 36ce4dfc..6e89b8b1 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -78,12 +78,6 @@ Style/AndOr: Exclude: - 'lib/active_model/serializer/lint.rb' -# Offense count: 6 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods. -Style/BlockDelimiters: - Enabled: false - # Offense count: 46 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. diff --git a/lib/active_model/serializer/adapter.rb b/lib/active_model/serializer/adapter.rb index 832fe3f4..61a86e1c 100644 --- a/lib/active_model/serializer/adapter.rb +++ b/lib/active_model/serializer/adapter.rb @@ -58,12 +58,12 @@ module ActiveModel return adapter if adapter.is_a?(Class) adapter_name = adapter.to_s.underscore # 2. return if registered - adapter_map.fetch(adapter_name) { + adapter_map.fetch(adapter_name) do # 3. try to find adapter class from environment adapter_class = find_by_name(adapter_name) register(adapter_name, adapter_class) adapter_class - } + end rescue NameError, ArgumentError => e failure_message = "NameError: #{e.message}. Unknown adapter: #{adapter.inspect}. Valid adapters are: #{adapters}" diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index 3637ccb7..94571eaa 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -130,14 +130,11 @@ module ActiveModel end end - def included_resources(include_tree) - included = [] - - serializer.associations(include_tree).each do |association| - add_included_resources_for(association.serializer, include_tree[association.key], included) - end - - included + def included_for(serializer) + included.flat_map do |inc| + association = serializer.associations.find { |assoc| assoc.key == inc.first } + _included_for(association.serializer, inc.second) if association + end.uniq end def add_included_resources_for(serializer, include_tree, included) diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index 7a5aed20..9c7b2b93 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -11,9 +11,9 @@ module ActiveModel @root = options[:root] @object = resources @serializers = resources.map do |resource| - serializer_class = options.fetch(:serializer) { + serializer_class = options.fetch(:serializer) do ActiveModel::Serializer.serializer_for(resource) - } + end if serializer_class.nil? fail NoSerializerError, "No serializer found for resource: #{resource.inspect}" diff --git a/test/action_controller/serialization_test.rb b/test/action_controller/serialization_test.rb index acf62a47..e9288d56 100644 --- a/test/action_controller/serialization_test.rb +++ b/test/action_controller/serialization_test.rb @@ -400,25 +400,25 @@ module ActionController end def test_warn_overridding_use_adapter_as_falsy_on_controller_instance - controller = Class.new(ImplicitSerializationTestController) { + controller = Class.new(ImplicitSerializationTestController) do def use_adapter? false end - }.new - assert_match(/adapter: false/, (capture(:stderr) { + end.new + assert_match(/adapter: false/, (capture(:stderr) do controller.get_serializer(Profile.new) - })) + end)) end def test_dont_warn_overridding_use_adapter_as_truthy_on_controller_instance - controller = Class.new(ImplicitSerializationTestController) { + controller = Class.new(ImplicitSerializationTestController) do def use_adapter? true end - }.new - assert_equal '', (capture(:stderr) { + end.new + assert_equal '', (capture(:stderr) do controller.get_serializer(Profile.new) - }) + end) end end end diff --git a/test/capture_warnings.rb b/test/capture_warnings.rb index 5acdb3a0..7a39e7c2 100644 --- a/test/capture_warnings.rb +++ b/test/capture_warnings.rb @@ -28,9 +28,9 @@ class CaptureWarnings # rubocop:disable Metrics/AbcSize def after_tests(lines) - app_warnings, other_warnings = lines.partition { |line| + app_warnings, other_warnings = lines.partition do |line| line.include?(app_root) && !line.include?(bundle_dir) - } + end header = "#{'-' * 22} app warnings: #{'-' * 22}" output.puts From 140b4f2735f235fa2cf092541bfda58e5059b5a5 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Sun, 20 Sep 2015 17:57:01 -0500 Subject: [PATCH 2/2] Update Rubocop todo --- .rubocop_todo.yml | 80 +++---------------- .../serializer/adapter/json_api.rb | 13 +-- lib/active_model/serializer/include_tree.rb | 4 +- 3 files changed, 22 insertions(+), 75 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 6e89b8b1..f55d9335 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,23 +1,12 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2015-08-31 04:23:33 -0500 using RuboCop version 0.33.0. +# on 2015-09-20 17:56:22 -0500 using RuboCop version 0.34.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 1 -# Configuration parameters: AllowSafeAssignment. -Lint/AssignmentInCondition: - Exclude: - - 'lib/active_model/serializer/adapter/json_api.rb' - -# Offense count: 1 -Lint/EmptyEnsure: - Exclude: - - 'test/serializers/adapter_for_test.rb' - -# Offense count: 1 +# Offense count: 2 Lint/HandleExceptions: Exclude: - 'Rakefile' @@ -28,11 +17,10 @@ Lint/UnusedBlockArgument: Exclude: - 'lib/active_model/serializer/adapter/json_api/fragment_cache.rb' -# Offense count: 9 +# Offense count: 7 # Cop supports --auto-correct. Lint/UnusedMethodArgument: Exclude: - - 'lib/active_model/serializer/adapter.rb' - 'lib/active_model/serializer/adapter/null.rb' - 'lib/active_model/serializer/pass_through_serializer.rb' - 'test/fixtures/poro.rb' @@ -43,12 +31,11 @@ Lint/UselessAccessModifier: Exclude: - 'lib/active_model/serializable_resource.rb' -# Offense count: 3 +# Offense count: 2 Lint/UselessAssignment: Exclude: - 'bench/perf.rb' - 'lib/active_model/serializer/adapter/json_api/fragment_cache.rb' - - 'test/test_helper.rb' # Offense count: 1 # Configuration parameters: EnforcedStyle, SupportedStyles. @@ -56,7 +43,7 @@ Rails/Date: Exclude: - 'test/fixtures/poro.rb' -# Offense count: 8 +# Offense count: 4 # Configuration parameters: EnforcedStyle, SupportedStyles. Rails/TimeZone: Exclude: @@ -78,14 +65,13 @@ Style/AndOr: Exclude: - 'lib/active_model/serializer/lint.rb' -# Offense count: 46 +# Offense count: 25 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. Style/BracesAroundHashParameters: Exclude: - 'test/action_controller/adapter_selector_test.rb' - 'test/action_controller/json_api/pagination_test.rb' - - 'test/action_controller/serialization_test.rb' - 'test/adapter/json_api/linked_test.rb' - 'test/adapter/json_api/pagination_links_test.rb' - 'test/adapter/null_test.rb' @@ -97,9 +83,8 @@ Style/BracesAroundHashParameters: - 'test/serializers/attributes_test.rb' - 'test/serializers/fieldset_test.rb' - 'test/serializers/root_test.rb' - - 'test/serializers/urls_test.rb' -# Offense count: 167 +# Offense count: 174 # Configuration parameters: EnforcedStyle, SupportedStyles. Style/ClassAndModuleChildren: Enabled: false @@ -120,12 +105,11 @@ Style/EachWithObject: Exclude: - 'lib/active_model/serializer/fieldset.rb' -# Offense count: 3 +# Offense count: 2 # Configuration parameters: MinBodyLength. Style/GuardClause: Exclude: - 'lib/active_model/serializer.rb' - - 'lib/active_model/serializer/adapter/json_api.rb' - 'test/capture_warnings.rb' # Offense count: 12 @@ -149,34 +133,12 @@ Style/IndentArray: Style/IndentHash: Enabled: false -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/IndentationConsistency: - Exclude: - - 'test/action_controller/serialization_scope_name_test.rb' - -# Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: Width. -Style/IndentationWidth: - Exclude: - - 'lib/active_model/serializable_resource.rb' - - 'lib/active_model/serializer/fieldset.rb' - # Offense count: 1 # Cop supports --auto-correct. Style/Lambda: Exclude: - 'lib/active_model/serializer.rb' -# Offense count: 2 -# Cop supports --auto-correct. -Style/MethodCallParentheses: - Exclude: - - 'lib/active_model/serializer/adapter/json.rb' - - 'lib/active_model/serializer/adapter/json_api.rb' - # Offense count: 1 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. @@ -195,24 +157,11 @@ Style/NegatedIf: Exclude: - 'lib/action_controller/serialization.rb' -# Offense count: 1 -# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles. -Style/Next: - Exclude: - - 'lib/active_model/serializer/adapter/json_api.rb' - # Offense count: 1 # Cop supports --auto-correct. Style/NumericLiterals: MinDigits: 7 -# Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: PreferredDelimiters. -Style/PercentLiteralDelimiters: - Exclude: - - 'active_model_serializers.gemspec' - # Offense count: 2 # Cop supports --auto-correct. Style/PerlBackrefs: @@ -220,20 +169,17 @@ Style/PerlBackrefs: - 'test/fixtures/poro.rb' - 'test/serializers/associations_test.rb' -# Offense count: 6 +# Offense count: 3 # Configuration parameters: NamePrefix, NamePrefixBlacklist. Style/PredicateName: Exclude: - - 'lib/active_model/serializer/adapter.rb' - - 'lib/active_model/serializer/adapter/json_api.rb' - 'lib/active_model/serializer/associations.rb' - 'test/action_controller/json_api/linked_test.rb' -# Offense count: 7 +# Offense count: 5 # Cop supports --auto-correct. Style/RedundantSelf: Exclude: - - 'lib/active_model/serializer.rb' - 'lib/active_model/serializer/associations.rb' - 'test/fixtures/poro.rb' @@ -244,13 +190,11 @@ Style/Semicolon: Exclude: - 'lib/active_model/serializer/fieldset.rb' -# Offense count: 6 +# Offense count: 3 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. Style/SignalException: Exclude: - - 'lib/active_model/serializer.rb' - - 'lib/active_model/serializer/adapter.rb' - 'lib/active_model/serializer/fieldset.rb' - 'lib/active_model/serializer/pass_through_serializer.rb' @@ -293,7 +237,7 @@ Style/TrailingBlankLines: - 'test/serializers/fieldset_test.rb' - 'test/support/stream_capture.rb' -# Offense count: 6 +# Offense count: 5 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles. Style/TrailingComma: diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index 94571eaa..3637ccb7 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -130,11 +130,14 @@ module ActiveModel end end - def included_for(serializer) - included.flat_map do |inc| - association = serializer.associations.find { |assoc| assoc.key == inc.first } - _included_for(association.serializer, inc.second) if association - end.uniq + def included_resources(include_tree) + included = [] + + serializer.associations(include_tree).each do |association| + add_included_resources_for(association.serializer, include_tree[association.key], included) + end + + included end def add_included_resources_for(serializer, include_tree, included) diff --git a/lib/active_model/serializer/include_tree.rb b/lib/active_model/serializer/include_tree.rb index 6d675e11..8a8f1c12 100644 --- a/lib/active_model/serializer/include_tree.rb +++ b/lib/active_model/serializer/include_tree.rb @@ -16,9 +16,9 @@ module ActiveModel when Symbol { included => {} } when Hash - included.each_with_object({}) { |(key, value), hash| + included.each_with_object({}) do |(key, value), hash| hash[key] = include_args_to_hash(value) - } + end when Array included.reduce({}) { |a, e| a.merge!(include_args_to_hash(e)) } when String