madmin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +102 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/madmin_manifest.js +2 -0
  6. data/app/assets/javascripts/madmin/application.js +15 -0
  7. data/app/assets/javascripts/madmin/dashboard.js +2 -0
  8. data/app/assets/javascripts/madmin/resources.js +36 -0
  9. data/app/assets/stylesheets/madmin/application.css +22 -0
  10. data/app/assets/stylesheets/madmin/dashboard.css +4 -0
  11. data/app/assets/stylesheets/madmin/resources.css +4 -0
  12. data/app/controllers/madmin/application_controller.rb +16 -0
  13. data/app/controllers/madmin/base_controller.rb +16 -0
  14. data/app/controllers/madmin/dashboard_controller.rb +8 -0
  15. data/app/controllers/madmin/resources_controller.rb +97 -0
  16. data/app/decorators/madmin/resource_decorator.rb +16 -0
  17. data/app/helpers/madmin/application_helper.rb +15 -0
  18. data/app/helpers/madmin/fields/polymorphic_helper.rb +25 -0
  19. data/app/jobs/madmin/application_job.rb +4 -0
  20. data/app/mailers/madmin/application_mailer.rb +6 -0
  21. data/app/models/madmin/application_record.rb +5 -0
  22. data/app/views/application/_navigation.html.erb +17 -0
  23. data/app/views/layouts/madmin/application.html.erb +30 -0
  24. data/app/views/madmin/dashboard/index.html.erb +6 -0
  25. data/app/views/madmin/fields/belongs_to/_form.html.erb +14 -0
  26. data/app/views/madmin/fields/belongs_to/_index.html.erb +7 -0
  27. data/app/views/madmin/fields/belongs_to/_show.html.erb +8 -0
  28. data/app/views/madmin/fields/check_box/_form.html.erb +4 -0
  29. data/app/views/madmin/fields/check_box/_index.html.erb +1 -0
  30. data/app/views/madmin/fields/check_box/_show.html.erb +8 -0
  31. data/app/views/madmin/fields/email/_form.html.erb +4 -0
  32. data/app/views/madmin/fields/email/_index.html.erb +1 -0
  33. data/app/views/madmin/fields/email/_show.html.erb +8 -0
  34. data/app/views/madmin/fields/has_many/_form.html.erb +0 -0
  35. data/app/views/madmin/fields/has_many/_show.html.erb +15 -0
  36. data/app/views/madmin/fields/has_one/_form.html.erb +0 -0
  37. data/app/views/madmin/fields/has_one/_show.html.erb +12 -0
  38. data/app/views/madmin/fields/number/_form.html.erb +4 -0
  39. data/app/views/madmin/fields/number/_index.html.erb +1 -0
  40. data/app/views/madmin/fields/number/_show.html.erb +8 -0
  41. data/app/views/madmin/fields/password/_form.html.erb +4 -0
  42. data/app/views/madmin/fields/password/_index.html.erb +1 -0
  43. data/app/views/madmin/fields/password/_show.html.erb +8 -0
  44. data/app/views/madmin/fields/polymorphic/_form.html.erb +32 -0
  45. data/app/views/madmin/fields/polymorphic/_index.html.erb +1 -0
  46. data/app/views/madmin/fields/polymorphic/_show.html.erb +14 -0
  47. data/app/views/madmin/fields/select/_form.html.erb +4 -0
  48. data/app/views/madmin/fields/select/_index.html.erb +1 -0
  49. data/app/views/madmin/fields/select/_show.html.erb +8 -0
  50. data/app/views/madmin/fields/text/_form.html.erb +4 -0
  51. data/app/views/madmin/fields/text/_index.html.erb +1 -0
  52. data/app/views/madmin/fields/text/_show.html.erb +8 -0
  53. data/app/views/madmin/fields/text_area/_form.html.erb +4 -0
  54. data/app/views/madmin/fields/text_area/_index.html.erb +1 -0
  55. data/app/views/madmin/fields/text_area/_show.html.erb +8 -0
  56. data/app/views/madmin/resources/_form.html.erb +15 -0
  57. data/app/views/madmin/resources/_scopes.html.erb +10 -0
  58. data/app/views/madmin/resources/edit.html.erb +2 -0
  59. data/app/views/madmin/resources/index.html.erb +13 -0
  60. data/app/views/madmin/resources/index/_content.html.erb +33 -0
  61. data/app/views/madmin/resources/new.html.erb +2 -0
  62. data/app/views/madmin/resources/show.html.erb +10 -0
  63. data/config/routes.rb +11 -0
  64. data/lib/generators/madmin/controller/USAGE +8 -0
  65. data/lib/generators/madmin/controller/controller_generator.rb +10 -0
  66. data/lib/generators/madmin/install/install_generator.rb +31 -0
  67. data/lib/generators/madmin/page/USAGE +8 -0
  68. data/lib/generators/madmin/page/page_generator.rb +20 -0
  69. data/lib/generators/madmin/page/templates/template.html.erb +2 -0
  70. data/lib/generators/madmin/page/templates/template.rb.erb +10 -0
  71. data/lib/generators/madmin/resource/resource_generator.rb +76 -0
  72. data/lib/generators/madmin/resource/templates/resource.rb.erb +11 -0
  73. data/lib/generators/madmin/views/views_generator.rb +15 -0
  74. data/lib/madmin.rb +30 -0
  75. data/lib/madmin/engine.rb +9 -0
  76. data/lib/madmin/field.rb +64 -0
  77. data/lib/madmin/field/associatable.rb +58 -0
  78. data/lib/madmin/field/belongs_to.rb +9 -0
  79. data/lib/madmin/field/check_box.rb +8 -0
  80. data/lib/madmin/field/date_time.rb +8 -0
  81. data/lib/madmin/field/email.rb +8 -0
  82. data/lib/madmin/field/has_many.rb +9 -0
  83. data/lib/madmin/field/has_one.rb +9 -0
  84. data/lib/madmin/field/number.rb +8 -0
  85. data/lib/madmin/field/password.rb +8 -0
  86. data/lib/madmin/field/polymorphic.rb +57 -0
  87. data/lib/madmin/field/select.rb +13 -0
  88. data/lib/madmin/field/text.rb +8 -0
  89. data/lib/madmin/field/text_area.rb +8 -0
  90. data/lib/madmin/generator_helpers.rb +13 -0
  91. data/lib/madmin/resourceable.rb +72 -0
  92. data/lib/madmin/resourceable/class_methods.rb +152 -0
  93. data/lib/madmin/resources.rb +13 -0
  94. data/lib/madmin/version.rb +3 -0
  95. data/lib/tasks/madmin_tasks.rake +4 -0
  96. metadata +197 -0
@@ -0,0 +1,57 @@
1
+ module Madmin
2
+ class Field
3
+ ##
4
+ # This field represents a polymorphic relationship.
5
+ class Polymorphic < Madmin::Field
6
+ attr_reader :polymorphic_display_value
7
+ attr_reader :polymorphic_scope
8
+
9
+ def initialize(args)
10
+ super(args)
11
+ @polymorphic_display_value = option_or_default(:display_value, :name)
12
+ @polymorphic_scope = :all
13
+ end
14
+
15
+ ##
16
+ # Returns the id for the associated polymorphic record.
17
+ def polymorphic_id_for(resource)
18
+ value_for(resource).id
19
+ end
20
+
21
+ ##
22
+ # Returns the polymorphic ID param.
23
+ def polymorphic_id_param
24
+ "#{key}_id".to_sym
25
+ end
26
+
27
+ def polymorphic_relationship_exists?(resource)
28
+ resource.send(polymorphic_type_param) && resource.send(polymorphic_id_param)
29
+ end
30
+
31
+ ##
32
+ # Returns the slug for the polymorphic resource.
33
+ def polymorphic_slug_for(resource)
34
+ Object.const_get("::Madmin::Resources::#{resource.send("#{key}_type")}").new.slug
35
+ end
36
+
37
+ ##
38
+ # Returns the polymorphic type param.
39
+ def polymorphic_type_param
40
+ "#{key}_type".to_sym
41
+ end
42
+
43
+ ##
44
+ # Returns the value to show in the admin
45
+ # for the polymorphic relationship.
46
+ def polymorphic_value_for(resource)
47
+ value_for(resource).send(polymorphic_display_value)
48
+ end
49
+
50
+ ##
51
+ # Returns the polymorphic stront params keys.
52
+ def strong_params_keys
53
+ [polymorphic_id_param, polymorphic_type_param]
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,13 @@
1
+ module Madmin
2
+ class Field
3
+ ##
4
+ # This field represents a select dropdown value.
5
+ class Select < Madmin::Field
6
+ attr_reader :select_options
7
+
8
+ def initialize(args)
9
+ @select_options = option_or_default(:collection, [])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ module Madmin
2
+ class Field
3
+ ##
4
+ # This field represents a plain old text field.
5
+ class Text < Madmin::Field
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Madmin
2
+ class Field
3
+ ##
4
+ # This field represents a textarea value.
5
+ class TextArea < Madmin::Field
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module Madmin
2
+ module GeneratorHelpers
3
+ def call_generator(generator, *args)
4
+ Rails::Generators.invoke(generator, args, generator_options)
5
+ end
6
+
7
+ private
8
+
9
+ def generator_options
10
+ {behavior: behavior}
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,72 @@
1
+ require "madmin/resourceable/class_methods"
2
+
3
+ ##
4
+ # This module is the heart of a Madmin Resource.
5
+ # When included into a resource class, the
6
+ # resource is given a DSL for registering
7
+ # fields, scopes, and more.
8
+ module Madmin
9
+ module Resourceable
10
+ class << self
11
+ def included(base)
12
+ base.extend Madmin::Resourceable::ClassMethods
13
+ end
14
+ end
15
+
16
+ ##
17
+ # This method returns a list of fields where
18
+ # the index option is truthy.
19
+ def form_fields
20
+ self.class.fields.values.select { |field| field.form }
21
+ end
22
+
23
+ ##
24
+ # This methods exposes the underlying resource's name
25
+ # in a way humans can enjoy and understand.
26
+ def friendly_name
27
+ self.class.model_name.split("::").join(" ")
28
+ end
29
+
30
+ ##
31
+ # This method returns a list of fields where
32
+ # the index option is truthy.
33
+ def index_fields
34
+ self.class.fields.values.select { |field| field.index }
35
+ end
36
+
37
+ ##
38
+ # This method returns a list of labels for fields
39
+ # where the index option is truthy.
40
+ def index_headers
41
+ index_fields.map { |field| field.label }
42
+ end
43
+
44
+ ##
45
+ # This method affords us the ability to retrieve
46
+ # a list of the scopes from the class variable.
47
+ def scopes
48
+ self.class.scopes
49
+ end
50
+
51
+ ##
52
+ # This method exposes a way to control if the
53
+ # resource should visible in the menu.
54
+ def show_in_menu?
55
+ true
56
+ end
57
+
58
+ ##
59
+ # This method, when used in the resource, sets all fields
60
+ # to be used when the show partial is rendered.
61
+ def show_fields
62
+ self.class.fields.values.select { |field| field.show }
63
+ end
64
+
65
+ ##
66
+ # This method affords us the ability to have a
67
+ # consistently rendered slug for a resource.
68
+ def slug
69
+ ActiveModel::Naming.route_key(self.class.model)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,152 @@
1
+ module Madmin
2
+ module Resourceable
3
+ ##
4
+ # This module extends methods into class methods on the resource.
5
+ module ClassMethods
6
+ ##
7
+ # This method is a wrapper for the class variable fields.
8
+ # In the event there is no field defined yet, we rescue
9
+ # NameError and return an empty hash to begin the
10
+ # population of the fields class variable.
11
+ def fields
12
+ class_variable_get(:@@fields)
13
+ rescue NameError
14
+ {}
15
+ end
16
+
17
+ ##
18
+ # This becomes a DSL for adding a field into the fields class variable.
19
+ # It is responsible for validating and parsing the arguments before
20
+ # placing them into the fields class variable.
21
+ def field(*args)
22
+ validate_arguments!(args)
23
+
24
+ key = args[0].to_sym
25
+ field_type = args[1]
26
+
27
+ # We reassign the entire list of fields to prevent
28
+ # duplication each time the class is evaluated.
29
+ fresh_fields = fields
30
+ fresh_fields[key] = field_type.new(args[2].merge(key: key, model: model, resource: self))
31
+
32
+ class_variable_set(:@@fields, fresh_fields)
33
+ end
34
+
35
+ ##
36
+ # This method is a wrapper for the class variable scopes.
37
+ # In the event there is no scope defined yet, we rescue
38
+ # NameError and return an empty array to begin the
39
+ # population of the scopes class variable.
40
+ def scopes
41
+ class_variable_get(:@@scopes)
42
+ rescue NameError
43
+ []
44
+ end
45
+
46
+ ##
47
+ # This becomes a DSL for adding a field into the scopes class variable.
48
+ # It is responsible for validating and parsing the arguments before
49
+ # placing them into the scopes class variable.
50
+ def scope(*args)
51
+ validate_scopes!(args)
52
+
53
+ # We reassign the entire list of scopes to prevent
54
+ # duplication each time the class is evaluated.
55
+ fresh_scopes = scopes << args
56
+
57
+ class_variable_set(:@@scopes, fresh_scopes.flatten.uniq)
58
+ end
59
+
60
+ ##
61
+ # This method, when used in the resource, sets all fields
62
+ # to be used when the form partial is rendered.
63
+ def form_all_fields!
64
+ class_variable_set(:@@form_all_fields, true)
65
+ end
66
+
67
+ ##
68
+ # This method exposes a convenient way to see if all fields
69
+ # for a resource should be available in a form partial.
70
+ def form_all_fields?
71
+ class_variable_get(:@@form_all_fields)
72
+ rescue NameError
73
+ false
74
+ end
75
+
76
+ ##
77
+ # This method exposes the underlying model.
78
+ def model
79
+ model_name.constantize
80
+ end
81
+
82
+ ##
83
+ # This method extracts the namespace to reveal
84
+ # the underlying models name as a string.
85
+ def model_name
86
+ to_s.split("Madmin::Resources::").last.to_s
87
+ end
88
+
89
+ ##
90
+ # This method exposes a convenient way to see if all fields
91
+ # for a resource should be available in a show partial.
92
+ def show_all_fields!
93
+ class_variable_set(:@@show_all_fields, true)
94
+ end
95
+
96
+ ##
97
+ # This method exposes a convenient way to see if all fields
98
+ # for a resource should be available in a show partial.
99
+ def show_all_fields?
100
+ class_variable_get(:@@show_all_fields)
101
+ rescue NameError
102
+ false
103
+ end
104
+
105
+ private
106
+
107
+ ##
108
+ # This method validates that a given attribute for
109
+ # a field is provided in the correct format of
110
+ # either a symbol or a string.
111
+ def attribute?(attribute)
112
+ attribute.is_a?(Symbol) || attribute.is_a?(String)
113
+ end
114
+
115
+ ##
116
+ # We want to make sure a provided type is
117
+ # registered within our system.
118
+ def valid_type?(type)
119
+ type.to_s.deconstantize == Madmin::Field.to_s
120
+ end
121
+
122
+ ##
123
+ # This method looks at the first two arguments (attribute, type)
124
+ # and performs their prospective validations. If either
125
+ # validation fails, a WrongArgumentError is raised.
126
+ def validate_arguments!(args)
127
+ if !attribute?(args.first)
128
+ raise WrongArgumentError,
129
+ "#{model_name} expected the attribute name as a symbol or string as the first argument."
130
+ elsif !valid_type?(args.second)
131
+ raise WrongArgumentError,
132
+ "#{model_name} expected Madmin::Field type as the field type as the second argument."
133
+ end
134
+ end
135
+
136
+ ##
137
+ # This method looks at a given scope(s) and validates
138
+ # the scope exists on the underlying model.
139
+ #
140
+ # Rails scopes are defined as class methods as the
141
+ # class is evaluated, requiring this method
142
+ # of performing the validation.
143
+ def validate_scopes!(args)
144
+ args.each do |arg|
145
+ unless model.respond_to?(arg)
146
+ raise UndefinedScopeError, ".#{arg} is not a valid scope on #{name}"
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,13 @@
1
+ module Madmin
2
+ module Resources
3
+ # TODO: link to documentation in error message.
4
+ def self.gather
5
+ all
6
+ rescue NoMethodError
7
+ raise NoResourcesError,
8
+ "You must define an array of resources as `self.all` in lib/madmin/resources.rb"
9
+ rescue NameError => e
10
+ raise ResourceNotFoundError, "Madmin cannot locate the resource #{e.name}."
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module Madmin
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :madmin do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,197 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: madmin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jason Charnes
8
+ - Chris Oliver
9
+ - Andrew Fomera
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2019-10-18 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '5.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '5.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: pry-rails
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: sqlite3
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 1.3.6
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: 1.3.6
57
+ - !ruby/object:Gem::Dependency
58
+ name: standardrb
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ description: Administration for Rails
72
+ email:
73
+ - jason@thecharnes.com
74
+ - excid3@gmail.com
75
+ - andrew@zerlex.net
76
+ executables: []
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - MIT-LICENSE
81
+ - README.md
82
+ - Rakefile
83
+ - app/assets/config/madmin_manifest.js
84
+ - app/assets/javascripts/madmin/application.js
85
+ - app/assets/javascripts/madmin/dashboard.js
86
+ - app/assets/javascripts/madmin/resources.js
87
+ - app/assets/stylesheets/madmin/application.css
88
+ - app/assets/stylesheets/madmin/dashboard.css
89
+ - app/assets/stylesheets/madmin/resources.css
90
+ - app/controllers/madmin/application_controller.rb
91
+ - app/controllers/madmin/base_controller.rb
92
+ - app/controllers/madmin/dashboard_controller.rb
93
+ - app/controllers/madmin/resources_controller.rb
94
+ - app/decorators/madmin/resource_decorator.rb
95
+ - app/helpers/madmin/application_helper.rb
96
+ - app/helpers/madmin/fields/polymorphic_helper.rb
97
+ - app/jobs/madmin/application_job.rb
98
+ - app/mailers/madmin/application_mailer.rb
99
+ - app/models/madmin/application_record.rb
100
+ - app/views/application/_navigation.html.erb
101
+ - app/views/layouts/madmin/application.html.erb
102
+ - app/views/madmin/dashboard/index.html.erb
103
+ - app/views/madmin/fields/belongs_to/_form.html.erb
104
+ - app/views/madmin/fields/belongs_to/_index.html.erb
105
+ - app/views/madmin/fields/belongs_to/_show.html.erb
106
+ - app/views/madmin/fields/check_box/_form.html.erb
107
+ - app/views/madmin/fields/check_box/_index.html.erb
108
+ - app/views/madmin/fields/check_box/_show.html.erb
109
+ - app/views/madmin/fields/email/_form.html.erb
110
+ - app/views/madmin/fields/email/_index.html.erb
111
+ - app/views/madmin/fields/email/_show.html.erb
112
+ - app/views/madmin/fields/has_many/_form.html.erb
113
+ - app/views/madmin/fields/has_many/_show.html.erb
114
+ - app/views/madmin/fields/has_one/_form.html.erb
115
+ - app/views/madmin/fields/has_one/_show.html.erb
116
+ - app/views/madmin/fields/number/_form.html.erb
117
+ - app/views/madmin/fields/number/_index.html.erb
118
+ - app/views/madmin/fields/number/_show.html.erb
119
+ - app/views/madmin/fields/password/_form.html.erb
120
+ - app/views/madmin/fields/password/_index.html.erb
121
+ - app/views/madmin/fields/password/_show.html.erb
122
+ - app/views/madmin/fields/polymorphic/_form.html.erb
123
+ - app/views/madmin/fields/polymorphic/_index.html.erb
124
+ - app/views/madmin/fields/polymorphic/_show.html.erb
125
+ - app/views/madmin/fields/select/_form.html.erb
126
+ - app/views/madmin/fields/select/_index.html.erb
127
+ - app/views/madmin/fields/select/_show.html.erb
128
+ - app/views/madmin/fields/text/_form.html.erb
129
+ - app/views/madmin/fields/text/_index.html.erb
130
+ - app/views/madmin/fields/text/_show.html.erb
131
+ - app/views/madmin/fields/text_area/_form.html.erb
132
+ - app/views/madmin/fields/text_area/_index.html.erb
133
+ - app/views/madmin/fields/text_area/_show.html.erb
134
+ - app/views/madmin/resources/_form.html.erb
135
+ - app/views/madmin/resources/_scopes.html.erb
136
+ - app/views/madmin/resources/edit.html.erb
137
+ - app/views/madmin/resources/index.html.erb
138
+ - app/views/madmin/resources/index/_content.html.erb
139
+ - app/views/madmin/resources/new.html.erb
140
+ - app/views/madmin/resources/show.html.erb
141
+ - config/routes.rb
142
+ - lib/generators/madmin/controller/USAGE
143
+ - lib/generators/madmin/controller/controller_generator.rb
144
+ - lib/generators/madmin/install/install_generator.rb
145
+ - lib/generators/madmin/page/USAGE
146
+ - lib/generators/madmin/page/page_generator.rb
147
+ - lib/generators/madmin/page/templates/template.html.erb
148
+ - lib/generators/madmin/page/templates/template.rb.erb
149
+ - lib/generators/madmin/resource/resource_generator.rb
150
+ - lib/generators/madmin/resource/templates/resource.rb.erb
151
+ - lib/generators/madmin/views/views_generator.rb
152
+ - lib/madmin.rb
153
+ - lib/madmin/engine.rb
154
+ - lib/madmin/field.rb
155
+ - lib/madmin/field/associatable.rb
156
+ - lib/madmin/field/belongs_to.rb
157
+ - lib/madmin/field/check_box.rb
158
+ - lib/madmin/field/date_time.rb
159
+ - lib/madmin/field/email.rb
160
+ - lib/madmin/field/has_many.rb
161
+ - lib/madmin/field/has_one.rb
162
+ - lib/madmin/field/number.rb
163
+ - lib/madmin/field/password.rb
164
+ - lib/madmin/field/polymorphic.rb
165
+ - lib/madmin/field/select.rb
166
+ - lib/madmin/field/text.rb
167
+ - lib/madmin/field/text_area.rb
168
+ - lib/madmin/generator_helpers.rb
169
+ - lib/madmin/resourceable.rb
170
+ - lib/madmin/resourceable/class_methods.rb
171
+ - lib/madmin/resources.rb
172
+ - lib/madmin/version.rb
173
+ - lib/tasks/madmin_tasks.rake
174
+ homepage: https://madmin.jasoncharnes.com
175
+ licenses:
176
+ - MIT
177
+ metadata: {}
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ required_rubygems_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ requirements: []
193
+ rubygems_version: 3.0.6
194
+ signing_key:
195
+ specification_version: 4
196
+ summary: Administration for Rails
197
+ test_files: []