Skip to content

Commit

Permalink
Merge pull request #1773 from rmosolgo/mutation-loads-as
Browse files Browse the repository at this point in the history
Let as: overrides loads: argument name
  • Loading branch information
Robert Mosolgo authored Aug 14, 2018
2 parents b512d24 + e159147 commit 1b24d01
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
3 changes: 1 addition & 2 deletions lib/graphql/schema/resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,7 @@ def type_expr
# @see {GraphQL::Schema::Argument#initialize} for the signature
def argument(name, type, *rest, loads: nil, **kwargs, &block)
if loads
arg_keyword = name.to_s.sub(/_id$/, "").to_sym
kwargs[:as] = arg_keyword
arg_keyword = kwargs[:as] ||= name.to_s.sub(/_id$/, "").to_sym
own_arguments_loads_as_type[arg_keyword] = loads
end
arg_defn = super(name, type, *rest, **kwargs, &block)
Expand Down
6 changes: 6 additions & 0 deletions spec/graphql/schema/relay_classic_mutation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@
assert_equal "August Greene", res["data"]["renameEnsemble"]["ensemble"]["name"]
end

it "uses the `as:` name when loading" do
band_query_str = query_str.sub("renameEnsemble", "renameEnsembleAsBand")
res = Jazz::Schema.execute(band_query_str, variables: { id: "Ensemble/Robert Glasper Experiment", newName: "August Greene"})
assert_equal "August Greene", res["data"]["renameEnsembleAsBand"]["ensemble"]["name"]
end

it "returns an error instead when the ID resolves to nil" do
res = Jazz::Schema.execute(query_str, variables: {
id: "Ensemble/Nonexistant Name",
Expand Down
21 changes: 13 additions & 8 deletions spec/graphql/schema/resolver_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -194,26 +194,26 @@ def resolve(int:)

class PrepResolver10 < BaseResolver
argument :int1, Integer, required: true
argument :int2, Integer, required: true
argument :int2, Integer, required: true, as: :integer_2
type Integer, null: true
def authorized?(int1:, int2:)
if int1 + int2 > context[:max_int]
def authorized?(int1:, integer_2:)
if int1 + integer_2 > context[:max_int]
raise GraphQL::ExecutionError, "Inputs too big"
elsif context[:min_int] && (int1 + int2 < context[:min_int])
elsif context[:min_int] && (int1 + integer_2 < context[:min_int])
false
else
true
end
end

def resolve(int1:, int2:)
int1 + int2
def resolve(int1:, integer_2:)
int1 + integer_2
end
end

class PrepResolver11 < PrepResolver10
def authorized?(int1:, int2:)
LazyBlock.new { super(int1: int1 * 2, int2: int2) }
def authorized?(int1:, integer_2:)
LazyBlock.new { super(int1: int1 * 2, integer_2: integer_2) }
end
end

Expand Down Expand Up @@ -454,6 +454,11 @@ def add_error_assertions(field_name, description)
assert_equal 11, res["data"]["prepResolver10"]
end

it "uses the argument name provided in `as:`" do
res = exec_query("{ prepResolver10(int1: 5, int2: 6) }", context: { max_int: 90 })
assert_equal 11, res["data"]["prepResolver10"]
end

it "can return a lazy object" do
# This is too big because it's modified in the overridden authorized? hook:
res = exec_query("{ prepResolver11(int1: 3, int2: 5) }", context: { max_int: 9 })
Expand Down
9 changes: 9 additions & 0 deletions spec/support/jazz.rb
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,14 @@ def resolve(ensemble:, new_name:)
end
end

class RenameEnsembleAsBand < RenameEnsemble
argument :ensemble_id, ID, required: true, loads: Ensemble, as: :band

def resolve(band:, new_name:)
super(ensemble: band, new_name: new_name)
end
end

class Mutation < BaseObject
field :add_ensemble, Ensemble, null: false do
argument :input, EnsembleInput, required: true
Expand All @@ -496,6 +504,7 @@ class Mutation < BaseObject
field :add_instrument, mutation: AddInstrument
field :add_sitar, mutation: AddSitar
field :rename_ensemble, mutation: RenameEnsemble
field :rename_ensemble_as_band, mutation: RenameEnsembleAsBand

def add_ensemble(input:)
ens = Models::Ensemble.new(input.name)
Expand Down

0 comments on commit 1b24d01

Please sign in to comment.