json_schema_builder 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,4 +1,6 @@
1
+ # force a recent version as long as the default is too old
2
+ before_install:
3
+ - gem install bundler -v 1.11
1
4
  rvm:
2
- - 1.8.7
3
- - 1.9.2
5
+ - 2.2
4
6
  - 1.9.3
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source "https://rubygems.org"
2
2
  gemspec
@@ -1,6 +1,6 @@
1
- = JSON Schema Builder
1
+ # JSON Schema Builder
2
2
 
3
- {<img src="https://secure.travis-ci.org/salesking/json_schema_builder.png?branch=master" alt="Build Status" />}[http://travis-ci.org/salesking/json_schema_builder]
3
+ [![Build Status](https://travis-ci.org/salesking/json_schema_builder.svg)](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
- == Usage
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
- == Test
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 "bundler/gem_tasks"
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 "Run specs"
8
+ desc 'Run specs'
9
9
  RSpec::Core::RakeTask.new do |t|
10
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
10
+ # t.pattern = './spec/**/*_spec.rb' # it's default.
11
11
  # Put spec opts in a file named .rspec in root
12
12
  end
@@ -1,7 +1,7 @@
1
1
  module SchemaBuilder
2
2
  class Railtie < ::Rails::Railtie
3
3
  rake_tasks do
4
- require "schema_builder/tasks"
4
+ require 'schema_builder/tasks'
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaBuilder
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  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['title'].downcase}.json")
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['title'] = model.name
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 col.primary
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| reqs[:action][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
@@ -8,6 +8,6 @@ ActiveRecord::Schema.define(:version => 0) do
8
8
  t.boolean :is_admin
9
9
  t.text :notes
10
10
  t.date :birthday
11
- t.timestamps
11
+ t.timestamps null: false
12
12
  end
13
13
  end
@@ -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.should == "#{Dir.pwd}/app/models/**/*.rb"
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.should == path
16
+ expect(@writer.model_path).to eq path
17
17
  end
18
18
 
19
19
  it 'should get models' do
20
- @writer.models.should include(User)
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 ).should be
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'].should == 'object'
41
- hsh['title'].should == 'User'
55
+ expect(hsh['type']).to eq 'object'
56
+ expect(hsh['title']).to eq 'User'
42
57
  field_names = hsh['properties'].keys
43
- field_names.should include 'id', 'number', 'birthday', 'is_admin', 'notes'
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
@@ -15,7 +15,6 @@ require 'json_schema_builder'
15
15
  require 'fixtures/user'
16
16
 
17
17
  RSpec.configure do |config|
18
- config.treat_symbols_as_metadata_keys_with_true_values = true
19
18
  config.run_all_when_everything_filtered = true
20
19
  config.filter_run :focus
21
20
  config.after(:all) do
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.6
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: 2012-07-01 00:00:00.000000000 Z
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
- - .rspec
153
- - .travis.yml
134
+ - ".gitignore"
135
+ - ".travis.yml"
154
136
  - Gemfile
155
- - README.rdoc
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: 1.8.24
170
+ rubygems_version: 2.4.8
196
171
  signing_key:
197
- specification_version: 3
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
@@ -1,2 +0,0 @@
1
- --color
2
- --format progress