inline_forms_installer 8.0.3 → 8.0.4

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: 91d4fdc2c47dbae9f0fb05f32157e77326029df28eae8c529655779d417d791a
4
- data.tar.gz: d21272dbbdd19be64fd742f267054fca738afc40cffbda9cbfe74dfb1bf2982a
3
+ metadata.gz: d6570363351e7a504578a5e2bba393ec1b7fcd0c5dd3190bbb975a19b1347d8e
4
+ data.tar.gz: 05ec0f8cde0a8ffdafb8a1d5444c2d2246704343d333fe9af49ed8691d6f3a0e
5
5
  SHA512:
6
- metadata.gz: 51085fde767560341594f9d3c3da50b8a6085b06bfef3a3ba4826e63a21de5f5278d43fdee437b1e6c45f44738bb81b3fc7e3cde5bd471dee6fe5581a7bb0bcf
7
- data.tar.gz: 1f4f9a714507ac6ba8658418a0586d1f006591f3ea9ffe6a0f655390211e7ea090a74c35f5f18cf8bbf61bbbd5b2a4fa0f52cf4f17ba223aba0b6c6f6bb8ba60
6
+ metadata.gz: f74cde7fd33066320e1d971713c85854c9e6089958970c6b617d32f9ba3a717df6a08728dcfaed7c4c3670be0019089a5d2ea729625be10a85d398bf439cfa97
7
+ data.tar.gz: 28047b073197118349feba7ce2347ac6dc20a82f0933c1c8550cf009066c11b0f402e87b1c053d49bdbc1ca836a1b5adfe1d936bd39b350a9ec8cfb0bf42067f
@@ -22,6 +22,7 @@ module InlineFormsInstaller
22
22
  method_option :email, :aliases => "-e", :default => "admin@example.com", :desc => "specify admin email"
23
23
  method_option :password, :aliases => "-p", :default => "admin999", :desc => "specify admin password"
24
24
  method_option :skiprvm, :aliases => "--no-rvm", :type => :boolean, :default => false, :desc => "install inline_forms without RVM"
25
+ method_option :user_model, :aliases => "-U", :default => "User", :banner => "CLASS", :desc => "Devise model class (e.g. Member); Warden scope stays :user (current_user)"
25
26
 
26
27
  def create(app_name)
27
28
  def self.skiprvm
@@ -59,6 +60,13 @@ module InlineFormsInstaller
59
60
  exit 1
60
61
  end
61
62
 
63
+ begin
64
+ user_model_cfg = InlineFormsInstaller::UserModelConfig.from_name(options[:user_model].to_s)
65
+ rescue ArgumentError => e
66
+ say "Error: #{e.message}", :red
67
+ exit 1
68
+ end
69
+
62
70
  inline_forms_version = InlineFormsInstaller.inline_forms_version
63
71
  # The Gemfile pins `gem "inline_forms", "~> 8"`, so Bundler resolves the
64
72
  # highest 8.x available on RubyGems at install time. The
@@ -67,7 +75,8 @@ module InlineFormsInstaller
67
75
  # report the constraint instead of a misleading exact version, and let
68
76
  # `print_create_summary` read the actual locked versions from the
69
77
  # generated app's Gemfile.lock once `bundle install` is done.
70
- say "Creating #{app_name} (inline_forms ~> 8) with development database #{database}...", :green
78
+ user_model_note = user_model_cfg.default? ? "" : " (auth model: #{user_model_cfg.class_name})"
79
+ say "Creating #{app_name} (inline_forms ~> 8) with development database #{database}#{user_model_note}...", :green
71
80
 
72
81
  regex = /\A[0-9a-zA-Z][0-9a-zA-Z_-]+[0-9a-zA-Z]\Z/
73
82
  if !regex.match(app_name)
@@ -3,6 +3,7 @@ require "shellwords"
3
3
  INSTALLER_ROOT = File.expand_path(ENV.fetch("INLINE_FORMS_INSTALLER_ROOT", File.expand_path("..", __dir__)))
4
4
  INLINE_FORMS_ROOT = File.expand_path(ENV.fetch("INLINE_FORMS_ROOT", INSTALLER_ROOT))
5
5
  require File.join(INSTALLER_ROOT, "lib", "inline_forms_installer", "create_log")
6
+ require File.join(INSTALLER_ROOT, "lib", "inline_forms_installer", "user_model_config")
6
7
 
7
8
  def use_app_rvm_gemset!
8
9
  return if ENV["skiprvm"] == "true"
@@ -262,11 +263,16 @@ say "\n *** Please make sure to create a mysql production database and use 'rail
262
263
  say "- Devise install..."
263
264
  run "bundle exec rails g devise:install"
264
265
 
266
+ user_cfg = InlineFormsInstaller::UserModelConfig.from_env
267
+ unless user_cfg.default?
268
+ say "- Auth model #{user_cfg.class_name} (#{user_cfg.table_name} table; Warden scope :user → current_user)", :green
269
+ end
270
+
265
271
  say "- Create Devise route and add path_prefix..."
266
272
 
267
273
  route <<-ROUTE.strip_heredoc
268
- devise_for :users, :path_prefix => 'auth'
269
- resources :users do
274
+ #{user_cfg.devise_route_line}
275
+ resources :#{user_cfg.plural_route} do
270
276
  post 'revert', :on => :member
271
277
  get 'list_versions', :on => :member
272
278
  end
@@ -278,11 +284,11 @@ sleep 1 # to get unique migration number
278
284
  create_file "db/migrate/" +
279
285
  Time.now.utc.strftime("%Y%m%d%H%M%S") +
280
286
  "_" +
281
- "devise_create_users.rb", <<-DEVISE_MIGRATION.strip_heredoc
282
- class DeviseCreateUsers < ActiveRecord::Migration[8.0]
287
+ "#{user_cfg.devise_migration_basename}.rb", <<-DEVISE_MIGRATION.strip_heredoc
288
+ class #{user_cfg.devise_migration_class} < ActiveRecord::Migration[8.0]
283
289
 
284
290
  def change
285
- create_table(:users) do |t|
291
+ create_table(:#{user_cfg.table_name}) do |t|
286
292
  ## Database authenticatable
287
293
  t.string :email, null: false, default: ""
288
294
  t.string :encrypted_password, null: false, default: ""
@@ -318,24 +324,24 @@ class DeviseCreateUsers < ActiveRecord::Migration[8.0]
318
324
  t.timestamps
319
325
  end
320
326
 
321
- add_index :users, :email, unique: true
322
- add_index :users, :reset_password_token, unique: true
323
- # add_index :users, :confirmation_token, unique: true
324
- # add_index :users, :unlock_token, unique: true
327
+ add_index :#{user_cfg.table_name}, :email, unique: true
328
+ add_index :#{user_cfg.table_name}, :reset_password_token, unique: true
329
+ # add_index :#{user_cfg.table_name}, :confirmation_token, unique: true
330
+ # add_index :#{user_cfg.table_name}, :unlock_token, unique: true
325
331
  end
326
332
  end
327
333
  DEVISE_MIGRATION
328
334
 
329
- say "- Create User Controller..."
330
- create_file "app/controllers/users_controller.rb", <<-USERS_CONTROLLER.strip_heredoc
331
- class UsersController < InlineFormsController
332
- set_tab :user
335
+ say "- Create #{user_cfg.class_name} controller..."
336
+ create_file user_cfg.controller_path, <<-USERS_CONTROLLER.strip_heredoc
337
+ class #{user_cfg.controller_name} < InlineFormsController
338
+ set_tab :#{user_cfg.tab_key}
333
339
  end
334
340
  USERS_CONTROLLER
335
341
 
336
- say "- Create User Model..."
337
- create_file "app/models/user.rb", <<-USER_MODEL.strip_heredoc
338
- class User < ApplicationRecord
342
+ say "- Create #{user_cfg.class_name} model..."
343
+ create_file user_cfg.model_path, <<-USER_MODEL.strip_heredoc
344
+ class #{user_cfg.class_name} < ApplicationRecord
339
345
 
340
346
  # devise options
341
347
  devise :database_authenticatable
@@ -413,36 +419,36 @@ USER_MODEL
413
419
 
414
420
  # Create Locales
415
421
  say "- Create locales"
416
- generate "inline_forms", "Locale name:string title:string users:has_many _enabled:yes _presentation:\#{title}"
422
+ generate "inline_forms", "Locale name:string title:string #{user_cfg.table_name}:has_many _enabled:yes _presentation:\#{title}"
417
423
  append_to_file "db/seeds.rb", "Locale.create({ id: 1, name: 'en', title: 'English' })\n"
418
424
 
419
425
  # Create Roles
420
426
  say "- Create roles"
421
- generate "inline_forms", "Role name:string description:text users:has_and_belongs_to_many _enabled:yes _presentation:\#{name}"
427
+ generate "inline_forms", "Role name:string description:text #{user_cfg.table_name}:has_and_belongs_to_many _enabled:yes _presentation:\#{name}"
422
428
  append_to_file "db/seeds.rb", "Role.create({ id: 1, name: 'superadmin', description: 'Super Admin can access all.' })\n"
423
429
 
424
430
  # Create Admin User
425
431
 
426
- say "- Adding admin user with email: #{ENV['email']}, password: #{ENV['password']} to seeds.rb"
427
- append_to_file "db/seeds.rb", "User.create({ id: 1, email: '#{ENV['email']}', locale_id: 1, name: 'Admin', password: '#{ENV['password']}', password_confirmation: '#{ENV['password']}' })\n"
432
+ say "- Adding admin #{user_cfg.class_name.downcase} with email: #{ENV['email']}, password: #{ENV['password']} to seeds.rb"
433
+ append_to_file "db/seeds.rb", "#{user_cfg.class_name}.create({ id: 1, email: '#{ENV['email']}', locale_id: 1, name: 'Admin', password: '#{ENV['password']}', password_confirmation: '#{ENV['password']}' })\n"
428
434
 
429
435
 
430
436
  sleep 1 # to get unique migration number
431
437
  create_file "db/migrate/" +
432
438
  Time.now.utc.strftime("%Y%m%d%H%M%S") +
433
439
  "_" +
434
- "inline_forms_create_join_table_user_role.rb", <<-ROLES_MIGRATION.strip_heredoc
435
- class InlineFormsCreateJoinTableUserRole < ActiveRecord::Migration[8.0]
440
+ "#{user_cfg.join_migration_basename}.rb", <<-ROLES_MIGRATION.strip_heredoc
441
+ class #{user_cfg.join_migration_class} < ActiveRecord::Migration[8.0]
436
442
  def self.up
437
- create_table :roles_users, :id => false, :force => true do |t|
443
+ create_table :#{user_cfg.join_table}, :id => false, :force => true do |t|
438
444
  t.integer :role_id
439
- t.integer :user_id
445
+ t.integer :#{user_cfg.foreign_key}
440
446
  end
441
- execute 'INSERT INTO roles_users VALUES (1,1);'
447
+ execute 'INSERT INTO #{user_cfg.join_table} VALUES (1,1);'
442
448
  end
443
449
 
444
450
  def self.down
445
- drop_table roles_users
451
+ drop_table #{user_cfg.join_table}
446
452
  end
447
453
  end
448
454
  ROLES_MIGRATION
@@ -611,7 +617,7 @@ create_file "app/models/ability.rb", <<-END_ABILITY.strip_heredoc
611
617
  def initialize(user)
612
618
  # See the wiki for details: https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
613
619
 
614
- user ||= User.new # guest user
620
+ user ||= #{user_cfg.class_name}.new # guest user
615
621
 
616
622
  # use this if you get stuck:
617
623
  # if user.id == 1 #quick hack
@@ -1060,9 +1066,10 @@ if ENV['install_example'] == 'true'
1060
1066
  route "root :to => 'apartments#index'"
1061
1067
 
1062
1068
  example_tests_root = File.join(INSTALLER_ROOT, "lib/installer_templates/example_app_tests")
1069
+ example_user_cfg = InlineFormsInstaller::UserModelConfig.from_env
1063
1070
  Dir.glob(File.join(example_tests_root, "**", "*.rb")).sort.each do |abs|
1064
1071
  rel = abs.delete_prefix(example_tests_root + File::SEPARATOR).tr("\\", "/")
1065
- create_file rel, File.read(abs)
1072
+ create_file rel, example_user_cfg.adapt_example_test_source(File.read(abs))
1066
1073
  end
1067
1074
 
1068
1075
  say "- Running example regression tests (bundle exec rails test)..."
@@ -0,0 +1,104 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require "active_support/core_ext/string/inflections"
3
+
4
+ module InlineFormsInstaller
5
+ # Devise mapping stays on :users (Warden scope :user → current_user in inline_forms).
6
+ # A custom class (e.g. Member) uses members table, /members routes, and
7
+ # devise_for :users, class_name: "Member", path: "members".
8
+ class UserModelConfig
9
+ DEFAULT_CLASS = "User"
10
+
11
+ def self.from_env(env = ENV)
12
+ from_name(env["user_model"].to_s.strip)
13
+ end
14
+
15
+ def self.from_name(name)
16
+ name = DEFAULT_CLASS if name.empty?
17
+ new(name)
18
+ end
19
+
20
+ def initialize(class_name)
21
+ unless class_name.match?(/\A[A-Z][A-Za-z0-9]*\z/)
22
+ raise ArgumentError, "user model must be a Ruby constant (e.g. User, Member)"
23
+ end
24
+
25
+ @class_name = class_name
26
+ end
27
+
28
+ attr_reader :class_name
29
+
30
+ def default?
31
+ class_name == DEFAULT_CLASS
32
+ end
33
+
34
+ def table_name
35
+ class_name.tableize
36
+ end
37
+
38
+ def plural_route
39
+ table_name
40
+ end
41
+
42
+ def foreign_key
43
+ "#{class_name.underscore}_id"
44
+ end
45
+
46
+ # Rails HABTM join table: plural model names in lexical order (roles_users, members_roles).
47
+ def join_table
48
+ return "roles_users" if default?
49
+
50
+ [table_name, "roles"].sort.join("_")
51
+ end
52
+
53
+ def controller_name
54
+ "#{class_name.pluralize}Controller"
55
+ end
56
+
57
+ def controller_path
58
+ "app/controllers/#{table_name}_controller.rb"
59
+ end
60
+
61
+ def model_path
62
+ "app/models/#{class_name.underscore}.rb"
63
+ end
64
+
65
+ def tab_key
66
+ class_name.underscore.to_sym
67
+ end
68
+
69
+ def devise_migration_basename
70
+ "devise_create_#{table_name}"
71
+ end
72
+
73
+ def devise_migration_class
74
+ "DeviseCreate#{class_name.pluralize}"
75
+ end
76
+
77
+ def join_migration_basename
78
+ "inline_forms_create_join_table_#{class_name.underscore}_role"
79
+ end
80
+
81
+ def join_migration_class
82
+ "InlineFormsCreateJoinTable#{class_name}Role"
83
+ end
84
+
85
+ def devise_route_line
86
+ if default?
87
+ "devise_for :users, :path_prefix => 'auth'"
88
+ else
89
+ "devise_for :users, class_name: \"#{class_name}\", path: \"#{plural_route}\", path_prefix: 'auth'"
90
+ end
91
+ end
92
+
93
+ def sign_in_path_fragment
94
+ "/auth/#{default? ? 'users' : plural_route}/sign_in"
95
+ end
96
+
97
+ def adapt_example_test_source(content)
98
+ return content if default?
99
+
100
+ content = content.gsub("User", class_name)
101
+ content.gsub(%r{/auth/users/sign_in}, sign_in_path_fragment)
102
+ end
103
+ end
104
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module InlineFormsInstaller
3
- VERSION = "8.0.3"
3
+ VERSION = "8.0.4"
4
4
 
5
5
  # Written into generated apps' `.ruby-version` (must match gemspec `required_ruby_version`).
6
6
  TARGET_RUBY_VERSION = "ruby-4.0.4"
@@ -79,4 +79,5 @@ module InlineFormsInstaller
79
79
  end
80
80
  end
81
81
 
82
+ require "inline_forms_installer/user_model_config"
82
83
  require "inline_forms_installer/creator"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inline_forms_installer
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.3
4
+ version: 8.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ace Suares
@@ -81,6 +81,7 @@ files:
81
81
  - lib/inline_forms_installer/create_log.rb
82
82
  - lib/inline_forms_installer/creator.rb
83
83
  - lib/inline_forms_installer/installer_core.rb
84
+ - lib/inline_forms_installer/user_model_config.rb
84
85
  - lib/inline_forms_installer/version.rb
85
86
  - lib/installer_templates/capistrano/Capfile
86
87
  - lib/installer_templates/capistrano/deploy.rb