upgrow 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -12
  3. data/Rakefile +8 -4
  4. data/lib/upgrow.rb +13 -2
  5. data/lib/upgrow/action.rb +54 -0
  6. data/lib/upgrow/active_record_adapter.rb +73 -0
  7. data/lib/upgrow/basic_repository.rb +45 -0
  8. data/lib/upgrow/immutable_object.rb +57 -0
  9. data/lib/upgrow/immutable_struct.rb +40 -0
  10. data/lib/upgrow/input.rb +47 -0
  11. data/lib/upgrow/model.rb +35 -0
  12. data/lib/upgrow/repository.rb +12 -0
  13. data/lib/upgrow/result.rb +94 -0
  14. data/test/application_system_test_case.rb +13 -0
  15. data/test/dummy/app/actions/create_article_action.rb +13 -0
  16. data/test/dummy/app/actions/delete_article_action.rb +7 -0
  17. data/test/dummy/app/actions/edit_article_action.rb +10 -0
  18. data/test/dummy/app/actions/list_articles_action.rb +8 -0
  19. data/test/dummy/app/actions/show_article_action.rb +10 -0
  20. data/test/dummy/app/actions/update_article_action.rb +13 -0
  21. data/test/dummy/app/channels/application_cable/channel.rb +5 -0
  22. data/test/dummy/app/channels/application_cable/connection.rb +5 -0
  23. data/test/dummy/app/controllers/application_controller.rb +3 -0
  24. data/test/dummy/app/controllers/articles_controller.rb +64 -0
  25. data/test/dummy/app/helpers/application_helper.rb +102 -0
  26. data/test/dummy/app/inputs/article_input.rb +8 -0
  27. data/test/dummy/app/jobs/application_job.rb +9 -0
  28. data/test/dummy/app/mailers/application_mailer.rb +5 -0
  29. data/test/dummy/app/models/article.rb +6 -0
  30. data/test/dummy/app/records/application_record.rb +5 -0
  31. data/test/dummy/app/records/article_record.rb +5 -0
  32. data/test/dummy/app/repositories/article_repository.rb +4 -0
  33. data/test/dummy/config/application.rb +23 -0
  34. data/test/dummy/config/boot.rb +6 -0
  35. data/test/dummy/config/environment.rb +6 -0
  36. data/test/dummy/config/environments/development.rb +79 -0
  37. data/test/dummy/config/environments/production.rb +133 -0
  38. data/test/dummy/config/environments/test.rb +61 -0
  39. data/test/dummy/config/initializers/application_controller_renderer.rb +9 -0
  40. data/test/dummy/config/initializers/assets.rb +13 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +12 -0
  42. data/test/dummy/config/initializers/content_security_policy.rb +31 -0
  43. data/test/dummy/config/initializers/cookies_serializer.rb +6 -0
  44. data/test/dummy/config/initializers/filter_parameter_logging.rb +7 -0
  45. data/test/dummy/config/initializers/inflections.rb +17 -0
  46. data/test/dummy/config/initializers/mime_types.rb +5 -0
  47. data/test/dummy/config/initializers/permissions_policy.rb +12 -0
  48. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  49. data/test/dummy/config/puma.rb +44 -0
  50. data/test/dummy/config/routes.rb +7 -0
  51. data/test/dummy/db/migrate/20210219211631_create_articles.rb +11 -0
  52. data/test/dummy/db/schema.rb +22 -0
  53. data/test/rails_helper.rb +21 -0
  54. data/test/system/articles_test.rb +109 -0
  55. data/test/test_helper.rb +3 -3
  56. data/test/upgrow/action_test.rb +25 -0
  57. data/test/upgrow/active_record_adapter_test.rb +94 -0
  58. data/test/upgrow/basic_repository_test.rb +73 -0
  59. data/test/upgrow/documentation_test.rb +12 -0
  60. data/test/upgrow/immutable_object_test.rb +60 -0
  61. data/test/upgrow/immutable_struct_test.rb +49 -0
  62. data/test/upgrow/input_test.rb +65 -0
  63. data/test/upgrow/model_test.rb +27 -0
  64. data/test/upgrow/result_test.rb +95 -0
  65. metadata +128 -7
  66. data/test/documentation_test.rb +0 -10
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Article < Upgrow::Model
4
+ attribute :title
5
+ attribute :body
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationRecord < ActiveRecord::Base
4
+ self.abstract_class = true
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ArticleRecord < ApplicationRecord
4
+ self.table_name = 'articles'
5
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ArticleRepository < Upgrow::Repository
4
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'boot'
3
+
4
+ require 'rails/all'
5
+
6
+ # Require the gems listed in Gemfile, including any gems
7
+ # you've limited to :test, :development, or :production.
8
+ Bundler.require(*Rails.groups)
9
+ require 'upgrow'
10
+
11
+ module Dummy
12
+ class Application < Rails::Application
13
+ config.load_defaults(Rails::VERSION::STRING.to_f)
14
+
15
+ # Configuration for the application, engines, and railties goes here.
16
+ #
17
+ # These settings can be overridden in specific environments using the files
18
+ # in config/environments, which are processed later.
19
+ #
20
+ # config.time_zone = "Central Time (US & Canada)"
21
+ # config.eager_load_paths << Rails.root.join("extras")
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # Set up gems listed in the Gemfile.
3
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
4
+
5
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
6
+ $LOAD_PATH.unshift(File.expand_path('../../../lib', __dir__))
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # Load the Rails application.
3
+ require_relative 'application'
4
+
5
+ # Initialize the Rails application.
6
+ Rails.application.initialize!
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+ require 'active_support/core_ext/integer/time'
3
+
4
+ Rails.application.configure do
5
+ # Settings specified here will take precedence over those in
6
+ # config/application.rb.
7
+
8
+ # In the development environment your application's code is reloaded any time
9
+ # it changes. This slows down response time but is perfect for development
10
+ # since you don't have to restart the web server when you make code changes.
11
+ config.cache_classes = false
12
+
13
+ # Do not eager load code on boot.
14
+ config.eager_load = false
15
+
16
+ # Show full error reports.
17
+ config.consider_all_requests_local = true
18
+
19
+ # Enable/disable caching. By default caching is disabled.
20
+ # Run rails dev:cache to toggle caching.
21
+ if Rails.root.join('tmp', 'caching-dev.txt').exist?
22
+ config.action_controller.perform_caching = true
23
+ config.action_controller.enable_fragment_cache_logging = true
24
+
25
+ config.cache_store = :memory_store
26
+ config.public_file_server.headers = {
27
+ 'Cache-Control' => "public, max-age=#{2.days.to_i}",
28
+ }
29
+ else
30
+ config.action_controller.perform_caching = false
31
+
32
+ config.cache_store = :null_store
33
+ end
34
+
35
+ # Store uploaded files on the local file system (see config/storage.yml for
36
+ # options).
37
+ config.active_storage.service = :local
38
+
39
+ # Don't care if the mailer can't send.
40
+ config.action_mailer.raise_delivery_errors = false
41
+
42
+ config.action_mailer.perform_caching = false
43
+
44
+ # Print deprecation notices to the Rails logger.
45
+ config.active_support.deprecation = :log
46
+
47
+ # Raise exceptions for disallowed deprecations.
48
+ config.active_support.disallowed_deprecation = :raise
49
+
50
+ # Tell Active Support which deprecation messages to disallow.
51
+ config.active_support.disallowed_deprecation_warnings = []
52
+
53
+ # Raise an error on page load if there are pending migrations.
54
+ config.active_record.migration_error = :page_load
55
+
56
+ # Highlight code that triggered database queries in logs.
57
+ config.active_record.verbose_query_logs = true
58
+
59
+ # Debug mode disables concatenation and preprocessing of assets.
60
+ # This option may cause significant delays in view rendering with a large
61
+ # number of complex assets.
62
+ config.assets.debug = true
63
+
64
+ # Suppress logger output for asset requests.
65
+ config.assets.quiet = true
66
+
67
+ # Raises error for missing translations.
68
+ # config.i18n.raise_on_missing_translations = true
69
+
70
+ # Annotate rendered view with file names.
71
+ # config.action_view.annotate_rendered_view_with_filenames = true
72
+
73
+ # Use an evented file watcher to asynchronously detect changes in source code,
74
+ # routes, locales, etc. This feature depends on the listen gem.
75
+ # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
76
+
77
+ # Uncomment if you wish to allow Action Cable access from any origin.
78
+ # config.action_cable.disable_request_forgery_protection = true
79
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+ require 'active_support/core_ext/integer/time'
3
+
4
+ Rails.application.configure do
5
+ # Settings specified here will take precedence over those in
6
+ # config/application.rb.
7
+
8
+ # Code is not reloaded between requests.
9
+ config.cache_classes = true
10
+
11
+ # Eager load code on boot. This eager loads most of Rails and
12
+ # your application in memory, allowing both threaded web servers
13
+ # and those relying on copy on write to perform better.
14
+ # Rake tasks automatically ignore this option for performance.
15
+ config.eager_load = true
16
+
17
+ # Full error reports are disabled and caching is turned on.
18
+ config.consider_all_requests_local = false
19
+ config.action_controller.perform_caching = true
20
+
21
+ # Ensures that a master key has been made available in either
22
+ # ENV["RAILS_MASTER_KEY"] or in config/master.key. This key is used to decrypt
23
+ # credentials (and other encrypted files).
24
+ # config.require_master_key = true
25
+
26
+ # Disable serving static files from the `/public` folder by default since
27
+ # Apache or NGINX already handles this.
28
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
29
+
30
+ # Compress CSS using a preprocessor.
31
+ # config.assets.css_compressor = :sass
32
+
33
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
34
+ config.assets.compile = false
35
+
36
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
37
+ # config.asset_host = 'http://assets.example.com'
38
+
39
+ # Specifies the header that your server uses for sending files.
40
+ # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
41
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
42
+
43
+ # Store uploaded files on the local file system (see config/storage.yml for
44
+ # options).
45
+ config.active_storage.service = :local
46
+
47
+ # Mount Action Cable outside main process or domain.
48
+ # config.action_cable.mount_path = nil
49
+ # config.action_cable.url = 'wss://example.com/cable'
50
+ # config.action_cable.allowed_request_origins =
51
+ # [ 'http://example.com', /http:\/\/example.*/ ]
52
+
53
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use
54
+ # secure cookies.
55
+ # config.force_ssl = true
56
+
57
+ # Include generic and useful information about system operation, but avoid
58
+ # logging too much information to avoid inadvertent exposure of personally
59
+ # identifiable information (PII).
60
+ config.log_level = :info
61
+
62
+ # Prepend all log lines with the following tags.
63
+ config.log_tags = [:request_id]
64
+
65
+ # Use a different cache store in production.
66
+ # config.cache_store = :mem_cache_store
67
+
68
+ # Use a real queuing backend for Active Job (and separate queues per
69
+ # environment).
70
+ # config.active_job.queue_adapter = :resque
71
+ # config.active_job.queue_name_prefix = "dummy_production"
72
+
73
+ config.action_mailer.perform_caching = false
74
+
75
+ # Ignore bad email addresses and do not raise email delivery errors.
76
+ # Set this to true and configure the email server for immediate delivery to
77
+ # raise delivery errors.
78
+ # config.action_mailer.raise_delivery_errors = false
79
+
80
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
81
+ # the I18n.default_locale when a translation cannot be found).
82
+ config.i18n.fallbacks = true
83
+
84
+ # Send deprecation notices to registered listeners.
85
+ config.active_support.deprecation = :notify
86
+
87
+ # Log disallowed deprecations.
88
+ config.active_support.disallowed_deprecation = :log
89
+
90
+ # Tell Active Support which deprecation messages to disallow.
91
+ config.active_support.disallowed_deprecation_warnings = []
92
+
93
+ # Use default logging formatter so that PID and timestamp are not suppressed.
94
+ config.log_formatter = ::Logger::Formatter.new
95
+
96
+ # Use a different logger for distributed setups.
97
+ # require "syslog/logger"
98
+ # config.logger = ActiveSupport::TaggedLogging.new(
99
+ # Syslog::Logger.new 'app-name'
100
+ # )
101
+
102
+ if ENV['RAILS_LOG_TO_STDOUT'].present?
103
+ logger = ActiveSupport::Logger.new(STDOUT)
104
+ logger.formatter = config.log_formatter
105
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
106
+ end
107
+
108
+ # Do not dump schema after migrations.
109
+ config.active_record.dump_schema_after_migration = false
110
+
111
+ # Inserts middleware to perform automatic connection switching.
112
+ # The `database_selector` hash is used to pass options to the DatabaseSelector
113
+ # middleware. The `delay` is used to determine how long to wait after a write
114
+ # to send a subsequent read to the primary.
115
+ #
116
+ # The `database_resolver` class is used by the middleware to determine which
117
+ # database is appropriate to use based on the time delay.
118
+ #
119
+ # The `database_resolver_context` class is used by the middleware to set
120
+ # timestamps for the last write to the primary. The resolver uses the context
121
+ # class timestamps to determine how long to wait before reading from the
122
+ # replica.
123
+ #
124
+ # By default Rails will store a last write timestamp in the session. The
125
+ # DatabaseSelector middleware is designed as such you can define your own
126
+ # strategy for connection switching and pass that into the middleware through
127
+ # these configuration options.
128
+ # config.active_record.database_selector = { delay: 2.seconds }
129
+ # config.active_record.database_resolver =
130
+ # ActiveRecord::Middleware::DatabaseSelector::Resolver
131
+ # config.active_record.database_resolver_context =
132
+ # ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
133
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ require 'active_support/core_ext/integer/time'
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+
9
+ Rails.application.configure do
10
+ # Settings specified here will take precedence over those in
11
+ # config/application.rb.
12
+
13
+ config.cache_classes = true
14
+
15
+ # Do not eager load code on boot. This avoids loading your whole application
16
+ # just for the purpose of running a single test. If you are using a tool that
17
+ # preloads Rails for running tests, you may have to set it to true.
18
+ config.eager_load = false
19
+
20
+ # Configure public file server for tests with Cache-Control for performance.
21
+ config.public_file_server.enabled = true
22
+ config.public_file_server.headers = {
23
+ 'Cache-Control' => "public, max-age=#{1.hour.to_i}",
24
+ }
25
+
26
+ # Show full error reports and disable caching.
27
+ config.consider_all_requests_local = true
28
+ config.action_controller.perform_caching = false
29
+ config.cache_store = :null_store
30
+
31
+ # Raise exceptions instead of rendering exception templates.
32
+ config.action_dispatch.show_exceptions = false
33
+
34
+ # Disable request forgery protection in test environment.
35
+ config.action_controller.allow_forgery_protection = false
36
+
37
+ # Store uploaded files on the local file system in a temporary directory.
38
+ config.active_storage.service = :test
39
+
40
+ config.action_mailer.perform_caching = false
41
+
42
+ # Tell Action Mailer not to deliver emails to the real world.
43
+ # The :test delivery method accumulates sent emails in the
44
+ # ActionMailer::Base.deliveries array.
45
+ config.action_mailer.delivery_method = :test
46
+
47
+ # Print deprecation notices to the stderr.
48
+ config.active_support.deprecation = :stderr
49
+
50
+ # Raise exceptions for disallowed deprecations.
51
+ config.active_support.disallowed_deprecation = :raise
52
+
53
+ # Tell Active Support which deprecation messages to disallow.
54
+ config.active_support.disallowed_deprecation_warnings = []
55
+
56
+ # Raises error for missing translations.
57
+ # config.i18n.raise_on_missing_translations = true
58
+
59
+ # Annotate rendered view with file names.
60
+ # config.action_view.annotate_rendered_view_with_filenames = true
61
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # ActiveSupport::Reloader.to_prepare do
5
+ # ApplicationController.renderer.defaults.merge!(
6
+ # http_host: 'example.org',
7
+ # https: false
8
+ # )
9
+ # end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # Version of your assets, change this if you want to expire all your assets.
5
+ Rails.application.config.assets.version = '1.0'
6
+
7
+ # Add additional assets to the asset load path.
8
+ # Rails.application.config.assets.paths << Emoji.images_path
9
+
10
+ # Precompile additional assets.
11
+ # application.js, application.css, and all non-JS/CSS in the app/assets
12
+ # folder are already added.
13
+ # Rails.application.config.assets.precompile += %w( admin.js admin.css )
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # You can add backtrace silencers for libraries that you're using but don't wish
5
+ # to see in your backtraces.
6
+ # Rails.backtrace_cleaner.add_silencer { |line| /noisy_library/.match?(line) }
7
+
8
+ # You can also remove all the silencers if you're trying to debug a problem that
9
+ # might stem from framework code
10
+ # by setting BACKTRACE=1 before calling your invocation, like
11
+ # "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
12
+ Rails.backtrace_cleaner.remove_silencers! if ENV['BACKTRACE']
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # Define an application-wide content security policy
5
+ # For further information see the following documentation
6
+ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
7
+
8
+ # Rails.application.config.content_security_policy do |policy|
9
+ # policy.default_src :self, :https
10
+ # policy.font_src :self, :https, :data
11
+ # policy.img_src :self, :https, :data
12
+ # policy.object_src :none
13
+ # policy.script_src :self, :https
14
+ # policy.style_src :self, :https
15
+
16
+ # # Specify URI for violation reports
17
+ # # policy.report_uri "/csp-violation-report-endpoint"
18
+ # end
19
+
20
+ # If you are using UJS then enable automatic nonce generation
21
+ # Rails.application.config.content_security_policy_nonce_generator =
22
+ # -> request { SecureRandom.base64(16) }
23
+
24
+ # Set the nonce only to specific directives
25
+ # Rails.application.config.content_security_policy_nonce_directives =
26
+ # %w(script-src)
27
+
28
+ # Report CSP violations to a specified URI
29
+ # For further information see the following documentation:
30
+ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
31
+ # Rails.application.config.content_security_policy_report_only = true
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # Specify a serializer for the signed and encrypted cookie jars.
5
+ # Valid options are :json, :marshal, and :hybrid.
6
+ Rails.application.config.action_dispatch.cookies_serializer = :json
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # Configure sensitive parameters which will be filtered from the log file.
5
+ Rails.application.config.filter_parameters += [
6
+ :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
7
+ ]
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ # Be sure to restart your server when you modify this file.
3
+
4
+ # Add new inflection rules using the following format. Inflections
5
+ # are locale specific, and you may define rules for as many different
6
+ # locales as you wish. All of these examples are active by default:
7
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
8
+ # inflect.plural /^(ox)$/i, '\1en'
9
+ # inflect.singular /^(ox)en/i, '\1'
10
+ # inflect.irregular 'person', 'people'
11
+ # inflect.uncountable %w( fish sheep )
12
+ # end
13
+
14
+ # These inflection rules are supported but not enabled by default:
15
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
16
+ # inflect.acronym 'RESTful'
17
+ # end