From 7ff962eb0c7dbffb04af7783cd8aab91f596c4fa Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Tue, 31 Oct 2017 12:47:46 +0900 Subject: [PATCH 1/8] Provide Grape::Entity::Options#dig --- lib/grape_entity/options.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/grape_entity/options.rb b/lib/grape_entity/options.rb index 2bbbf219..92896214 100644 --- a/lib/grape_entity/options.rb +++ b/lib/grape_entity/options.rb @@ -25,6 +25,10 @@ def key?(key) @opts_hash.key? key end + def dig(*keys) + @opts_hash.dig(*keys) + end + def merge(new_opts) if new_opts.empty? self From b5ffce3dba97cfdc6c1e2d9abf69a82c30bd8528 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Tue, 31 Oct 2017 12:52:17 +0900 Subject: [PATCH 2/8] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2b5e3ad..15d29965 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ #### Features +* [#277](https://github.com/ruby-grape/grape-entity/pull/277): Provide grape::entity::options#dig - [@kachick](https://github.com/kachick). * [#265](https://github.com/ruby-grape/grape-entity/pull/265): Adds ability to provide a proc to as: - [@james2m](https://github.com/james2m). * [#264](https://github.com/ruby-grape/grape-entity/pull/264): Adds Rubocop config and todo list - [@james2m](https://github.com/james2m). * [#255](https://github.com/ruby-grape/grape-entity/pull/255): Adds code coverage w/ coveralls - [@LeFnord](https://github.com/LeFnord). From e939737ac0423f38d384b013bb9984414fe48b58 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Tue, 31 Oct 2017 13:23:21 +0900 Subject: [PATCH 3/8] Add specs --- spec/grape_entity/entity_spec.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/spec/grape_entity/entity_spec.rb b/spec/grape_entity/entity_spec.rb index 3f0d109c..d622fd8a 100644 --- a/spec/grape_entity/entity_spec.rb +++ b/spec/grape_entity/entity_spec.rb @@ -1771,17 +1771,19 @@ class UserEntity < Grape::Entity describe Grape::Entity::Options do module EntitySpec class Crystalline - attr_accessor :prop1, :prop2 + attr_accessor :prop1, :prop2, :prop3 def initialize @prop1 = 'value1' @prop2 = 'value2' + @prop3 = 'value3' end end class CrystallineEntity < Grape::Entity expose :prop1, if: ->(_, options) { options.fetch(:signal) } expose :prop2, if: ->(_, options) { options.fetch(:beam, 'destructive') == 'destructive' } + expose :prop3, if: ->(_, options) { options.dig(:first, :second) == :nested } end end @@ -1800,6 +1802,18 @@ class CrystallineEntity < Grape::Entity expect(crystalline_entity.as_json).to eq(prop1: 'value1') end end + + context '#dig' do + it 'without passing in a expected option hide the value' do + crystalline_entity = EntitySpec::CrystallineEntity.represent(EntitySpec::Crystalline.new, signal: true, first: { invalid: :nested }) + expect(crystalline_entity.as_json).to eq(prop1: 'value1', prop2: 'value2') + end + + it 'passing in a expected option will expose the values' do + crystalline_entity = EntitySpec::CrystallineEntity.represent(EntitySpec::Crystalline.new, signal: true, first: { second: :nested }) + expect(crystalline_entity.as_json).to eq(prop1: 'value1', prop2: 'value2', prop3: 'value3') + end + end end end end From a1fcb4474462da30339737719d60b4df8d573b2b Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Tue, 31 Oct 2017 14:05:34 +0900 Subject: [PATCH 4/8] Freeze rubocop version for stable CI ref: https://github.com/bbatsov/rubocop/commit/dd0d60c0a87bdb6233cdeca14a13505b10f2bfae --- grape-entity.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grape-entity.gemspec b/grape-entity.gemspec index 0a212ca3..5bbec797 100644 --- a/grape-entity.gemspec +++ b/grape-entity.gemspec @@ -23,7 +23,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'bundler' s.add_development_dependency 'rake' - s.add_development_dependency 'rubocop', '~> 0.48' + s.add_development_dependency 'rubocop', '~> 0.48.0' s.add_development_dependency 'rspec', '~> 3.0' s.add_development_dependency 'rack-test' s.add_development_dependency 'maruku' From 8895a69feca402b32dc0fabbc7bc60d93b9e5306 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Wed, 1 Nov 2017 08:14:20 +0900 Subject: [PATCH 5/8] Specify `require: false` ref: https://github.com/ruby-grape/grape-entity/pull/278#discussion_r148148916 --- Gemfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Gemfile b/Gemfile index 754f1e49..f3ab9206 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,10 @@ source 'http://rubygems.org' gemspec +group :development do + gem 'rubocop', require: false +end + group :test do gem 'coveralls', require: false gem 'growl' From c362d74460e604cd3a78faf44ef74b267bc7a47f Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Wed, 1 Nov 2017 08:21:36 +0900 Subject: [PATCH 6/8] Cover test env too --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index f3ab9206..8de33fc5 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'http://rubygems.org' gemspec -group :development do +group :development, :test do gem 'rubocop', require: false end From b66105fb2b7e52df28d369d1f1cd1553fcf6ff48 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Wed, 1 Nov 2017 08:28:43 +0900 Subject: [PATCH 7/8] Use same version as gemspec in Gemfile --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 8de33fc5..666431d8 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ source 'http://rubygems.org' gemspec group :development, :test do - gem 'rubocop', require: false + gem 'rubocop', '~> 0.48.0', require: false end group :test do From fa4081a27bcd0598ae3430de7473b3c01dcb74d6 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Wed, 1 Nov 2017 08:35:29 +0900 Subject: [PATCH 8/8] Drop duplicated definition ref: https://github.com/ruby-grape/grape-entity/pull/278#discussion_r148153866 --- grape-entity.gemspec | 1 - 1 file changed, 1 deletion(-) diff --git a/grape-entity.gemspec b/grape-entity.gemspec index 5bbec797..560759c2 100644 --- a/grape-entity.gemspec +++ b/grape-entity.gemspec @@ -23,7 +23,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'bundler' s.add_development_dependency 'rake' - s.add_development_dependency 'rubocop', '~> 0.48.0' s.add_development_dependency 'rspec', '~> 3.0' s.add_development_dependency 'rack-test' s.add_development_dependency 'maruku'