rack-scaffold 0.2.0 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d2030b9f5a66a76fcf8f658cf0a83ace7717130
4
- data.tar.gz: 24a2f01f229584c7482511deb05f38aba9dfe57a
3
+ metadata.gz: e439b7397a2e885e9fca4ff87f0757b498c9b1b8
4
+ data.tar.gz: cdc05f86c46005766d06079d8bddc08db44c21a5
5
5
  SHA512:
6
- metadata.gz: bc643c54ef2aabd7d762fdcae13e40a32e63bdba17dadf4b725cf1b23a04e599cba2ce95e0948f56d2b7c4249a8cca56eabd6c7caa9e732ab59ea58799078508
7
- data.tar.gz: d07c15033d0195bdf70381e47c64ecda1fbb818e00aa5d24676014e684b215cb31d7435248c96ac7c05279c5329c490fbf413b48fcfd076dbdc93363d3f399a1
6
+ metadata.gz: 18db2b0769fbad97121e6fabe094f5eb84845a4243d4376f3ffcd50c1fcd384859da27ffa3cf652917bb08d4a817f3278abf94d7ddb2768472acf308531c047b
7
+ data.tar.gz: 4d74cc44f1db3bd96b3635048e1a7591c419d1e9a47107ff2baebf3a38c39a5f2ceb3638293892aa592f4de69a1d365cde39f9a018d833be9dd76e220086f1cb
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
- ruby '2.0.0'
2
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
3
4
 
4
5
  gemspec
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-scaffold (0.2.0)
5
- activesupport (>= 3.0)
4
+ rack-scaffold (0.2.2)
5
+ activesupport (>= 4.1.11)
6
6
  rack (~> 1.4)
7
7
  rack-contrib (~> 1.1)
8
8
  sinatra (~> 1.4)
@@ -12,62 +12,69 @@ PATH
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
- activesupport (4.1.5)
16
- i18n (~> 0.6, >= 0.6.9)
17
- json (~> 1.7, >= 1.7.7)
15
+ ParseTree (3.0.9)
16
+ RubyInline (~> 3.9.0)
17
+ sexp_processor (~> 3.2.0)
18
+ RubyInline (3.9.0)
19
+ ZenTest (~> 4.3)
20
+ ZenTest (4.11.2)
21
+ activesupport (5.2.3)
22
+ concurrent-ruby (~> 1.0, >= 1.0.2)
23
+ i18n (>= 0.7, < 2)
18
24
  minitest (~> 5.1)
19
- thread_safe (~> 0.1)
20
25
  tzinfo (~> 1.1)
21
- backports (3.6.0)
22
- core_data (0.1.1)
26
+ backports (3.15.0)
27
+ concurrent-ruby (1.1.5)
28
+ core_data (0.1.2)
23
29
  nokogiri (~> 1.4)
24
- database_cleaner (1.3.0)
25
- diff-lcs (1.2.5)
26
- i18n (0.6.11)
27
- json (1.8.1)
28
- mini_portile (0.6.0)
29
- minitest (5.4.0)
30
- multi_json (1.10.1)
31
- nokogiri (1.6.3.1)
32
- mini_portile (= 0.6.0)
33
- rack (1.5.2)
34
- rack-contrib (1.1.0)
35
- rack (>= 0.9.1)
36
- rack-protection (1.5.3)
37
- rack
38
- rack-test (0.6.2)
39
- rack (>= 1.0)
40
- rake (10.3.2)
41
- rspec (3.0.0)
42
- rspec-core (~> 3.0.0)
43
- rspec-expectations (~> 3.0.0)
44
- rspec-mocks (~> 3.0.0)
45
- rspec-core (3.0.4)
46
- rspec-support (~> 3.0.0)
47
- rspec-expectations (3.0.4)
48
- diff-lcs (>= 1.2.0, < 2.0)
49
- rspec-support (~> 3.0.0)
50
- rspec-mocks (3.0.4)
51
- rspec-support (~> 3.0.0)
52
- rspec-support (3.0.4)
53
- sequel (4.13.0)
54
- sinatra (1.4.5)
30
+ database_cleaner (0.9.1)
31
+ ffi (1.11.1)
32
+ i18n (1.6.0)
33
+ concurrent-ruby (~> 1.0)
34
+ metaid (1.0)
35
+ mini_portile2 (2.4.0)
36
+ minitest (5.11.3)
37
+ multi_json (1.13.1)
38
+ nokogiri (1.10.3)
39
+ mini_portile2 (~> 2.4.0)
40
+ rack (1.6.11)
41
+ rack-contrib (1.8.0)
55
42
  rack (~> 1.4)
43
+ rack-protection (1.5.5)
44
+ rack
45
+ rack-test (0.8.3)
46
+ rack (>= 1.0, < 3)
47
+ rake (0.9.6)
48
+ rspec (0.9.4)
49
+ ruby2ruby (1.3.1)
50
+ ruby_parser (~> 2.0)
51
+ sexp_processor (~> 3.0)
52
+ ruby_parser (2.3.1)
53
+ sexp_processor (~> 3.0)
54
+ sequel (0.5.0.2)
55
+ ParseTree (>= 2.1.1)
56
+ RubyInline (>= 3.6.6)
57
+ metaid
58
+ ruby2ruby
59
+ sexp_processor (3.2.0)
60
+ sinatra (1.4.8)
61
+ rack (~> 1.5)
56
62
  rack-protection (~> 1.4)
57
- tilt (~> 1.3, >= 1.3.4)
58
- sinatra-contrib (1.4.2)
63
+ tilt (>= 1.3, < 3)
64
+ sinatra-contrib (1.4.7)
59
65
  backports (>= 2.0)
60
66
  multi_json
61
67
  rack-protection
62
68
  rack-test
63
69
  sinatra (~> 1.4.0)
64
- tilt (~> 1.3)
70
+ tilt (>= 1.3, < 3)
65
71
  sinatra-param (0.1.3)
66
72
  sinatra (~> 1.3)
67
- sqlite3 (1.3.9)
68
- thread_safe (0.3.4)
69
- tilt (1.4.1)
70
- tzinfo (1.2.2)
73
+ sqlite3 (0.1.1)
74
+ ffi (>= 0.6.3)
75
+ thread_safe (0.3.6)
76
+ tilt (2.0.9)
77
+ tzinfo (1.2.5)
71
78
  thread_safe (~> 0.1)
72
79
 
73
80
  PLATFORMS
@@ -82,3 +89,6 @@ DEPENDENCIES
82
89
  rspec
83
90
  sequel
84
91
  sqlite3
92
+
93
+ BUNDLED WITH
94
+ 2.0.1
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Mattt Thompson (http://mattt.me/)
1
+ Copyright (c) 2013 – 2019 Mattt (https://mat.tt/)
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,15 +1,10 @@
1
1
  # Rack::Scaffold
2
+
2
3
  **Automatically generate RESTful CRUD services**
3
4
 
4
- > This project generalizes the webservice auto-generation functionality of [Rack::CoreData](https://github.com/mattt/rack-core-data) with a plugin architecture that can adapt to any data model format. It is currently used in the latest release of [Helios](https://github.com/helios-framework/helios)
5
+ > This project is no longer maintained.
5
6
 
6
- ### Supported Data Models
7
-
8
- - [Core Data Model](https://github.com/mattt/core_data/) (`.xcdatamodeld`)
9
- - [Sequel](https://github.com/jeremyevans/sequel)
10
- - [ActiveRecord](https://github.com/rails/rails)
11
-
12
- ## Usage
7
+ ## Installation
13
8
 
14
9
  ### Gemfile
15
10
 
@@ -25,6 +20,10 @@ gem 'unicorn'
25
20
  gem 'pg'
26
21
  ```
27
22
 
23
+ ## Usage
24
+
25
+ An example web API using a Core Data model can be found the `/example` directory.
26
+
28
27
  ### config.ru
29
28
 
30
29
  ```ruby
@@ -47,18 +46,17 @@ By default, `Rack::Scaffold` will enable all of the actions described below. Act
47
46
  - `delete` (`DELETE /resources/123`): Deletes the specified resource.
48
47
  - `susbscribe` (`SUBSCRIBE` or `GET /resources` with `Accept: text/event-stream`): Subscribes to create, update, and delete actions performed, streaming corresponding JSON Patch diffs. You can read more about the Rocket technique for streaming REST resources at http://rocket.github.io.
49
48
 
50
- ## Examples
49
+ ### Supported Data Models
51
50
 
52
- An example web API using a Core Data model can be found the `/example` directory.
51
+ - [Core Data Model](https://github.com/mattt/core_data/) (`.xcdatamodeld`)
52
+ - [Sequel](https://github.com/jeremyevans/sequel)
53
+ - [ActiveRecord](https://github.com/rails/rails)
53
54
 
54
55
  ## Contact
55
56
 
56
- Mattt Thompson
57
-
58
- - http://github.com/mattt
59
- - http://twitter.com/mattt
60
- - m@mattt.me
57
+ [Mattt](https://twitter.com/mattt)
61
58
 
62
59
  ## License
63
60
 
64
- Rack::Scaffold is available under the MIT license. See the LICENSE file for more info.
61
+ Rack::Scaffold is available under the MIT license.
62
+ See the LICENSE file for more info.
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
- require "bundler"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
2
4
  Bundler.setup
3
5
 
4
- gemspec = eval(File.read("rack-scaffold.gemspec"))
6
+ gemspec = eval(File.read('rack-scaffold.gemspec'))
5
7
 
6
- task :build => "#{gemspec.full_name}.gem"
8
+ task build: "#{gemspec.full_name}.gem"
7
9
 
8
- file "#{gemspec.full_name}.gem" => gemspec.files + ["rack-scaffold.gemspec"] do
9
- system "gem build rack-scaffold.gemspec"
10
+ file "#{gemspec.full_name}.gem" => gemspec.files + ['rack-scaffold.gemspec'] do
11
+ system 'gem build rack-scaffold.gemspec'
10
12
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rack'
2
4
  require 'rack/contrib'
3
5
  require 'sinatra/base'
@@ -10,13 +12,13 @@ require 'pathname'
10
12
 
11
13
  module Rack
12
14
  class Scaffold
13
- ACTIONS = [:subscribe, :create, :read, :update, :destroy]
15
+ ACTIONS = %i[subscribe create read update destroy].freeze
14
16
 
15
17
  def initialize(options = {})
16
- raise ArgumentError, "Missing option: :model or :models" unless options[:model] or options[:models]
18
+ raise ArgumentError, 'Missing option: :model or :models' unless options[:model] || options[:models]
17
19
 
18
- if options[:models] and options[:models].kind_of?(Array)
19
- @app = Rack::Cascade.new(options.delete(:models).collect{|model| self.class.new(options.dup.merge({model: model}))}) and return
20
+ if options[:models]&.is_a?(Array)
21
+ (@app = Rack::Cascade.new(options.delete(:models).collect { |model| self.class.new(options.dup.merge(model: model)) })) && return
20
22
  end
21
23
 
22
24
  @app = Class.new(Sinatra::Base) do
@@ -29,9 +31,7 @@ module Rack
29
31
  end
30
32
 
31
33
  disable :raise_errors, :show_exceptions
32
- if ENV["RACK_ENV"] == "test"
33
- set :raise_errors, true
34
- end
34
+ set :raise_errors, true if ENV['RACK_ENV'] == 'test'
35
35
 
36
36
  def last_modified_time(resource, resources)
37
37
  update_timestamp_field = resource.update_timestamp_field.to_sym
@@ -48,7 +48,7 @@ module Rack
48
48
  pathname = Pathname.new(request.path)
49
49
 
50
50
  lines = []
51
- lines << "event: patch"
51
+ lines << 'event: patch'
52
52
 
53
53
  op = case status
54
54
  when 201 then :add
@@ -57,7 +57,7 @@ module Rack
57
57
  :update
58
58
  end
59
59
 
60
- data = [{op: op, path: record.url, value: record}].to_json
60
+ data = [{ op: op, path: record.url, value: record }].to_json
61
61
 
62
62
  @@connections[pathname.dirname].each do |out|
63
63
  out << "event: patch\ndata: #{data}\n\n"
@@ -67,114 +67,124 @@ module Rack
67
67
 
68
68
  @actions = (options[:only] || ACTIONS) - (options[:except] || [])
69
69
 
70
- @adapter = Rack::Scaffold.adapters.detect{|adapter| adapter === options[:model]}
70
+ @adapter = Rack::Scaffold.adapters.detect { |adapter| adapter === options[:model] }
71
71
  raise "No suitable adapters found for #{options[:model]} in #{Rack::Scaffold.adapters}" unless @adapter
72
72
 
73
73
  resources = Array(@adapter.resources(options[:model], options))
74
74
  resources.each do |resource|
75
- @app.instance_eval do
76
- @@connections = Hash.new([])
75
+ if @actions.include?(:subscribe)
76
+ @app.instance_eval do
77
+ @@connections = Hash.new([])
77
78
 
78
- route :get, :subscribe, "/#{resource.plural}/?" do
79
- pass unless request.accept.include? 'text/event-stream'
79
+ route :get, :subscribe, "/#{resource.plural}/?" do
80
+ pass unless request.accept.include? 'text/event-stream'
80
81
 
81
- content_type 'text/event-stream'
82
+ content_type 'text/event-stream'
82
83
 
83
- stream :keep_open do |out|
84
- @@connections[request.path] << out
84
+ stream :keep_open do |out|
85
+ @@connections[request.path] << out
85
86
 
86
- out.callback do
87
- @@connections[request.path].delete(out)
87
+ out.callback do
88
+ @@connections[request.path].delete(out)
89
+ end
88
90
  end
89
91
  end
90
92
  end
91
- end if @actions.include?(:subscribe)
93
+ end
92
94
 
93
- @app.instance_eval do
94
- post "/#{resource.plural}/?" do
95
- record = resource.klass.new(params)
96
- if record.save
97
- status 201
98
- notify!(record)
99
- {"#{resource.singular}" => record}.to_json
100
- else
101
- status 406
102
- {errors: record.errors}.to_json
95
+ if @actions.include?(:create)
96
+ @app.instance_eval do
97
+ post "/#{resource.plural}/?" do
98
+ record = resource.klass.new(params)
99
+ if record.save
100
+ status 201
101
+ notify!(record)
102
+ { resource.singular.to_s => record }.to_json
103
+ else
104
+ status 406
105
+ { errors: record.errors }.to_json
106
+ end
103
107
  end
104
108
  end
105
- end if @actions.include?(:create)
106
-
107
- @app.instance_eval do
108
- get "/#{resource.plural}/?" do
109
- if params[:page] or params[:per_page]
110
- param :page, Integer, default: 1, min: 1
111
- param :per_page, Integer, default: 100, in: (1..100)
112
-
113
- resources = resource.paginate(params[:per_page], (params[:page] - 1) * params[:per_page])
114
- last_modified(last_modified_time(resource, resources)) if resource.timestamps?
115
-
116
- {
117
- "#{resource.plural}" => resources,
118
- page: params[:page],
119
- total: resource.count
120
- }.to_json
121
- else
122
- param :limit, Integer, default: 100, in: (1..100)
123
- param :offset, Integer, default: 0, min: 0
124
-
125
- resources = resource.paginate(params[:limit], params[:offset])
126
- last_modified(last_modified_time(resource, resources)) if resource.timestamps?
109
+ end
127
110
 
128
- {
129
- "#{resource.plural}" => resources
130
- }.to_json
111
+ if @actions.include?(:read)
112
+ @app.instance_eval do
113
+ get "/#{resource.plural}/?" do
114
+ if params[:page] || params[:per_page]
115
+ param :page, Integer, default: 1, min: 1
116
+ param :per_page, Integer, default: 100, in: (1..100)
117
+
118
+ resources = resource.paginate(params[:per_page], (params[:page] - 1) * params[:per_page])
119
+ last_modified(last_modified_time(resource, resources)) if resource.timestamps?
120
+
121
+ {
122
+ resource.plural.to_s => resources,
123
+ page: params[:page],
124
+ total: resource.count
125
+ }.to_json
126
+ else
127
+ param :limit, Integer, default: 100, in: (1..100)
128
+ param :offset, Integer, default: 0, min: 0
129
+
130
+ resources = resource.paginate(params[:limit], params[:offset])
131
+ last_modified(last_modified_time(resource, resources)) if resource.timestamps?
132
+
133
+ {
134
+ resource.plural.to_s => resources
135
+ }.to_json
136
+ end
131
137
  end
132
- end
133
138
 
134
- get "/#{resource.plural}/:id/?" do
135
- record = resource[params[:id]] or halt 404
136
- last_modified(last_modified_time(resource, record)) if resource.timestamps?
137
- {"#{resource.singular}" => record}.to_json
138
- end
139
+ get "/#{resource.plural}/:id/?" do
140
+ (record = resource[params[:id]]) || halt(404)
141
+ last_modified(last_modified_time(resource, record)) if resource.timestamps?
142
+ { resource.singular.to_s => record }.to_json
143
+ end
139
144
 
140
- resource.one_to_many_associations.each do |association|
141
- get "/#{resource.plural}/:id/#{association}/?" do
142
- record = resource[params[:id]] or halt 404
143
- associations = record.send(association)
145
+ resource.one_to_many_associations.each do |association|
146
+ get "/#{resource.plural}/:id/#{association}/?" do
147
+ (record = resource[params[:id]]) || halt(404)
148
+ associations = record.send(association)
144
149
 
145
- {
146
- "#{association}" => associations
147
- }.to_json
150
+ {
151
+ association.to_s => associations
152
+ }.to_json
153
+ end
148
154
  end
149
155
  end
150
- end if @actions.include?(:read)
156
+ end
151
157
 
152
- @app.instance_eval do
153
- route :put, :patch, "/#{resource.plural}/:id/?" do
154
- record = resource[params[:id]] or halt 404
155
- if record.update!(params)
156
- status 200
157
- notify!(record)
158
- {"#{resource.singular}" => record}.to_json
159
- else
160
- status 406
161
- {errors: record.errors}.to_json
158
+ if @actions.include?(:update)
159
+ @app.instance_eval do
160
+ route :put, :patch, "/#{resource.plural}/:id/?" do
161
+ (record = resource[params[:id]]) || halt(404)
162
+ if record.update!(params)
163
+ status 200
164
+ notify!(record)
165
+ { resource.singular.to_s => record }.to_json
166
+ else
167
+ status 406
168
+ { errors: record.errors }.to_json
169
+ end
162
170
  end
163
171
  end
164
- end if @actions.include?(:update)
172
+ end
173
+
174
+ next unless @actions.include?(:destroy)
165
175
 
166
176
  @app.instance_eval do
167
177
  delete "/#{resource.plural}/:id/?" do
168
- record = resource[params[:id]] or halt 404
178
+ (record = resource[params[:id]]) || halt(404)
169
179
  if record.destroy
170
180
  status 204
171
181
  notify!(record)
172
182
  else
173
183
  status 406
174
- {errors: record.errors}.to_json
184
+ { errors: record.errors }.to_json
175
185
  end
176
186
  end
177
- end if @actions.include?(:destroy)
187
+ end
178
188
  end
179
189
  end
180
190
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rack
2
4
  class Scaffold
3
5
  def self.adapters
@@ -16,11 +18,11 @@ module Rack
16
18
  super
17
19
  end
18
20
 
19
- def ===(model)
21
+ def ===(_model)
20
22
  raise NotImplementedError
21
23
  end
22
24
 
23
- def resources(model, options = {})
25
+ def resources(_model, _options = {})
24
26
  raise NotImplementedError
25
27
  end
26
28
  end
@@ -45,11 +47,11 @@ module Rack
45
47
  raise NotImplementedError
46
48
  end
47
49
 
48
- def paginate(offset, limit)
50
+ def paginate(_offset, _limit)
49
51
  raise NotImplementedError
50
52
  end
51
53
 
52
- def [](id)
54
+ def [](_id)
53
55
  raise NotImplementedError
54
56
  end
55
57
 
@@ -57,15 +59,15 @@ module Rack
57
59
  raise NotImplementedError
58
60
  end
59
61
 
60
- def find(options = {})
62
+ def find(_options = {})
61
63
  raise NotImplementedError
62
64
  end
63
65
 
64
- def create!(attributes = {})
66
+ def create!(_attributes = {})
65
67
  raise NotImplementedError
66
68
  end
67
69
 
68
- def update!(attributes = {})
70
+ def update!(_attributes = {})
69
71
  raise NotImplementedError
70
72
  end
71
73
 
@@ -81,7 +83,7 @@ module Rack
81
83
  raise NotImplementedError
82
84
  end
83
85
 
84
- def method_missing(method, *args, &block)
86
+ def method_missing(method, *_args)
85
87
  @klass.send(method)
86
88
  end
87
89
  end
@@ -91,4 +93,4 @@ end
91
93
 
92
94
  require 'rack/scaffold/adapters/active_record' if defined?(ActiveRecord::Base)
93
95
  require 'rack/scaffold/adapters/sequel' if defined?(Sequel)
94
- require 'rack/scaffold/adapters/core_data' if defined?(Sequel) and defined?(CoreData)
96
+ require 'rack/scaffold/adapters/core_data' if defined?(Sequel) && defined?(CoreData)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record'
2
4
  require 'forwardable'
3
5
 
@@ -12,7 +14,7 @@ module Rack::Scaffold::Adapters
12
14
  ::ActiveRecord::Base === model
13
15
  end
14
16
 
15
- def resources(model, options = {})
17
+ def resources(model, _options = {})
16
18
  model
17
19
  end
18
20
 
@@ -34,7 +36,7 @@ module Rack::Scaffold::Adapters
34
36
  end
35
37
 
36
38
  def [](id)
37
- self.find(id)
39
+ find(id)
38
40
  end
39
41
 
40
42
  def one_to_many_associations
@@ -42,7 +44,7 @@ module Rack::Scaffold::Adapters
42
44
  end
43
45
 
44
46
  def update_timestamp_field
45
- self.attribute_names.include?("updated_at") ? "updated_at" : "updated_on"
47
+ attribute_names.include?('updated_at') ? 'updated_at' : 'updated_on'
46
48
  end
47
49
  end
48
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'core_data'
2
4
  require 'sequel'
3
5
  require 'active_support/inflector'
@@ -7,16 +9,21 @@ module Rack::Scaffold::Adapters
7
9
  class << self
8
10
  def ===(model)
9
11
  return true if ::CoreData::DataModel === model
10
- !! ::CoreData::DataModel.new(model) rescue false
12
+
13
+ begin
14
+ !!::CoreData::DataModel.new(model)
15
+ rescue StandardError
16
+ false
17
+ end
11
18
  end
12
19
 
13
20
  def resources(xcdatamodel, options = {})
14
21
  model = ::CoreData::DataModel.new(xcdatamodel)
15
22
  model.entities.each do |entity|
16
- self.const_set(entity.name.capitalize, Class.new(::Sequel::Model)) unless self.const_defined?(entity.name.capitalize)
23
+ const_set(entity.name.capitalize, Class.new(::Sequel::Model)) unless const_defined?(entity.name.capitalize)
17
24
  end
18
25
 
19
- model.entities.collect{|entity| new(entity, options)}
26
+ model.entities.collect { |entity| new(entity, options) }
20
27
  end
21
28
  end
22
29
 
@@ -26,8 +33,8 @@ module Rack::Scaffold::Adapters
26
33
  klass.dataset = entity.name.downcase.pluralize.to_sym
27
34
 
28
35
  klass.class_eval do
29
- alias :update! :update
30
- alias :destroy! :destroy
36
+ alias_method :update!, :update
37
+ alias_method :destroy!, :destroy
31
38
 
32
39
  self.strict_param_setting = false
33
40
  self.raise_on_save_failure = false
@@ -44,16 +51,14 @@ module Rack::Scaffold::Adapters
44
51
  end
45
52
  end
46
53
 
47
- if options[:nested_attributes]
48
- plugin :nested_attributes
49
- end
54
+ plugin :nested_attributes if options[:nested_attributes]
50
55
 
51
56
  def url
52
57
  "/#{self.class.table_name}/#{self[primary_key]}"
53
58
  end
54
59
 
55
60
  entity.relationships.each do |relationship|
56
- entity_options = {class: adapter.const_get(relationship.destination.capitalize)}
61
+ entity_options = { class: adapter.const_get(relationship.destination.capitalize) }
57
62
 
58
63
  if relationship.to_many?
59
64
  one_to_many relationship.name.to_sym, entity_options
@@ -78,15 +83,15 @@ module Rack::Scaffold::Adapters
78
83
  }
79
84
 
80
85
  type = case attribute.type
81
- when "Integer 16" then :int2
82
- when "Integer 32" then :int4
83
- when "Integer 64" then :int8
84
- when "Float" then :float4
85
- when "Double" then :float8
86
- when "Decimal" then :float8
87
- when "Date" then :timestamp
88
- when "Boolean" then :boolean
89
- when "Binary" then :bytea
86
+ when 'Integer 16' then :int2
87
+ when 'Integer 32' then :int4
88
+ when 'Integer 64' then :int8
89
+ when 'Float' then :float4
90
+ when 'Double' then :float8
91
+ when 'Decimal' then :float8
92
+ when 'Date' then :timestamp
93
+ when 'Boolean' then :boolean
94
+ when 'Binary' then :bytea
90
95
  else :varchar
91
96
  end
92
97
 
@@ -99,14 +104,14 @@ module Rack::Scaffold::Adapters
99
104
  null: relationship.optional?
100
105
  }
101
106
 
102
- if not relationship.to_many?
107
+ unless relationship.to_many?
103
108
  column "#{relationship.name}_id".to_sym, :integer, options
104
109
  end
105
110
  end
106
111
  end
107
112
 
108
113
  if table_exists?
109
- missing_columns = schema.columns.reject{|c| columns.include?(c[:name])}
114
+ missing_columns = schema.columns.reject { |c| columns.include?(c[:name]) }
110
115
  db.alter_table table_name do
111
116
  missing_columns.each do |options|
112
117
  add_column options.delete(:name), options.delete(:type), options
@@ -120,11 +125,11 @@ module Rack::Scaffold::Adapters
120
125
  klass.send :define_method, :validate do
121
126
  entity.attributes.each do |attribute|
122
127
  case attribute.type
123
- when "Integer 16", "Integer 32", "Integer 64"
128
+ when 'Integer 16', 'Integer 32', 'Integer 64'
124
129
  validates_integer attribute.name
125
- when "Float", "Double", "Decimal"
130
+ when 'Float', 'Double', 'Decimal'
126
131
  validates_numeric attribute.name
127
- when "String"
132
+ when 'String'
128
133
  validates_min_length attribute.minimum_value, attribute.name if attribute.minimum_value
129
134
  validates_max_length attribute.maximum_value, attribute.name if attribute.maximum_value
130
135
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sequel'
2
4
  require 'forwardable'
3
5
 
@@ -15,7 +17,7 @@ module Rack::Scaffold::Adapters
15
17
  ::Sequel::Model === model
16
18
  end
17
19
 
18
- def resources(model, options = {})
20
+ def resources(model, _options = {})
19
21
  model
20
22
  end
21
23
  end
@@ -33,11 +35,11 @@ module Rack::Scaffold::Adapters
33
35
  end
34
36
 
35
37
  def one_to_many_associations
36
- @klass.all_association_reflections.select{|association| association[:type] == :one_to_many}.collect{|association| association[:name]}
38
+ @klass.all_association_reflections.select { |association| association[:type] == :one_to_many }.collect { |association| association[:name] }
37
39
  end
38
40
 
39
41
  def timestamps?
40
- defined?(::Sequel::Plugins::Timestamps) and @klass.plugins.include?(::Sequel::Plugins::Timestamps)
42
+ defined?(::Sequel::Plugins::Timestamps) && @klass.plugins.include?(::Sequel::Plugins::Timestamps)
41
43
  end
42
44
  end
43
45
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rack
4
+ class Scaffold
5
+ VERSION = '0.2.2'
6
+ end
7
+ end
Binary file
@@ -1,34 +1,36 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+ require 'rack/scaffold/version'
3
5
 
4
6
  Gem::Specification.new do |s|
5
- s.name = "rack-scaffold"
6
- s.authors = ["Mattt Thompson"]
7
- s.email = "m@mattt.me"
8
- s.homepage = "http://mattt.me"
9
- s.license = "MIT"
10
- s.version = "0.2.0"
7
+ s.name = 'rack-scaffold'
8
+ s.authors = ['Mattt']
9
+ s.email = 'mattt@me.com'
10
+ s.homepage = 'https://mat.tt'
11
+ s.license = 'MIT'
12
+ s.version = Rack::Scaffold::VERSION
11
13
  s.platform = Gem::Platform::RUBY
12
- s.summary = "Rack::Scaffold"
13
- s.description = "Automatically generate RESTful CRUD services"
14
+ s.summary = 'Rack::Scaffold'
15
+ s.description = 'Automatically generate RESTful CRUD services'
14
16
 
15
- s.add_dependency "rack", "~> 1.4"
16
- s.add_dependency "rack-contrib", "~> 1.1"
17
- s.add_dependency "sinatra", "~> 1.4"
18
- s.add_dependency "sinatra-contrib", "~> 1.4"
19
- s.add_dependency "sinatra-param", "~> 0.1"
20
- s.add_dependency "activesupport", ">= 3.0"
17
+ s.add_dependency 'activesupport', '>= 4.1.11'
18
+ s.add_dependency 'rack', '~> 1.4'
19
+ s.add_dependency 'rack-contrib', '~> 1.1'
20
+ s.add_dependency 'sinatra', '~> 1.4'
21
+ s.add_dependency 'sinatra-contrib', '~> 1.4'
22
+ s.add_dependency 'sinatra-param', '~> 0.1'
21
23
 
22
- s.add_development_dependency "rake"
23
- s.add_development_dependency "rspec"
24
- s.add_development_dependency "sequel"
25
- s.add_development_dependency "core_data"
26
- s.add_development_dependency "sqlite3"
27
- s.add_development_dependency "database_cleaner"
28
- s.add_development_dependency "rack-test"
24
+ s.add_development_dependency 'core_data'
25
+ s.add_development_dependency 'database_cleaner'
26
+ s.add_development_dependency 'rack-test'
27
+ s.add_development_dependency 'rake'
28
+ s.add_development_dependency 'rspec'
29
+ s.add_development_dependency 'sequel'
30
+ s.add_development_dependency 'sqlite3'
29
31
 
30
- s.files = Dir["./**/*"].reject { |file| file =~ /\.\/(bin|example|log|pkg|script|spec|test|vendor)/ }
32
+ s.files = Dir['./**/*'].reject { |file| file =~ %r{\./(bin|example|log|pkg|script|spec|test|vendor)} }
31
33
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
32
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
33
- s.require_paths = ["lib"]
34
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
35
+ s.require_paths = ['lib']
34
36
  end
metadata CHANGED
@@ -1,220 +1,221 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
- - Mattt Thompson
7
+ - Mattt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-28 00:00:00.000000000 Z
11
+ date: 2019-07-07 00:00:00.000000000 Z
12
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: 4.1.11
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.11
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rack
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
33
  version: '1.4'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.4'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rack-contrib
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '1.1'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ~>
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: sinatra
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '1.4'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.4'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: sinatra-contrib
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
75
  version: '1.4'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ~>
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '1.4'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: sinatra-param
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0.1'
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0.1'
83
97
  - !ruby/object:Gem::Dependency
84
- name: activesupport
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '>='
88
- - !ruby/object:Gem::Version
89
- version: '3.0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '>='
95
- - !ruby/object:Gem::Version
96
- version: '3.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rake
98
+ name: core_data
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rspec
112
+ name: database_cleaner
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: sequel
126
+ name: rack-test
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: core_data
140
+ name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: sqlite3
154
+ name: rspec
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: database_cleaner
168
+ name: sequel
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - '>='
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: rack-test
182
+ name: sqlite3
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - '>='
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - '>='
192
+ - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  description: Automatically generate RESTful CRUD services
196
- email: m@mattt.me
196
+ email: mattt@me.com
197
197
  executables: []
198
198
  extensions: []
199
199
  extra_rdoc_files: []
200
200
  files:
201
- - ./Gemfile
202
- - ./Gemfile.lock
203
- - ./lib/rack/scaffold/adapters/active_record.rb
204
- - ./lib/rack/scaffold/adapters/core_data.rb
205
- - ./lib/rack/scaffold/adapters/sequel.rb
206
- - ./lib/rack/scaffold/adapters.rb
207
- - ./lib/rack/scaffold.rb
208
- - ./LICENSE
209
- - ./rack-scaffold-0.2.0.gem
210
- - ./rack-scaffold.gemspec
211
- - ./Rakefile
212
- - ./README.md
201
+ - "./Gemfile"
202
+ - "./Gemfile.lock"
203
+ - "./LICENSE.md"
204
+ - "./README.md"
205
+ - "./Rakefile"
206
+ - "./lib/rack/scaffold.rb"
207
+ - "./lib/rack/scaffold/adapters.rb"
208
+ - "./lib/rack/scaffold/adapters/active_record.rb"
209
+ - "./lib/rack/scaffold/adapters/core_data.rb"
210
+ - "./lib/rack/scaffold/adapters/sequel.rb"
211
+ - "./lib/rack/scaffold/version.rb"
212
+ - "./rack-scaffold-0.2.1.gem"
213
+ - "./rack-scaffold.gemspec"
213
214
  - spec/scaffold/adapters/core_data_spec.rb
214
215
  - spec/scaffold/adapters_spec.rb
215
216
  - spec/scaffold_spec.rb
216
217
  - spec/spec_helper.rb
217
- homepage: http://mattt.me
218
+ homepage: https://mat.tt
218
219
  licenses:
219
220
  - MIT
220
221
  metadata: {}
@@ -224,17 +225,17 @@ require_paths:
224
225
  - lib
225
226
  required_ruby_version: !ruby/object:Gem::Requirement
226
227
  requirements:
227
- - - '>='
228
+ - - ">="
228
229
  - !ruby/object:Gem::Version
229
230
  version: '0'
230
231
  required_rubygems_version: !ruby/object:Gem::Requirement
231
232
  requirements:
232
- - - '>='
233
+ - - ">="
233
234
  - !ruby/object:Gem::Version
234
235
  version: '0'
235
236
  requirements: []
236
237
  rubyforge_project:
237
- rubygems_version: 2.1.11
238
+ rubygems_version: 2.6.14
238
239
  signing_key:
239
240
  specification_version: 4
240
241
  summary: Rack::Scaffold
Binary file