jsonapi-rails-generator 0.5.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8f2fcab7b51d4259694c600c95a910b168352ff4268572c541ccb757087ae76f
4
+ data.tar.gz: b20853e4353a68f4aa32e767884750d5ad73f1bb9ebea6e2c74e67891152e8b1
5
+ SHA512:
6
+ metadata.gz: 8d8605c960285bed206ea87cc3c99d3596c8a30961631b520a2a185aa77cf5f900a5f1f64876a9fd65b69ead3c04fc4f6a5bd29d45f63617e5a0ac5e60131eb6
7
+ data.tar.gz: ee4fe467b544522faee9c22f73952e04369646377d4d2bedf9f58fee1ff2af1051dce7df06511f213085ba3efab37bc8dd474b35185e49df0b2e2fe1e89223f0
data/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # jsonapi-rails
2
+ Rails integration for [jsonapi-rb](http://jsonapi-rb.org).
3
+
4
+ ## Usage
5
+
6
+ * bundle exec rails g jsonapi:type Product
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Generates a serializable resource for the given model.
3
+
4
+ Example:
5
+ `rails generate jsonapi:serializable User`
@@ -0,0 +1,14 @@
1
+ <% module_namespacing do -%>
2
+ class <%= serializable_class_name %> < JSONAPI::Resource
3
+ immutable
4
+ <% attr_names.each do |attr| -%>
5
+ attribute :<%= attr %>
6
+ <% end -%>
7
+ <% has_one_rel_names.each do |rel| -%>
8
+ has_one :<%= rel %>
9
+ <% end -%>
10
+ <% has_many_rel_names.each do |rel| -%>
11
+ has_many :<%= rel %>
12
+ <% end -%>
13
+ end
14
+ <% end -%>
@@ -0,0 +1,49 @@
1
+ module Jsonapi
2
+ class TypeGenerator < ::Rails::Generators::NamedBase
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ # TODO(beauby): Implement generator-level whitelisting.
6
+ # TODO(beauby): Implement versioning.
7
+
8
+ def copy_serializable_file
9
+ template 'type.rb.erb',
10
+ File.join('app/resources', class_path,
11
+ "#{serializable_file_name}.rb")
12
+ end
13
+
14
+ private
15
+
16
+ def serializable_file_name
17
+ "#{file_name}_resouce"
18
+ end
19
+
20
+ def serializable_class_name
21
+ (class_path + [serializable_file_name]).map!(&:camelize).join("::")
22
+ end
23
+
24
+ def model_klass
25
+ # TODO(beauby): Ensure the model class exists.
26
+ class_name.safe_constantize
27
+ end
28
+
29
+ def type
30
+ model_klass.model_name.plural
31
+ end
32
+
33
+ def attr_names
34
+ attrs = model_klass.new.attribute_names - ['id']
35
+ fk_attrs = model_klass.reflect_on_all_associations(:belongs_to)
36
+ .map(&:foreign_key)
37
+ attrs - fk_attrs
38
+ end
39
+
40
+ def has_one_rel_names
41
+ model_klass.reflect_on_all_associations(:has_one).map(&:name) +
42
+ model_klass.reflect_on_all_associations(:belongs_to).map(&:name)
43
+ end
44
+
45
+ def has_many_rel_names
46
+ model_klass.reflect_on_all_associations(:has_many).map(&:name)
47
+ end
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jsonapi-rails-generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - hooopo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.6
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: with_model
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Efficient, convenient, non-intrusive JSONAPI framework for Rails.
98
+ email:
99
+ - hoooopo@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - README.md
105
+ - lib/generators/jsonapi/type/USAGE
106
+ - lib/generators/jsonapi/type/templates/type.rb.erb
107
+ - lib/generators/jsonapi/type/type_generator.rb
108
+ homepage: https://github.com/jsonapi-rb/jsonapi-rails
109
+ licenses:
110
+ - MIT
111
+ metadata: {}
112
+ post_install_message:
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubygems_version: 3.0.3
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: jsonapi-resource integrations for Rails.
131
+ test_files: []