json_schema_builder 0.0.3 → 0.0.4

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.
data/README.rdoc CHANGED
@@ -14,7 +14,7 @@ Hook the gem into your rails app and create the schema files.
14
14
 
15
15
  gem 'json_schema_builder'
16
16
 
17
- schema build
17
+ rake schema:build
18
18
 
19
19
  Your Models and their fields are written into JSON files which you can
20
20
  pimp further.
data/bin/schema CHANGED
@@ -6,12 +6,12 @@ require 'json_schema_builder'
6
6
  require 'gli'
7
7
  include GLI
8
8
 
9
- version JsonSchemaBuilder::VERSION
9
+ version SchemaBuilder::VERSION
10
10
 
11
- desc "Creates schema file in current directory/json-schema/*.json"
11
+ desc "Create schema files in json-schema/*.json"
12
12
  command :build do |c|
13
13
  c.action do |global_options, options, args|
14
- builder = JsonSchemaBuilder::Writer.new
14
+ builder = SchemaBuilder::Writer.new
15
15
  builder.write
16
16
  end
17
17
  end
@@ -1,15 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "json_schema_builder/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'schema_builder/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "json_schema_builder"
7
- s.version = JsonSchemaBuilder::VERSION
8
- s.authors = ["Georg Leciejewski"]
9
- s.email = ["gl@salesking.eu"]
10
- s.homepage = "http://www.salesking.eu"
11
- s.summary = %q{Build JSON Schema fields for ActiveRecord models}
12
- s.description = %q{Build JSON Schema fields for ActiveRecord models}
6
+ s.name = 'json_schema_builder'
7
+ s.version = SchemaBuilder::VERSION
8
+ s.authors = ['Georg Leciejewski']
9
+ s.email = ['gl@salesking.eu']
10
+ s.homepage = 'http://www.salesking.eu/dev'
11
+ s.summary = %q{A good API needs JSON Schema description! Get it right and build JSON Schemata for your ActiveRecord models}
12
+ s.description = %q{The first step to a clean and simple API is a unified API description in form of a shared JSON Schema}
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,5 +1 @@
1
- require 'json'
2
- require 'json_schema_builder/version'
3
- require 'json_schema_builder/writer'
4
-
5
- module JsonSchemaBuilder;end
1
+ require 'schema_builder'
@@ -0,0 +1,7 @@
1
+ module SchemaBuilder
2
+ class Railtie < ::Rails::Railtie
3
+ rake_tasks do
4
+ require "schema_builder/tasks"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ namespace :schema do
2
+ rails_env = ENV['RAILS_ENV'] || 'development'
3
+ desc "create schema files in json-schema/*.json"
4
+ task :build do |t,args|
5
+ if defined?(Rails) && Rails.respond_to?(:application)
6
+ # Rails 3
7
+ Rails.application.initialize!
8
+ elsif defined?(Rails::Initializer)
9
+ # Rails 2.3 .. untested
10
+ $rails_rake_task = false
11
+ Rails::Initializer.run :load_application_classes
12
+ end
13
+ builder = SchemaBuilder::Writer.new
14
+ builder.write
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module SchemaBuilder
2
+ VERSION = "0.0.4"
3
+ end
@@ -1,22 +1,29 @@
1
1
  require 'active_record'
2
- module JsonSchemaBuilder
2
+ module SchemaBuilder
3
3
 
4
4
  # Create json schema files for each model in
5
5
  # Rails.root/json-schema/modelName.json
6
6
  # @example
7
- # builder = JsonSchemaBuilder::Writer.new
7
+ # builder = SchemaBuilder::Writer.new
8
8
  # builder.write
9
9
  class Writer
10
10
 
11
11
  def write
12
- res = []
13
- create_file_path
12
+ out = {new: [], old: [] }
13
+ create_out_path
14
14
  models_as_hash.each do |model|
15
15
  file = File.join( out_path, "#{model['title'].downcase}.json")
16
- File.open( file, 'w+' ) {|f| f.write(JSON.pretty_generate(model)) }
17
- res << "#{file} created"
16
+ if File.exist? file
17
+ out[:old] << file
18
+ else
19
+ File.open( file, 'w+' ) {|f| f.write(JSON.pretty_generate(model)) }
20
+ out[:new] << "#{file} created"
21
+ end
18
22
  end
19
- puts res.join("\n")
23
+ puts "== Existing Files ==\n" unless out[:old].empty?
24
+ puts out[:old].join("\n")
25
+ puts "== New Files ==\n"
26
+ puts out[:new].join("\n")
20
27
  end
21
28
 
22
29
  def models_as_hash
@@ -54,20 +61,19 @@ module JsonSchemaBuilder
54
61
  hsh
55
62
  end
56
63
 
57
- # @return [Array<ActiveRecord::Base>] AR::Base descendant models
64
+ # @return [Array<Class>] classes(models) descending from ActiveRecord::Base
58
65
  def models
59
- # require so they are in module scope
60
66
  Dir.glob( model_path ).each { |file| require file }
61
67
  model_names = Module.constants.select { |c| (eval "#{c}").is_a?(Class) && (eval "#{c}") < ::ActiveRecord::Base }
62
68
  model_names.map{|i| "#{i}".constantize}
63
69
  end
64
70
 
65
- def create_file_path
71
+ def create_out_path
66
72
  FileUtils.mkdir_p(out_path) unless File.exists?(out_path)
67
73
  end
68
74
 
69
75
  def model_path
70
- @model_path ||= File.join( Dir.pwd, 'app/models', '**/*.rb')
76
+ @model_path ||= File.join( base_path, 'app/models', '**/*.rb')
71
77
  end
72
78
 
73
79
  # Set the model path
@@ -78,7 +84,7 @@ module JsonSchemaBuilder
78
84
 
79
85
  # Path to write json files
80
86
  def out_path
81
- @out_path ||= File.join( Dir.pwd, 'json-schema')
87
+ @out_path ||= File.join( base_path, 'json-schema')
82
88
  end
83
89
 
84
90
  # @param [String] path to json schema files
@@ -86,6 +92,15 @@ module JsonSchemaBuilder
86
92
  @out_path = path
87
93
  end
88
94
 
95
+ # Base path to application/framework e.g. Rails.root.
96
+ # Default to current working dir
97
+ def base_path
98
+ @base_path ||= Dir.pwd
99
+ end
100
+ def base_path=(path)
101
+ @base_path = path
102
+ end
103
+
89
104
  private
90
105
 
91
106
  # Set the type of the field property
@@ -112,11 +127,11 @@ module JsonSchemaBuilder
112
127
  # @param [Symbol] col_type derived from ActiveRecord model
113
128
  # @param [Hash{String=>String}] hsh with field properties
114
129
  def set_format(col_type, hsh)
115
- hsh['format'] = if col_type == :datetime
116
- 'date-time'
117
- elsif col_type == :date
118
- 'date'
119
- end
130
+ if col_type == :datetime
131
+ hsh['format'] = 'date-time'
132
+ elsif col_type == :date
133
+ hsh['format']= 'date'
134
+ end
120
135
  end
121
136
 
122
137
  # Set a field to read-only
@@ -0,0 +1,6 @@
1
+ require 'json'
2
+ require 'schema_builder/version'
3
+ require 'schema_builder/writer'
4
+ require 'schema_builder/railtie' if defined? ::Rails::Railtie
5
+
6
+ module SchemaBuilder;end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe JsonSchemaBuilder::Writer do
3
+ describe SchemaBuilder::Writer do
4
4
 
5
5
  context 'in general' do
6
6
  before :each do
7
- @writer = JsonSchemaBuilder::Writer.new
7
+ @writer = SchemaBuilder::Writer.new
8
8
  end
9
9
  it 'should get model_path' do
10
10
  @writer.model_path.should == "#{Dir.pwd}/app/models/**/*.rb"
@@ -23,7 +23,7 @@ describe JsonSchemaBuilder::Writer do
23
23
 
24
24
  context 'file writing' do
25
25
  before :each do
26
- @writer = JsonSchemaBuilder::Writer.new
26
+ @writer = SchemaBuilder::Writer.new
27
27
  @writer.out_path = test_out_path
28
28
  @writer.model_path = File.join( File.expand_path( __FILE__), '../fixtures/*.rb')
29
29
  @writer.write
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schema_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-29 00:00:00.000000000 Z
12
+ date: 2012-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -139,7 +139,8 @@ dependencies:
139
139
  - - ! '>='
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
- description: Build JSON Schema fields for ActiveRecord models
142
+ description: The first step to a clean and simple API is a unified API description
143
+ in form of a shared JSON Schema
143
144
  email:
144
145
  - gl@salesking.eu
145
146
  executables:
@@ -156,13 +157,16 @@ files:
156
157
  - bin/schema
157
158
  - json_schema_builder.gemspec
158
159
  - lib/json_schema_builder.rb
159
- - lib/json_schema_builder/version.rb
160
- - lib/json_schema_builder/writer.rb
160
+ - lib/schema_builder.rb
161
+ - lib/schema_builder/railtie.rb
162
+ - lib/schema_builder/tasks.rb
163
+ - lib/schema_builder/version.rb
164
+ - lib/schema_builder/writer.rb
161
165
  - spec/fixtures/ar_schema.rb
162
166
  - spec/fixtures/user.rb
163
- - spec/json_schema_builder/writer_spec.rb
167
+ - spec/schema_builder/writer_spec.rb
164
168
  - spec/spec_helper.rb
165
- homepage: http://www.salesking.eu
169
+ homepage: http://www.salesking.eu/dev
166
170
  licenses: []
167
171
  post_install_message:
168
172
  rdoc_options: []
@@ -176,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
180
  version: '0'
177
181
  segments:
178
182
  - 0
179
- hash: -2999917511580030405
183
+ hash: -3445288760737026502
180
184
  required_rubygems_version: !ruby/object:Gem::Requirement
181
185
  none: false
182
186
  requirements:
@@ -185,11 +189,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
189
  version: '0'
186
190
  segments:
187
191
  - 0
188
- hash: -2999917511580030405
192
+ hash: -3445288760737026502
189
193
  requirements: []
190
194
  rubyforge_project:
191
195
  rubygems_version: 1.8.24
192
196
  signing_key:
193
197
  specification_version: 3
194
- summary: Build JSON Schema fields for ActiveRecord models
198
+ summary: A good API needs JSON Schema description! Get it right and build JSON Schemata
199
+ for your ActiveRecord models
195
200
  test_files: []
@@ -1,3 +0,0 @@
1
- module JsonSchemaBuilder
2
- VERSION = "0.0.3"
3
- end