Module: Graphiti

Defined in:
lib/graphiti/debugger.rb,
lib/graphiti.rb,
lib/graphiti/cli.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/railtie.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/responders.rb,
lib/graphiti/serializer.rb,
lib/graphiti/util/class.rb,
lib/graphiti/schema_diff.rb,
lib/graphiti/resource/dsl.rb,
lib/graphiti/scoping/base.rb,
lib/graphiti/scoping/sort.rb,
lib/graphiti/adapters/null.rb,
lib/graphiti/configuration.rb,
lib/graphiti/hash_renderer.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/resource/remote.rb,
lib/graphiti/filter_operators.rb,
lib/graphiti/scoping/paginate.rb,
lib/graphiti/adapters/abstract.rb,
lib/graphiti/request_validator.rb,
lib/graphiti/util/field_params.rb,
lib/graphiti/extensions/temp_id.rb,
lib/graphiti/resource/interface.rb,
lib/graphiti/scoping/filterable.rb,
lib/graphiti/util/remote_params.rb,
lib/graphiti/util/simple_errors.rb,
lib/graphiti/util/include_params.rb,
lib/graphiti/delegates/pagination.rb,
lib/graphiti/resource/persistence.rb,
lib/graphiti/resource/sideloading.rb,
lib/graphiti/util/attribute_check.rb,
lib/graphiti/adapters/graphiti_api.rb,
lib/graphiti/resource/polymorphism.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/remote_serializer.rb,
lib/graphiti/jsonapi_serializable_ext.rb,
lib/graphiti/scoping/extra_attributes.rb,
lib/graphiti/util/relationship_payload.rb,
lib/graphiti/extensions/extra_attribute.rb,
lib/graphiti/util/serializer_attributes.rb,
lib/graphiti/extensions/boolean_attribute.rb,
lib/graphiti/util/serializer_relationships.rb,
lib/graphiti/util/transaction_hooks_recorder.rb

Overview

For “Rails STI” behavior CreditCard.all # => [<Visa>, <Mastercard>, etc]

Defined Under Namespace

Modules: Adapters, Context, Delegates, Errors, Extensions, JsonapiSerializableExt, Links, Rails, Responders, Scoping, SerializableHash, SerializableTempId, Stats, Util Classes: CLI, Configuration, Debugger, Deserializer, FilterOperators, HashRenderer, Query, Railtie, Renderer, RequestValidator, Resource, ResourceProxy, Runner, Schema, SchemaDiff, Scope, Serializer, Sideload, Types

Constant Summary collapse

DEPRECATOR =
ActiveSupport::Deprecation.new('2.0', 'Graphiti')
VERSION =
"1.2.1"

Class Method Summary collapse

Class Method Details

.broadcast(name, payload) ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/graphiti.rb', line 55

def self.broadcast(name, payload)
  # AS::N prefers domain naming format with more specific towards end
  name = "#{name}.graphiti"

  ActiveSupport::Notifications.instrument(name, payload) do
    yield payload if block_given?
  end
end

.configObject



37
38
39
# File 'lib/graphiti.rb', line 37

def self.config
  @config ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Examples:

Graphiti.configure do |c|
  c.raise_on_missing_sideload = false
end

Yields:

See Also:



47
48
49
# File 'lib/graphiti.rb', line 47

def self.configure
  yield config
end

.contextObject

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.



19
20
21
# File 'lib/graphiti.rb', line 19

def self.context
  Thread.current[:context] ||= {}
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.



24
25
26
# File 'lib/graphiti.rb', line 24

def self.context=(val)
  Thread.current[:context] = val
end

.log(msg, color = :white, bold = false) ⇒ Object



80
81
82
83
# File 'lib/graphiti.rb', line 80

def self.log(msg, color = :white, bold = false)
  colored = ActiveSupport::LogSubscriber.new.send(:color, msg, color, bold)
  logger.debug(colored)
end

.loggerObject



64
65
66
# File 'lib/graphiti.rb', line 64

def self.logger
  @logger ||= stdout_logger
end

.logger=(val) ⇒ Object



76
77
78
# File 'lib/graphiti.rb', line 76

def self.logger=(val)
  @logger = val
end

.resourcesObject



51
52
53
# File 'lib/graphiti.rb', line 51

def self.resources
  @resources ||= []
end

.setup!Object

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!



93
94
95
96
97
# File 'lib/graphiti.rb', line 93

def self.setup!
  resources.each do |r|
    r.apply_sideloads_to_serializer
  end
end

.stdout_loggerObject



68
69
70
71
72
73
74
# File 'lib/graphiti.rb', line 68

def self.stdout_logger
  logger = Logger.new($stdout)
  logger.formatter = proc do |severity, datetime, progname, msg|
    "#{msg}\n"
  end
  logger
end

.with_context(obj, namespace = 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.



29
30
31
32
33
34
35
# File 'lib/graphiti.rb', line 29

def self.with_context(obj, namespace = nil)
  prior = context
  self.context = {object: obj, namespace: namespace}
  yield
ensure
  self.context = prior
end