super 0.0.1 → 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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +11 -0
  3. data/README.md +64 -78
  4. data/Rakefile +3 -1
  5. data/app/assets/config/super_manifest.js +2 -1
  6. data/app/assets/javascripts/super/application.js +1252 -316
  7. data/app/assets/stylesheets/super/application.css +102704 -17321
  8. data/app/controllers/super/application_controller.rb +50 -42
  9. data/app/helpers/super/application_helper.rb +39 -0
  10. data/app/views/layouts/super/application.html.erb +11 -7
  11. data/app/views/super/application/_collection_header.html.erb +15 -0
  12. data/app/views/super/application/_flash.html.erb +17 -0
  13. data/app/views/super/application/_form_field__destroy.html.erb +9 -0
  14. data/app/views/super/application/_form_field_select.html.erb +23 -0
  15. data/app/views/super/application/_form_field_text.html.erb +13 -0
  16. data/app/views/super/application/_form_fieldset.html.erb +8 -0
  17. data/app/views/super/application/_form_has_many.html.erb +21 -0
  18. data/app/views/super/application/_form_has_one.html.erb +11 -0
  19. data/app/views/super/application/_form_inline_errors.html.erb +10 -0
  20. data/app/views/super/application/_member_header.html.erb +16 -0
  21. data/app/views/super/application/_super_layout.html.erb +29 -0
  22. data/app/views/super/application/_super_panel.html.erb +7 -0
  23. data/app/views/super/application/_super_schema_display_actions.html.erb +5 -0
  24. data/app/views/super/application/_super_schema_display_index.html.erb +39 -0
  25. data/app/views/super/application/_super_schema_display_show.html.erb +8 -0
  26. data/app/views/super/application/_super_schema_form.html.erb +15 -0
  27. data/app/views/super/application/edit.html.erb +4 -5
  28. data/app/views/super/application/index.html.erb +6 -1
  29. data/app/views/super/application/new.html.erb +4 -5
  30. data/app/views/super/application/nothing.html.erb +0 -0
  31. data/app/views/super/application/show.html.erb +6 -10
  32. data/app/views/super/feather/{_chevron_down.svg → _chevron_down.html} +0 -0
  33. data/config/locales/en.yml +5 -0
  34. data/docs/README.md +6 -0
  35. data/docs/cheat.md +41 -0
  36. data/docs/faq.md +44 -0
  37. data/docs/quick_start.md +45 -0
  38. data/docs/webpacker.md +17 -0
  39. data/docs/yard_customizations.rb +41 -0
  40. data/frontend/super-frontend/build.js +14 -12
  41. data/frontend/super-frontend/dist/application.css +102704 -17321
  42. data/frontend/super-frontend/dist/application.js +1252 -316
  43. data/frontend/super-frontend/package.json +11 -4
  44. data/frontend/super-frontend/postcss.config.js +4 -4
  45. data/frontend/super-frontend/src/javascripts/super/application.ts +18 -0
  46. data/frontend/super-frontend/src/javascripts/super/apply_template_controller.ts +19 -0
  47. data/frontend/super-frontend/src/javascripts/super/rails__ujs.d.ts +1 -0
  48. data/frontend/super-frontend/src/javascripts/super/toggle_pending_destruction_controller.ts +15 -0
  49. data/frontend/super-frontend/src/stylesheets/super/application.css +63 -0
  50. data/frontend/super-frontend/tailwind.config.js +12 -4
  51. data/frontend/super-frontend/tsconfig.json +13 -0
  52. data/frontend/super-frontend/yarn.lock +1891 -1798
  53. data/lib/generators/super/install/USAGE +4 -2
  54. data/lib/generators/super/install/install_generator.rb +18 -3
  55. data/lib/generators/super/resource/USAGE +1 -2
  56. data/lib/generators/super/resource/resource_generator.rb +0 -2
  57. data/lib/generators/super/resource/templates/resources_controller.rb.tt +38 -2
  58. data/lib/generators/super/webpacker/webpacker_generator.rb +8 -0
  59. data/lib/super.rb +10 -5
  60. data/lib/super/action_inquirer.rb +101 -0
  61. data/lib/super/assets.rb +1 -0
  62. data/lib/super/client_error.rb +43 -0
  63. data/lib/super/compatibility.rb +13 -0
  64. data/lib/super/configuration.rb +60 -45
  65. data/lib/super/controls.rb +26 -15
  66. data/lib/super/controls/optional.rb +65 -0
  67. data/lib/super/controls/required.rb +41 -0
  68. data/lib/super/controls/steps.rb +115 -0
  69. data/lib/super/display/schema_types.rb +60 -18
  70. data/lib/super/engine.rb +1 -0
  71. data/lib/super/error.rb +10 -1
  72. data/lib/super/form.rb +48 -0
  73. data/lib/super/form/schema_types.rb +96 -21
  74. data/lib/super/layout.rb +47 -0
  75. data/lib/super/link.rb +110 -0
  76. data/lib/super/navigation/automatic.rb +2 -0
  77. data/lib/super/pagination.rb +19 -8
  78. data/lib/super/panel.rb +30 -0
  79. data/lib/super/partial.rb +11 -0
  80. data/lib/super/partial/resolving.rb +24 -0
  81. data/lib/super/schema.rb +64 -1
  82. data/lib/super/version.rb +1 -1
  83. data/lib/super/view_helper.rb +43 -0
  84. metadata +145 -38
  85. data/app/views/super/application/_form.html.erb +0 -13
  86. data/app/views/super/application/_form_field.html.erb +0 -7
  87. data/app/views/super/application/_form_generic_select.html.erb +0 -19
  88. data/app/views/super/application/_form_generic_text.html.erb +0 -7
  89. data/app/views/super/application/_index.html.erb +0 -58
  90. data/frontend/super-frontend/src/javascripts/super/application.js +0 -11
  91. data/lib/generators/super/resource/templates/resource_dashboard.rb.tt +0 -65
  92. data/lib/super/display.rb +0 -9
  93. data/lib/super/inline_callback.rb +0 -82
  94. data/lib/super/test_support/fixtures/members.yml +0 -336
  95. data/lib/super/test_support/fixtures/ships.yml +0 -10
  96. data/lib/super/test_support/setup.rb +0 -79
  97. data/lib/super/test_support/starfleet_seeder.rb +0 -49
  98. data/lib/super/test_support/templates/20190216224956_create_members.rb +0 -11
  99. data/lib/super/test_support/templates/20190803143320_create_ships.rb +0 -11
  100. data/lib/super/test_support/templates/20190806014121_add_ship_to_members.rb +0 -5
  101. data/lib/super/test_support/templates/admin/members_controller.rb +0 -9
  102. data/lib/super/test_support/templates/admin/ships_controller.rb +0 -9
  103. data/lib/super/test_support/templates/admin_controller.rb +0 -2
  104. data/lib/super/test_support/templates/member.rb +0 -16
  105. data/lib/super/test_support/templates/member_dashboard.rb +0 -90
  106. data/lib/super/test_support/templates/routes.rb +0 -10
  107. data/lib/super/test_support/templates/seeds.rb +0 -2
  108. data/lib/super/test_support/templates/ship.rb +0 -3
  109. data/lib/super/test_support/templates/ship_dashboard.rb +0 -79
  110. data/lib/super/view.rb +0 -25
  111. data/lib/tasks/super_tasks.rake +0 -4
@@ -1,10 +0,0 @@
1
- ---
2
- uss_enterprise_d:
3
- name: USS Enterprise
4
- registry: NCC-1701-D
5
- class_name: Galaxy
6
-
7
- uss_jenolan:
8
- name: USS Jenolan
9
- registry: NCC-2010
10
- class_name: Sydney
@@ -1,79 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "fileutils"
4
- require "pathname"
5
-
6
- def help!
7
- puts "usage: #{$0} path/to/dest/app"
8
- exit
9
- end
10
-
11
- def assert(message)
12
- if !yield
13
- puts message
14
- exit(1)
15
- end
16
- end
17
-
18
- def act(message, if_not:)
19
- if !if_not.call
20
- yield
21
- puts message
22
- end
23
- end
24
-
25
- if ARGV.size != 1
26
- help!
27
- end
28
-
29
- dest = ARGV.first
30
- dest = File.expand_path(dest, Dir.pwd)
31
- dest = Pathname.new(dest)
32
-
33
- src = File.expand_path("templates", __dir__)
34
- src = Pathname.new(src)
35
-
36
- assert("Path doesn't exist: #{dest.join("app")}") do
37
- dest.join("app").exist?
38
- end
39
-
40
- assert("Path doesn't exist: #{dest.join("app/models")}") do
41
- dest.join("app/models").exist?
42
- end
43
-
44
- FileUtils.cp(src.join("member.rb"), dest.join("app/models/member.rb"))
45
- FileUtils.cp(src.join("ship.rb"), dest.join("app/models/ship.rb"))
46
-
47
- assert("Path doesn't exist: #{dest.join("app/controllers")}") do
48
- dest.join("app/controllers").exist?
49
- end
50
-
51
- FileUtils.cp(src.join("admin_controller.rb"), dest.join("app/controllers/admin_controller.rb"))
52
-
53
- act "Created #{dest.join("app/controllers/admin")}", if_not: -> { dest.join("app/controllers/admin").exist? } do
54
- FileUtils.mkdir(dest.join("app/controllers/admin"))
55
- end
56
-
57
- FileUtils.cp(src.join("admin/members_controller.rb"), dest.join("app/controllers/admin/members_controller.rb"))
58
- FileUtils.cp(src.join("admin/ships_controller.rb"), dest.join("app/controllers/admin/ships_controller.rb"))
59
-
60
- act "Created #{dest.join("app/super")}", if_not: -> { dest.join("app/super").exist? } do
61
- FileUtils.mkdir(dest.join("app/super"))
62
- end
63
-
64
- FileUtils.cp(src.join("member_dashboard.rb"), dest.join("app/super/member_dashboard.rb"))
65
- FileUtils.cp(src.join("ship_dashboard.rb"), dest.join("app/super/ship_dashboard.rb"))
66
-
67
- act "Created #{dest.join("db/migrate")}", if_not: -> { dest.join("db/migrate").exist? } do
68
- FileUtils.mkdir(dest.join("db/migrate"))
69
- end
70
-
71
- FileUtils.cp(src.join("20190216224956_create_members.rb"), dest.join("db/migrate/20190216224956_create_members.rb"))
72
- FileUtils.cp(src.join("20190803143320_create_ships.rb"), dest.join("db/migrate/20190803143320_create_ships.rb"))
73
- FileUtils.cp(src.join("20190806014121_add_ship_to_members.rb"), dest.join("db/migrate/20190806014121_add_ship_to_members.rb"))
74
-
75
- FileUtils.cp(src.join("seeds.rb"), dest.join("db/seeds.rb"))
76
-
77
- FileUtils.cp(src.join("routes.rb"), dest.join("config/routes.rb"))
78
-
79
- puts "Done!"
@@ -1,49 +0,0 @@
1
- class StarfleetSeeder
2
- def self.seed
3
- seeder = StarfleetSeeder.new
4
- seeder.seed_from_fixture("ships", Ship)
5
- seeder.seed_from_fixture("members", Member)
6
- end
7
-
8
- def initialize
9
- @seeded = {}
10
- @association_reflections = {}
11
- end
12
-
13
- def seed(basename, key, klass, value)
14
- @seeded[basename] ||= {}
15
- puts "--> #{key} (#{value})"
16
- @association_reflections[klass] ||= klass.reflect_on_all_associations
17
-
18
- @association_reflections[klass].each do |ar|
19
- ar_name = ar.name.to_s
20
- ar_plural_name = ar.plural_name.to_s
21
-
22
- if value.key?(ar_name)
23
- value[ar_name] = @seeded.fetch(ar_plural_name).fetch(value[ar_name])
24
- end
25
- end
26
-
27
- @seeded[basename][key] = klass.find_or_create_by(value)
28
- puts " success!"
29
- rescue => e
30
- puts " failure (#{e.message})"
31
- end
32
-
33
- def seed_from_fixture(basename, klass)
34
- puts "==> #{basename}"
35
- fixtures(basename).each do |key, value|
36
- seed(basename, key, klass, value)
37
- end
38
-
39
- nil
40
- end
41
-
42
- private
43
-
44
- def fixtures(basename)
45
- @fixtures_dir ||= Pathname.new("./fixtures").expand_path(__dir__)
46
-
47
- YAML.load_file(@fixtures_dir.join("#{basename}.yml"))
48
- end
49
- end
@@ -1,11 +0,0 @@
1
- class CreateMembers < ActiveRecord::Migration[5.0]
2
- def change
3
- create_table :members do |t|
4
- t.string :name, null: false
5
- t.string :rank, null: false
6
- t.string :position
7
-
8
- t.timestamps
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- class CreateShips < ActiveRecord::Migration[5.0]
2
- def change
3
- create_table :ships do |t|
4
- t.string :name
5
- t.string :registry
6
- t.string :class_name
7
-
8
- t.timestamps
9
- end
10
- end
11
- end
@@ -1,5 +0,0 @@
1
- class AddShipToMembers < ActiveRecord::Migration[5.0]
2
- def change
3
- add_reference :members, :ship, foreign_key: true
4
- end
5
- end
@@ -1,9 +0,0 @@
1
- module Admin
2
- class MembersController < AdminController
3
- private
4
-
5
- def dashboard
6
- MemberDashboard.new
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Admin
2
- class ShipsController < AdminController
3
- private
4
-
5
- def dashboard
6
- ShipDashboard.new
7
- end
8
- end
9
- end
@@ -1,2 +0,0 @@
1
- class AdminController < Super::ApplicationController
2
- end
@@ -1,16 +0,0 @@
1
- class Member < ApplicationRecord
2
- enum rank: {
3
- captain: "Captain",
4
- commander: "Commander",
5
- lieutenant_commander: "Lieutenant Commander",
6
- lieutenant: "Lieutenant",
7
- lieutenant_junior_grade: "Lieutenant Junior Grade",
8
- ensign: "Ensign",
9
- nco: "NCO",
10
- }
11
-
12
- belongs_to :ship
13
-
14
- validates :name, presence: true
15
- validates :rank, presence: true
16
- end
@@ -1,90 +0,0 @@
1
- class MemberDashboard
2
- def title
3
- Member.name.pluralize
4
- end
5
-
6
- def model
7
- Member
8
- end
9
-
10
- def index_scope
11
- Member.all
12
- end
13
-
14
- def index_schema
15
- Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
16
- fields[:name] = type.dynamic { |name| name }
17
- fields[:rank] = type.dynamic { |rank| rank }
18
- fields[:position] = type.dynamic { |position| position }
19
- fields[:ship] = type.dynamic { |ship| "#{ship.name} (Ship ##{ship.id})" }
20
- fields[:created_at] = type.dynamic(&:iso8601)
21
- end
22
- end
23
-
24
- def create_scope
25
- Member.all
26
- end
27
-
28
- def create_permitted_params(params)
29
- params.require(:member).permit(:name, :rank, :position, :ship_id)
30
- end
31
-
32
- def new_scope
33
- Member.all
34
- end
35
-
36
- def new_schema
37
- Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
38
- fields[:name] = type.generic("form_generic_text")
39
- fields[:rank] = type.generic("form_generic_select", collection: Member.ranks.keys)
40
- fields[:position] = type.generic("form_generic_text")
41
- fields[:ship_id] = type.generic(
42
- "form_generic_select",
43
- collection: Ship.all.map { |s| ["#{s.name} (Ship ##{s.id})", s.id] },
44
- )
45
- end
46
- end
47
-
48
- def edit_scope
49
- Member.all
50
- end
51
-
52
- def edit_schema
53
- Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
54
- fields[:name] = type.generic("form_generic_text")
55
- fields[:rank] = type.generic("form_generic_select", collection: Member.ranks.keys)
56
- fields[:position] = type.generic("form_generic_text")
57
- fields[:ship_id] = type.generic(
58
- "form_generic_select",
59
- collection: Ship.all.map { |s| ["#{s.name} (Ship ##{s.id})", s.id] },
60
- )
61
- end
62
- end
63
-
64
- def show_scope
65
- Member.all
66
- end
67
-
68
- def show_schema
69
- Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
70
- fields[:name] = type.dynamic { |name| name }
71
- fields[:rank] = type.dynamic { |rank| rank }
72
- fields[:position] = type.dynamic { |position| position }
73
- fields[:ship] = type.dynamic { |ship| "#{ship.name} (Ship ##{ship.id})" }
74
- fields[:created_at] = type.dynamic(&:iso8601)
75
- fields[:updated_at] = type.dynamic(&:iso8601)
76
- end
77
- end
78
-
79
- def update_scope
80
- Member.all
81
- end
82
-
83
- def update_permitted_params(params)
84
- params.require(:member).permit(:name, :rank, :position, :ship_id)
85
- end
86
-
87
- def destroy_scope
88
- Member.all
89
- end
90
- end
@@ -1,10 +0,0 @@
1
- Rails.application.routes.draw do
2
- namespace :admin do
3
- resources :members
4
- resources :ships
5
-
6
- root to: redirect("admin/members", status: 302)
7
- end
8
-
9
- root to: redirect("admin/members", status: 302)
10
- end
@@ -1,2 +0,0 @@
1
- require "super/test_support/starfleet_seeder"
2
- StarfleetSeeder.seed
@@ -1,3 +0,0 @@
1
- class Ship < ApplicationRecord
2
- has_many :members
3
- end
@@ -1,79 +0,0 @@
1
- class ShipDashboard
2
- def title
3
- Ship.name.pluralize
4
- end
5
-
6
- def model
7
- Ship
8
- end
9
-
10
- def index_scope
11
- Ship.all
12
- end
13
-
14
- def index_schema
15
- Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
16
- fields[:name] = type.dynamic { |name| name }
17
- fields[:registry] = type.dynamic { |registry| registry }
18
- fields[:class_name] = type.dynamic { |class_name| class_name }
19
- end
20
- end
21
-
22
- def create_scope
23
- Ship.all
24
- end
25
-
26
- def create_permitted_params(params)
27
- params.require(:ship).permit(:name, :registry, :class_name)
28
- end
29
-
30
- def new_scope
31
- Ship.all
32
- end
33
-
34
- def new_schema
35
- Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
36
- fields[:name] = type.generic("form_generic_text")
37
- fields[:registry] = type.generic("form_generic_text")
38
- fields[:class_name] = type.generic("form_generic_text")
39
- end
40
- end
41
-
42
- def edit_scope
43
- Ship.all
44
- end
45
-
46
- def edit_schema
47
- Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
48
- fields[:name] = type.generic("form_generic_text")
49
- fields[:registry] = type.generic("form_generic_text")
50
- fields[:class_name] = type.generic("form_generic_text")
51
- end
52
- end
53
-
54
- def show_scope
55
- Ship.all
56
- end
57
-
58
- def show_schema
59
- Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
60
- fields[:name] = type.dynamic { |name| name }
61
- fields[:registry] = type.dynamic { |registry| registry }
62
- fields[:class_name] = type.dynamic { |class_name| class_name }
63
- fields[:created_at] = type.dynamic(&:iso8601)
64
- fields[:updated_at] = type.dynamic(&:iso8601)
65
- end
66
- end
67
-
68
- def update_scope
69
- Ship.all
70
- end
71
-
72
- def update_permitted_params(params)
73
- params.require(:ship).permit(:name, :registry, :class_name)
74
- end
75
-
76
- def destroy_scope
77
- Ship.all
78
- end
79
- end
@@ -1,25 +0,0 @@
1
- module Super
2
- module View
3
- module_function
4
-
5
- def gutter_h(pm, positive = true)
6
- if pm == :p
7
- if positive
8
- "px-2"
9
- else
10
- raise Error::InvalidStyle, "invalid style: -px-2"
11
- end
12
- else
13
- if positive
14
- "mx-2"
15
- else
16
- "-mx-2"
17
- end
18
- end
19
- end
20
-
21
- def classes(*list)
22
- list.flatten.select(&:present?).join(" ")
23
- end
24
- end
25
- end
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :super do
3
- # # Task goes here
4
- # end