Module: Graphiti
- Defined in:
- lib/graphiti/debugger.rb,
lib/graphiti.rb,
lib/graphiti/cli.rb,
lib/graphiti/audit.rb,
lib/graphiti/query.rb,
lib/graphiti/rails.rb,
lib/graphiti/scope.rb,
lib/graphiti/types.rb,
lib/graphiti/errors.rb,
lib/graphiti/runner.rb,
lib/graphiti/schema.rb,
lib/graphiti/context.rb,
lib/graphiti/version.rb,
lib/graphiti/renderer.rb,
lib/graphiti/resource.rb,
lib/graphiti/sideload.rb,
lib/graphiti/stats/dsl.rb,
lib/graphiti/util/hash.rb,
lib/graphiti/util/link.rb,
lib/graphiti/serializer.rb,
lib/graphiti/util/class.rb,
lib/graphiti/schema_diff.rb,
lib/graphiti/audit/report.rb,
lib/graphiti/context_hash.rb,
lib/graphiti/resource/dsl.rb,
lib/graphiti/schema/check.rb,
lib/graphiti/scoping/base.rb,
lib/graphiti/scoping/sort.rb,
lib/graphiti/spec_helpers.rb,
lib/graphiti/adapters/null.rb,
lib/graphiti/configuration.rb,
lib/graphiti/hash_renderer.rb,
lib/graphiti/rails/context.rb,
lib/graphiti/rails/railtie.rb,
lib/graphiti/stats/payload.rb,
lib/graphiti/util/sideload.rb,
lib/graphiti/resource/links.rb,
lib/graphiti/resource_proxy.rb,
lib/graphiti/scoping/filter.rb,
lib/graphiti/rails/debugging.rb,
lib/graphiti/resource/remote.rb,
lib/graphiti/filter_operators.rb,
lib/graphiti/rails/controller.rb,
lib/graphiti/rails/responders.rb,
lib/graphiti/scoping/paginate.rb,
lib/graphiti/util/cache_debug.rb,
lib/graphiti/util/uri_decoder.rb,
lib/graphiti/adapters/abstract.rb,
lib/graphiti/request_validator.rb,
lib/graphiti/spec_helpers/node.rb,
lib/graphiti/util/field_params.rb,
lib/graphiti/extensions/temp_id.rb,
lib/graphiti/rails/rake_helpers.rb,
lib/graphiti/rails/test_helpers.rb,
lib/graphiti/resource/interface.rb,
lib/graphiti/scoping/filterable.rb,
lib/graphiti/spec_helpers/rspec.rb,
lib/graphiti/spec_helpers/rspec.rb,
lib/graphiti/util/public_id_map.rb,
lib/graphiti/util/remote_params.rb,
lib/graphiti/util/simple_errors.rb,
lib/graphiti/spec_helpers/errors.rb,
lib/graphiti/util/include_params.rb,
lib/graphiti/util/internal_param.rb,
lib/graphiti/delegates/pagination.rb,
lib/graphiti/resource/persistence.rb,
lib/graphiti/resource/sideloading.rb,
lib/graphiti/spec_helpers/helpers.rb,
lib/graphiti/util/attribute_check.rb,
lib/graphiti/util/public_id_block.rb,
lib/graphiti/adapters/graphiti_api.rb,
lib/graphiti/resource/polymorphism.rb,
lib/graphiti/spec_helpers/matchers.rb,
lib/graphiti/adapters/active_record.rb,
lib/graphiti/resource/configuration.rb,
lib/graphiti/resource/documentation.rb,
lib/graphiti/scoping/default_filter.rb,
lib/graphiti/util/public_id_sources.rb,
lib/graphiti/util/remote_serializer.rb,
lib/graphiti/jsonapi_serializable_ext.rb,
lib/graphiti/rails/exception_handlers.rb,
lib/graphiti/scoping/extra_attributes.rb,
lib/graphiti/spec_helpers/errors_proxy.rb,
lib/graphiti/util/relationship_payload.rb,
lib/generators/graphiti/generator_mixin.rb,
lib/graphiti/extensions/extra_attribute.rb,
lib/graphiti/util/serializer_attributes.rb,
lib/generators/graphiti/locale_generator.rb,
lib/generators/graphiti/install_generator.rb,
lib/graphiti/error_serializers/validation.rb,
lib/graphiti/extensions/boolean_attribute.rb,
lib/graphiti/request_validators/validator.rb,
lib/generators/graphiti/api_test_generator.rb,
lib/generators/graphiti/resource_generator.rb,
lib/graphiti/util/serializer_relationships.rb,
lib/graphiti/scoping/filter_group_validator.rb,
lib/graphiti/util/transaction_hooks_recorder.rb,
lib/graphiti/adapters/persistence/associations.rb,
lib/graphiti/error_serializers/invalid_request.rb,
lib/generators/graphiti/resource_test_generator.rb,
lib/graphiti/error_serializers/conflict_request.rb,
lib/graphiti/error_serializers/translated_title.rb,
lib/graphiti/request_validators/update_validator.rb
Overview
For "Rails STI" behavior
CreditCard.all # => [, , etc]
Defined Under Namespace
Modules: Adapters, Context, Delegates, ErrorSerializers, Errors, Extensions, GeneratorMixin, JsonapiSerializableExt, Links, Rails, RequestValidators, Scoping, SerializableHash, SerializableTempId, SpecHelpers, Stats, Util
Classes: ApiTestGenerator, Audit, CLI, Configuration, ContextHash, Debugger, Deserializer, FilterOperators, HashRenderer, InstallGenerator, LocaleGenerator, Query, Renderer, RequestValidator, Resource, ResourceGenerator, ResourceProxy, ResourceTestGenerator, Runner, Schema, SchemaDiff, Scope, Serializer, Sideload, Types
Constant Summary
collapse
- DEPRECATOR =
ActiveSupport::Deprecation.new("3.0", "Graphiti")
- Responders =
Deprecated. Was core's own responders mixin, superseded by the one that came
in with graphiti-rails. Remove in 3.0.
ActiveSupport::Deprecation::DeprecatedConstantProxy.new(
"Graphiti::Responders",
"Graphiti::Rails::Responders",
DEPRECATOR
)
- Railtie =
Deprecated. Core's railtie merged into graphiti-rails'. Remove in 3.0.
ActiveSupport::Deprecation::DeprecatedConstantProxy.new(
"Graphiti::Railtie",
"Graphiti::Rails::Railtie",
DEPRECATOR
)
- VERSION =
"2.1.1"
Class Method Summary
collapse
Class Method Details
.broadcast(name, payload) ⇒ Object
119
120
121
122
123
124
125
126
|
# File 'lib/graphiti.rb', line 119
def self.broadcast(name, payload)
name = "#{name}.graphiti"
ActiveSupport::Notifications.instrument(name, payload) do
yield payload if block_given?
end
end
|
177
178
179
|
# File 'lib/graphiti.rb', line 177
def self.cache
@cache
end
|
.cache=(val) ⇒ Object
173
174
175
|
# File 'lib/graphiti.rb', line 173
def self.cache=(val)
@cache = val
end
|
77
78
79
|
# File 'lib/graphiti.rb', line 77
def self.config
@config ||= Configuration.new
end
|
87
88
89
|
# File 'lib/graphiti.rb', line 87
def self.configure
yield config
end
|
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
53
54
55
|
# File 'lib/graphiti.rb', line 53
def self.context
Fiber[:context] ||= ContextHash.new
end
|
.context=(val) ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
58
59
60
61
62
|
# File 'lib/graphiti.rb', line 58
def self.context=(val)
Fiber[:context] = ContextHash.new.tap do |hash|
val.each { |key, value| hash[key] = value }
end
end
|
.guarded_relationships ⇒ Object
Every guarded relationship, e.g. ["EmployeeResource.positions"]
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/graphiti.rb', line 108
def self.guarded_relationships
::Rails.application.eager_load! if defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
resources.flat_map { |resource_class|
resource_class.config[:sideloads]
.select { |_name, sideload| sideload.guarded? }
.keys
.map { |relationship_name| "#{resource_class.name || "(anonymous resource)"}.#{relationship_name}" }
}.uniq.sort
end
|
.log(msg, color = :white, bold = false) ⇒ Object
144
145
146
147
148
149
150
151
152
|
# File 'lib/graphiti.rb', line 144
def self.log(msg, color = :white, bold = false)
colored = if ::ActiveSupport.version >= Gem::Version.new("7.1")
ActiveSupport::LogSubscriber.new.send(:color, msg, color, bold: bold)
else
ActiveSupport::LogSubscriber.new.send(:color, msg, color, bold)
end
logger.debug(colored)
end
|
128
129
130
|
# File 'lib/graphiti.rb', line 128
def self.logger
@logger ||= stdout_logger
end
|
.logger=(val) ⇒ Object
140
141
142
|
# File 'lib/graphiti.rb', line 140
def self.logger=(val)
@logger = val
end
|
.public_id_sources ⇒ Object
95
96
97
|
# File 'lib/graphiti.rb', line 95
def self.public_id_sources
@public_id_sources ||= Util::PublicIdSources.new
end
|
.public_ids_declared=(value) ⇒ Object
103
104
105
|
# File 'lib/graphiti.rb', line 103
def self.public_ids_declared=(value)
@public_ids_declared = value
end
|
.public_ids_declared? ⇒ Boolean
99
100
101
|
# File 'lib/graphiti.rb', line 99
def self.public_ids_declared?
!!@public_ids_declared
end
|
.resources ⇒ Object
91
92
93
|
# File 'lib/graphiti.rb', line 91
def self.resources
@resources ||= []
end
|
When we add a sideload, we need to do configuration, such as
adding the relationship to the Resource's serializer.
However, the sideload's Resource class may not be loaded yet.
This is not a problem when Rails autoloading, but is a problem
when eager loading, or not using Rails.
So, load every Resource class then call Graphiti.setup!
162
163
164
165
166
167
|
# File 'lib/graphiti.rb', line 162
def self.setup!
resources.each do |r|
r.apply_sideloads_to_serializer
end
@setup = true
end
|
.setup? ⇒ Boolean
169
170
171
|
# File 'lib/graphiti.rb', line 169
def self.setup?
!!@setup
end
|
.stdout_logger ⇒ Object
132
133
134
135
136
137
138
|
# File 'lib/graphiti.rb', line 132
def self.stdout_logger
logger = Logger.new($stdout)
logger.formatter = proc do |severity, datetime, progname, msg|
"#{msg}\n"
end
logger
end
|
.with_context(obj, action = nil) ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/graphiti.rb', line 65
def self.with_context(obj, action = nil)
prior = context
self.context = {object: obj, action: action}
yield
ensure
self.context = prior
resources.each do |resource_class|
resource_class.sideloads.values.each(&:clear_resources)
end
end
|