json_schema_view 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +58 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +18 -0
- data/LICENSE.md +202 -0
- data/README.md +117 -0
- data/Rakefile +12 -0
- data/json_schema_view.gemspec +42 -0
- data/lib/json_schema_view/base_component.rb +82 -0
- data/lib/json_schema_view/base_props.rb +32 -0
- data/lib/json_schema_view/configuration/schema_set_dictionary.rb +51 -0
- data/lib/json_schema_view/configuration.rb +44 -0
- data/lib/json_schema_view/json_schema_definable.rb +22 -0
- data/lib/json_schema_view/json_world_extensions/additional_properties.rb +58 -0
- data/lib/json_schema_view/json_world_extensions/any_of.rb +41 -0
- data/lib/json_schema_view/json_world_extensions/camelizable.rb +36 -0
- data/lib/json_schema_view/json_world_extensions/compact_optional_properties.rb +20 -0
- data/lib/json_schema_view/json_world_extensions/constant_property.rb +39 -0
- data/lib/json_schema_view/json_world_extensions/declarable.rb +55 -0
- data/lib/json_schema_view/json_world_extensions/enum_type.rb +45 -0
- data/lib/json_schema_view/json_world_extensions/map_type.rb +47 -0
- data/lib/json_schema_view/json_world_extensions/validatable.rb +17 -0
- data/lib/json_schema_view/json_world_extensions.rb +31 -0
- data/lib/json_schema_view/rails/generators/install/USAGE +5 -0
- data/lib/json_schema_view/rails/generators/install/install_generator.rb +50 -0
- data/lib/json_schema_view/rails/generators/install/templates/base_component.rb.tt +17 -0
- data/lib/json_schema_view/rails/generators/install/templates/base_props.rb.tt +7 -0
- data/lib/json_schema_view/rails/generators/install/templates/component_schema_set.rb.tt +25 -0
- data/lib/json_schema_view/rails/generators/install/templates/example/todo_item_resource.rb +52 -0
- data/lib/json_schema_view/rails/generators/install/templates/example/todo_list_component.rb +67 -0
- data/lib/json_schema_view/rails/generators/install/templates/initializer.rb.tt +15 -0
- data/lib/json_schema_view/rails/generators.rb +8 -0
- data/lib/json_schema_view/rails/rails_engine.rb +20 -0
- data/lib/json_schema_view/rails/tasks/json_schema_component.rake +9 -0
- data/lib/json_schema_view/rails.rb +8 -0
- data/lib/json_schema_view/renderers/base.rb +27 -0
- data/lib/json_schema_view/renderers/json.rb +28 -0
- data/lib/json_schema_view/renderers/react_on_rails.rb +17 -0
- data/lib/json_schema_view/renderers.rb +22 -0
- data/lib/json_schema_view/schema_set/constant_search_helper.rb +114 -0
- data/lib/json_schema_view/schema_set.rb +58 -0
- data/lib/json_schema_view/version.rb +5 -0
- data/lib/json_schema_view.rb +29 -0
- data/sig/json_schema_view.rbs +4 -0
- metadata +134 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json_schema_view"
|
4
|
+
|
5
|
+
# This is an example definition of a component.
|
6
|
+
#
|
7
|
+
# @example You can use this component in a view like following code:
|
8
|
+
# todo_items = [{ title: "Buy milk", done: false }, { title: "Buy eggs", done: true, note: "Large eggs are better" }]
|
9
|
+
# render ExampleTodoListComponent.new(props: { todo_items: todo_items })
|
10
|
+
#
|
11
|
+
# @example Extract the JSON Schema of this component:
|
12
|
+
# ExampleTodoListComponent.props_class.to_json_schema
|
13
|
+
# # => {
|
14
|
+
# "properties": {
|
15
|
+
# "type": "array",
|
16
|
+
# "items": {
|
17
|
+
# "type": "object",
|
18
|
+
# "properties": {
|
19
|
+
# "name": {
|
20
|
+
# "description": "The title of TODO item.",
|
21
|
+
# "type": "string"
|
22
|
+
# },
|
23
|
+
# "done": {
|
24
|
+
# "description": "Whether the TODO item is done or not.",
|
25
|
+
# "type": ["boolean"]
|
26
|
+
# },
|
27
|
+
# "note": {
|
28
|
+
# "description": "The additional description of TODO item.",
|
29
|
+
# "type": ["string"]
|
30
|
+
# }
|
31
|
+
# },
|
32
|
+
# "required": ["name", "done"],
|
33
|
+
# "additionalProperties": false
|
34
|
+
# }
|
35
|
+
# }
|
36
|
+
# "required": ["todo_items"],
|
37
|
+
# "additionalProperties": false
|
38
|
+
# }
|
39
|
+
#
|
40
|
+
class ExampleTodoListComponent < BaseComponent
|
41
|
+
# props_class defines the properties class for the component.
|
42
|
+
# properties class is a special form of {JsonSchemaDefinable}. its instance is used by renderer to render component's content.
|
43
|
+
props_class do
|
44
|
+
# Some class methods (properties, description, additional_properties, etc.) are provided to define the JSON Schema of the class.
|
45
|
+
# Property
|
46
|
+
#
|
47
|
+
# @see https://json-schema.org/understanding-json-schema/reference/object.html#properties
|
48
|
+
property(
|
49
|
+
:todo_items,
|
50
|
+
# To type keyword, you can pass some primitive classes (String, Integer, TrueClass, Array, ...etc), a hash representing JSON Schema, an {JsonSchemaDefinable}.
|
51
|
+
type: Array,
|
52
|
+
item: {
|
53
|
+
type: TodoItemResource
|
54
|
+
},
|
55
|
+
)
|
56
|
+
|
57
|
+
# @param todo_items [Array<Hash>] An array of todo items ({ name: String, done: Boolean, note: String or nil }).
|
58
|
+
def initialize(todo_items:)
|
59
|
+
@todo_items = todo_items
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [Array<ExampleTodoItemResource>]
|
63
|
+
def todo_items
|
64
|
+
@todo_items.map { |todo_item| ExampleTodoItemResource.new(todo_item) }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json_schema_view"
|
4
|
+
|
5
|
+
Rails.application.config.autoload_paths += [Rails.root.join("<%= components_path %>")]
|
6
|
+
|
7
|
+
# You can export your components' schemas by running:
|
8
|
+
#
|
9
|
+
# $ rake json_schema_view:export:primary
|
10
|
+
Rails.application.config.json_schema_view.schema_sets = {
|
11
|
+
"primary": "<%= schema_set_class_name %>",
|
12
|
+
}
|
13
|
+
|
14
|
+
# Validate component with its schema on render.
|
15
|
+
Rails.application.config.json_schema_view.validate_by_default = true
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails"
|
4
|
+
|
5
|
+
module JsonSchemaView
|
6
|
+
# :nodoc:
|
7
|
+
class RailsEngine < ::Rails::Engine
|
8
|
+
rake_tasks do
|
9
|
+
load "json_schema_view/rails/tasks/json_schema_view.rake"
|
10
|
+
end
|
11
|
+
|
12
|
+
generators do
|
13
|
+
require_relative "generators"
|
14
|
+
end
|
15
|
+
|
16
|
+
config.before_configuration do
|
17
|
+
Rails.application.config.json_schema_view = Configuration.instance
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :json_schema_view do
|
4
|
+
desc "Export json schemas in the specified schema set"
|
5
|
+
task :export, [:schema_set] => [:environment] do |_task, args|
|
6
|
+
schema_set = JsonSchemaView.configuration.schema_sets.fetch_instance(args[:schema_set])
|
7
|
+
schema_set.export_json_schemas(print_logs: true)
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JsonSchemaView
|
4
|
+
module Renderers
|
5
|
+
# Render {BaseComponent} in a view.
|
6
|
+
# @abstract
|
7
|
+
class Base
|
8
|
+
# @return [BaseComponent]
|
9
|
+
attr_reader :component
|
10
|
+
|
11
|
+
# @param component [BaseComponent] The component to render.
|
12
|
+
def initialize(component)
|
13
|
+
@component = component
|
14
|
+
end
|
15
|
+
|
16
|
+
# Render the React component by using react_on_rails.
|
17
|
+
# This method is used by {ActionView::Template::Renderable}.
|
18
|
+
#
|
19
|
+
# @see https://guides.rubyonrails.org/layouts_and_rendering.html#rendering-objects
|
20
|
+
# @param view_content [Object]
|
21
|
+
# @return [String]
|
22
|
+
def render_in(view_context)
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module JsonSchemaView
|
6
|
+
module Renderers
|
7
|
+
# Render {BaseComponent} as json.
|
8
|
+
class Json < Base
|
9
|
+
# Render the React component by using react_on_rails.
|
10
|
+
# This method is used by {ActionView::Template::Renderable}.
|
11
|
+
#
|
12
|
+
# @param view_content [Object]
|
13
|
+
# @return [String]
|
14
|
+
def render_in(view_context)
|
15
|
+
view_context.render
|
16
|
+
view_context.render(json: component.props.to_json)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the content type of the response.
|
20
|
+
# This method is used by {ActionView::Template::Renderable}.
|
21
|
+
#
|
22
|
+
# @return [Symbol]
|
23
|
+
def format
|
24
|
+
:json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module JsonSchemaView
|
6
|
+
module Renderers
|
7
|
+
# Render a React component by using {https://github.com/shakacode/react_on_rails}.
|
8
|
+
class ReactOnRails < Base
|
9
|
+
# @param view_content [Object]
|
10
|
+
# @param options (see ReactOnRailsHelper#react_component)
|
11
|
+
# @return [String]
|
12
|
+
def render_in(view_context, **options)
|
13
|
+
view_context.react_component(component.component_name, props: component.props.as_json, **options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JsonSchemaView
|
4
|
+
# Renderers module contains classes that render a component.
|
5
|
+
module Renderers
|
6
|
+
require_relative "renderers/base"
|
7
|
+
require_relative "renderers/json"
|
8
|
+
require_relative "renderers/react_on_rails"
|
9
|
+
|
10
|
+
# @param name [Symbol]
|
11
|
+
def self.find_by_name(name)
|
12
|
+
case name
|
13
|
+
when :json
|
14
|
+
Json
|
15
|
+
when :react_on_rails
|
16
|
+
ReactOnRails
|
17
|
+
else
|
18
|
+
raise ArgumentError, "Unknown renderer: #{name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
require "pathname"
|
5
|
+
|
6
|
+
module JsonSchemaView
|
7
|
+
class SchemaSet
|
8
|
+
# Add methods to search constants in the directory to SchemaSet.
|
9
|
+
module ConstantSearchHelper
|
10
|
+
# @return [Array<Class<BaseComponent>>]
|
11
|
+
def search_component_classes(path_pattern: nil)
|
12
|
+
constants = path_pattern ? search_constants(path_pattern) : all_constants
|
13
|
+
constants.select { |const| const.is_a?(Class) && const < JsonSchemaView::BaseComponent }
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Array<Class, Module>]
|
17
|
+
def search_constants(path_pattern: "**/*.rb")
|
18
|
+
loader = ConstantAutoLoader.from_rails_app
|
19
|
+
|
20
|
+
root_pathname = Pathname.new(root_path)
|
21
|
+
Dir.glob(path_pattern, base: root_path).filter_map do |path|
|
22
|
+
path = root_pathname.join(path)
|
23
|
+
loader.load_constant_by_path(path)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Array<Class, Module>]
|
28
|
+
def all_constants
|
29
|
+
@all_constants ||= search_constants(path_pattern: "**/*.rb")
|
30
|
+
end
|
31
|
+
|
32
|
+
# Load corresponding constant for the path by using Rails's autoloader.
|
33
|
+
class ConstantAutoLoader
|
34
|
+
# @return [ConstantAutoLoader]
|
35
|
+
def self.from_rails_app
|
36
|
+
autoload_paths = [
|
37
|
+
*Rails.application.config.eager_load_paths,
|
38
|
+
*Rails.application.config.autoload_once_paths,
|
39
|
+
*Rails.application.config.autoload_paths
|
40
|
+
]
|
41
|
+
|
42
|
+
new(autoload_paths: autoload_paths)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Array<Pathname>]
|
46
|
+
attr_reader :autoload_paths
|
47
|
+
|
48
|
+
# @param autoload_paths [Array<String>]
|
49
|
+
def initialize(autoload_paths:)
|
50
|
+
@autoload_paths = autoload_paths.map { |path| Pathname.new(path) }
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param path [String, Pathname]
|
54
|
+
# @return [Object]
|
55
|
+
def load_constant_by_path(path)
|
56
|
+
autoload_base_path = nearest_autoload_path(path)
|
57
|
+
return nil unless autoload_base_path
|
58
|
+
|
59
|
+
rel_path = child_path(path, autoload_base_path)
|
60
|
+
return nil unless rel_path
|
61
|
+
|
62
|
+
ActiveSupport::Inflector.safe_constantize(constant_name_from_path(rel_path))
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# @param path [Pathname]
|
68
|
+
# @return [String]
|
69
|
+
def constant_name_from_path(path)
|
70
|
+
path = remove_extname(path)
|
71
|
+
classified = ActiveSupport::Inflector.classify(path.to_s)
|
72
|
+
|
73
|
+
# Make absolute constant path
|
74
|
+
if classified.start_with?("::")
|
75
|
+
classified == "::" ? "::Object" : classified
|
76
|
+
else
|
77
|
+
"::#{classified}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param path [Pathname]
|
82
|
+
# @return [Pathname]
|
83
|
+
def remove_extname(path)
|
84
|
+
# Repeat for the case of multiple extensions (e.g. .min.rb)
|
85
|
+
until path.extname.empty?
|
86
|
+
removed = path.to_s.delete_suffix(path.extname)
|
87
|
+
path = Pathname.new(removed)
|
88
|
+
end
|
89
|
+
|
90
|
+
path
|
91
|
+
end
|
92
|
+
|
93
|
+
# @param path [String]
|
94
|
+
# @return [Pathname, nil]
|
95
|
+
def nearest_autoload_path(path)
|
96
|
+
matches = autoload_paths.filter_map do |autoload_path|
|
97
|
+
rel_path = child_path(path, autoload_path)
|
98
|
+
rel_path && [autoload_path, rel_path]
|
99
|
+
end
|
100
|
+
matches.min_by { |(_autoload_path, rel_path)| rel_path.to_s.length }&.first
|
101
|
+
end
|
102
|
+
|
103
|
+
# @param path [Pathname]
|
104
|
+
# @param dir_path [Pathname]
|
105
|
+
# @return [Pathname, nil]
|
106
|
+
def child_path(path, base_dir_path)
|
107
|
+
path = Pathname.new(path).realpath
|
108
|
+
relative_path = path.relative_path_from(base_dir_path)
|
109
|
+
relative_path.to_s.start_with?("../") ? nil : relative_path
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
require "forwardable"
|
5
|
+
require "pathname"
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
module JsonSchemaView
|
9
|
+
# Builder build components
|
10
|
+
class SchemaSet
|
11
|
+
require_relative "schema_set/constant_search_helper"
|
12
|
+
|
13
|
+
include ConstantSearchHelper
|
14
|
+
|
15
|
+
# @abstract
|
16
|
+
# @return [String]
|
17
|
+
def root_path
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
20
|
+
|
21
|
+
# @abstract
|
22
|
+
# @return [String]
|
23
|
+
def export_path
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Array<Class<JsonSchemaDefinable>>]
|
28
|
+
def resource_classes_to_export
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [void]
|
33
|
+
def export_json_schemas(print_logs: false)
|
34
|
+
puts "Exports resource classes in #{self.class.name}..." if print_logs
|
35
|
+
export_pathname = Pathname.new(export_path)
|
36
|
+
|
37
|
+
exports = resource_classes_to_export.map do |resource_class|
|
38
|
+
destination = export_pathname.join("#{resource_class.name.demodulize}.json")
|
39
|
+
klass = resource_class < JsonSchemaView::BaseComponent ? resource_class.props_class : resource_class
|
40
|
+
|
41
|
+
[destination, resource_class, klass.to_json_schema]
|
42
|
+
end
|
43
|
+
|
44
|
+
clear_export_path
|
45
|
+
|
46
|
+
exports.each do |destination, resource_class, json_schema|
|
47
|
+
FileUtils.mkdir_p(destination.dirname)
|
48
|
+
destination.write(json_schema)
|
49
|
+
puts "#{resource_class.name} -> #{destination}" if print_logs
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [void]
|
54
|
+
def clear_export_path
|
55
|
+
FileUtils.rm_rf(export_path) if Dir.exist?(export_path)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
|
5
|
+
require_relative "json_schema_view/json_schema_definable"
|
6
|
+
require_relative "json_schema_view/base_component"
|
7
|
+
require_relative "json_schema_view/base_props"
|
8
|
+
require_relative "json_schema_view/configuration"
|
9
|
+
require_relative "json_schema_view/json_world_extensions"
|
10
|
+
require_relative "json_schema_view/rails"
|
11
|
+
require_relative "json_schema_view/renderers"
|
12
|
+
require_relative "json_schema_view/schema_set"
|
13
|
+
require_relative "json_schema_view/version"
|
14
|
+
|
15
|
+
# A view library with JSON Schema.
|
16
|
+
module JsonSchemaView
|
17
|
+
class << self
|
18
|
+
# @yield (see JsonSchemaView::Configuration.configure)
|
19
|
+
# @yieldparam (see JsonSchemaView::Configuration.configure)
|
20
|
+
def configure(&block)
|
21
|
+
Configuration.configure(&block)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [JsonSchemaView::Configuration]
|
25
|
+
def configuration
|
26
|
+
Configuration.instance
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: json_schema_view
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tomoya Chiba
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-12-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json-schema
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json_world
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A view library with JSON Schema
|
56
|
+
email:
|
57
|
+
- tomo.asleep@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".rspec"
|
63
|
+
- ".rubocop.yml"
|
64
|
+
- ".yardopts"
|
65
|
+
- CHANGELOG.md
|
66
|
+
- CODE_OF_CONDUCT.md
|
67
|
+
- Gemfile
|
68
|
+
- LICENSE.md
|
69
|
+
- README.md
|
70
|
+
- Rakefile
|
71
|
+
- json_schema_view.gemspec
|
72
|
+
- lib/json_schema_view.rb
|
73
|
+
- lib/json_schema_view/base_component.rb
|
74
|
+
- lib/json_schema_view/base_props.rb
|
75
|
+
- lib/json_schema_view/configuration.rb
|
76
|
+
- lib/json_schema_view/configuration/schema_set_dictionary.rb
|
77
|
+
- lib/json_schema_view/json_schema_definable.rb
|
78
|
+
- lib/json_schema_view/json_world_extensions.rb
|
79
|
+
- lib/json_schema_view/json_world_extensions/additional_properties.rb
|
80
|
+
- lib/json_schema_view/json_world_extensions/any_of.rb
|
81
|
+
- lib/json_schema_view/json_world_extensions/camelizable.rb
|
82
|
+
- lib/json_schema_view/json_world_extensions/compact_optional_properties.rb
|
83
|
+
- lib/json_schema_view/json_world_extensions/constant_property.rb
|
84
|
+
- lib/json_schema_view/json_world_extensions/declarable.rb
|
85
|
+
- lib/json_schema_view/json_world_extensions/enum_type.rb
|
86
|
+
- lib/json_schema_view/json_world_extensions/map_type.rb
|
87
|
+
- lib/json_schema_view/json_world_extensions/validatable.rb
|
88
|
+
- lib/json_schema_view/rails.rb
|
89
|
+
- lib/json_schema_view/rails/generators.rb
|
90
|
+
- lib/json_schema_view/rails/generators/install/USAGE
|
91
|
+
- lib/json_schema_view/rails/generators/install/install_generator.rb
|
92
|
+
- lib/json_schema_view/rails/generators/install/templates/base_component.rb.tt
|
93
|
+
- lib/json_schema_view/rails/generators/install/templates/base_props.rb.tt
|
94
|
+
- lib/json_schema_view/rails/generators/install/templates/component_schema_set.rb.tt
|
95
|
+
- lib/json_schema_view/rails/generators/install/templates/example/todo_item_resource.rb
|
96
|
+
- lib/json_schema_view/rails/generators/install/templates/example/todo_list_component.rb
|
97
|
+
- lib/json_schema_view/rails/generators/install/templates/initializer.rb.tt
|
98
|
+
- lib/json_schema_view/rails/rails_engine.rb
|
99
|
+
- lib/json_schema_view/rails/tasks/json_schema_component.rake
|
100
|
+
- lib/json_schema_view/renderers.rb
|
101
|
+
- lib/json_schema_view/renderers/base.rb
|
102
|
+
- lib/json_schema_view/renderers/json.rb
|
103
|
+
- lib/json_schema_view/renderers/react_on_rails.rb
|
104
|
+
- lib/json_schema_view/schema_set.rb
|
105
|
+
- lib/json_schema_view/schema_set/constant_search_helper.rb
|
106
|
+
- lib/json_schema_view/version.rb
|
107
|
+
- sig/json_schema_view.rbs
|
108
|
+
homepage: https://github.com/increments/json_schema_view
|
109
|
+
licenses:
|
110
|
+
- Apache-2.0
|
111
|
+
metadata:
|
112
|
+
homepage_uri: https://github.com/increments/json_schema_view
|
113
|
+
source_code_uri: https://github.com/increments/json_schema_view
|
114
|
+
changelog_uri: https://github.com/increments/json_schema_view/blob/main/CHANGELOG.md
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 2.7.0
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubygems_version: 3.3.7
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: A view library with JSON Schema
|
134
|
+
test_files: []
|