thecore 1.3.20

Sign up to get free protection for your applications and to get access to all the features.
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)