upgrow 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/test_unit/input/input_generator.rb +22 -0
  3. data/lib/generators/test_unit/input/templates/input_test.rb.tt +8 -0
  4. data/lib/generators/test_unit/install/install_generator.rb +48 -0
  5. data/lib/generators/test_unit/record/record_generator.rb +22 -0
  6. data/lib/generators/test_unit/record/templates/record_test.rb.tt +8 -0
  7. data/lib/generators/test_unit/repository/repository_generator.rb +23 -0
  8. data/lib/generators/test_unit/repository/templates/repository_test.rb.tt +8 -0
  9. data/lib/generators/upgrow.rb +54 -0
  10. data/lib/generators/upgrow/action/USAGE +13 -0
  11. data/lib/generators/upgrow/action/action_generator.rb +24 -0
  12. data/lib/generators/upgrow/action/templates/action.rb.tt +9 -0
  13. data/lib/generators/upgrow/input/USAGE +10 -0
  14. data/lib/generators/upgrow/input/input_generator.rb +26 -0
  15. data/lib/generators/upgrow/input/templates/input.rb.tt +6 -0
  16. data/lib/generators/upgrow/install/USAGE +25 -0
  17. data/lib/generators/upgrow/install/install_generator.rb +56 -0
  18. data/lib/generators/upgrow/install/templates/app/actions/application_action.rb.tt +4 -0
  19. data/lib/generators/upgrow/install/templates/app/inputs/application_input.rb.tt +4 -0
  20. data/lib/generators/upgrow/install/templates/app/models/application_model.rb.tt +4 -0
  21. data/lib/generators/upgrow/install/templates/app/repositories/application_repository.rb.tt +4 -0
  22. data/lib/generators/upgrow/model/USAGE +10 -0
  23. data/lib/generators/upgrow/model/model_generator.rb +24 -0
  24. data/lib/generators/upgrow/model/templates/model.rb.tt +6 -0
  25. data/lib/generators/upgrow/record/record_generator.rb +34 -0
  26. data/lib/generators/upgrow/record/templates/record.rb.tt +6 -0
  27. data/lib/generators/upgrow/repository/USAGE +10 -0
  28. data/lib/generators/upgrow/repository/repository_generator.rb +27 -0
  29. data/lib/generators/upgrow/repository/templates/repository.rb.tt +6 -0
  30. data/lib/upgrow.rb +3 -0
  31. data/lib/upgrow/active_record_conversion.rb +2 -3
  32. data/lib/upgrow/active_record_queries.rb +1 -2
  33. data/lib/upgrow/active_record_schema.rb +1 -3
  34. data/lib/upgrow/basic_model.rb +11 -0
  35. data/lib/upgrow/model.rb +2 -1
  36. data/lib/upgrow/naming.rb +40 -0
  37. data/lib/upgrow/railtie.rb +9 -0
  38. data/lib/upgrow/record.rb +121 -0
  39. data/test/dummy/app/records/application_record.rb +2 -0
  40. data/test/dummy/app/records/article_record.rb +2 -3
  41. data/test/dummy/app/records/comment_record.rb +2 -3
  42. data/test/dummy/app/records/user_record.rb +2 -4
  43. data/test/dummy/app/repositories/article_repository.rb +3 -3
  44. data/test/test_unit/generators/input_generator_test.rb +56 -0
  45. data/test/test_unit/generators/install_generator_test.rb +138 -0
  46. data/test/test_unit/generators/record_generator_test.rb +56 -0
  47. data/test/test_unit/generators/repository_generator_test.rb +57 -0
  48. data/test/upgrow/active_record_conversion_test.rb +2 -2
  49. data/test/upgrow/active_record_schema_test.rb +1 -1
  50. data/test/upgrow/basic_model_test.rb +85 -0
  51. data/test/upgrow/generators/action_generator_test.rb +59 -0
  52. data/test/upgrow/generators/helper_test.rb +86 -0
  53. data/test/upgrow/generators/input_generator_test.rb +65 -0
  54. data/test/upgrow/generators/install_generator_test.rb +158 -0
  55. data/test/upgrow/generators/model_generator_test.rb +39 -0
  56. data/test/upgrow/generators/record_generator_test.rb +65 -0
  57. data/test/upgrow/generators/repository_generator_test.rb +50 -0
  58. data/test/upgrow/naming_test.rb +22 -0
  59. data/test/upgrow/record_test.rb +176 -0
  60. metadata +60 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee034f6fa4ddd317a01b6f80d4762259f205a6763cd06fdfa637cdac186f0063
4
- data.tar.gz: 82b9fa66aab3ca2b3bec78ef2c04415d5aa199c0eb9734216010ae0806bb5476
3
+ metadata.gz: 5b23ff76f5c5a26695d3b695084c7196938b758c924c433a9abf17f1918aa7c3
4
+ data.tar.gz: 6799c1a519cddbfa59f16817d4589a6b935c6a581fd7a9b34a58a1ded5399c92
5
5
  SHA512:
6
- metadata.gz: 720d3134774aac67239a7681e2e61dcc525fbd8e38852ebb07f2ec82b8be8cc61ac0b71bcaea13fd375e2fc027bd5092aae11fdd70269da1d1fb299325afbd42
7
- data.tar.gz: 0f16e74a9a07c2e186f10ec14806fc8c59890149204252f25ff2fbc083d8284625f1967a9a74db5e5d1dfb377f315aec864c739a39c8542071a622991bcf8bfb
6
+ metadata.gz: 5c239023970e3d67967420c64bcf836b6c7ae6e56034e04a676148aafb78e99f364a3ab821f11bcc1392e59ce7627f0d5c4c183e734a3631be74d6f5e0f46a8b
7
+ data.tar.gz: 75eb566265b8904dfffd8edb2069ebe4cc676a4e9150d7b0cc507a7c607d6049e4becd66c285a50ad8786336acbe3d7f05d386e9363dade2893a13c40ef6d544
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module TestUnit
6
+ module Generators
7
+ class InputGenerator < Rails::Generators::NamedBase
8
+ include Upgrow::Generators::Helper
9
+
10
+ def create_test_file
11
+ template('input_test.rb',
12
+ File.join('test/inputs', class_path, "#{file_name}_input_test.rb"))
13
+ end
14
+
15
+ private
16
+
17
+ def file_name
18
+ super.delete_suffix('_input')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ <% module_namespacing do -%>
6
+ class <%= class_name %>InputTest < ActiveSupport::TestCase
7
+ end
8
+ <% end -%>
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module TestUnit
6
+ module Generators
7
+ class InstallGenerator < Rails::Generators::Base
8
+ include Upgrow::Generators::Helper
9
+
10
+ def move_existing_models
11
+ pattern = File.expand_path('test/models/**/*_test.rb', destination_root)
12
+ files = Dir.glob(pattern)
13
+
14
+ return if files.empty?
15
+
16
+ unless yes?('Would you like to convert existing model tests into '\
17
+ 'Record tests?', :blue)
18
+ say(
19
+ 'Please convert your model tests into Record tests manually by '\
20
+ 'moving them to the test/records directory and adding the '\
21
+ 'RecordTest suffix to their class names.',
22
+ :yellow
23
+ )
24
+ return
25
+ end
26
+
27
+ files.each do |original|
28
+ target = relative_to_original_destination_root(original)
29
+ .sub(%r{\Atest/models/}, 'test/records/')
30
+ .sub(/^(.+(?<!_record))_test\.rb\z/, '\1_record_test.rb')
31
+
32
+ move_file(original, target)
33
+
34
+ inject_into_file(
35
+ target, 'Record',
36
+ before: /(?<!Record)Test < /,
37
+ force: true,
38
+ verbose: false
39
+ )
40
+ end
41
+ end
42
+
43
+ def create_test_directories
44
+ directory('test')
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module TestUnit
6
+ module Generators
7
+ class RecordGenerator < Rails::Generators::NamedBase
8
+ include Upgrow::Generators::Helper
9
+
10
+ def create_test_file
11
+ template('record_test.rb',
12
+ File.join('test/records', class_path, "#{file_name}_record_test.rb"))
13
+ end
14
+
15
+ private
16
+
17
+ def file_name
18
+ super.delete_suffix('_record')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ <% module_namespacing do -%>
6
+ class <%= class_name %>RecordTest < ActiveSupport::TestCase
7
+ end
8
+ <% end -%>
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module TestUnit
6
+ module Generators
7
+ class RepositoryGenerator < Rails::Generators::NamedBase
8
+ include Upgrow::Generators::Helper
9
+
10
+ def create_test_file
11
+ template('repository_test.rb',
12
+ File.join('test/repositories', class_path,
13
+ "#{file_name}_repository_test.rb"))
14
+ end
15
+
16
+ private
17
+
18
+ def file_name
19
+ super.delete_suffix('_repository')
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ <% module_namespacing do -%>
6
+ class <%= class_name %>RepositoryTest < ActiveSupport::TestCase
7
+ end
8
+ <% end -%>
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Upgrow
4
+ module Generators
5
+ module Helper
6
+ module ClassMethods
7
+ def base_root
8
+ __dir__
9
+ end
10
+ end
11
+
12
+ def self.included(base)
13
+ base.extend(ClassMethods)
14
+ end
15
+
16
+ def move_file(origin, destination)
17
+ origin = File.expand_path(origin, destination_root)
18
+ destination = File.expand_path(destination, destination_root)
19
+
20
+ say_status(
21
+ :move,
22
+ "#{relative_to_original_destination_root(origin)} -> " +
23
+ relative_to_original_destination_root(destination)
24
+ )
25
+
26
+ FileUtils.mkdir_p(File.dirname(destination))
27
+ FileUtils.mv(origin, destination)
28
+ end
29
+
30
+ def class_name
31
+ file_name.camelize
32
+ end
33
+
34
+ def module_namespacing(&block)
35
+ super do
36
+ content = capture(&block)
37
+ concat(namespace_content(class_path, content))
38
+ end
39
+ end
40
+
41
+ def namespace_content(namespaces, content)
42
+ namespace = namespaces.shift
43
+
44
+ content = namespace_content(namespaces, content) if namespaces.any?
45
+
46
+ if namespace
47
+ "module #{namespace.camelize}\n#{indent(content).chomp}\nend\n"
48
+ else
49
+ content
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,13 @@
1
+ Description:
2
+
3
+ Creates a new Action class with the given name under `app/actions`.
4
+
5
+ Since Actions are not expected to be unit tested, this generator does not
6
+ invoke the test framework generator. Action behaviour is supposed to be
7
+ tested with integration or system tests.
8
+
9
+ Example:
10
+
11
+ `bin/rails g upgrow:action articles/create`
12
+
13
+ create app/actions/articles/create_action.rb
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module Upgrow
6
+ module Generators
7
+ class ActionGenerator < Rails::Generators::NamedBase
8
+ include Helper
9
+
10
+ def create_action_file
11
+ template(
12
+ 'action.rb',
13
+ File.join('app/actions', class_path, "#{file_name}_action.rb")
14
+ )
15
+ end
16
+
17
+ private
18
+
19
+ def file_name
20
+ super.delete_suffix('_action')
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= class_name %>Action < ApplicationAction
5
+ def perform(*args)
6
+ # Do something here.
7
+ end
8
+ end
9
+ <% end -%>
@@ -0,0 +1,10 @@
1
+ Description:
2
+
3
+ Creates a new Input class with the given name under `app/inputs`.
4
+
5
+ Example:
6
+
7
+ `bin/rails g upgrow:input article`
8
+
9
+ create app/inputs/article_input.rb
10
+ invoke test_unit
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module Upgrow
6
+ module Generators
7
+ class InputGenerator < Rails::Generators::NamedBase
8
+ include Helper
9
+
10
+ def create_input_file
11
+ template(
12
+ 'input.rb',
13
+ File.join('app/inputs', class_path, "#{file_name}_input.rb")
14
+ )
15
+ end
16
+
17
+ hook_for :test_framework
18
+
19
+ private
20
+
21
+ def file_name
22
+ super.delete_suffix('_input')
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= class_name %>Input < ApplicationInput
5
+ end
6
+ <% end -%>
@@ -0,0 +1,25 @@
1
+ Description:
2
+
3
+ Creates the additional directories and files for development using the
4
+ Upgrow architecture. This generator will create the base classes for your
5
+ Actions, Inputs, Repositories, and Models. It will also ask if you would
6
+ like to convert your existing Ruby files under `app/models` into Upgrow
7
+ Records automatically. If you say yes, it will move those files to
8
+ `app/records` and change their class names to include the `Record` suffix.
9
+ In case an `ApplicationRecord` exists, the generator will assume this to be
10
+ the base class for all Records, and it will include the `Upgrow::Record`
11
+ module in it.
12
+
13
+ Example:
14
+
15
+ `bin/rails generate upgrow:install`
16
+
17
+ Would you like to convert all models into Records? yes
18
+ move app/models/application_record.rb -> app/records/application_record.rb
19
+ move app/models/article.rb -> app/records/article_record.rb
20
+ exist app
21
+ create app/actions/application_action.rb
22
+ create app/inputs/application_input.rb
23
+ create app/models/application_model.rb
24
+ create app/repositories/application_repository.rb
25
+ invoke test_unit
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module Upgrow
6
+ module Generators
7
+ class InstallGenerator < Rails::Generators::Base
8
+ include Helper
9
+
10
+ def move_existing_models
11
+ pattern = File.expand_path('app/models/**/*.rb', destination_root)
12
+ files = Dir.glob(pattern)
13
+
14
+ return if files.empty?
15
+
16
+ unless yes?('Would you like to convert all models into Records?', :blue)
17
+ say(
18
+ 'Please convert your existing models into Records manually. You '\
19
+ 'may move them to the app/records folder, add the Record suffix '\
20
+ 'to their class names, and include Upgrow::Record.',
21
+ :yellow
22
+ )
23
+ return
24
+ end
25
+
26
+ files.each do |original|
27
+ target = relative_to_original_destination_root(original)
28
+ .sub(%r{\Aapp/models/}, 'app/records/')
29
+ .sub(/^(.+(?<!_record))\.rb\z/, '\1_record.rb')
30
+
31
+ move_file(original, target)
32
+
33
+ inject_into_file(
34
+ target, 'Record',
35
+ after: /class (?!\w+Record\s)\w+/,
36
+ force: true,
37
+ verbose: false
38
+ )
39
+
40
+ inject_into_class(
41
+ target,
42
+ 'ApplicationRecord',
43
+ " include Upgrow::Record\n",
44
+ verbose: false
45
+ )
46
+ end
47
+ end
48
+
49
+ def create_app_files
50
+ directory('app')
51
+ end
52
+
53
+ hook_for :test_framework
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationAction < Upgrow::Action
4
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationInput < Upgrow::Input
4
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationModel < Upgrow::Model
4
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationRepository < Upgrow::Repository
4
+ end
@@ -0,0 +1,10 @@
1
+ Description:
2
+
3
+ Creates a new Model class with the given name under `app/models`.
4
+
5
+ Example:
6
+
7
+ `bin/rails g upgrow:model article`
8
+
9
+ create app/models/article.rb
10
+ invoke test_unit
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/upgrow'
4
+
5
+ module Upgrow
6
+ module Generators
7
+ class ModelGenerator < Rails::Generators::NamedBase
8
+ include Helper
9
+
10
+ def create_model_file
11
+ template(
12
+ 'model.rb',
13
+ File.join('app/models', class_path, "#{file_name}.rb")
14
+ )
15
+ end
16
+
17
+ hook_for :repository, default: :upgrow, as: :repository
18
+
19
+ hook_for :record, default: :upgrow, as: :record
20
+
21
+ hook_for :test_framework
22
+ end
23
+ end
24
+ end