apicasso 0.4.5 → 0.4.6

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.
Files changed (79) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +226 -223
  3. data/Rakefile +23 -23
  4. data/app/controllers/apicasso/apidocs_controller.rb +309 -299
  5. data/app/controllers/apicasso/application_controller.rb +170 -147
  6. data/app/controllers/apicasso/crud_controller.rb +246 -245
  7. data/app/controllers/concerns/orderable.rb +45 -45
  8. data/app/models/apicasso/ability.rb +38 -38
  9. data/app/models/apicasso/application_record.rb +6 -6
  10. data/app/models/apicasso/key.rb +25 -25
  11. data/app/models/apicasso/request.rb +8 -8
  12. data/config/routes.rb +14 -14
  13. data/lib/apicasso/active_record_extension.rb +0 -44
  14. data/lib/apicasso/engine.rb +13 -13
  15. data/lib/apicasso/version.rb +3 -3
  16. data/lib/apicasso.rb +15 -13
  17. data/lib/generators/apicasso/install/install_generator.rb +25 -25
  18. data/lib/generators/apicasso/install/templates/create_apicasso_tables.rb +20 -20
  19. data/spec/dummy/Gemfile +56 -0
  20. data/spec/dummy/Gemfile.lock +237 -0
  21. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  22. data/spec/dummy/app/models/used_model.rb +42 -0
  23. data/spec/dummy/app/serializers/used_model_serializer.rb +3 -0
  24. data/spec/dummy/bin/rails +5 -0
  25. data/spec/dummy/bin/rake +5 -0
  26. data/spec/dummy/bin/setup +0 -3
  27. data/spec/dummy/bin/spring +17 -0
  28. data/spec/dummy/bin/update +0 -3
  29. data/spec/dummy/config/application.rb +14 -10
  30. data/spec/dummy/config/cable.yml +1 -1
  31. data/spec/dummy/config/credentials.yml.enc +1 -0
  32. data/spec/dummy/config/database.yml +5 -14
  33. data/spec/dummy/config/environments/development.rb +6 -10
  34. data/spec/dummy/config/environments/production.rb +1 -10
  35. data/spec/dummy/config/initializers/cors.rb +16 -0
  36. data/spec/dummy/config/locales/en.yml +7 -32
  37. data/spec/dummy/config/routes.rb +1 -1
  38. data/{db/migrate/20180826141433_create_apicasso_tables.rb → spec/dummy/db/migrate/20180918134607_create_apicasso_tables.rb} +1 -0
  39. data/spec/dummy/db/migrate/20180918141254_create_used_models.rb +44 -0
  40. data/spec/dummy/db/migrate/20180919130152_create_active_storage_tables.active_storage.rb +26 -0
  41. data/spec/dummy/db/migrate/20180920133933_change_used_model_to_validates.rb +7 -0
  42. data/spec/dummy/db/schema.rb +98 -0
  43. data/spec/dummy/db/seeds.rb +56 -0
  44. data/spec/factories/used_model.rb +28 -0
  45. data/spec/models/used_model_spec.rb +35 -0
  46. data/spec/rails_helper.rb +66 -0
  47. data/spec/requests/requests_spec.rb +227 -0
  48. data/spec/spec_helper.rb +7 -9
  49. data/spec/support/factory_bot.rb +3 -0
  50. metadata +83 -64
  51. data/spec/controllers/apicasso/aplication_controller_spec.rb +0 -18
  52. data/spec/controllers/apicasso/crud_controller_spec.rb +0 -107
  53. data/spec/dummy/app/assets/config/manifest.js +0 -3
  54. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  55. data/spec/dummy/app/assets/javascripts/cable.js +0 -13
  56. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  57. data/spec/dummy/app/channels/application_cable/channel.rb +0 -4
  58. data/spec/dummy/app/channels/application_cable/connection.rb +0 -4
  59. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  60. data/spec/dummy/app/jobs/application_job.rb +0 -2
  61. data/spec/dummy/app/mailers/application_mailer.rb +0 -4
  62. data/spec/dummy/app/views/layouts/application.html.erb +0 -15
  63. data/spec/dummy/app/views/layouts/mailer.html.erb +0 -13
  64. data/spec/dummy/app/views/layouts/mailer.text.erb +0 -1
  65. data/spec/dummy/bin/yarn +0 -11
  66. data/spec/dummy/config/initializers/assets.rb +0 -14
  67. data/spec/dummy/config/initializers/content_security_policy.rb +0 -25
  68. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -5
  69. data/spec/dummy/log/development.log +0 -0
  70. data/spec/dummy/public/404.html +0 -67
  71. data/spec/dummy/public/422.html +0 -67
  72. data/spec/dummy/public/500.html +0 -66
  73. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  74. data/spec/dummy/public/apple-touch-icon.png +0 -0
  75. data/spec/dummy/public/favicon.ico +0 -0
  76. data/spec/factories/apicasso_key.rb +0 -9
  77. data/spec/factories/object.rb +0 -5
  78. data/spec/models/apicasso/key.rb +0 -5
  79. data/spec/routing/appointments_routing_spec.rb +0 -38
@@ -1,6 +1,6 @@
1
- module Apicasso
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- self.table_name_prefix = 'apicasso_'
5
- end
6
- end
1
+ module Apicasso
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ self.table_name_prefix = 'apicasso_'
5
+ end
6
+ end
@@ -1,25 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
- module Apicasso
5
- # A model to abstract API access, with scope options, token generation, request limiting
6
- class Key < Apicasso::ApplicationRecord
7
- before_create :set_auth_token
8
-
9
- private
10
-
11
- # Method that generates `SecureRandom.uuid` as token until
12
- # an unique one has been acquired
13
- def set_auth_token
14
- loop do
15
- self.token = generate_auth_token
16
- break unless self.class.exists?(token: token)
17
- end
18
- end
19
-
20
- # RFC4122 style token
21
- def generate_auth_token
22
- SecureRandom.uuid.delete('-')
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ module Apicasso
5
+ # A model to abstract API access, with scope options, token generation, request limiting
6
+ class Key < Apicasso::ApplicationRecord
7
+ before_create :set_auth_token
8
+
9
+ private
10
+
11
+ # Method that generates `SecureRandom.uuid` as token until
12
+ # an unique one has been acquired
13
+ def set_auth_token
14
+ loop do
15
+ self.token = generate_auth_token
16
+ break unless self.class.exists?(token: token)
17
+ end
18
+ end
19
+
20
+ # RFC4122 style token
21
+ def generate_auth_token
22
+ SecureRandom.uuid.delete('-')
23
+ end
24
+ end
25
+ end
@@ -1,8 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- module Apicasso
4
- # A model to abstract API access, with scope options, token generation, request limiting
5
- class Request < Apicasso::ApplicationRecord
6
- belongs_to :api_key, class_name: 'Apicasso::Key'
7
- end
8
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Apicasso
4
+ # A model to abstract API access, with scope options, token generation, request limiting
5
+ class Request < Apicasso::ApplicationRecord
6
+ belongs_to :api_key, class_name: 'Apicasso::Key'
7
+ end
8
+ end
data/config/routes.rb CHANGED
@@ -1,14 +1,14 @@
1
- Apicasso::Engine.routes.draw do
2
- scope module: :apicasso do
3
- resources :apidocs, only: [:index]
4
- get '/:resource/', to: 'crud#index', via: :get
5
- match '/:resource/', to: 'crud#create', via: :post
6
- get '/:resource/:id', to: 'crud#show', via: :get
7
- match '/:resource/:id', to: 'crud#update', via: :patch
8
- match '/:resource/:id', to: 'crud#destroy', via: :delete
9
- match '/:resource/:id/:nested/', to: 'crud#nested_index', via: :get
10
- match '/:resource/', to: 'crud#schema', via: :options
11
- match '/:resource/:id', to: 'crud#schema', via: :options
12
- match '/:resource/:id/:nested/', to: 'crud#schema', via: :options
13
- end
14
- end
1
+ Apicasso::Engine.routes.draw do
2
+ scope module: :apicasso do
3
+ resources :apidocs, only: [:index]
4
+ get '/:resource/', to: 'crud#index', via: :get
5
+ match '/:resource/', to: 'crud#create', via: :post
6
+ get '/:resource/:id', to: 'crud#show', via: :get
7
+ match '/:resource/:id', to: 'crud#update', via: :patch
8
+ match '/:resource/:id', to: 'crud#destroy', via: :delete
9
+ match '/:resource/:id/:nested/', to: 'crud#nested_index', via: :get
10
+ match '/:resource/', to: 'crud#schema', via: :options
11
+ match '/:resource/:id', to: 'crud#schema', via: :options
12
+ match '/:resource/:id/:nested/', to: 'crud#schema', via: :options
13
+ end
14
+ end
@@ -29,50 +29,6 @@ module Apicasso
29
29
  validated_attrs_for(:presence)
30
30
  end
31
31
  end
32
- included do
33
- include ::Swagger::Blocks
34
- @@klass = self
35
- swagger_schema @@klass.name.to_sym do
36
- key :required, %i[*presence_validators] if @@klass.presence_validators?
37
- @@klass.columns_hash.each do |name, type|
38
- property name.to_sym do
39
- key :type, type.type
40
- end
41
- end
42
- end
43
- swagger_schema "#{@@klass.name}Input".to_sym do
44
- allOf do
45
- schema do
46
- key :'$ref', "#{@@klass.name}Input".to_sym
47
- end
48
- schema do
49
- key :required, %i[*presence_validators] if @@klass.presence_validators?
50
- @@klass.columns_hash.each do |name, type|
51
- property name.to_sym do
52
- key :type, type.type
53
- end
54
- end
55
- end
56
- end
57
- end
58
- swagger_schema "#{@@klass.name}Metadata".to_sym do
59
- allOf do
60
- schema do
61
- key :'$ref', "#{@@klass.name}Metadata".to_sym
62
- end
63
- schema do
64
- @@klass.columns_hash.each do |name, type|
65
- property name.to_sym do
66
- key :description, type.type
67
- key :type, :string
68
- end
69
- end
70
- end
71
- end
72
- end
73
- rescue ActiveRecord::ConnectionNotEstablished
74
- puts "No database connection to setup APIcasso routes in documentation"
75
- end
76
32
  end
77
33
  end
78
34
 
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Apicasso
4
- # Behavior control for the Apicasso::Engine
5
- class Engine < ::Rails::Engine
6
- config.generators do |g|
7
- g.test_framework :rspec, fixture: false
8
- g.fixture_replacement :factory_girl, dir: 'spec/factories'
9
- g.assets false
10
- g.helper false
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Apicasso
4
+ # Behavior control for the Apicasso::Engine
5
+ class Engine < ::Rails::Engine
6
+ config.generators do |g|
7
+ g.test_framework :rspec, fixture: false
8
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
9
+ g.assets false
10
+ g.helper false
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
- module Apicasso
2
- VERSION = '0.4.5'.freeze
3
- end
1
+ module Apicasso
2
+ VERSION = '0.4.6'.freeze
3
+ end
data/lib/apicasso.rb CHANGED
@@ -1,13 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- require 'cancancan'
4
- require 'swagger/blocks'
5
- require 'ransack'
6
- require 'will_paginate'
7
- require 'apicasso/version'
8
- require 'apicasso/engine'
9
- require 'apicasso/active_record_extension'
10
-
11
- module Apicasso
12
- # Your code goes here...
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'cancancan'
4
+ require 'swagger/blocks'
5
+ require 'ransack'
6
+ require 'will_paginate/array'
7
+ require 'will_paginate'
8
+ require 'apicasso/version'
9
+ require 'apicasso/engine'
10
+ require 'apicasso/active_record_extension'
11
+ require 'friendly_id'
12
+
13
+ module Apicasso
14
+ # Your code goes here...
15
+ end
@@ -1,25 +1,25 @@
1
- require 'rails/generators/migration'
2
-
3
- module Apicasso
4
- module Generators
5
- class InstallGenerator < ::Rails::Generators::Base
6
- include Rails::Generators::Migration
7
- source_root File.expand_path('../templates', __FILE__)
8
- desc 'Add the required migrations to run APIcasso'
9
-
10
- def self.next_migration_number(path)
11
- if @prev_migration_nr
12
- @prev_migration_nr += 1
13
- else
14
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
15
- end
16
- @prev_migration_nr.to_s
17
- end
18
-
19
- def copy_migrations
20
- migration_template 'create_apicasso_tables.rb',
21
- 'db/migrate/create_apicasso_tables.rb'
22
- end
23
- end
24
- end
25
- end
1
+ require 'rails/generators/migration'
2
+
3
+ module Apicasso
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../templates', __FILE__)
8
+ desc 'Add the required migrations to run APIcasso'
9
+
10
+ def self.next_migration_number(path)
11
+ if @prev_migration_nr
12
+ @prev_migration_nr += 1
13
+ else
14
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
15
+ end
16
+ @prev_migration_nr.to_s
17
+ end
18
+
19
+ def copy_migrations
20
+ migration_template 'create_apicasso_tables.rb',
21
+ 'db/migrate/create_apicasso_tables.rb'
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,20 +1,20 @@
1
- class CreateApicassoTables < ActiveRecord::Migration[5.0]
2
- def change
3
- execute <<-SQL
4
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
5
- SQL
6
- create_table :apicasso_keys, id: :uuid do |t|
7
- t.json :scope
8
- t.integer :scope_type
9
- t.json :request_limiting
10
- t.text :token
11
- t.datetime :deleted_at
12
- t.timestamps null: false
13
- end
14
- create_table :apicasso_requests, id: :uuid do |t|
15
- t.text :api_key_id
16
- t.json :object
17
- t.timestamps null: false
18
- end
19
- end
20
- end
1
+ class CreateApicassoTables < ActiveRecord::Migration[5.0]
2
+ def change
3
+ execute <<-SQL
4
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
5
+ SQL
6
+ create_table :apicasso_keys, id: :uuid do |t|
7
+ t.json :scope
8
+ t.integer :scope_type
9
+ t.json :request_limiting
10
+ t.text :token
11
+ t.datetime :deleted_at
12
+ t.timestamps null: false
13
+ end
14
+ create_table :apicasso_requests, id: :uuid do |t|
15
+ t.text :api_key_id
16
+ t.json :object
17
+ t.timestamps null: false
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,56 @@
1
+ source 'https://rubygems.org'
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+
4
+ ruby '2.5.1'
5
+
6
+ # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
7
+ gem 'rails', '~> 5.2.0'
8
+ # Use postgresql as the database for Active Record
9
+ gem 'pg', '>= 0.18', '< 2.0'
10
+ # Use Puma as the app server
11
+ gem 'puma', '~> 3.11'
12
+ # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
13
+ # gem 'jbuilder', '~> 2.5'
14
+ # Use Redis adapter to run Action Cable in production
15
+ gem 'redis', '~> 4.0'
16
+ # Use ActiveModel has_secure_password
17
+ # gem 'bcrypt', '~> 3.1.7'
18
+
19
+ # Use ActiveStorage variant
20
+ # gem 'mini_magick', '~> 4.8'
21
+
22
+ # Use Capistrano for deployment
23
+ # gem 'capistrano-rails', group: :development
24
+
25
+ # Reduces boot times through caching; required in config/boot.rb
26
+ gem 'bootsnap', '>= 1.1.0', require: false
27
+
28
+ # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
29
+ # gem 'rack-cors'
30
+
31
+ # gem 'cancancan'
32
+ # gem 'ransack'
33
+ # gem 'will_paginate'
34
+ gem 'apicasso'
35
+ gem 'redis-rails'
36
+ gem 'redis-namespace'
37
+ gem 'active_model_serializers'
38
+
39
+ group :development, :test do
40
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
41
+ gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
42
+ gem 'rspec-rails'
43
+ gem 'factory_bot_rails'
44
+ gem 'faker', :git => 'https://github.com/stympy/faker.git', :branch => 'master'
45
+ end
46
+
47
+ group :development do
48
+ gem 'listen', '>= 3.0.5', '< 3.2'
49
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
50
+ gem 'spring'
51
+ gem 'spring-watcher-listen', '~> 2.0.0'
52
+ end
53
+
54
+
55
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
56
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
@@ -0,0 +1,237 @@
1
+ GIT
2
+ remote: https://github.com/stympy/faker.git
3
+ revision: 62b5857970218fc7615deb12d844fc4645c4c69f
4
+ branch: master
5
+ specs:
6
+ faker (1.9.1)
7
+ i18n (>= 0.7)
8
+
9
+ PATH
10
+ remote: ../APIcasso
11
+ specs:
12
+ apicasso (0.4.4)
13
+ cancancan (~> 2.0)
14
+ friendly_id (~> 5.2.0)
15
+ rails (> 5)
16
+ ransack
17
+ swagger-blocks
18
+ will_paginate (~> 3.1.0)
19
+
20
+ GEM
21
+ remote: https://rubygems.org/
22
+ specs:
23
+ actioncable (5.2.1)
24
+ actionpack (= 5.2.1)
25
+ nio4r (~> 2.0)
26
+ websocket-driver (>= 0.6.1)
27
+ actionmailer (5.2.1)
28
+ actionpack (= 5.2.1)
29
+ actionview (= 5.2.1)
30
+ activejob (= 5.2.1)
31
+ mail (~> 2.5, >= 2.5.4)
32
+ rails-dom-testing (~> 2.0)
33
+ actionpack (5.2.1)
34
+ actionview (= 5.2.1)
35
+ activesupport (= 5.2.1)
36
+ rack (~> 2.0)
37
+ rack-test (>= 0.6.3)
38
+ rails-dom-testing (~> 2.0)
39
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
40
+ actionview (5.2.1)
41
+ activesupport (= 5.2.1)
42
+ builder (~> 3.1)
43
+ erubi (~> 1.4)
44
+ rails-dom-testing (~> 2.0)
45
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
46
+ active_model_serializers (0.10.8)
47
+ actionpack (>= 4.1, < 6)
48
+ activemodel (>= 4.1, < 6)
49
+ case_transform (>= 0.2)
50
+ jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
51
+ activejob (5.2.1)
52
+ activesupport (= 5.2.1)
53
+ globalid (>= 0.3.6)
54
+ activemodel (5.2.1)
55
+ activesupport (= 5.2.1)
56
+ activerecord (5.2.1)
57
+ activemodel (= 5.2.1)
58
+ activesupport (= 5.2.1)
59
+ arel (>= 9.0)
60
+ activestorage (5.2.1)
61
+ actionpack (= 5.2.1)
62
+ activerecord (= 5.2.1)
63
+ marcel (~> 0.3.1)
64
+ activesupport (5.2.1)
65
+ concurrent-ruby (~> 1.0, >= 1.0.2)
66
+ i18n (>= 0.7, < 2)
67
+ minitest (~> 5.1)
68
+ tzinfo (~> 1.1)
69
+ arel (9.0.0)
70
+ bootsnap (1.3.2)
71
+ msgpack (~> 1.0)
72
+ builder (3.2.3)
73
+ byebug (10.0.2)
74
+ cancancan (2.3.0)
75
+ case_transform (0.2)
76
+ activesupport
77
+ concurrent-ruby (1.1.1)
78
+ crass (1.0.4)
79
+ diff-lcs (1.3)
80
+ erubi (1.7.1)
81
+ factory_bot (4.11.1)
82
+ activesupport (>= 3.0.0)
83
+ factory_bot_rails (4.11.1)
84
+ factory_bot (~> 4.11.1)
85
+ railties (>= 3.0.0)
86
+ ffi (1.9.25)
87
+ friendly_id (5.2.4)
88
+ activerecord (>= 4.0.0)
89
+ globalid (0.4.1)
90
+ activesupport (>= 4.2.0)
91
+ i18n (1.1.1)
92
+ concurrent-ruby (~> 1.0)
93
+ jsonapi-renderer (0.2.0)
94
+ listen (3.1.5)
95
+ rb-fsevent (~> 0.9, >= 0.9.4)
96
+ rb-inotify (~> 0.9, >= 0.9.7)
97
+ ruby_dep (~> 1.2)
98
+ loofah (2.2.3)
99
+ crass (~> 1.0.2)
100
+ nokogiri (>= 1.5.9)
101
+ mail (2.7.1)
102
+ mini_mime (>= 0.1.1)
103
+ marcel (0.3.3)
104
+ mimemagic (~> 0.3.2)
105
+ method_source (0.9.1)
106
+ mimemagic (0.3.2)
107
+ mini_mime (1.0.1)
108
+ mini_portile2 (2.3.0)
109
+ minitest (5.11.3)
110
+ msgpack (1.2.4)
111
+ nio4r (2.3.1)
112
+ nokogiri (1.8.5)
113
+ mini_portile2 (~> 2.3.0)
114
+ pg (1.1.3)
115
+ puma (3.12.0)
116
+ rack (2.0.5)
117
+ rack-test (1.1.0)
118
+ rack (>= 1.0, < 3)
119
+ rails (5.2.1)
120
+ actioncable (= 5.2.1)
121
+ actionmailer (= 5.2.1)
122
+ actionpack (= 5.2.1)
123
+ actionview (= 5.2.1)
124
+ activejob (= 5.2.1)
125
+ activemodel (= 5.2.1)
126
+ activerecord (= 5.2.1)
127
+ activestorage (= 5.2.1)
128
+ activesupport (= 5.2.1)
129
+ bundler (>= 1.3.0)
130
+ railties (= 5.2.1)
131
+ sprockets-rails (>= 2.0.0)
132
+ rails-dom-testing (2.0.3)
133
+ activesupport (>= 4.2.0)
134
+ nokogiri (>= 1.6)
135
+ rails-html-sanitizer (1.0.4)
136
+ loofah (~> 2.2, >= 2.2.2)
137
+ railties (5.2.1)
138
+ actionpack (= 5.2.1)
139
+ activesupport (= 5.2.1)
140
+ method_source
141
+ rake (>= 0.8.7)
142
+ thor (>= 0.19.0, < 2.0)
143
+ rake (12.3.1)
144
+ ransack (2.1.0)
145
+ actionpack (>= 5.0)
146
+ activerecord (>= 5.0)
147
+ activesupport (>= 5.0)
148
+ i18n
149
+ rb-fsevent (0.10.3)
150
+ rb-inotify (0.9.10)
151
+ ffi (>= 0.5.0, < 2)
152
+ redis (4.0.3)
153
+ redis-actionpack (5.0.2)
154
+ actionpack (>= 4.0, < 6)
155
+ redis-rack (>= 1, < 3)
156
+ redis-store (>= 1.1.0, < 2)
157
+ redis-activesupport (5.0.7)
158
+ activesupport (>= 3, < 6)
159
+ redis-store (>= 1.3, < 2)
160
+ redis-namespace (1.6.0)
161
+ redis (>= 3.0.4)
162
+ redis-rack (2.0.4)
163
+ rack (>= 1.5, < 3)
164
+ redis-store (>= 1.2, < 2)
165
+ redis-rails (5.0.2)
166
+ redis-actionpack (>= 5.0, < 6)
167
+ redis-activesupport (>= 5.0, < 6)
168
+ redis-store (>= 1.2, < 2)
169
+ redis-store (1.6.0)
170
+ redis (>= 2.2, < 5)
171
+ rspec-core (3.8.0)
172
+ rspec-support (~> 3.8.0)
173
+ rspec-expectations (3.8.2)
174
+ diff-lcs (>= 1.2.0, < 2.0)
175
+ rspec-support (~> 3.8.0)
176
+ rspec-mocks (3.8.0)
177
+ diff-lcs (>= 1.2.0, < 2.0)
178
+ rspec-support (~> 3.8.0)
179
+ rspec-rails (3.8.1)
180
+ actionpack (>= 3.0)
181
+ activesupport (>= 3.0)
182
+ railties (>= 3.0)
183
+ rspec-core (~> 3.8.0)
184
+ rspec-expectations (~> 3.8.0)
185
+ rspec-mocks (~> 3.8.0)
186
+ rspec-support (~> 3.8.0)
187
+ rspec-support (3.8.0)
188
+ ruby_dep (1.5.0)
189
+ spring (2.0.2)
190
+ activesupport (>= 4.2)
191
+ spring-watcher-listen (2.0.1)
192
+ listen (>= 2.7, < 4.0)
193
+ spring (>= 1.2, < 3.0)
194
+ sprockets (3.7.2)
195
+ concurrent-ruby (~> 1.0)
196
+ rack (> 1, < 3)
197
+ sprockets-rails (3.2.1)
198
+ actionpack (>= 4.0)
199
+ activesupport (>= 4.0)
200
+ sprockets (>= 3.0.0)
201
+ swagger-blocks (2.0.2)
202
+ thor (0.20.0)
203
+ thread_safe (0.3.6)
204
+ tzinfo (1.2.5)
205
+ thread_safe (~> 0.1)
206
+ websocket-driver (0.7.0)
207
+ websocket-extensions (>= 0.1.0)
208
+ websocket-extensions (0.1.3)
209
+ will_paginate (3.1.6)
210
+
211
+ PLATFORMS
212
+ ruby
213
+
214
+ DEPENDENCIES
215
+ active_model_serializers
216
+ apicasso!
217
+ bootsnap (>= 1.1.0)
218
+ byebug
219
+ factory_bot_rails
220
+ faker!
221
+ listen (>= 3.0.5, < 3.2)
222
+ pg (>= 0.18, < 2.0)
223
+ puma (~> 3.11)
224
+ rails (~> 5.2.0)
225
+ redis (~> 4.0)
226
+ redis-namespace
227
+ redis-rails
228
+ rspec-rails
229
+ spring
230
+ spring-watcher-listen (~> 2.0.0)
231
+ tzinfo-data
232
+
233
+ RUBY VERSION
234
+ ruby 2.5.1p57
235
+
236
+ BUNDLED WITH
237
+ 1.16.6
@@ -1,2 +1,2 @@
1
- class ApplicationController < ActionController::Base
1
+ class ApplicationController < ActionController::API
2
2
  end
@@ -0,0 +1,42 @@
1
+ class UsedModel < ApplicationRecord
2
+ include Rails.application.routes.url_helpers
3
+
4
+ validates :account_id, presence: true
5
+ validates :unit_id, presence: true
6
+ validates :slug, presence: true, uniqueness: true
7
+
8
+ has_one_attached :file_highlighted
9
+ has_many_attached :files
10
+
11
+ extend FriendlyId
12
+ friendly_id :name, use: :slugged
13
+
14
+ def file_highlighted_url
15
+ rails_blob_path(file_highlighted, only_path: true) if nil? { file_highlighted_url = nil }
16
+ end
17
+
18
+ def files_url
19
+ used_model_attachments = self.files.attachments
20
+ urls = []
21
+ used_model_attachments.each do |attachment|
22
+ urls << rails_blob_path(attachment, only_path: true)
23
+ end
24
+ urls
25
+ end
26
+
27
+ def cache_key(*timestamp_names)
28
+ case
29
+ when new_record?
30
+ "#{model_name.cache_key}/new"
31
+ when timestamp_names.any?
32
+ timestamp = max_updated_column_timestamp(timestamp_names = timestamp_attributes_for_update_in_model)
33
+ timestamp = timestamp.utc.to_s(cache_timestamp_format)
34
+ "#{model_name.cache_key}/#{id}-#{timestamp}"
35
+ when timestamp = max_updated_column_timestamp
36
+ timestamp = timestamp.utc.to_s(cache_timestamp_format)
37
+ "#{model_name.cache_key}/#{id}-#{timestamp}"
38
+ else
39
+ "#{model_name.cache_key}/#{id}"
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ class UsedModelSerializer < ActiveModel::Serializer
2
+ cache key: 'cache_key', expires_in: 24.hours
3
+ end
data/spec/dummy/bin/rails CHANGED
@@ -1,4 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path('../spring', __FILE__)
4
+ rescue LoadError => e
5
+ raise unless e.message.include?('spring')
6
+ end
2
7
  APP_PATH = File.expand_path('../config/application', __dir__)
3
8
  require_relative '../config/boot'
4
9
  require 'rails/commands'