graphql 1.8.0.pre7 → 1.8.0.pre8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/graphql/argument.rb +24 -19
- data/lib/graphql/backtrace/tracer.rb +16 -22
- data/lib/graphql/base_type.rb +6 -1
- data/lib/graphql/execution/execute.rb +15 -13
- data/lib/graphql/execution/lazy/resolve.rb +1 -3
- data/lib/graphql/interface_type.rb +5 -3
- data/lib/graphql/language/document_from_schema_definition.rb +1 -1
- data/lib/graphql/language/lexer.rb +65 -51
- data/lib/graphql/language/lexer.rl +2 -0
- data/lib/graphql/language/nodes.rb +118 -71
- data/lib/graphql/language/parser.rb +699 -652
- data/lib/graphql/language/parser.y +11 -5
- data/lib/graphql/language/printer.rb +2 -2
- data/lib/graphql/object_type.rb +0 -5
- data/lib/graphql/relay/relation_connection.rb +1 -1
- data/lib/graphql/schema.rb +15 -3
- data/lib/graphql/schema/argument.rb +18 -1
- data/lib/graphql/schema/enum.rb +5 -2
- data/lib/graphql/schema/enum_value.rb +8 -1
- data/lib/graphql/schema/field.rb +10 -3
- data/lib/graphql/schema/input_object.rb +4 -2
- data/lib/graphql/schema/interface.rb +15 -0
- data/lib/graphql/schema/member.rb +2 -1
- data/lib/graphql/schema/member/accepts_definition.rb +118 -0
- data/lib/graphql/schema/member/build_type.rb +2 -2
- data/lib/graphql/schema/member/has_fields.rb +3 -2
- data/lib/graphql/schema/object.rb +4 -2
- data/lib/graphql/schema/scalar.rb +2 -0
- data/lib/graphql/schema/traversal.rb +3 -0
- data/lib/graphql/schema/union.rb +6 -11
- data/lib/graphql/version.rb +1 -1
- data/spec/graphql/argument_spec.rb +21 -0
- data/spec/graphql/base_type_spec.rb +22 -0
- data/spec/graphql/enum_type_spec.rb +18 -5
- data/spec/graphql/execution/execute_spec.rb +3 -3
- data/spec/graphql/input_object_type_spec.rb +13 -0
- data/spec/graphql/interface_type_spec.rb +12 -0
- data/spec/graphql/language/nodes_spec.rb +0 -12
- data/spec/graphql/language/parser_spec.rb +74 -0
- data/spec/graphql/language/printer_spec.rb +1 -1
- data/spec/graphql/object_type_spec.rb +21 -0
- data/spec/graphql/relay/range_add_spec.rb +5 -1
- data/spec/graphql/relay/relation_connection_spec.rb +7 -1
- data/spec/graphql/schema/argument_spec.rb +31 -0
- data/spec/graphql/schema/enum_spec.rb +5 -0
- data/spec/graphql/schema/field_spec.rb +11 -1
- data/spec/graphql/schema/input_object_spec.rb +5 -0
- data/spec/graphql/schema/interface_spec.rb +29 -0
- data/spec/graphql/schema/member/accepts_definition_spec.rb +62 -0
- data/spec/graphql/schema/printer_spec.rb +34 -0
- data/spec/graphql/schema/traversal_spec.rb +31 -0
- data/spec/graphql/schema/union_spec.rb +30 -0
- data/spec/graphql/schema_spec.rb +6 -0
- data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
- data/spec/graphql/tracing/active_support_notifications_tracing_spec.rb +1 -1
- data/spec/graphql/union_type_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/dummy/schema.rb +1 -4
- metadata +7 -2
@@ -152,10 +152,6 @@ rule
|
|
152
152
|
| operation_type
|
153
153
|
| schema_keyword
|
154
154
|
|
155
|
-
name_list:
|
156
|
-
name { return [make_node(:TypeName, name: val[0])] }
|
157
|
-
| name_list name { val[0] << make_node(:TypeName, name: val[1]) }
|
158
|
-
|
159
155
|
enum_value_definition:
|
160
156
|
enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[0], directives: val[1], description: get_description(val[0])) }
|
161
157
|
|
@@ -306,7 +302,17 @@ rule
|
|
306
302
|
|
307
303
|
implements_opt:
|
308
304
|
/* none */ { return [] }
|
309
|
-
| IMPLEMENTS
|
305
|
+
| IMPLEMENTS AMP interfaces_list { return val[2] }
|
306
|
+
| IMPLEMENTS interfaces_list { return val[1] }
|
307
|
+
| IMPLEMENTS legacy_interfaces_list { return val[1] }
|
308
|
+
|
309
|
+
interfaces_list:
|
310
|
+
name { return [make_node(:TypeName, name: val[0])] }
|
311
|
+
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2]) }
|
312
|
+
|
313
|
+
legacy_interfaces_list:
|
314
|
+
name { return [make_node(:TypeName, name: val[0])] }
|
315
|
+
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1]) }
|
310
316
|
|
311
317
|
input_value_definition:
|
312
318
|
name COLON type default_value_opt directives_list_opt {
|
@@ -154,7 +154,7 @@ module GraphQL
|
|
154
154
|
def print_object_type_definition(object_type)
|
155
155
|
out = print_description(object_type)
|
156
156
|
out << "type #{object_type.name}"
|
157
|
-
out << " implements " << object_type.interfaces.map(&:name).join("
|
157
|
+
out << " implements " << object_type.interfaces.map(&:name).join(" & ") unless object_type.interfaces.empty?
|
158
158
|
out << print_directives(object_type.directives)
|
159
159
|
out << print_field_definitions(object_type.fields)
|
160
160
|
end
|
@@ -339,7 +339,7 @@ module GraphQL
|
|
339
339
|
when Hash
|
340
340
|
"{#{node.map { |k, v| "#{k}: #{print_node(v)}" }.join(", ")}}".dup
|
341
341
|
else
|
342
|
-
|
342
|
+
GraphQL::Language.serialize(node.to_s)
|
343
343
|
end
|
344
344
|
end
|
345
345
|
|
data/lib/graphql/object_type.rb
CHANGED
data/lib/graphql/schema.rb
CHANGED
@@ -64,6 +64,7 @@ module GraphQL
|
|
64
64
|
# end
|
65
65
|
#
|
66
66
|
class Schema
|
67
|
+
extend GraphQL::Schema::Member::AcceptsDefinition
|
67
68
|
include GraphQL::Define::InstanceDefinable
|
68
69
|
accepts_definitions \
|
69
70
|
:query, :mutation, :subscription,
|
@@ -197,6 +198,9 @@ module GraphQL
|
|
197
198
|
rescue_middleware.remove_handler(*args, &block)
|
198
199
|
end
|
199
200
|
|
201
|
+
# For forwards-compatibility with Schema classes
|
202
|
+
alias :graphql_definition :itself
|
203
|
+
|
200
204
|
# Validate a query string according to this schema.
|
201
205
|
# @param string_or_document [String, GraphQL::Language::Nodes::Document]
|
202
206
|
# @return [Array<GraphQL::StaticValidation::Message>]
|
@@ -681,6 +685,7 @@ module GraphQL
|
|
681
685
|
schema_defn.id_from_object = method(:id_from_object)
|
682
686
|
schema_defn.type_error = method(:type_error)
|
683
687
|
schema_defn.context_class = context_class
|
688
|
+
schema_defn.cursor_encoder = cursor_encoder
|
684
689
|
schema_defn.tracers.concat(defined_tracers)
|
685
690
|
schema_defn.query_analyzers.concat(defined_query_analyzers)
|
686
691
|
schema_defn.multiplex_analyzers.concat(defined_multiplex_analyzers)
|
@@ -749,6 +754,13 @@ module GraphQL
|
|
749
754
|
end
|
750
755
|
end
|
751
756
|
|
757
|
+
def cursor_encoder(new_encoder = nil)
|
758
|
+
if new_encoder
|
759
|
+
@cursor_encoder = new_encoder
|
760
|
+
end
|
761
|
+
@cursor_encoder || Base64Encoder
|
762
|
+
end
|
763
|
+
|
752
764
|
def default_max_page_size(new_default_max_page_size = nil)
|
753
765
|
if new_default_max_page_size
|
754
766
|
@default_max_page_size = new_default_max_page_size
|
@@ -773,9 +785,9 @@ module GraphQL
|
|
773
785
|
end
|
774
786
|
end
|
775
787
|
|
776
|
-
def orphan_types(new_orphan_types
|
777
|
-
if new_orphan_types
|
778
|
-
@orphan_types = new_orphan_types
|
788
|
+
def orphan_types(*new_orphan_types)
|
789
|
+
if new_orphan_types.any?
|
790
|
+
@orphan_types = new_orphan_types.flatten
|
779
791
|
else
|
780
792
|
@orphan_types || []
|
781
793
|
end
|
@@ -3,11 +3,15 @@ module GraphQL
|
|
3
3
|
class Schema
|
4
4
|
class Argument
|
5
5
|
include GraphQL::Schema::Member::CachedGraphQLDefinition
|
6
|
+
include GraphQL::Schema::Member::AcceptsDefinition
|
6
7
|
|
7
8
|
NO_DEFAULT = :__no_default__
|
8
9
|
|
9
10
|
attr_reader :name
|
10
11
|
|
12
|
+
# @return [GraphQL::Schema::Field, Class] The field or input object this argument belongs to
|
13
|
+
attr_reader :owner
|
14
|
+
|
11
15
|
# @param arg_name [Symbol]
|
12
16
|
# @param type_expr
|
13
17
|
# @param desc [String]
|
@@ -15,13 +19,26 @@ module GraphQL
|
|
15
19
|
# @param description [String]
|
16
20
|
# @param default_value [Object]
|
17
21
|
# @param camelize [Boolean] if true, the name will be camelized when building the schema
|
18
|
-
def initialize(arg_name, type_expr, desc = nil, required:, description: nil, default_value: NO_DEFAULT, camelize: true)
|
22
|
+
def initialize(arg_name, type_expr, desc = nil, required:, description: nil, default_value: NO_DEFAULT, camelize: true, owner:, &definition_block)
|
19
23
|
@name = arg_name.to_s
|
20
24
|
@type_expr = type_expr
|
21
25
|
@description = desc || description
|
22
26
|
@null = !required
|
23
27
|
@default_value = default_value
|
24
28
|
@camelize = camelize
|
29
|
+
@owner = owner
|
30
|
+
|
31
|
+
if definition_block
|
32
|
+
instance_eval(&definition_block)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def description(text = nil)
|
37
|
+
if text
|
38
|
+
@description = text
|
39
|
+
else
|
40
|
+
@description
|
41
|
+
end
|
25
42
|
end
|
26
43
|
|
27
44
|
def to_graphql
|
data/lib/graphql/schema/enum.rb
CHANGED
@@ -20,6 +20,8 @@ module GraphQL
|
|
20
20
|
# end
|
21
21
|
class Schema
|
22
22
|
class Enum < GraphQL::Schema::Member
|
23
|
+
extend GraphQL::Schema::Member::AcceptsDefinition
|
24
|
+
|
23
25
|
class << self
|
24
26
|
# Define a value for this enum
|
25
27
|
# @param graphql_name [String, Symbol] the GraphQL value for this, usually `SCREAMING_CASE`
|
@@ -28,8 +30,9 @@ module GraphQL
|
|
28
30
|
# @param deprecation_reason [String] if this object is deprecated, include a message here
|
29
31
|
# @return [void]
|
30
32
|
# @see {Schema::EnumValue} which handles these inputs by default
|
31
|
-
def value(*args, &block)
|
32
|
-
|
33
|
+
def value(*args, **kwargs, &block)
|
34
|
+
kwargs[:owner] = self
|
35
|
+
value = enum_value_class.new(*args, **kwargs, &block)
|
33
36
|
own_values[value.graphql_name] = value
|
34
37
|
nil
|
35
38
|
end
|
@@ -26,13 +26,20 @@ module GraphQL
|
|
26
26
|
# enum_value_class CustomEnumValue
|
27
27
|
# end
|
28
28
|
class EnumValue < GraphQL::Schema::Member
|
29
|
+
include GraphQL::Schema::Member::AcceptsDefinition
|
30
|
+
|
29
31
|
attr_reader :graphql_name
|
30
32
|
|
31
|
-
|
33
|
+
# @return [Class] The enum type that owns this value
|
34
|
+
attr_reader :owner
|
35
|
+
|
36
|
+
def initialize(graphql_name, desc = nil, owner:, description: nil, value: nil, deprecation_reason: nil, &block)
|
32
37
|
@graphql_name = graphql_name.to_s
|
33
38
|
@description = desc || description
|
34
39
|
@value = value || @graphql_name
|
35
40
|
@deprecation_reason = deprecation_reason
|
41
|
+
@owner = owner
|
42
|
+
|
36
43
|
if block_given?
|
37
44
|
instance_eval(&block)
|
38
45
|
end
|
data/lib/graphql/schema/field.rb
CHANGED
@@ -6,6 +6,7 @@ module GraphQL
|
|
6
6
|
class Schema
|
7
7
|
class Field
|
8
8
|
include GraphQL::Schema::Member::CachedGraphQLDefinition
|
9
|
+
include GraphQL::Schema::Member::AcceptsDefinition
|
9
10
|
|
10
11
|
# @return [String]
|
11
12
|
attr_reader :name
|
@@ -19,9 +20,13 @@ module GraphQL
|
|
19
20
|
# @return [Symbol]
|
20
21
|
attr_reader :method
|
21
22
|
|
23
|
+
# @return [Class] The type that this field belongs to
|
24
|
+
attr_reader :owner
|
25
|
+
|
22
26
|
# @param name [Symbol] The underscore-cased version of this field name (will be camelized for the GraphQL API)
|
23
27
|
# @param return_type_expr [Class, GraphQL::BaseType, Array] The return type of this field
|
24
28
|
# @param desc [String] Field description
|
29
|
+
# @param owner [Class] The type that this field belongs to
|
25
30
|
# @param null [Boolean] `true` if this field may return `null`, `false` if it is never `null`
|
26
31
|
# @param description [String] Field description
|
27
32
|
# @param deprecation_reason [String] If present, the field is marked "deprecated" with this message
|
@@ -35,7 +40,7 @@ module GraphQL
|
|
35
40
|
# @param function [GraphQL::Function] **deprecated** for compatibility with <1.8.0
|
36
41
|
# @param camelize [Boolean] If true, the field name will be camelized when building the schema
|
37
42
|
# @param complexity [Numeric] When provided, set the complexity for this field
|
38
|
-
def initialize(name, return_type_expr = nil, desc = nil, null: nil, field: nil, function: nil, description: nil, deprecation_reason: nil, method: nil, connection: nil, max_page_size: nil, resolve: nil, introspection: false, hash_key: nil, camelize: true, complexity: 1, extras: [], &definition_block)
|
43
|
+
def initialize(name, return_type_expr = nil, desc = nil, owner:, null: nil, field: nil, function: nil, description: nil, deprecation_reason: nil, method: nil, connection: nil, max_page_size: nil, resolve: nil, introspection: false, hash_key: nil, camelize: true, complexity: 1, extras: [], &definition_block)
|
39
44
|
if (field || function) && desc.nil? && return_type_expr.is_a?(String)
|
40
45
|
# The return type should be copied from `field` or `function`, and the second positional argument is the description
|
41
46
|
desc = return_type_expr
|
@@ -75,6 +80,7 @@ module GraphQL
|
|
75
80
|
@extras = extras
|
76
81
|
@arguments = {}
|
77
82
|
@camelize = camelize
|
83
|
+
@owner = owner
|
78
84
|
|
79
85
|
if definition_block
|
80
86
|
instance_eval(&definition_block)
|
@@ -82,8 +88,9 @@ module GraphQL
|
|
82
88
|
end
|
83
89
|
|
84
90
|
# This is the `argument(...)` DSL for class-based field definitons
|
85
|
-
def argument(*args)
|
86
|
-
|
91
|
+
def argument(*args, **kwargs, &block)
|
92
|
+
kwargs[:owner] = self
|
93
|
+
arg_defn = self.class.argument_class.new(*args, **kwargs, &block)
|
87
94
|
arguments[arg_defn.name] = arg_defn
|
88
95
|
end
|
89
96
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
module GraphQL
|
3
3
|
class Schema
|
4
4
|
class InputObject < GraphQL::Schema::Member
|
5
|
+
extend GraphQL::Schema::Member::AcceptsDefinition
|
5
6
|
extend GraphQL::Delegate
|
6
7
|
|
7
8
|
def initialize(values, context:, defaults_used:)
|
@@ -23,8 +24,9 @@ module GraphQL
|
|
23
24
|
# @return [Class<GraphQL::Arguments>]
|
24
25
|
attr_accessor :arguments_class
|
25
26
|
|
26
|
-
def argument(*args)
|
27
|
-
|
27
|
+
def argument(*args, **kwargs)
|
28
|
+
kwargs[:owner] = self
|
29
|
+
argument = GraphQL::Schema::Argument.new(*args, **kwargs)
|
28
30
|
arg_name = argument.graphql_definition.name
|
29
31
|
own_arguments[arg_name] = argument
|
30
32
|
# Add a method access
|
@@ -3,6 +3,7 @@ module GraphQL
|
|
3
3
|
class Schema
|
4
4
|
class Interface < GraphQL::Schema::Member
|
5
5
|
extend GraphQL::Schema::Member::HasFields
|
6
|
+
extend GraphQL::Schema::Member::AcceptsDefinition
|
6
7
|
field_class GraphQL::Schema::Field
|
7
8
|
|
8
9
|
class << self
|
@@ -15,14 +16,28 @@ module GraphQL
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
19
|
+
def orphan_types(*types)
|
20
|
+
if types.any?
|
21
|
+
@orphan_types = types
|
22
|
+
else
|
23
|
+
all_orphan_types = @orphan_types || []
|
24
|
+
all_orphan_types += super if defined?(super)
|
25
|
+
all_orphan_types.uniq
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
18
29
|
def to_graphql
|
19
30
|
type_defn = GraphQL::InterfaceType.new
|
20
31
|
type_defn.name = graphql_name
|
21
32
|
type_defn.description = description
|
33
|
+
type_defn.orphan_types = orphan_types
|
22
34
|
fields.each do |field_name, field_inst|
|
23
35
|
field_defn = field_inst.graphql_definition
|
24
36
|
type_defn.fields[field_defn.name] = field_defn
|
25
37
|
end
|
38
|
+
if respond_to?(:resolve_type)
|
39
|
+
type_defn.resolve_type = method(:resolve_type)
|
40
|
+
end
|
26
41
|
type_defn
|
27
42
|
end
|
28
43
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'graphql/schema/member/accepts_definition'
|
2
3
|
require "graphql/relay/type_extensions"
|
3
4
|
|
4
5
|
module GraphQL
|
@@ -27,7 +28,7 @@ module GraphQL
|
|
27
28
|
# These constants are interpreted as GraphQL types
|
28
29
|
#
|
29
30
|
# @example
|
30
|
-
# field :
|
31
|
+
# field :is_draft, Boolean, null: false
|
31
32
|
# field :id, ID, null: false
|
32
33
|
# field :score, Int, null: false
|
33
34
|
module GraphQLTypeNames
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GraphQL
|
4
|
+
class Schema
|
5
|
+
class Member
|
6
|
+
# Support for legacy `accepts_definitions` functions.
|
7
|
+
#
|
8
|
+
# Keep the legacy handler hooked up. Class-based types and fields
|
9
|
+
# will call those legacy handlers during their `.to_graphql`
|
10
|
+
# methods.
|
11
|
+
#
|
12
|
+
# This can help out while transitioning from one to the other.
|
13
|
+
# Eventually, `GraphQL::{X}Type` objects will be removed entirely,
|
14
|
+
# But this can help during the transition.
|
15
|
+
#
|
16
|
+
# @example Applying a function to base object class
|
17
|
+
# # Here's the legacy-style config, which we're calling back to:
|
18
|
+
# GraphQL::ObjectType.accepts_definition({
|
19
|
+
# permission_level: ->(defn, value) { defn.metadata[:permission_level] = value }
|
20
|
+
# })
|
21
|
+
#
|
22
|
+
# class BaseObject < GraphQL::Schema::Object
|
23
|
+
# # Setup a named pass-through to the legacy config functions
|
24
|
+
# accepts_definition :permission_level
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# class Account < BaseObject
|
28
|
+
# # This value will be passed to the legacy handler:
|
29
|
+
# permission_level 1
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # The class gets a reader method which returns the args,
|
33
|
+
# # only marginally useful.
|
34
|
+
# Account.permission_level # => [1]
|
35
|
+
#
|
36
|
+
# # The legacy handler is called, as before:
|
37
|
+
# Account.graphql_definition.metadata[:permission_level] # => 1
|
38
|
+
module AcceptsDefinition
|
39
|
+
def self.included(child)
|
40
|
+
child.extend(ClassMethods)
|
41
|
+
child.prepend(ToGraphQLExtension)
|
42
|
+
child.prepend(InitializeExtension)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.extended(child)
|
46
|
+
child.extend(ClassMethods)
|
47
|
+
# I tried to use `super`, but super isn't quite right
|
48
|
+
# since the method is defined in the same class itself,
|
49
|
+
# not the superclass
|
50
|
+
child.class_eval do
|
51
|
+
class << self
|
52
|
+
prepend(ToGraphQLExtension)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
module ClassMethods
|
58
|
+
def accepts_definition(name)
|
59
|
+
@accepts_definition_methods ||= []
|
60
|
+
@accepts_definition_methods << name
|
61
|
+
ivar_name = "@#{name}_args"
|
62
|
+
define_singleton_method(name) do |*args|
|
63
|
+
if args.any?
|
64
|
+
instance_variable_set(ivar_name, args)
|
65
|
+
end
|
66
|
+
instance_variable_get(ivar_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
define_method(name) do |*args|
|
70
|
+
if args.any?
|
71
|
+
instance_variable_set(ivar_name, args)
|
72
|
+
end
|
73
|
+
instance_variable_get(ivar_name)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def accepts_definition_methods
|
78
|
+
@accepts_definition_methods ||= []
|
79
|
+
sc = self.is_a?(Class) ? superclass : self.class.superclass
|
80
|
+
@accepts_definition_methods + (sc.respond_to?(:accepts_definition_methods) ? sc.accepts_definition_methods : [])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
module ToGraphQLExtension
|
85
|
+
def to_graphql
|
86
|
+
defn = super
|
87
|
+
accepts_definition_methods.each do |method_name|
|
88
|
+
value = instance_variable_get("@#{method_name}_args")
|
89
|
+
if !value.nil?
|
90
|
+
defn = defn.redefine { public_send(method_name, *value) }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
defn
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
module InitializeExtension
|
98
|
+
def initialize(*args, **kwargs, &block)
|
99
|
+
self.class.accepts_definition_methods.each do |method_name|
|
100
|
+
if kwargs.key?(method_name)
|
101
|
+
value = kwargs.delete(method_name)
|
102
|
+
if !value.is_a?(Array)
|
103
|
+
value = [value]
|
104
|
+
end
|
105
|
+
instance_variable_set("@#{method_name}_args", value)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
super(*args, **kwargs, &block)
|
109
|
+
end
|
110
|
+
|
111
|
+
def accepts_definition_methods
|
112
|
+
self.class.accepts_definition_methods
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|