json_schema_builder 0.0.6 → 0.1.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 +7 -0
- data/.travis.yml +4 -2
- data/Gemfile +1 -1
- data/{README.rdoc → README.md} +13 -6
- data/Rakefile +3 -3
- data/lib/schema_builder/railtie.rb +1 -1
- data/lib/schema_builder/version.rb +1 -1
- data/lib/schema_builder/writer.rb +14 -4
- data/spec/fixtures/ar_schema.rb +1 -1
- data/spec/schema_builder/writer_spec.rb +22 -7
- data/spec/spec_helper.rb +0 -1
- metadata +26 -51
- data/.rspec +0 -2
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0e7fff37867006fadd7e9eeb05cbccda42c33a53
|
4
|
+
data.tar.gz: 583a3e047a665906252b678ea8a99c6c7cb9fb35
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: be5c6c2757a458504b4e55ef1e5443139f6fe8d82c512cdc670b77ce751cb9f1ea493d20e12f35b7f8d21e83e2e68be1934f8c9b5a2b4952fbee63169822b2cc
|
7
|
+
data.tar.gz: 62877138244e2bad27e0950823741ed0a0f5e42f61a6b701fa1efee6670d587e8e2873ebc2b07c4b0fbcd8d08726d2701ce203cfa697051d7cc6e39766e1df46
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
gemspec
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
# JSON Schema Builder
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/salesking/json_schema_builder)
|
4
4
|
|
5
5
|
Build a JSON schema for your ActiveRecord models. STOP your API pains!
|
6
6
|
|
@@ -8,21 +8,28 @@ The created schema.json files are meant as stubs and need to be enriched with
|
|
8
8
|
field descriptions and names. You might also want to remove or add object
|
9
9
|
properties, since the gem only uses the available ActiveRecord database fields.
|
10
10
|
|
11
|
-
|
11
|
+
## Usage
|
12
12
|
|
13
13
|
Hook the gem into your rails app and create the schema files.
|
14
|
-
|
14
|
+
rake re
|
15
15
|
gem 'json_schema_builder'
|
16
|
-
|
17
16
|
rake schema:build
|
18
17
|
|
19
18
|
Your Models and their fields are written into JSON files which you can
|
20
19
|
pimp further.
|
21
20
|
|
22
|
-
|
21
|
+
## Supports
|
22
|
+
|
23
|
+
* ruby 1.9, 2.2
|
24
|
+
* active_record > 4 (use gem version < 0.1.0 for older versions)
|
25
|
+
|
26
|
+
## Test
|
23
27
|
|
24
28
|
bundle install
|
25
29
|
bundle exec rake spec
|
26
30
|
|
31
|
+
## Contribute
|
32
|
+
|
33
|
+
Feel free to fork and add features or fixes for other ActiveRecord versions
|
27
34
|
|
28
35
|
Copyright Georg Leciejewski, MIT License
|
data/Rakefile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
2
|
require 'rspec'
|
3
3
|
require 'rspec/core/rake_task'
|
4
4
|
|
5
5
|
desc 'Default: run specs.'
|
6
6
|
task :default => :spec
|
7
7
|
|
8
|
-
desc
|
8
|
+
desc 'Run specs'
|
9
9
|
RSpec::Core::RakeTask.new do |t|
|
10
|
-
t.pattern =
|
10
|
+
# t.pattern = './spec/**/*_spec.rb' # it's default.
|
11
11
|
# Put spec opts in a file named .rspec in root
|
12
12
|
end
|
@@ -15,10 +15,11 @@ module SchemaBuilder
|
|
15
15
|
out = {:new => [], :old => [] }
|
16
16
|
create_out_path
|
17
17
|
models_as_hash.each do |model|
|
18
|
-
file = File.join( out_path, "#{model['
|
18
|
+
file = File.join( out_path, "#{model['name']}.json")
|
19
19
|
if File.exist? file
|
20
20
|
out[:old] << file
|
21
21
|
else
|
22
|
+
FileUtils.mkdir_p(File.dirname(file))
|
22
23
|
File.open( file, 'w+' ) {|f| f.write(JSON.pretty_generate(model)) }
|
23
24
|
out[:new] << file
|
24
25
|
end
|
@@ -36,12 +37,13 @@ module SchemaBuilder
|
|
36
37
|
out = []
|
37
38
|
models.each do |model|
|
38
39
|
obj = schema_template
|
39
|
-
obj['
|
40
|
+
obj['name'] = model.name.underscore
|
41
|
+
obj['title'] = model.model_name.human
|
40
42
|
props = {}
|
41
43
|
model.columns_hash.each do |name, col|
|
42
44
|
prop = {}
|
43
45
|
prop['description'] = 'the field description'
|
44
|
-
prop['identity'] = true if
|
46
|
+
prop['identity'] = true if model.primary_key.to_s == name
|
45
47
|
set_readonly(name,prop)
|
46
48
|
set_type(col.type, prop)
|
47
49
|
set_format(col.type, prop)
|
@@ -81,7 +83,13 @@ module SchemaBuilder
|
|
81
83
|
reqs = route.requirements
|
82
84
|
next if reqs.empty? ||
|
83
85
|
skip_contrl.detect{|c| reqs[:controller][c] } ||
|
84
|
-
skip_actions.detect{|a|
|
86
|
+
skip_actions.detect{|a|
|
87
|
+
if reqs[:action].is_a?(Hash)
|
88
|
+
reqs[:action][a]
|
89
|
+
elsif reqs[:action].is_a?(Regexp)
|
90
|
+
reqs[:action].match(a)
|
91
|
+
end
|
92
|
+
}
|
85
93
|
|
86
94
|
# setup links ary
|
87
95
|
out[ reqs[:controller] ] = [] unless out[reqs[:controller]]
|
@@ -114,6 +122,8 @@ module SchemaBuilder
|
|
114
122
|
Dir.glob( model_path ).each { |file| require file }
|
115
123
|
model_names = Module.constants.select { |c| (eval "#{c}").is_a?(Class) && (eval "#{c}") < ::ActiveRecord::Base }
|
116
124
|
model_names.map{|i| "#{i}".constantize}
|
125
|
+
#::Rails.application.eager_load!
|
126
|
+
#ActiveRecord::Base.descendants
|
117
127
|
end
|
118
128
|
|
119
129
|
def create_out_path
|
data/spec/fixtures/ar_schema.rb
CHANGED
@@ -7,17 +7,32 @@ describe SchemaBuilder::Writer do
|
|
7
7
|
@writer = SchemaBuilder::Writer.new
|
8
8
|
end
|
9
9
|
it 'should get model_path' do
|
10
|
-
@writer.model_path.
|
10
|
+
expect(@writer.model_path).to eq "#{Dir.pwd}/app/models/**/*.rb"
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'should set model_path' do
|
14
14
|
path = 'some/model-folder/*.*.rb'
|
15
15
|
@writer.model_path = path
|
16
|
-
@writer.model_path.
|
16
|
+
expect(@writer.model_path).to eq path
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should get models' do
|
20
|
-
@writer.models.
|
20
|
+
expect(@writer.models).to include(User)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'model naming' do
|
25
|
+
before :each do
|
26
|
+
@writer = SchemaBuilder::Writer.new
|
27
|
+
@user_hash = @writer.models_as_hash.first
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should set title to model human name' do
|
31
|
+
expect(@user_hash['title']).to eq 'User'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should set name to lowercase model name' do
|
35
|
+
expect(@user_hash['name']).to eq 'user'
|
21
36
|
end
|
22
37
|
end
|
23
38
|
|
@@ -31,16 +46,16 @@ describe SchemaBuilder::Writer do
|
|
31
46
|
end
|
32
47
|
|
33
48
|
it 'should write file' do
|
34
|
-
File.exist?( @file_path ).
|
49
|
+
expect(File.exist?( @file_path )).to be
|
35
50
|
File.delete @file_path
|
36
51
|
end
|
37
52
|
|
38
53
|
it 'should write valid json' do
|
39
54
|
hsh = JSON.parse( File.read @file_path)
|
40
|
-
hsh['type'].
|
41
|
-
hsh['title'].
|
55
|
+
expect(hsh['type']).to eq 'object'
|
56
|
+
expect(hsh['title']).to eq 'User'
|
42
57
|
field_names = hsh['properties'].keys
|
43
|
-
field_names.
|
58
|
+
expect(field_names).to include 'id', 'number', 'birthday', 'is_admin', 'notes'
|
44
59
|
end
|
45
60
|
end
|
46
61
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,142 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_schema_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Georg Leciejewski
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-01-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: json
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: gli
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: activesupport
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: rspec
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: activerecord
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - ">="
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: sqlite3
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - ">="
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - ">="
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
description: The first step to a clean and simple API is a unified API description
|
@@ -148,11 +131,10 @@ executables:
|
|
148
131
|
extensions: []
|
149
132
|
extra_rdoc_files: []
|
150
133
|
files:
|
151
|
-
- .gitignore
|
152
|
-
- .
|
153
|
-
- .travis.yml
|
134
|
+
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
154
136
|
- Gemfile
|
155
|
-
- README.
|
137
|
+
- README.md
|
156
138
|
- Rakefile
|
157
139
|
- bin/schema
|
158
140
|
- json_schema_builder.gemspec
|
@@ -168,33 +150,26 @@ files:
|
|
168
150
|
- spec/spec_helper.rb
|
169
151
|
homepage: http://www.salesking.eu/dev
|
170
152
|
licenses: []
|
153
|
+
metadata: {}
|
171
154
|
post_install_message:
|
172
155
|
rdoc_options: []
|
173
156
|
require_paths:
|
174
157
|
- lib
|
175
158
|
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
-
none: false
|
177
159
|
requirements:
|
178
|
-
- -
|
160
|
+
- - ">="
|
179
161
|
- !ruby/object:Gem::Version
|
180
162
|
version: '0'
|
181
|
-
segments:
|
182
|
-
- 0
|
183
|
-
hash: -51753238081111492
|
184
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
164
|
requirements:
|
187
|
-
- -
|
165
|
+
- - ">="
|
188
166
|
- !ruby/object:Gem::Version
|
189
167
|
version: '0'
|
190
|
-
segments:
|
191
|
-
- 0
|
192
|
-
hash: -51753238081111492
|
193
168
|
requirements: []
|
194
169
|
rubyforge_project:
|
195
|
-
rubygems_version:
|
170
|
+
rubygems_version: 2.4.8
|
196
171
|
signing_key:
|
197
|
-
specification_version:
|
172
|
+
specification_version: 4
|
198
173
|
summary: A good API needs JSON Schema description! Get it right and build JSON Schemata
|
199
174
|
for your ActiveRecord models
|
200
175
|
test_files: []
|
data/.rspec
DELETED