rails-formation 0.0.0.2 → 0.0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90c130dd715c8361052ce5f50622be6d833734e68aaf4665e109a96dc9de540c
4
- data.tar.gz: 4bc386f993259e1d4707567d0d775e37343b289e6e67f479116d11a966e26854
3
+ metadata.gz: 9469ea562d25b27c66b6880818b7e4988d081657f6ca3239648e8b81ceaaa056
4
+ data.tar.gz: 5f00c9fa7aaa1ba25292d1d02ac6bad396eaaa38c7ee4a36587678a0317b79ae
5
5
  SHA512:
6
- metadata.gz: 39f9f90e9c7385f499719617f988d0dc7b8c8ff4a8bf77c9188b8cac2ae30aa6f51faacf94b2a52fa4ffc347544e1021ab3426c17375a0a407db72bc9864bd9f
7
- data.tar.gz: 431f25e9eeb72da4b3eb3d61d5241c8d7f2323a0cc857abb332714ffedfbb443cc107898cc11ba0c724c9ce95a8aa2f42a40ecc6f1a4cd9c80f066324047b1ab
6
+ metadata.gz: cbd92ad8f1dc4afff5af17619048cf0e9a66788d89378f222d9e81cd096eb2893adf32dd1e558b32a80fa3972439f13039d05333e6f68135404dc6d0c4839bc8
7
+ data.tar.gz: 3226617d7cc7545841a28dc84c2d7a74e6ded6133aea534a213220841d976ab0e1561ee789a74e6d242957a3c1f9ec5c0d47fc449bb304fcc25a573160ae8030
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsFormation
4
+ module Formatters
5
+ class Controller < Thor::Group
6
+ include Thor::Actions
7
+
8
+ argument :controller_configuration
9
+ argument :controller_path
10
+
11
+ def create_controller
12
+ template('../templates/controller.rb.tt', controller_path)
13
+ end
14
+
15
+ def self.source_root
16
+ __dir__
17
+ end
18
+
19
+ private
20
+
21
+ def controller_class
22
+ controller_configuration.fetch('class_name')
23
+ end
24
+
25
+ def public_actions
26
+ controller_configuration.fetch('actions').select(&method(:public_action?)).map { |action| action['action'] }
27
+ end
28
+
29
+ def private_actions
30
+ controller_configuration.fetch('actions').select(&method(:private_action?)).map { |action| action['action'] }
31
+ end
32
+
33
+ def public_action?(action)
34
+ action['access'] == 'public'
35
+ end
36
+
37
+ def private_action?(action)
38
+ action['access'] == 'private'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -49,7 +49,7 @@ module RailsFormation
49
49
  'email' => 'FFaker::Internet.email',
50
50
  'username' => 'FFaker::Internet.user_name',
51
51
  'domain' => 'FFaker::Internet.domain_name',
52
- 'slug' => "Faker::Internet.slug(nil, '-')",
52
+ 'slug' => "FFaker::Internet.slug(nil, '-')",
53
53
  'job_title' => 'FFaker::Job.title',
54
54
  'locale' => 'FFaker::Locale.code',
55
55
  'language' => 'FFaker::Locale.language',
@@ -25,7 +25,7 @@ module RailsFormation
25
25
  end
26
26
 
27
27
  def associations
28
- []
28
+ factory_configuration.fetch('associations', [])
29
29
  end
30
30
 
31
31
  def columns
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'migrations/column'
4
4
  require_relative 'migrations/index'
5
+ require_relative 'migrations/options'
5
6
 
6
7
  module RailsFormation
7
8
  module Formatters
@@ -25,10 +26,20 @@ module RailsFormation
25
26
  migration_configuration.fetch('table')
26
27
  end
27
28
 
29
+ def migration_name
30
+ migration_configuration.fetch('migration_name')
31
+ end
32
+
28
33
  def timestamps?
29
34
  migration_configuration.fetch('timestamps', false)
30
35
  end
31
36
 
37
+ def table_options
38
+ RailsFormation::Formatters::Migrations::Options.new(
39
+ migration_configuration.fetch('options', [])
40
+ ).to_s
41
+ end
42
+
32
43
  def columns
33
44
  migration_configuration.fetch('columns', []).map do |config|
34
45
  RailsFormation::Formatters::Migrations::Column.new(config).to_s
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsFormation
4
+ module Formatters
5
+ module Migrations
6
+ class Options
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def to_s
12
+ return if @options.size.zero?
13
+
14
+ @options.map { |option| option.values.join(': ') }.join(', ')
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'models/validation'
4
+ require_relative 'models/association'
4
5
 
5
6
  module RailsFormation
6
7
  module Formatters
@@ -24,6 +25,12 @@ module RailsFormation
24
25
  model_configuration.fetch('name')
25
26
  end
26
27
 
28
+ def associations
29
+ model_configuration.fetch('associations', []).map do |config|
30
+ RailsFormation::Formatters::Models::Association.new(config).to_s
31
+ end
32
+ end
33
+
27
34
  def validations
28
35
  models_with_validations = model_configuration.fetch('columns', []).select do |config|
29
36
  config.fetch('validations', []).size.positive?
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsFormation
4
+ module Formatters
5
+ module Models
6
+ class Association
7
+ def initialize(config)
8
+ @config = config
9
+ end
10
+
11
+ def to_s
12
+ base_def = "#{relation} :#{destination}"
13
+
14
+ return base_def if options.size.zero?
15
+
16
+ options_def = options.map { |option| option.values.join(': ') }.join(', ')
17
+
18
+ "#{base_def}, #{options_def}"
19
+ end
20
+
21
+ private
22
+
23
+ def relation
24
+ @config.fetch('type')
25
+ end
26
+
27
+ def destination
28
+ @config.fetch('destination')
29
+ end
30
+
31
+ def options
32
+ @config.fetch('options', [])
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'routes/resource'
4
+
5
+ module RailsFormation
6
+ module Formatters
7
+ class Route < Thor::Group
8
+ include Thor::Actions
9
+
10
+ argument :routes_configuration
11
+ argument :routes_path
12
+
13
+ def insert_routes
14
+ template('../templates/routes.rb.tt', routes_path)
15
+ end
16
+
17
+ def self.source_root
18
+ __dir__
19
+ end
20
+
21
+ private
22
+
23
+ def resources
24
+ routes_configuration.map { |config| ::RailsFormation::Formatters::Routes::Resource.new(config) }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsFormation
4
+ module Formatters
5
+ module Routes
6
+ class Resource
7
+ def initialize(config)
8
+ @config = config
9
+ end
10
+
11
+ def start_line
12
+ if actions_line.nil?
13
+ "resources :#{resource_name}"
14
+ else
15
+ "resources :#{resource_name}, #{actions_line}"
16
+ end
17
+ end
18
+
19
+ def additional_routes
20
+ mappings = {}
21
+
22
+ mappings['member'] = member_routes.map(&method(:build_route)) if member_routes.size.positive?
23
+
24
+ mappings['collection'] = collection_routes.map(&method(:build_route)) if collection_routes.size.positive?
25
+
26
+ mappings
27
+ end
28
+
29
+ def create_block?
30
+ member_routes.size.positive? || collection_routes.size.positive?
31
+ end
32
+
33
+ private
34
+
35
+ def build_route(route)
36
+ "#{route['request']} :#{route['action']}"
37
+ end
38
+
39
+ def actions_line
40
+ return if actions.size == default_actions.size
41
+
42
+ if actions.size > 3
43
+ except_actions = (default_actions - actions).map { |action| ":#{action}" }
44
+ "except: [#{except_actions.join(', ')}]"
45
+ else
46
+ only_actions = actions.map { |action| ":#{action}" }
47
+ "only: [#{only_actions.join(', ')}]"
48
+ end
49
+ end
50
+
51
+ def resource_name
52
+ @config.fetch('resource')
53
+ end
54
+
55
+ def actions
56
+ @config.fetch('restful_actions')
57
+ end
58
+
59
+ def default_actions
60
+ %w[index show new create edit update destroy]
61
+ end
62
+
63
+ def member_routes
64
+ @config.fetch('additional_routes').fetch('member', [])
65
+ end
66
+
67
+ def collection_routes
68
+ @config.fetch('additional_routes').fetch('collection', [])
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,20 @@
1
+ class <%= controller_class %> < ApplicationController
2
+ <% if public_actions.any? -%>
3
+ <% public_actions.each do |action| -%>
4
+ def <%= action %>
5
+
6
+ end
7
+
8
+ <% end -%>
9
+ <% end -%>
10
+ <% if private_actions.any? -%>
11
+ private
12
+
13
+ <% private_actions.each do |action| -%>
14
+ def <%= action %>
15
+
16
+ end
17
+
18
+ <% end -%>
19
+ <% end -%>
20
+ end
@@ -2,6 +2,9 @@ FactoryBot.define do
2
2
  factory :<%= factory_name %> do
3
3
  <% columns.each do |column| -%>
4
4
  <%= column %>
5
+ <% end -%>
6
+ <% associations.each do |association| -%>
7
+ <%= association %>
5
8
  <% end -%>
6
9
  end
7
10
  end
@@ -1,11 +1,11 @@
1
- class Create<%= table_name.capitalize %> < ActiveRecord::Migration[7.0]
1
+ class Create<%= migration_name %> < ActiveRecord::Migration[7.0]
2
2
  def change
3
- create_table :<%= table_name %> do |t|
3
+ <% if table_options.nil? %>create_table :<%= table_name %> do |t|<% else %>create_table :<%= table_name %>, <%= table_options %> do |t|<% end %>
4
4
  <% columns.each do |column| -%>
5
5
  <%= column %>
6
6
  <% end -%>
7
- <% if timestamps? -%>
8
- t.timestamps
7
+ <%- if timestamps? -%>
8
+ t.timestamps
9
9
  <% end -%>
10
10
  end
11
11
 
@@ -4,4 +4,9 @@ class <%= class_name %> < ApplicationRecord
4
4
  <%= validation %>
5
5
  <% end -%>
6
6
  <% end -%>
7
+ <% if associations.any? -%>
8
+ <% associations.each do |association| -%>
9
+ <%= association %>
10
+ <% end -%>
11
+ <% end -%>
7
12
  end
@@ -0,0 +1,24 @@
1
+ Rails.application.routes.draw do
2
+ <% resources.each do |resource| -%>
3
+ <% if resource.create_block? -%>
4
+ <%= resource.start_line -%> do
5
+ <% if resource.additional_routes.key?('member') -%>
6
+ member do
7
+ <% resource.additional_routes['member'].each do |route| -%>
8
+ <%= route %>
9
+ <% end -%>
10
+ end
11
+ <% end -%>
12
+ <% if resource.additional_routes.key?('collection') -%>
13
+ collection do
14
+ <% resource.additional_routes['collection'].each do |route| -%>
15
+ <%= route %>
16
+ <% end -%>
17
+ end
18
+ <% end -%>
19
+ end
20
+ <% else -%>
21
+ <%= resource.start_line %>
22
+ <% end -%>
23
+ <% end -%>
24
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsFormation
4
- VERSION = '0.0.0.2'
4
+ VERSION = '0.0.0.6'
5
5
  RAILS_VERSION = '7.0.2.3'
6
6
  end
@@ -6,6 +6,8 @@ require 'rails-formation/formatters/rubygem'
6
6
  require 'rails-formation/formatters/model'
7
7
  require 'rails-formation/formatters/factory'
8
8
  require 'rails-formation/formatters/seed'
9
+ require 'rails-formation/formatters/route'
10
+ require 'rails-formation/formatters/controller'
9
11
  require 'rails-formation/cli/file_adapter'
10
12
  require 'rails-formation/cli/api_adapter'
11
13
  require 'rails-formation/cli/processor'
@@ -23,6 +25,8 @@ module RailsFormation
23
25
  create_factories(template.fetch('factories', []))
24
26
  create_and_build_models(template.fetch('models', []))
25
27
  insert_seeds(template.fetch('seeds', []))
28
+ create_routes(template.fetch('routes', []))
29
+ create_controllers(template.fetch('controllers', []))
26
30
  end
27
31
 
28
32
  private
@@ -34,8 +38,9 @@ module RailsFormation
34
38
  end
35
39
 
36
40
  def generate_project(template)
37
- system "rails _#{RailsFormation::RAILS_VERSION}_ new #{template['name']} -d=postgresql"
38
- Dir.chdir(template['name'])
41
+ system template['installation_command']
42
+
43
+ Dir.chdir(template['app_name'])
39
44
  end
40
45
 
41
46
  def bundle_and_install_gems(rubygems)
@@ -77,9 +82,17 @@ module RailsFormation
77
82
  end
78
83
  end
79
84
 
85
+ def create_controllers(controllers)
86
+ controllers.each do |config|
87
+ controller_path = File.join(Dir.pwd, 'app', 'controllers', config['file_name'])
88
+
89
+ ::RailsFormation::Formatters::Controller.new([config, controller_path]).invoke_all
90
+ end
91
+ end
92
+
80
93
  def create_and_build_models(models)
81
94
  models.each do |config|
82
- model_name = "#{config.fetch('name').downcase}.rb"
95
+ model_name = "#{config.fetch('file_name').downcase}.rb"
83
96
  model_path = File.join(Dir.pwd, 'app', 'models', model_name)
84
97
 
85
98
  ::RailsFormation::Formatters::Model.new([config, model_path]).invoke_all
@@ -95,5 +108,12 @@ module RailsFormation
95
108
 
96
109
  system('./bin/rails db:seed')
97
110
  end
111
+
112
+ def create_routes(routes)
113
+ return if routes.size.zero?
114
+
115
+ routes_path = File.join(Dir.pwd, 'config', 'routes.rb')
116
+ ::RailsFormation::Formatters::Route.new([routes, routes_path]).invoke_all
117
+ end
98
118
  end
99
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-formation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.2
4
+ version: 0.0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paweł Dąbrowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-10 00:00:00.000000000 Z
11
+ date: 2022-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffaker
@@ -121,6 +121,7 @@ files:
121
121
  - lib/rails-formation/cli/api_adapter.rb
122
122
  - lib/rails-formation/cli/file_adapter.rb
123
123
  - lib/rails-formation/cli/processor.rb
124
+ - lib/rails-formation/formatters/controller.rb
124
125
  - lib/rails-formation/formatters/factories/column.rb
125
126
  - lib/rails-formation/formatters/factories/default_value.rb
126
127
  - lib/rails-formation/formatters/factories/value.rb
@@ -128,7 +129,9 @@ files:
128
129
  - lib/rails-formation/formatters/migration.rb
129
130
  - lib/rails-formation/formatters/migrations/column.rb
130
131
  - lib/rails-formation/formatters/migrations/index.rb
132
+ - lib/rails-formation/formatters/migrations/options.rb
131
133
  - lib/rails-formation/formatters/model.rb
134
+ - lib/rails-formation/formatters/models/association.rb
132
135
  - lib/rails-formation/formatters/models/validation.rb
133
136
  - lib/rails-formation/formatters/models/validations/base.rb
134
137
  - lib/rails-formation/formatters/models/validations/comparsion.rb
@@ -140,13 +143,17 @@ files:
140
143
  - lib/rails-formation/formatters/models/validations/numericality.rb
141
144
  - lib/rails-formation/formatters/models/validations/presence.rb
142
145
  - lib/rails-formation/formatters/models/validations/uniqueness.rb
146
+ - lib/rails-formation/formatters/route.rb
147
+ - lib/rails-formation/formatters/routes/resource.rb
143
148
  - lib/rails-formation/formatters/rubygem.rb
144
149
  - lib/rails-formation/formatters/rubygems/gem.rb
145
150
  - lib/rails-formation/formatters/seed.rb
146
151
  - lib/rails-formation/formatters/seeds/row.rb
152
+ - lib/rails-formation/templates/controller.rb.tt
147
153
  - lib/rails-formation/templates/factory.rb.tt
148
154
  - lib/rails-formation/templates/migration.rb.tt
149
155
  - lib/rails-formation/templates/model.rb.tt
156
+ - lib/rails-formation/templates/routes.rb.tt
150
157
  - lib/rails-formation/templates/seeds.rb.tt
151
158
  - lib/rails-formation/version.rb
152
159
  - lib/rails_formation.rb
@@ -175,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
182
  - !ruby/object:Gem::Version
176
183
  version: '0'
177
184
  requirements: []
178
- rubygems_version: 3.1.2
185
+ rubygems_version: 3.2.32
179
186
  signing_key:
180
187
  specification_version: 4
181
188
  summary: Templates for Rails bootstraping