graphiti 1.0.rc.23 → 1.0.rc.24
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/graphiti.gemspec +1 -2
- data/lib/generators/graphiti/resource_generator.rb +55 -0
- data/lib/generators/graphiti/templates/resource.rb.erb +2 -2
- data/lib/graphiti/jsonapi_serializable_ext.rb +16 -2
- data/lib/graphiti/renderer.rb +1 -1
- data/lib/graphiti/resource_proxy.rb +4 -1
- data/lib/graphiti/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d67c2cb973db323b43cb172e2de8a2b99e363643aaaaf32fe3dfb40136c495d7
|
4
|
+
data.tar.gz: a2c8f90f58a5d87fa1ec7bba822c0ac8b4e50a59d7ad1d3f0b71e031d97084d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b08c3eb3a4ab96dfeb1af6642004c1b22d052fd6d3e0d897ee9dc8ddbc84430b49623c819fab06e4744673d5fa61e8b4b289df2d79f0853a79b2d1fc4f7c9d7
|
7
|
+
data.tar.gz: 05c816f48067d09d0d7f498c0dbdd5011d4552d1c720e947bf72513d3a761dec0425ef4d138f49de056833fd1c9998582a8bfabc9d5a26a9889ba91ffb2d605c
|
data/graphiti.gemspec
CHANGED
@@ -18,8 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
spec.required_ruby_version = "~> 2.3"
|
20
20
|
|
21
|
-
|
22
|
-
spec.add_dependency "jsonapi-serializable", "= 0.3.0"
|
21
|
+
spec.add_dependency "jsonapi-serializable", "~> 0.3.0"
|
23
22
|
spec.add_dependency "dry-types", "~> 0.13"
|
24
23
|
spec.add_dependency "graphiti_errors", "~> 1.0.beta.1"
|
25
24
|
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
@@ -14,12 +14,19 @@ module Graphiti
|
|
14
14
|
default: false,
|
15
15
|
aliases: ["--omit-comments", "-c"],
|
16
16
|
desc: "Generate without documentation comments"
|
17
|
+
|
17
18
|
class_option :actions,
|
18
19
|
type: :array,
|
19
20
|
default: nil,
|
20
21
|
aliases: ["--actions", "-a"],
|
21
22
|
desc: 'Array of controller actions to support, e.g. "index show destroy"'
|
22
23
|
|
24
|
+
class_option :'attributes-from',
|
25
|
+
banner: "Model",
|
26
|
+
type: :string,
|
27
|
+
aliases: ["--model", "-m"],
|
28
|
+
desc: "Specify to use attributes from a particular model"
|
29
|
+
|
23
30
|
desc "This generator creates a resource file at app/resources, as well as corresponding controller/specs/route/etc"
|
24
31
|
def generate_all
|
25
32
|
generate_model
|
@@ -58,6 +65,54 @@ module Graphiti
|
|
58
65
|
@options["omit-comments"]
|
59
66
|
end
|
60
67
|
|
68
|
+
def attributes_class
|
69
|
+
return @attributes_class if @attributes_class
|
70
|
+
|
71
|
+
case @options["attributes-from"]
|
72
|
+
# thor will set the value to the key if no value is specified
|
73
|
+
when "attributes-from"
|
74
|
+
klass = class_name
|
75
|
+
when :kind_of?, String
|
76
|
+
klass = @options["attributes-from"].classify
|
77
|
+
else
|
78
|
+
# return nil if attributes-from isn't set or has an invalid value
|
79
|
+
return
|
80
|
+
end
|
81
|
+
begin
|
82
|
+
@attributes_class = klass.safe_constantize
|
83
|
+
rescue NameError
|
84
|
+
raise NameError, "attributes-from #{klass.inspect} does not exist."
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Generates a list of OpenStruct(:name, :type) objects that map to
|
90
|
+
# the +attributes_class+ columns.
|
91
|
+
##
|
92
|
+
def default_attributes
|
93
|
+
unless attributes_class.is_a?(Class) && attributes_class <= ApplicationRecord
|
94
|
+
raise "Unable to set #{self} default_attributes from #{attributes_class}. #{attributes_class} must be a kind of ApplicationRecord"
|
95
|
+
end
|
96
|
+
if attributes_class.table_exists?
|
97
|
+
return attributes_class.columns.map do |c|
|
98
|
+
OpenStruct.new({name: c.name.to_sym, type: c.type})
|
99
|
+
end
|
100
|
+
else
|
101
|
+
raise "#{attributes_class} table must exist. Please run migrations."
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def resource_attributes
|
106
|
+
# set a temporary variable because overriding attributes causes
|
107
|
+
# weird behavior when the generator is run. It will override
|
108
|
+
# everytime regardless of the conditional.
|
109
|
+
if !attributes_class.nil?
|
110
|
+
default_attributes
|
111
|
+
else
|
112
|
+
attributes
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
61
116
|
def responders?
|
62
117
|
defined?(Responders)
|
63
118
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<% module_namespacing do -%>
|
2
2
|
class <%= class_name %>Resource < ApplicationResource
|
3
|
-
<%-
|
4
|
-
<%- if [:created_at, :updated_at].include?(a.name.to_sym) -%>
|
3
|
+
<%- resource_attributes.each do |a| -%>
|
4
|
+
<%- if [:id, :created_at, :updated_at].include?(a.name.to_sym) -%>
|
5
5
|
attribute :<%= a.name %>, :<%= a.type %>, writable: false
|
6
6
|
<%- else -%>
|
7
7
|
attribute :<%= a.name %>, :<%= a.type %>
|
@@ -35,9 +35,23 @@ module Graphiti
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
# See above comment
|
39
|
+
module ResourceForOverride
|
40
|
+
def resource_for(object, options, inferrer)
|
41
|
+
resource = object.instance_variable_get(:@__graphiti_resource)
|
42
|
+
klass = object.instance_variable_get(:@__graphiti_serializer)
|
43
|
+
klass.new(options.merge(object: object, resource: resource))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
38
47
|
JSONAPI::Serializable::Relationship
|
39
48
|
.send(:prepend, RelationshipOverrides)
|
40
|
-
|
41
|
-
|
49
|
+
|
50
|
+
if JSONAPI::Serializable.methods.include?(:resource_for)
|
51
|
+
JSONAPI::Serializable.singleton_class.send(:prepend, ResourceForOverride)
|
52
|
+
else
|
53
|
+
JSONAPI::Serializable::Renderer
|
54
|
+
.send(:prepend, RendererOverrides)
|
55
|
+
end
|
42
56
|
end
|
43
57
|
end
|
data/lib/graphiti/renderer.rb
CHANGED
@@ -45,7 +45,7 @@ module Graphiti
|
|
45
45
|
options[:expose][:proxy] = proxy
|
46
46
|
options[:include] = proxy.include_hash
|
47
47
|
options[:links] = proxy.pagination.links if proxy.pagination.links?
|
48
|
-
options[:meta] ||=
|
48
|
+
options[:meta] ||= proxy.meta
|
49
49
|
options[:meta][:stats] = proxy.stats unless proxy.stats.empty?
|
50
50
|
options[:meta][:debug] = Debugger.to_a if debug_json?
|
51
51
|
|
@@ -33,7 +33,6 @@ module Graphiti
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def jsonapi_render_options(opts = {})
|
36
|
-
opts[:meta] ||= {}
|
37
36
|
opts[:expose] ||= {}
|
38
37
|
opts[:expose][:context] = Graphiti.context[:object]
|
39
38
|
opts
|
@@ -64,6 +63,10 @@ module Graphiti
|
|
64
63
|
end
|
65
64
|
alias to_a data
|
66
65
|
|
66
|
+
def meta
|
67
|
+
@meta ||= data.respond_to?(:meta) ? data.meta : {}
|
68
|
+
end
|
69
|
+
|
67
70
|
def each(&blk)
|
68
71
|
to_a.each(&blk)
|
69
72
|
end
|
data/lib/graphiti/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphiti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.rc.
|
4
|
+
version: 1.0.rc.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Richmond
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsonapi-serializable
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|