thecore 1.3.20

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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/controllers/application_controller.rb +2 -0
  5. data/app/controllers/pages_controller.rb +37 -0
  6. data/app/jobs/application_job.rb +2 -0
  7. data/app/models/ability.rb +48 -0
  8. data/app/models/user.rb +158 -0
  9. data/app/uploaders/attachment_uploader.rb +27 -0
  10. data/app/uploaders/image_uploader.rb +27 -0
  11. data/config/initializers/rails_admin.rb +42 -0
  12. data/config/initializers/rails_application_config.rb +28 -0
  13. data/config/initializers/thecore_concern.rb +113 -0
  14. data/config/locales/en.activerecord.yml +6 -0
  15. data/config/locales/en.contact_mailer.custom.yml +5 -0
  16. data/config/locales/en.devise.custom.yml +15 -0
  17. data/config/locales/en.rails_admin.yml +34 -0
  18. data/config/locales/en.rollincode.yml +5 -0
  19. data/config/locales/en.simple_form.yml +31 -0
  20. data/config/locales/en.yml +31 -0
  21. data/config/locales/it.activerecord.yml +20 -0
  22. data/config/locales/it.contact_mailer.custom.yml +5 -0
  23. data/config/locales/it.devise.custom.yml +15 -0
  24. data/config/locales/it.rails_admin.yml +34 -0
  25. data/config/locales/it.rollincode.yml +5 -0
  26. data/config/locales/it.simple_form.yml +31 -0
  27. data/config/locales/it.yml +38 -0
  28. data/config/routes.rb +14 -0
  29. data/db/migrate/20131103142222_create_friendly_id_slugs.rb +15 -0
  30. data/db/migrate/20141010133701_devise_create_users.rb +54 -0
  31. data/db/migrate/20150806091039_add_authentication_token_to_users.rb +6 -0
  32. data/db/migrate/20150825101810_add_roles_mask_to_users.rb +5 -0
  33. data/db/migrate/20151201145832_add_external_to_user.rb +5 -0
  34. data/db/migrate/20160331101901_add_code_to_user.rb +6 -0
  35. data/db/migrate/20160331101902_add_admin_user.rb +162 -0
  36. data/db/migrate/20161029154134_remove_friendly_id_slugs.rb +5 -0
  37. data/db/seeds.rb +1 -0
  38. data/lib/abilities.rb +20 -0
  39. data/lib/active_record_extension.rb +145 -0
  40. data/lib/activerecord_paperclip_extension.rb +21 -0
  41. data/lib/application_configs.rb +26 -0
  42. data/lib/application_record_loader.rb +3 -0
  43. data/lib/backtrace_silencers.rb +7 -0
  44. data/lib/constants.rb +0 -0
  45. data/lib/date_format.rb +27 -0
  46. data/lib/devise_initializer.rb +275 -0
  47. data/lib/generators/thecore/add_git/USAGE +8 -0
  48. data/lib/generators/thecore/add_git/add_git_generator.rb +269 -0
  49. data/lib/generators/thecore/thecorize_app/USAGE +8 -0
  50. data/lib/generators/thecore/thecorize_app/thecorize_app_generator.rb +37 -0
  51. data/lib/generators/thecore/thecorize_models/USAGE +9 -0
  52. data/lib/generators/thecore/thecorize_models/thecorize_models_generator.rb +255 -0
  53. data/lib/generators/thecore/thecorize_plugin/USAGE +9 -0
  54. data/lib/generators/thecore/thecorize_plugin/thecorize_plugin_generator.rb +166 -0
  55. data/lib/inflections.rb +16 -0
  56. data/lib/integer_extensions.rb +26 -0
  57. data/lib/kaminari_config.rb +12 -0
  58. data/lib/mime_types.rb +5 -0
  59. data/lib/postgresql_drop_replacement.rb +11 -0
  60. data/lib/string_extensions.rb +14 -0
  61. data/lib/tasks/thecore_tasks.rake +4 -0
  62. data/lib/thecore/engine.rb +35 -0
  63. data/lib/thecore/version.rb +3 -0
  64. data/lib/thecore.rb +63 -0
  65. data/lib/thecore_actions.rb +2 -0
  66. data/lib/thecore_base_roles.rb +2 -0
  67. data/lib/thecore_rails_admin_bulk_delete_concern.rb +19 -0
  68. data/lib/thecore_rails_admin_export_concern.rb +19 -0
  69. data/lib/thecore_rails_admin_main_controller_concern.rb +11 -0
  70. data/test/dummy/README.rdoc +28 -0
  71. data/test/dummy/Rakefile +6 -0
  72. data/test/dummy/app/assets/javascripts/application.js +13 -0
  73. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  74. data/test/dummy/app/controllers/application_controller.rb +5 -0
  75. data/test/dummy/app/helpers/application_helper.rb +2 -0
  76. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  77. data/test/dummy/bin/bundle +3 -0
  78. data/test/dummy/bin/rails +4 -0
  79. data/test/dummy/bin/rake +4 -0
  80. data/test/dummy/bin/setup +29 -0
  81. data/test/dummy/config/application.rb +25 -0
  82. data/test/dummy/config/boot.rb +5 -0
  83. data/test/dummy/config/database.yml +25 -0
  84. data/test/dummy/config/environment.rb +5 -0
  85. data/test/dummy/config/environments/development.rb +41 -0
  86. data/test/dummy/config/environments/production.rb +79 -0
  87. data/test/dummy/config/environments/test.rb +42 -0
  88. data/test/dummy/config/initializers/assets.rb +11 -0
  89. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  90. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  91. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  92. data/test/dummy/config/initializers/inflections.rb +16 -0
  93. data/test/dummy/config/initializers/mime_types.rb +4 -0
  94. data/test/dummy/config/initializers/session_store.rb +3 -0
  95. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  96. data/test/dummy/config/locales/en.yml +23 -0
  97. data/test/dummy/config/routes.rb +56 -0
  98. data/test/dummy/config/secrets.yml +22 -0
  99. data/test/dummy/config.ru +4 -0
  100. data/test/dummy/db/development.sqlite3 +0 -0
  101. data/test/dummy/log/development.log +6 -0
  102. data/test/dummy/public/404.html +67 -0
  103. data/test/dummy/public/422.html +67 -0
  104. data/test/dummy/public/500.html +66 -0
  105. data/test/dummy/public/favicon.ico +0 -0
  106. data/test/fixtures/users.yml +11 -0
  107. data/test/integration/navigation_test.rb +8 -0
  108. data/test/lib/generators/make_associations_complete_generator_test.rb +14 -0
  109. data/test/lib/generators/thecoreize_rails_plugin_generator_test.rb +14 -0
  110. data/test/lib/generators/thecorize_app_generator_test.rb +14 -0
  111. data/test/models/user_test.rb +7 -0
  112. data/test/test_helper.rb +20 -0
  113. data/test/thecore_test.rb +7 -0
  114. metadata +494 -0
@@ -0,0 +1,255 @@
1
+ require 'rails/generators/named_base'
2
+ module Thecore
3
+ class ThecorizeModelsGenerator < Rails::Generators::NamedBase
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ def init_constants
7
+ say "Setting the variables", :green
8
+ @plugin_path = @destination_stack.first.match(Regexp.new("^.*#{@name}"))[0]
9
+ @parent_path = File.expand_path("..", @plugin_path)
10
+ @plugin_parent_name = @parent_path.split(File::SEPARATOR).last
11
+ @plugin_initializers_dir = File.join(@plugin_path, "config", "initializers")
12
+ @plugin_models_dir = File.join(@plugin_path, "app", "models")
13
+ @plugin_lib_file = File.join(@plugin_path, "lib", @name, "engine.rb")
14
+ Dir.chdir @plugin_models_dir do
15
+ # Getting all the models that are activerecords:
16
+ @model_files = Dir.glob("*.rb").map do |model|
17
+ file = File.join(@plugin_models_dir,model)
18
+ model if is_applicationrecord?(file)
19
+ end.compact
20
+ end
21
+ end
22
+
23
+ desc "Replace ActiveRecord::Base with ApplicationRecord"
24
+ def replace_active_record
25
+ say "Replace ActiveRecord::Base with ApplicationRecord", :green
26
+ # For each model in this gem
27
+ @model_files.each do |entry|
28
+ # It must be a class and don't have rails_admin declaration
29
+ file = File.join(@plugin_models_dir, entry)
30
+ # say "Checking file #{file}", :red
31
+ if is_activerecord?(file) && !has_rails_admin_declaration?(file)
32
+ # say "Replacing ActiveRecord::Base into #{entry}", :green
33
+ # Add rails admin declaration
34
+ gsub_file file, "ActiveRecord::Base", "ApplicationRecord"
35
+ end
36
+ end
37
+ end
38
+
39
+ desc "Add rails_admin declaration only in files which are ActiveRecords and don't already have that declaration"
40
+ def add_rails_admin_reference
41
+ say "Add rails_admin declaration only in files which are ActiveRecords and don't already have that declaration", :green
42
+ # For each model in this gem
43
+ @model_files.each do |entry|
44
+ # It must be a class and don't have rails_admin declaration
45
+ file = File.join(@plugin_models_dir,entry)
46
+ # say "Checking file #{file}", :red
47
+ if is_applicationrecord?(file) && !has_rails_admin_declaration?(file)
48
+ # say "Adding rails_admin to #{entry}", :green
49
+ # Add rails admin declaration
50
+ inject_into_file file, before: /^end/ do
51
+ "
52
+ RailsAdmin.config do |config|
53
+ config.model self.name.underscore.capitalize.classify do
54
+ navigation_label I18n.t('admin.settings.label')
55
+ navigation_icon 'fa fa-file'
56
+ end
57
+ end
58
+ "
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ desc "Completes Belongs To Associations"
65
+ def complete_belongs_to
66
+ say "Completes Belongs To Associations", :green
67
+ # For each model in this gem
68
+ @model_files.each do |entry|
69
+ # It must be a class and don't have rails_admin declaration
70
+ file = File.join(@plugin_models_dir,entry)
71
+ # say "Checking file #{file}", :red
72
+ if is_applicationrecord?(file)
73
+ # say "Adding inverse_of to all belongs_to in #{entry}", :green
74
+ # belongs_to that don't have inverse_of
75
+ gsub_file file, /^(?!.*inverse_of.*)^[ \t]*belongs_to.*$/ do |match|
76
+ match << ", inverse_of: :#{entry.split(".").first.pluralize}"
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ desc "Add Has Many Associations"
83
+ def add_has_many
84
+ say "Add Has Many Associations", :green
85
+ # For each model in this gem
86
+ @model_files.each do |entry|
87
+ file = File.join(@plugin_models_dir,entry)
88
+ # It must be an activerecord model class
89
+ if is_applicationrecord?(file)
90
+ # say "Looking for belongs_to in #{entry} and adding the relevant has_manies", :green
91
+
92
+ # Polymorphic must be managed manually
93
+ File.readlines(file).grep(/^(?!.*polymorphic.*)^[ \t]*belongs_to :(.*),.+/).each do |a|
94
+ target_association = a[/:(.*?),/,1]
95
+ # look if the file identified by association .rb exists
96
+ associated_file = File.join(@plugin_models_dir,"#{target_association}.rb")
97
+ starting_model = entry.split(".").first.pluralize
98
+ # say "Found belongs_to association: #{target_association} for the model: #{starting_model}", :green
99
+ # say "- Looking for model file: #{associated_file}", :green
100
+ if File.exists?(associated_file)
101
+ # say "The file in which to add has_many, exists and the has_many does not! #{associated_file}", :green
102
+ # if true, check that the association is non existent and add the association to that file
103
+ inject_into_file associated_file, after: " < ApplicationRecord\n" do
104
+ "\n\t\thas_many :#{starting_model}, inverse_of: :#{target_association}, dependent: :destroy\n"
105
+ end unless has_has_many_association?(associated_file, starting_model)
106
+ else
107
+ # otherwise (the file does not exist) check if the initializer for concerns exists,
108
+ # For each model in this gem
109
+ initializer_name = "associations_#{target_association}_concern.rb"
110
+ initializer initializer_name do
111
+ "require 'active_support/concern'
112
+
113
+ module #{target_association.classify}AssociationsConcern
114
+ extend ActiveSupport::Concern
115
+ included do
116
+ end
117
+ end
118
+
119
+ # include the extension
120
+ # #{target_association.classify}.send(:include, #{target_association.classify}AssociationsConcern)
121
+ "
122
+ end unless File.exists?(File.join(@plugin_initializers_dir, initializer_name))
123
+
124
+ # AGGIUNGO L'INCLUDE
125
+ say "Adding after_initialize file", :green
126
+ after_initialize_file_name = "#{@name}_after_initialize.rb"
127
+ after_initialize_file_fullpath = File.join(@plugin_initializers_dir, after_initialize_file_name)
128
+ initializer after_initialize_file_name do
129
+ "Rails.application.configure do\n\tconfig.after_initialize do\n\tend\nend"
130
+ end unless File.exists?(after_initialize_file_fullpath)
131
+ inject_into_file after_initialize_file_fullpath, after: "config.after_initialize do\n" do
132
+ "\n\t\t#{target_association.classify}.send(:include, #{target_association.classify}AssociationsConcern)\n"
133
+ end
134
+
135
+ # then add to it the has_many declaration
136
+ # TODO: only if it doesn't already exists
137
+ inject_into_file File.join(@plugin_initializers_dir, initializer_name), after: "included do\n" do
138
+ "\n\t\thas_many :#{starting_model}, inverse_of: :#{target_association}, dependent: :destroy\n"
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ desc "Add Has Many Through Associations"
147
+ def add_has_many_through
148
+ say "Add Has Many Through Associations", :green
149
+ # I'ts just an approximation, but for now it could work
150
+ @model_files.each do |model|
151
+ association_model = model.split(".").first
152
+ file = File.join(@plugin_models_dir,model)
153
+ # It must be an activerecord model class
154
+ model_with_belongs_to = File.readlines(file).grep(/^[ \t]*belongs_to :.*$/)
155
+ if model_with_belongs_to.size == 2
156
+ if yes?("Is #{model} an association model for a has_many through relation?", :red)
157
+ # getting both the belongs_to models, find their model files, and add the through to each other
158
+ left_side = model_with_belongs_to.first[/:(.*?),/,1]
159
+ right_side = model_with_belongs_to.last[/:(.*?),/,1]
160
+ # This side of the through
161
+ inject_into_file File.join(@plugin_models_dir, "#{left_side}.rb"), after: " < ApplicationRecord\n" do
162
+ #has_many :rooms, through: :chosen_rooms, inverse_of: :chosen_decks
163
+ "
164
+ has_many :#{right_side.pluralize}, through: :#{association_model.pluralize}, inverse_of: :#{left_side.pluralize}
165
+ "
166
+ end unless is_has_many_through? file, right_side.pluralize, association_model.pluralize
167
+ # Other side of the through
168
+ inject_into_file File.join(@plugin_models_dir, "#{right_side}.rb"), after: " < ApplicationRecord\n" do
169
+ #has_many :rooms, through: :chosen_rooms, inverse_of: :chosen_decks
170
+ "
171
+ has_many :#{left_side.pluralize}, through: :#{association_model.pluralize}, inverse_of: :#{right_side.pluralize}
172
+ "
173
+ end unless is_has_many_through? file, left_side.pluralize, association_model.pluralize
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ desc "Detect polymorphic Associations"
180
+ def detect_polymorphic_associations
181
+ say "Detect polymorphic Associations", :green
182
+ # For each model in this gem
183
+ # say "MODEL FILES: #{@model_files.inspect} "
184
+ @model_files.each do |model|
185
+ file = File.join(@plugin_models_dir,model)
186
+ # It must be an activerecord model class
187
+ # belongs_to :rowable, polymorphic: true, inverse_of: :rows
188
+ polymorphics = File.readlines(file).grep(/^[ \t]*belongs_to :.*polymorphic.*/)
189
+ polymorphics.each do |polymorphic_belongs_to|
190
+ polymorphic_target_association = polymorphic_belongs_to[/:(.*?),/,1]
191
+ # Just keeping the models that are not this model, and
192
+ answers = ask_question_multiple_choice @model_files.reject {|m| m == model || has_polymorphic_has_many?(File.join(@plugin_models_dir,m), polymorphic_target_association)}, "Where do you want to add the polymorphic has_many called #{polymorphic_target_association} found in #{model}?"
193
+ answers.each do |answer|
194
+ # Add the polymorphic has_name declaration
195
+ inject_into_file File.join(@plugin_models_dir, answer), after: " < ApplicationRecord\n" do
196
+ "
197
+ has_many :#{model.split(".").first.pluralize}, as: :#{polymorphic_target_association}, inverse_of: :#{answer.split(".").first.singularize}, dependent: :destroy
198
+ "
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ private
206
+
207
+ def ask_question_multiple_choice models, question = "Choose among one of these, please."
208
+ return [] if models.empty?
209
+ # raccolgo tutte le risposte che non siano cancel
210
+ # e ritorno l'array
211
+ return_array = []
212
+ while (answer ||= "") != "cancel"
213
+ remaining_models = (models-return_array)
214
+ break if remaining_models.empty?
215
+ answer = ask question, :red, limited_to: remaining_models.push("cancel").uniq
216
+ break if answer == "cancel"
217
+ return_array.push answer
218
+ end
219
+ return return_array
220
+ end
221
+
222
+ def is_has_many_through? file, assoc, through
223
+ (File.readlines(file).grep(/^[ \t]*has_many[ \t]+:#{assoc},[ \t]+through:[ \t]+:#{through}.*/).size > 0) rescue false
224
+ end
225
+
226
+ def has_polymorphic_has_many? file, polymorphic_name
227
+ (File.readlines(file).grep(/^[ \t]*has_many.+as: :#{polymorphic_name}.*/).size > 0) rescue false
228
+ end
229
+
230
+ def is_activerecord? file
231
+ (File.readlines(file).grep(/^class [A-Za-z0-9]+ < ActiveRecord::Base/).size > 0) rescue false
232
+ end
233
+
234
+ def is_applicationrecord? file
235
+ (File.readlines(file).grep(/^class [A-Za-z0-9]+ < ApplicationRecord/).size > 0) rescue false
236
+ end
237
+
238
+ def has_rails_admin_declaration? file
239
+ (File.readlines(file).grep(/^[ \t]*RailsAdmin.config do/).size > 0) rescue false
240
+ end
241
+
242
+ def is_engine? file
243
+ (File.readlines(file).grep(/^[ \t]*class Engine < ::Rails::Engine/).size > 0) rescue false
244
+ end
245
+
246
+ def has_add_to_migrations_declaration? file
247
+ (File.readlines(file).grep(/^[ \t]*initializer '[a-zA-Z0-9]+\.add_to_migrations' do \|app\|/).size > 0) rescue false
248
+ end
249
+
250
+ def has_has_many_association? file, assoc
251
+ reg_def = "^[ \\t]+has_many[ \\t]+:#{assoc}"
252
+ (File.readlines(file).grep(Regexp.new(reg_def)).size > 0) rescue false
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Generator used to change all the models and make them thecore compatible
3
+
4
+ Example:
5
+ rails generate thecorize_plugin pluginname
6
+
7
+ This will create:
8
+ It will change models and adds rails_admin declaration (a general one)
9
+ It will add all the necessary tidbits to associations (adds to belongs_to, tries to infer has_many's)
@@ -0,0 +1,166 @@
1
+ require 'rails/generators/named_base'
2
+ module Thecore
3
+ class ThecorizePluginGenerator < Rails::Generators::NamedBase
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ # Something like:
7
+ #
8
+ class_option :git_server, aliases: "-g"
9
+
10
+ def init_constants
11
+ say "Setting the variables", :green
12
+ @plugin_path = @destination_stack.first.match(Regexp.new("^.*#{@name}"))[0]
13
+ @parent_path = File.expand_path("..", @plugin_path)
14
+ @plugin_parent_name = @parent_path.split(File::SEPARATOR).last
15
+ @plugin_initializers_dir = File.join(@plugin_path, "config", "initializers")
16
+ @plugin_models_dir = File.join(@plugin_path, "app", "models")
17
+ @plugin_lib_file = File.join(@plugin_path, "lib", @name, "engine.rb")
18
+ Dir.chdir @plugin_models_dir do
19
+ # Getting all the models that are activerecords:
20
+ @model_files = Dir.glob("*.rb").map do |model|
21
+ file = File.join(@plugin_models_dir,model)
22
+ model if is_applicationrecord?(file)
23
+ end.compact
24
+ end
25
+ end
26
+
27
+ desc "Make migrations usable into main app"
28
+ def migrations_to_main_app
29
+ say "Checking if it's an engine"
30
+ if is_engine?(@plugin_lib_file) && !has_add_to_migrations_declaration?(@plugin_lib_file)
31
+ say "Adding migration reflection into engine.rb of", :green
32
+ inject_into_file @plugin_lib_file, after: "class Engine < ::Rails::Engine\n" do
33
+ "
34
+ initializer '#{@name}.add_to_migrations' do |app|
35
+ unless app.root.to_s == root.to_s
36
+ # APPEND TO MAIN APP MIGRATIONS FROM THIS GEM
37
+ config.paths['db/migrate'].expanded.each do |expanded_path|
38
+ app.config.paths['db/migrate'] << expanded_path
39
+ end
40
+ end
41
+ end
42
+
43
+ "
44
+ end
45
+ end
46
+ end
47
+
48
+ desc "require thecore"
49
+ def add_require_thecore
50
+ inject_into_file "lib/#{@name}.rb", before: "require \"#{@name}/engine\"" do
51
+ "
52
+ require 'thecore'
53
+ "
54
+ end
55
+ end
56
+
57
+ desc "Add Ability File"
58
+ def add_ability_file
59
+ # do this just the first time
60
+ say "Adding abilities file", :green
61
+ abilities_file_name = "abilities_#{@name}_concern.rb"
62
+ abilities_file_fullpath = File.join(@plugin_initializers_dir, abilities_file_name)
63
+ initializer abilities_file_name do
64
+ "
65
+ require 'active_support/concern'
66
+
67
+ module #{@name.classify}AbilitiesConcern
68
+ extend ActiveSupport::Concern
69
+ included do
70
+ def #{@name}_abilities user
71
+ if user
72
+ # if the user is logged in, it can do certain tasks regardless his role
73
+ if user.admin?
74
+ # if the user is an admin, it can do a lot of things, usually
75
+ end
76
+
77
+ if user.has_role? :role
78
+ # a specific role, brings specific powers
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ # include the extension
86
+ TheCoreAbilities.send(:include, #{@name.classify}AbilitiesConcern)
87
+ "
88
+ end unless File.exists?(abilities_file_fullpath)
89
+ end
90
+
91
+ desc "Add after_initialize File"
92
+ def add_after_initialize_file
93
+ # do this just the first time
94
+ say "Adding after_initialize file", :green
95
+ after_initialize_file_name = "#{@name}_after_initialize.rb"
96
+ after_initialize_file_fullpath = File.join(@plugin_initializers_dir, after_initialize_file_name)
97
+ initializer after_initialize_file_name do
98
+ "
99
+ Rails.application.configure do
100
+ config.after_initialize do
101
+ end
102
+ end
103
+ "
104
+ end unless File.exists?(after_initialize_file_fullpath)
105
+ end
106
+
107
+ def manage_git
108
+ say "Manage Git", :green
109
+ rails_command "g thecore:add_git #{@name}"
110
+ end
111
+
112
+ def thecoreize_the_models
113
+ rails_command "g thecore:thecorize_models #{@name}"
114
+ end
115
+
116
+ private
117
+
118
+ def ask_question_multiple_choice models, question = "Choose among one of these, please."
119
+ return [] if models.empty?
120
+ # raccolgo tutte le risposte che non siano cancel
121
+ # e ritorno l'array
122
+ return_array = []
123
+ while (answer ||= "") != "cancel"
124
+ remaining_models = (models-return_array)
125
+ break if remaining_models.empty?
126
+ answer = ask question, :red, limited_to: remaining_models.push("cancel").uniq
127
+ break if answer == "cancel"
128
+ return_array.push answer
129
+ end
130
+ return return_array
131
+ end
132
+
133
+ def is_has_many_through? file, assoc, through
134
+ (File.readlines(file).grep(/^[ \t]*has_many[ \t]+:#{assoc},[ \t]+through:[ \t]+:#{through}.*/).size > 0) rescue false
135
+ end
136
+
137
+ def has_polymorphic_has_many? file, polymorphic_name
138
+ (File.readlines(file).grep(/^[ \t]*has_many.+as: :#{polymorphic_name}.*/).size > 0) rescue false
139
+ end
140
+
141
+ def is_activerecord? file
142
+ (File.readlines(file).grep(/^class [A-Za-z0-9]+ < ActiveRecord::Base/).size > 0) rescue false
143
+ end
144
+
145
+ def is_applicationrecord? file
146
+ (File.readlines(file).grep(/^class [A-Za-z0-9]+ < ApplicationRecord/).size > 0) rescue false
147
+ end
148
+
149
+ def has_rails_admin_declaration? file
150
+ (File.readlines(file).grep(/^[ \t]*rails_admin do/).size > 0) rescue false
151
+ end
152
+
153
+ def is_engine? file
154
+ (File.readlines(file).grep(/^[ \t]*class Engine < ::Rails::Engine/).size > 0) rescue false
155
+ end
156
+
157
+ def has_add_to_migrations_declaration? file
158
+ (File.readlines(file).grep(/^[ \t]*initializer '[a-zA-Z0-9]+\.add_to_migrations' do \|app\|/).size > 0) rescue false
159
+ end
160
+
161
+ def has_has_many_association? file, assoc
162
+ reg_def = "^[ \\t]+has_many[ \\t]+:#{assoc}"
163
+ (File.readlines(file).grep(Regexp.new(reg_def)).size > 0) rescue false
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format. Inflections
4
+ # are locale specific, and you may define rules for as many different
5
+ # locales as you wish. All of these examples are active by default:
6
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
7
+ # inflect.plural /^(ox)$/i, '\1en'
8
+ # inflect.singular /^(ox)en/i, '\1'
9
+ # inflect.irregular 'person', 'people'
10
+ # inflect.uncountable %w( fish sheep )
11
+ # end
12
+
13
+ # These inflection rules are supported but not enabled by default:
14
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
15
+ # inflect.acronym 'RESTful'
16
+ # end
@@ -0,0 +1,26 @@
1
+ require 'active_support/concern'
2
+
3
+ module FixnumConcern
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ def to_tiered_times skip_seconds = false
7
+ # Actual calculations
8
+ mm, ss = self.divmod(60)
9
+ hh, mm = mm.divmod(60)
10
+ dd, hh = hh.divmod(24)
11
+
12
+ # Presentation
13
+ sentence = []
14
+ sentence << I18n.t("tiered_times.dd", count: dd) unless dd.zero?
15
+ sentence << I18n.t("tiered_times.hh", count: hh) unless hh.zero?
16
+ sentence << I18n.t("tiered_times.mm", count: mm) unless mm.zero?
17
+ sentence << I18n.t("tiered_times.ss", count: ss) if !ss.zero? && !skip_seconds
18
+
19
+ # to_sentence è una estensione rails che traduce nella forma più corretta (decisamente migliore del join(", "))
20
+ sentence.to_sentence
21
+ end
22
+ end
23
+ end
24
+
25
+ # include the extension
26
+ Integer.send(:include, FixnumConcern)
@@ -0,0 +1,12 @@
1
+ require 'kaminari'
2
+
3
+ Kaminari.configure do |config|
4
+ # config.default_per_page = 25
5
+ # config.max_per_page = nil
6
+ # config.window = 4
7
+ # config.outer_window = 0
8
+ # config.left = 0
9
+ # config.right = 0
10
+ # config.page_method_name = :page
11
+ # config.param_name = :page
12
+ end
data/lib/mime_types.rb ADDED
@@ -0,0 +1,5 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
5
+ # Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,11 @@
1
+ module ActiveRecord
2
+ module Tasks
3
+ class PostgreSQLDatabaseTasks
4
+ def drop
5
+ establish_master_connection
6
+ connection.select_all "select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where datname='#{configuration['database']}' AND state='idle';"
7
+ connection.drop_database configuration['database']
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # .gsub(/[^A-Za-z0-9]/, " ").split.join("%")
2
+ require 'active_support/concern'
3
+
4
+ module StringConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ def likeize
8
+ # .select{|w| w.length > 2}
9
+ strip.gsub(/[^A-Za-z0-9]/, " ").split.join("%")
10
+ end
11
+ end
12
+
13
+ # include the extension
14
+ String.send(:include, StringConcern)
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :thecore do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,35 @@
1
+ module Thecore
2
+ class Engine < ::Rails::Engine
3
+ initializer "thecore.configure_rails_initialization", group: :all do |app|
4
+ # Engine configures Rails app here
5
+ app.config.api_only = false
6
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
7
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
8
+ app.config.time_zone = 'Rome'
9
+
10
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
11
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
12
+ app.config.i18n.default_locale = :it
13
+
14
+ # Assets
15
+ # app.config.assets.precompile += %w( thecore/ie.js )
16
+ # app.config.assets.precompile += %w( thecore/thecore.js )
17
+ # app.config.assets.precompile += %w( thecore/thecore.css )
18
+ # app.config.assets.precompile += %w( thecore/app-logo.png )
19
+ # app.config.assets.precompile += %w( thecore/apple-touch-icon-ipad-76x76.png )
20
+ # app.config.assets.precompile += %w( thecore/apple-touch-icon-ipad-retina-152x152.png )
21
+ # app.config.assets.precompile += %w( thecore/apple-touch-icon-iphone-60x60.png )
22
+ # app.config.assets.precompile += %w( thecore/apple-touch-icon-iphone-retina-120x120.png )
23
+ end
24
+
25
+ # appending migrations to the main app's ones
26
+ initializer "thecore.add_to_migrations" do |app|
27
+ unless app.root.to_s == root.to_s
28
+ # APPEND TO MAIN APP MIGRATIONS FROM THIS GEM
29
+ config.paths["db/migrate"].expanded.each do |expanded_path|
30
+ app.config.paths["db/migrate"] << expanded_path
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module Thecore
2
+ VERSION = '1.3.20'
3
+ end
data/lib/thecore.rb ADDED
@@ -0,0 +1,63 @@
1
+ require 'rails'
2
+ require 'rails/application'
3
+ require 'application_record_loader'
4
+ require 'thecore_base_roles'
5
+ require 'active_record_extension'
6
+ require 'integer_extensions'
7
+ require 'string_extensions'
8
+ require 'activerecord_paperclip_extension'
9
+ require 'abilities'
10
+ require 'application_configs'
11
+ require 'backtrace_silencers'
12
+ require 'constants'
13
+ require 'date_format'
14
+ require 'inflections'
15
+ require 'mime_types'
16
+ require 'postgresql_drop_replacement'
17
+
18
+ # require 'rails_admin_clone'
19
+ require 'rails_admin_rollincode'
20
+ require 'rails_admin'
21
+ require 'rails_admin_toggleable'
22
+ require 'rails_admin-i18n'
23
+ # require 'rails_admin_initializer'
24
+ # require 'rails_admin_history_rollback'
25
+ require 'serviceworker-rails'
26
+
27
+ require 'rails-i18n'
28
+ require 'kaminari'
29
+ require 'kaminari_config'
30
+ require 'devise'
31
+ require 'devise_initializer'
32
+ # require 'rails_admin_amoeba_dup'
33
+ require 'devise-i18n'
34
+ require 'devise-i18n-views'
35
+ require 'cancancan'
36
+ require 'http_accept_language'
37
+ require 'bootstrap-sass'
38
+ require 'font-awesome-sass'
39
+ # require 'friendly_id'
40
+ require 'paperclip'
41
+
42
+ require 'thecore_rails_admin_export_concern'
43
+ require 'thecore_rails_admin_bulk_delete_concern'
44
+
45
+ require 'oj'
46
+ require 'multi_json'
47
+
48
+ require 'thecore/engine'
49
+
50
+ # require 'controllers/application_controller'
51
+ # require 'controllers/pages_controller'
52
+ #
53
+ # require 'jobs/application_job'
54
+ #
55
+ # require 'models/ability'
56
+ # require 'models/application_record'
57
+ # require 'models/user'
58
+ #
59
+ # require 'uploaders/attachment_uploader'
60
+ # require 'uploaders/image_uploader'
61
+
62
+ module Thecore
63
+ end
@@ -0,0 +1,2 @@
1
+ module TheCoreActions
2
+ end
@@ -0,0 +1,2 @@
1
+ # Array holding all the roles
2
+ ROLES = []
@@ -0,0 +1,19 @@
1
+ require 'active_support/concern'
2
+
3
+ module BulkDeleteConcern
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ # Should the action be visible
7
+ # Edit By taris, it shows the button only if there are records displayed
8
+ register_instance_option :visible? do
9
+ # If not in index, then return true,
10
+ # otherwise it wont' be added to the list
11
+ # of all Actions during rails initialization
12
+ # In index, instead, I show it only if there are records in the current view
13
+ bindings[:controller].action_name == "index" ? (authorized? && !bindings[:controller].instance_variable_get("@objects").blank?) : true
14
+ end
15
+ end
16
+ end
17
+
18
+ # include the extension
19
+ RailsAdmin::Config::Actions::BulkDelete.send(:include, BulkDeleteConcern)