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 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