standardapi 5.0.0.16 → 5.2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6782bdd5356588527128321b446a0c5a6bdeca55
4
- data.tar.gz: 8697b08b5b8142729f08071e436d1bea6441fe13
2
+ SHA256:
3
+ metadata.gz: 07e04cf1267208519f3837a0b7881786d55a053f3e3304e5e7599d01fb72102d
4
+ data.tar.gz: 7bf8e046a0ef987a912001df5075537961651d9ddcc6cccab31fb2a690b1e1cc
5
5
  SHA512:
6
- metadata.gz: b611aa8ec70e27b99ed965d97000fcc8c8eb4dfafdee5eb39eb7c31260243d92960041a91deb8760c65dde303ea6d6ea49e6d3106491582ff32896490ee3051d
7
- data.tar.gz: 0aae715b906024759bc25e12761bc7695865da1152a62b80fdbbeafbf6f43958b716ca05666a0f5a8a9a04342217f59eee32b630faa2aef0c55b2409a406e5f3
6
+ metadata.gz: 949c1c8abf9098956e5ceca14978b725b157fa604eeb8e4c60213e0eb84e841fd551088097bcedc8e39106442cd5ea4fd9f779f41fb05b41531556b7007bc3f5
7
+ data.tar.gz: 6c381c38daca817c906d11eda4f67c77d8bb2353f3c454f783da7a6d1fde3938335e4159e50f8c358ae46b33fd4492c2cfd6b1127cdfefd4ff8d2f1de9ab7697
data/README.md CHANGED
@@ -7,10 +7,34 @@ interface to your Rails models.
7
7
 
8
8
  gem install standardapi
9
9
 
10
- In your Gemfile
10
+ In your Gemfile:
11
11
 
12
12
  gem 'standardapi', require: 'standard_api'
13
13
 
14
+ In `config/application.rb:
15
+
16
+ require_relative 'boot'
17
+
18
+ require 'rails/all'
19
+ require 'standard_api/middleware/query_encoding'
20
+
21
+ # Require the gems listed in Gemfile, including any gems
22
+ # you've limited to :test, :development, or :production.
23
+ Bundler.require(*Rails.groups)
24
+
25
+ module Tester
26
+ class Application < Rails::Application
27
+ # Initialize configuration defaults for originally generated Rails version.
28
+ config.load_defaults 5.2
29
+
30
+ # Settings in config/environments/* take precedence over those specified here.
31
+ # Application configuration can go into files in config/initializers
32
+ # -- all .rb files in that directory are automatically loaded after loading
33
+ # the framework and any gems in your application.
34
+ config.middleware.insert_after Rack::MethodOverride, StandardAPI::Middleware::QueryEncoding
35
+ end
36
+ end
37
+
14
38
  # Usage
15
39
 
16
40
  StandardAPI is a module that can be included into any controller to expose a API
@@ -42,10 +42,15 @@ module StandardAPI
42
42
  def create
43
43
  record = model.new(model_params)
44
44
  instance_variable_set("@#{model.model_name.singular}", record)
45
-
45
+
46
46
  if record.save
47
47
  if request.format == :html
48
- redirect_to record
48
+ redirect_to url_for(
49
+ controller: record.class.base_class.model_name.collection,
50
+ action: 'show',
51
+ id: record.id,
52
+ only_path: true
53
+ )
49
54
  else
50
55
  render :show, status: :created
51
56
  end
@@ -64,7 +69,12 @@ module StandardAPI
64
69
 
65
70
  if record.update_attributes(model_params)
66
71
  if request.format == :html
67
- redirect_to record
72
+ redirect_to url_for(
73
+ controller: record.class.base_class.model_name.collection,
74
+ action: 'show',
75
+ id: record.id,
76
+ only_path: true
77
+ )
68
78
  else
69
79
  render :show, status: :ok
70
80
  end
@@ -90,22 +100,6 @@ module StandardAPI
90
100
  @model = name.sub(/Controller\z/, '').singularize.camelize.safe_constantize
91
101
  end
92
102
 
93
- def model_includes
94
- if self.respond_to?("#{model.model_name.singular}_includes", true)
95
- self.send "#{model.model_name.singular}_includes"
96
- else
97
- []
98
- end
99
- end
100
-
101
- def model_orders
102
- if self.respond_to?("#{model.model_name.singular}_orders", true)
103
- self.send "#{model.model_name.singular}_orders"
104
- else
105
- []
106
- end
107
- end
108
-
109
103
  end
110
104
 
111
105
  private
@@ -119,11 +113,19 @@ module StandardAPI
119
113
  end
120
114
 
121
115
  def model_includes
122
- self.class.model_includes
116
+ if self.respond_to?("#{model.model_name.singular}_includes", true)
117
+ self.send("#{model.model_name.singular}_includes")
118
+ else
119
+ []
120
+ end
123
121
  end
124
122
 
125
123
  def model_orders
126
- self.class.model_orders
124
+ if self.respond_to?("#{model.model_name.singular}_orders", true)
125
+ self.send("#{model.model_name.singular}_orders")
126
+ else
127
+ []
128
+ end
127
129
  end
128
130
 
129
131
  def model_params
@@ -166,6 +168,10 @@ module StandardAPI
166
168
  def required_orders
167
169
  []
168
170
  end
171
+
172
+ def default_orders
173
+ nil
174
+ end
169
175
 
170
176
  def orders
171
177
  exluded_required_orders = required_orders.map(&:to_s)
@@ -189,8 +195,8 @@ module StandardAPI
189
195
  if !exluded_required_orders.empty?
190
196
  params[:order] = exluded_required_orders.unshift(params[:order])
191
197
  end
192
-
193
- @orders ||= StandardAPI::Orders.sanitize(params[:order], model_orders | required_orders)
198
+
199
+ @orders ||= StandardAPI::Orders.sanitize(params[:order] || default_orders, model_orders | required_orders)
194
200
  end
195
201
 
196
202
  def excludes
@@ -231,7 +237,7 @@ module StandardAPI
231
237
  select.each do |func, column|
232
238
  column = column == '*' ? Arel.star : column.to_sym
233
239
  if functions.include?(func.to_s.downcase)
234
- @selects << (model.arel_table[column].send(func).to_sql)
240
+ @selects << (model.arel_table[column].send(func))
235
241
  end
236
242
  end
237
243
  end
@@ -19,7 +19,7 @@ module StandardAPI
19
19
  end
20
20
 
21
21
  def cache_key(record, includes)
22
- timestamp_keys = ['cached_at'] + cached_at_columns_for_includes(includes)
22
+ timestamp_keys = ['cached_at'] + record.class.column_names.select{|x| x.ends_with? "_cached_at"}
23
23
  if includes.empty?
24
24
  record.cache_key(*timestamp_keys)
25
25
  else
@@ -58,9 +58,9 @@ module StandardAPI
58
58
  end
59
59
 
60
60
  def cached_at_columns_for_includes(includes)
61
- includes.select{|k,v| ![:where, :limit, :order].include?(k.to_sym) }.map { |k, v|
61
+ includes.select { |k,v| ![:where, :limit, :order].include?(k.to_sym) }.map do |k, v|
62
62
  ["#{k}_cached_at"] + cached_at_columns_for_includes(v).map { |v2| "#{k}_#{v2}" }
63
- }.flatten
63
+ end.flatten
64
64
  end
65
65
 
66
66
  def includes_to_cache_key(relation, subincludes)
@@ -17,8 +17,11 @@ module StandardAPI
17
17
  includes.flatten.compact.each { |v| normalized.merge!(normalize(v)) }
18
18
  when Hash, ActionController::Parameters
19
19
  includes.each_pair do |k, v|
20
- if ['where', 'order'].include?(k.to_s) # Where and order are not normalized
21
- normalized[k] = v.to_h
20
+ if ['where', 'order'].include?(k.to_s) # Where and order are not normalized (sanitation happens in activerecord-filter)
21
+ normalized[k] = case v
22
+ when Hash then v.to_h
23
+ when ActionController::Parameters then v.to_unsafe_h
24
+ end
22
25
  else
23
26
  normalized[k] = normalize(v)
24
27
  end
@@ -4,7 +4,8 @@ module StandardAPI
4
4
  extend ActiveSupport::Testing::Declarative
5
5
 
6
6
  test '#create.json' do
7
- attrs = attributes_for(singular_name, :nested).select{|k,v| !model.readonly_attributes.include?(k.to_s) }
7
+ attrs = attributes_for(singular_name, :nested).select{ |k,v| !model.readonly_attributes.include?(k.to_s) }
8
+ mask.each { |k, v| attrs[k] = v }
8
9
  create_webmocks(attrs)
9
10
 
10
11
  file_upload = attrs.any? { |k, v| v.is_a?(Rack::Test::UploadedFile) }
@@ -34,6 +35,7 @@ module StandardAPI
34
35
 
35
36
  test '#create.json with nested attributes' do
36
37
  attrs = attributes_for(singular_name, :nested).select{|k,v| !model.readonly_attributes.include?(k.to_s) }
38
+ mask.each { |k, v| attrs[k] = v }
37
39
  create_webmocks(attrs)
38
40
 
39
41
  file_upload = attrs.any? { |k, v| v.is_a?(Rack::Test::UploadedFile) }
@@ -59,7 +61,7 @@ module StandardAPI
59
61
  end
60
62
 
61
63
  test '#create.json with invalid attributes' do
62
- trait = FactoryGirl.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
64
+ trait = FactoryBot.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
63
65
 
64
66
  if !trait
65
67
  Rails.logger.try(:warn, "No invalid trait for #{model.name}. Skipping invalid tests")
@@ -82,10 +84,26 @@ module StandardAPI
82
84
  end
83
85
  end
84
86
 
87
+ test '#create.html' do
88
+ return unless supports_format(:html)
89
+
90
+ attrs = attributes_for(singular_name, :nested).select{ |k,v| !model.readonly_attributes.include?(k.to_s) }
91
+ mask.each { |k, v| attrs[k] = v }
92
+ create_webmocks(attrs)
93
+
94
+ file_upload = attrs.any? { |k, v| v.is_a?(Rack::Test::UploadedFile) }
95
+ as = file_upload ? nil : :json
96
+
97
+ assert_difference("#{model.name}.count") do
98
+ post resource_path(:create), params: { singular_name => attrs }, as: :html
99
+ assert_response :redirect
100
+ end
101
+ end
102
+
85
103
  test '#create.html with invalid attributes renders edit action' do
86
104
  return unless supports_format(:html)
87
105
 
88
- trait = FactoryGirl.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
106
+ trait = FactoryBot.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
89
107
 
90
108
  if !trait
91
109
  Rails.logger.try(:warn, "No invalid trait for #{model.name}. Skipping invalid tests")
@@ -99,7 +117,6 @@ module StandardAPI
99
117
  assert_difference("#{model.name}.count", 0) do
100
118
  post resource_path(:create), params: { singular_name => attrs }, as: :html
101
119
  assert_response :bad_request
102
- assert_equal response.body, 'properties#edit.html'
103
120
  end
104
121
  end
105
122
 
@@ -12,37 +12,26 @@ module StandardAPI
12
12
  end
13
13
 
14
14
  test '#index.json requires limit' do
15
- limit = controller_class.new.send(:resource_limit)
16
-
17
- return if !limit || limit == Float::INFINITY
15
+ return if !resource_limit || resource_limit == Float::INFINITY
18
16
 
19
17
  begin
20
18
  get resource_path(:index, format: :json)
21
19
  assert_response :bad_request
22
20
  rescue ActionController::ParameterMissing
23
21
  end
24
-
25
- # return if !controller_class.new.send(:resource_limit)
26
- # if app.config.action_dispatch.show_exceptions
27
- # assert_raises ActionController::ParameterMissing do
28
- # get resource_path(:index, format: 'json')
29
- # assert_response :bad_request
30
- # end
31
- # else
32
- # get resource_path(:index, format: :json)
33
- # assert_response :bad_request
34
- # end
35
22
  end
36
23
 
37
24
  test '#index.json params[:limit]' do
38
25
  get resource_path(:index, format: :json), params: { limit: 1 }
39
26
  models = @controller.instance_variable_get("@#{plural_name}")
40
- assert_equal model.limit(1).sort(required_orders).to_sql, models.to_sql
27
+ assert_equal model.filter(mask).limit(1).sort(default_orders).to_sql, models.to_sql
41
28
  end
42
29
 
43
30
  test '#index.json params[:limit] does not exceed maximum limit' do
31
+ return if !resource_limit || resource_limit == Float::INFINITY
32
+
44
33
  assert_raises ActionController::UnpermittedParameters do
45
- get resource_path(:index, format: :json), params: { limit: 1000000 }
34
+ get resource_path(:index, format: :json), params: { limit: resource_limit + 1 }
46
35
  end
47
36
  end
48
37
 
@@ -59,24 +48,23 @@ module StandardAPI
59
48
  get resource_path(:index, format: :json), params: { limit: 1 }
60
49
 
61
50
  orders.each do |order|
62
- @controller.instance_variable_set('@orders', nil) # Hack for dealing with caching / multiple request per controller life
63
51
  get resource_path(:index, format: :json), params: { limit: 10, order: order }
64
52
  models = @controller.instance_variable_get("@#{plural_name}")
65
- assert_equal model.sort(order).limit(10).sort(required_orders).to_sql, models.to_sql
66
- end
53
+ assert_equal model.filter(mask).sort(order).limit(10).sort(order).to_sql, models.to_sql
54
+ end
67
55
  end
68
56
 
69
57
  test '#index.json params[:offset]' do
70
58
  get resource_path(:index, format: :json), params: { limit: 10, offset: 13 }
71
59
  models = @controller.instance_variable_get("@#{plural_name}")
72
- assert_equal model.offset(13).limit(10).sort(required_orders).to_sql, models.to_sql
60
+ assert_equal model.filter(mask).offset(13).limit(10).sort(default_orders).to_sql, models.to_sql
73
61
  end
74
62
 
75
63
  test '#index.json params[:include]' do
76
64
  travel_to Time.now do
77
65
  create_model
78
66
  get resource_path(:index, format: :json), params: { limit: 100, include: includes }
79
-
67
+
80
68
  json = JSON.parse(response.body)[0]
81
69
  assert json.is_a?(Hash)
82
70
  includes.each do |included|
@@ -11,7 +11,7 @@ module StandardAPI
11
11
  json = JSON(@response.body)
12
12
  assert json['columns']
13
13
  model.columns.map do |column|
14
- assert json['columns'][column.name]['type']
14
+ assert json['columns'][column.name]['type'], "Missing `type` for \"#{model}\" attribute \"#{column.name}\""
15
15
  end
16
16
  assert json['limit']
17
17
  end
@@ -46,6 +46,7 @@ module StandardAPI
46
46
  test '#update.json with nested attributes' do
47
47
  m = create_model
48
48
  attrs = attributes_for(singular_name, :nested).select{|k,v| !model.readonly_attributes.include?(k.to_s) }
49
+ mask.each { |k, v| attrs[k] = v }
49
50
  create_webmocks(attrs)
50
51
 
51
52
  file_upload = attrs.any? { |k, v| v.is_a?(Rack::Test::UploadedFile) }
@@ -64,7 +65,7 @@ module StandardAPI
64
65
  end
65
66
 
66
67
  test '#update.json with invalid attributes' do
67
- trait = FactoryGirl.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
68
+ trait = FactoryBot.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
68
69
 
69
70
  if !trait
70
71
  Rails.logger.try(:warn, "No invalid trait for #{model.name}. Skipping invalid tests")
@@ -1,6 +1,4 @@
1
1
  require 'active_support/test_case'
2
- require 'rails-controller-testing'
3
- Rails::Controller::Testing.install
4
2
 
5
3
  require File.expand_path(File.join(__FILE__, '../test_case/calculate_tests'))
6
4
  require File.expand_path(File.join(__FILE__, '../test_case/create_tests'))
@@ -45,7 +43,10 @@ module StandardAPI::TestCase
45
43
  acc
46
44
  end
47
45
 
48
- klass.controller_class.action_methods.each do |action|
46
+ test_cases = Dir.entries(File.expand_path(File.join(__FILE__, '..', 'test_case')))
47
+ test_cases.select! {|fn| fn.ends_with?('_tests.rb') }
48
+ test_cases.map! {|fn| fn.sub('_tests.rb', '') }
49
+ (klass.controller_class.action_methods & test_cases).each do |action|
49
50
  if const_defined?("StandardAPI::TestCase::#{action.capitalize}Tests") && routes[klass.controller_class.controller_path][action]
50
51
  klass.include("StandardAPI::TestCase::#{action.capitalize}Tests".constantize)
51
52
  end
@@ -60,13 +61,21 @@ module StandardAPI::TestCase
60
61
  count > 0
61
62
  end
62
63
 
63
- def required_orders
64
- controller_class.new.send(:required_orders)
64
+ def default_orders
65
+ controller_class.new.send(:default_orders)
66
+ end
67
+
68
+ def resource_limit
69
+ controller_class.new.send(:resource_limit)
65
70
  end
66
71
 
67
72
  def model
68
73
  self.class.model
69
74
  end
75
+
76
+ def mask
77
+ {}
78
+ end
70
79
 
71
80
  def resource_path(action, options={})
72
81
  url_for({
@@ -90,8 +99,8 @@ module StandardAPI::TestCase
90
99
  self.class.controller_class
91
100
  end
92
101
 
93
- def create_model(*args)
94
- create(model.name.underscore, *args)
102
+ def create_model(attrs={})
103
+ create(model.name.underscore, attrs.merge(mask))
95
104
  end
96
105
 
97
106
  def singular_name
@@ -1,3 +1,3 @@
1
1
  module StandardAPI
2
- VERSION = '5.0.0.16'
2
+ VERSION = '5.2.0.2'
3
3
  end
@@ -0,0 +1,63 @@
1
+ json.object! do
2
+
3
+ record.attributes.each do |name, value|
4
+ # Skip if attribute is included in excludes
5
+ next if defined?(excludes) && excludes[record.model_name.singular.to_sym].try(:find) { |x| x.to_s == name.to_s }
6
+ json.set! name, value
7
+ end
8
+
9
+ includes.each do |inc, subinc|
10
+ next if [:where, :order, :limit].include?(inc.to_sym)
11
+
12
+ case association = record.class.reflect_on_association(inc)
13
+ when ActiveRecord::Reflection::HasManyReflection, ActiveRecord::Reflection::HasAndBelongsToManyReflection, ActiveRecord::Reflection::ThroughReflection
14
+ can_cache = can_cache_relation?(record.class, inc, subinc)
15
+ json.cache_if!(can_cache, can_cache ? association_cache_key(record, inc, subinc) : nil) do
16
+ partial = model_partial(association.klass)
17
+ json.set! inc do
18
+ json.array! record.send(inc).filter(subinc[:where]).limit(subinc[:limit]).sort(subinc[:order]), partial: partial, as: partial.split('/').last, locals: { includes: subinc }
19
+ end
20
+ end
21
+
22
+ when ActiveRecord::Reflection::BelongsToReflection, ActiveRecord::Reflection::HasOneReflection
23
+ can_cache = can_cache_relation?(record.class, inc, subinc)
24
+ if association.is_a?(ActiveRecord::Reflection::BelongsToReflection)
25
+ can_cache = can_cache && !record.send(association.foreign_key).nil?
26
+ end
27
+ json.cache_if!(can_cache, can_cache ? association_cache_key(record, inc, subinc) : nil) do
28
+ value = record.send(inc)
29
+ if value.nil?
30
+ json.set! inc, nil
31
+ else
32
+ partial = model_partial(value)
33
+ json.set! inc do
34
+ json.partial! partial, partial.split('/').last.to_sym => value, includes: subinc
35
+ end
36
+ end
37
+ end
38
+
39
+ else
40
+ if record.respond_to?(inc)
41
+ value = record.send(inc)
42
+ if value.nil?
43
+ json.set! inc, nil
44
+ elsif value.is_a?(ActiveModel::Model)
45
+ json.set! inc do
46
+ partial = model_partial(value)
47
+ json.partial! partial, partial.split('/').last.to_sym => value, includes: subinc
48
+ end
49
+ else
50
+ json.set! inc, value.as_json
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ if !record.errors.blank?
58
+ errs = record.errors.to_hash
59
+ errs.default_proc = nil
60
+ json.set! 'errors', errs
61
+ end
62
+
63
+ end
@@ -0,0 +1,12 @@
1
+ if !includes.empty? && can_cache?(model, includes)
2
+ partial = model_partial(model)
3
+ record_name = partial.split('/').last.to_sym
4
+ locals = { record_name => nil, :includes => includes}
5
+
6
+ json.cache_collection! instance_variable_get("@#{model.model_name.plural}"), key: proc {|record| cache_key(record, includes) } do |record|
7
+ locals[record_name] = record
8
+ json.partial! partial, locals
9
+ end
10
+ else
11
+ json.array! instance_variable_get("@#{model.model_name.plural}"), partial: model_partial(model), as: model_partial(model).split('/').last, includes: includes
12
+ end
@@ -0,0 +1 @@
1
+ json.partial! model_partial(model), model_partial(model).split('/').last.to_sym => instance_variable_get("@#{model.model_name.singular}"), includes: includes
@@ -3,6 +3,7 @@ mapping = {
3
3
  'time without time zone' => 'datetime',
4
4
  'text' => 'string',
5
5
  'json' => 'hash',
6
+ 'bigint' => 'integer',
6
7
  'integer' => 'integer',
7
8
  'character varying(255)' => 'string',
8
9
  'character varying(128)' => 'string',
@@ -17,7 +18,8 @@ mapping = {
17
18
  'double precision' => 'decimal',
18
19
  'ltree' => 'string',
19
20
  'boolean' => 'boolean',
20
- 'geometry' => 'ewkb'
21
+ 'geometry' => 'ewkb',
22
+ 'uuid' => 'string'
21
23
  }
22
24
 
23
25
  json.set! 'columns' do
@@ -0,0 +1,39 @@
1
+ mapping = {
2
+ 'timestamp without time zone' => 'datetime',
3
+ 'time without time zone' => 'datetime',
4
+ 'text' => 'string',
5
+ 'json' => 'hash',
6
+ 'integer' => 'integer',
7
+ 'character varying(255)' => 'string',
8
+ 'character varying(128)' => 'string',
9
+ 'character varying(50)' => 'string',
10
+ 'character varying' => 'string',
11
+ 'jsonb' => 'hash',
12
+ 'inet' => 'string', #TODO: should be inet
13
+ 'hstore' => 'hash',
14
+ 'date' => 'datetime',
15
+ 'numeric(16,2)' => 'decimal',
16
+ 'numeric' => 'decimal',
17
+ 'double precision' => 'decimal',
18
+ 'ltree' => 'string',
19
+ 'boolean' => 'boolean',
20
+ 'geometry' => 'ewkb',
21
+ 'uuid' => 'string'
22
+ }
23
+
24
+ json.object! do
25
+ json.set! 'columns' do
26
+ json.object! do
27
+ model.columns.each do |column|
28
+ json.set! column.name, {
29
+ type: mapping[column.sql_type],
30
+ primary_key: column.name == model.primary_key,
31
+ null: column.null,
32
+ array: column.array
33
+ }
34
+ end
35
+ end
36
+ end
37
+
38
+ json.set! 'limit', resource_limit
39
+ end
@@ -0,0 +1 @@
1
+ json.partial! model_partial(model), model_partial(model).split('/').last.to_sym => instance_variable_get("@#{model.model_name.singular}"), includes: includes
data/lib/standard_api.rb CHANGED
@@ -2,8 +2,7 @@ require 'rails'
2
2
  require 'action_view'
3
3
  require 'action_pack'
4
4
  require 'action_controller'
5
- require 'jbuilder'
6
- require 'jbuilder/railtie'
5
+
7
6
  require 'active_record/filter'
8
7
  require 'active_record/sort'
9
8
  require 'active_support/core_ext/hash/indifferent_access'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standardapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.16
4
+ version: 5.2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-25 00:00:00.000000000 Z
11
+ date: 2018-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,120 +16,114 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '5.2'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 5.0.0
22
+ version: 5.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '5.0'
29
+ version: '5.2'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 5.0.0
32
+ version: 5.2.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '5.0'
39
+ version: '5.2'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 5.0.0
42
+ version: 5.2.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '5.0'
49
+ version: '5.2'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 5.0.0
52
+ version: 5.2.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: actionpack
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '5.0'
59
+ version: '5.2'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 5.0.0
62
+ version: 5.2.0
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '5.0'
69
+ version: '5.2'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 5.0.0
72
+ version: 5.2.0
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: activerecord-sort
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '5.0'
79
+ version: '5.2'
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 5.0.0
82
+ version: 5.2.0
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '5.0'
89
+ version: '5.2'
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 5.0.0
92
+ version: 5.2.0
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: activerecord-filter
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: '5.0'
99
+ version: '5.2'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 5.0.0
102
+ version: 5.2.0
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '5.0'
109
+ version: '5.2'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 5.0.0
112
+ version: 5.2.0
113
113
  - !ruby/object:Gem::Dependency
114
- name: jbuilder
114
+ name: pg
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '2.6'
120
117
  - - ">="
121
118
  - !ruby/object:Gem::Version
122
- version: 2.6.0
123
- type: :runtime
119
+ version: '0'
120
+ type: :development
124
121
  prerelease: false
125
122
  version_requirements: !ruby/object:Gem::Requirement
126
123
  requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '2.6'
130
124
  - - ">="
131
125
  - !ruby/object:Gem::Version
132
- version: 2.6.0
126
+ version: '0'
133
127
  - !ruby/object:Gem::Dependency
134
128
  name: bundler
135
129
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +139,7 @@ dependencies:
145
139
  - !ruby/object:Gem::Version
146
140
  version: '0'
147
141
  - !ruby/object:Gem::Dependency
148
- name: rake
142
+ name: jbuilder
149
143
  requirement: !ruby/object:Gem::Requirement
150
144
  requirements:
151
145
  - - ">="
@@ -159,7 +153,7 @@ dependencies:
159
153
  - !ruby/object:Gem::Version
160
154
  version: '0'
161
155
  - !ruby/object:Gem::Dependency
162
- name: minitest
156
+ name: rake
163
157
  requirement: !ruby/object:Gem::Requirement
164
158
  requirements:
165
159
  - - ">="
@@ -173,7 +167,7 @@ dependencies:
173
167
  - !ruby/object:Gem::Version
174
168
  version: '0'
175
169
  - !ruby/object:Gem::Dependency
176
- name: minitest-reporters
170
+ name: minitest
177
171
  requirement: !ruby/object:Gem::Requirement
178
172
  requirements:
179
173
  - - ">="
@@ -187,7 +181,7 @@ dependencies:
187
181
  - !ruby/object:Gem::Version
188
182
  version: '0'
189
183
  - !ruby/object:Gem::Dependency
190
- name: simplecov
184
+ name: minitest-reporters
191
185
  requirement: !ruby/object:Gem::Requirement
192
186
  requirements:
193
187
  - - ">="
@@ -201,7 +195,7 @@ dependencies:
201
195
  - !ruby/object:Gem::Version
202
196
  version: '0'
203
197
  - !ruby/object:Gem::Dependency
204
- name: factory_girl_rails
198
+ name: simplecov
205
199
  requirement: !ruby/object:Gem::Requirement
206
200
  requirements:
207
201
  - - ">="
@@ -215,7 +209,7 @@ dependencies:
215
209
  - !ruby/object:Gem::Version
216
210
  version: '0'
217
211
  - !ruby/object:Gem::Dependency
218
- name: faker
212
+ name: factory_bot_rails
219
213
  requirement: !ruby/object:Gem::Requirement
220
214
  requirements:
221
215
  - - ">="
@@ -229,7 +223,7 @@ dependencies:
229
223
  - !ruby/object:Gem::Version
230
224
  version: '0'
231
225
  - !ruby/object:Gem::Dependency
232
- name: byebug
226
+ name: faker
233
227
  requirement: !ruby/object:Gem::Requirement
234
228
  requirements:
235
229
  - - ">="
@@ -243,7 +237,7 @@ dependencies:
243
237
  - !ruby/object:Gem::Version
244
238
  version: '0'
245
239
  - !ruby/object:Gem::Dependency
246
- name: mocha
240
+ name: byebug
247
241
  requirement: !ruby/object:Gem::Requirement
248
242
  requirements:
249
243
  - - ">="
@@ -257,7 +251,7 @@ dependencies:
257
251
  - !ruby/object:Gem::Version
258
252
  version: '0'
259
253
  - !ruby/object:Gem::Dependency
260
- name: rails-controller-testing
254
+ name: mocha
261
255
  requirement: !ruby/object:Gem::Requirement
262
256
  requirements:
263
257
  - - ">="
@@ -299,11 +293,15 @@ files:
299
293
  - lib/standard_api/test_case/update_tests.rb
300
294
  - lib/standard_api/version.rb
301
295
  - lib/standard_api/views/application/_record.json.jbuilder
296
+ - lib/standard_api/views/application/_record.streamer
302
297
  - lib/standard_api/views/application/index.json.jbuilder
298
+ - lib/standard_api/views/application/index.streamer
303
299
  - lib/standard_api/views/application/new.json.jbuilder
300
+ - lib/standard_api/views/application/new.streamer
304
301
  - lib/standard_api/views/application/schema.json.jbuilder
305
- - lib/standard_api/views/application/settings.json.jbuilder
302
+ - lib/standard_api/views/application/schema.streamer
306
303
  - lib/standard_api/views/application/show.json.jbuilder
304
+ - lib/standard_api/views/application/show.streamer
307
305
  homepage: https://github.com/waratuman/standardapi
308
306
  licenses:
309
307
  - MIT
@@ -326,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
324
  version: '0'
327
325
  requirements: []
328
326
  rubyforge_project:
329
- rubygems_version: 2.5.1
327
+ rubygems_version: 2.7.6
330
328
  signing_key:
331
329
  specification_version: 4
332
330
  summary: StandardAPI makes it easy to expose a query interface for your Rails models