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,31 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # To learn more, please read the Rails Internationalization guide
20
+ # available at http://guides.rubyonrails.org/i18n.html.
21
+
22
+ en:
23
+ current_user: Current user
24
+ hello: "Hello world"
25
+ dashboard: "Dashboard"
26
+ contact: "Contact"
27
+ manage: "Manage"
28
+ sign_out: "Sign Out"
29
+ admin:
30
+ links:
31
+ label: Links
@@ -0,0 +1,20 @@
1
+ it:
2
+ activerecord:
3
+ models:
4
+ user:
5
+ one: Utente
6
+ other: Anagrafica Utenti
7
+ attributes:
8
+ user:
9
+ email: E-Mail
10
+ username: Nome Utente
11
+ code: Codice
12
+ roles: Ruoli
13
+ admin: Amministratore?
14
+ created_at: Data di Creazione
15
+ locked: Bloccato?
16
+ third_party: Ente Terzo?
17
+ password: Password
18
+ password_confirmation: Conferma Password
19
+ descriptions:
20
+ user: In questa sezione dell'applicazione potete cercare nella lista degli utenti in diversi modi usando i filtri o ordinare la lista secondo diversi campi.
@@ -0,0 +1,5 @@
1
+ it:
2
+ contact_mailer:
3
+ message:
4
+ domain: "Dominio: %{domain}"
5
+ from: "Mittente: %{name} - %{email}"
@@ -0,0 +1,15 @@
1
+ it:
2
+ devise:
3
+ mailer:
4
+ password_changed_instructions:
5
+ greeting: Benvenuto %{recipient}!
6
+ instruction: Le abbiamo inviato questa email per notificarle il fatto che la sua password è stata cambiata.
7
+ instruction_2: Se non è stato lei a richiedere la modifica della password, la preghiamo di contattare il servizio clienti.
8
+ shared:
9
+ links:
10
+ sign_out: Esci
11
+ descriptions:
12
+ current_password_needed: (è necessario inserire la password corrente per autorizzare la modifica)
13
+ leave_blank: (lasciare vuota se non la si vuole modificare)
14
+ validations:
15
+ minimum_length: la lunghezza minima è di %{length} caratteri
@@ -0,0 +1,34 @@
1
+ it:
2
+ admin:
3
+ misc:
4
+ scopes: Filtri Veloci
5
+ scopes:
6
+ all: Tutti
7
+ order_by_name: Ordine Alfabetico
8
+ order_by_insert_date: Ordina per Data
9
+ starts_with_a: Inizia per A
10
+ starts_with_b: Inizia per B
11
+ starts_with_c: Inizia per C
12
+ starts_with_d: Inizia per D
13
+ starts_with_e: Inizia per E
14
+ starts_with_f: Inizia per F
15
+ starts_with_g: Inizia per G
16
+ starts_with_h: Inizia per H
17
+ starts_with_i: Inizia per I
18
+ starts_with_j: Inizia per J
19
+ starts_with_k: Inizia per K
20
+ starts_with_l: Inizia per L
21
+ starts_with_m: Inizia per M
22
+ starts_with_n: Inizia per N
23
+ starts_with_o: Inizia per O
24
+ starts_with_p: Inizia per P
25
+ starts_with_q: Inizia per Q
26
+ starts_with_r: Inizia per R
27
+ starts_with_s: Inizia per S
28
+ starts_with_t: Inizia per T
29
+ starts_with_u: Inizia per U
30
+ starts_with_v: Inizia per V
31
+ starts_with_w: Inizia per W
32
+ starts_with_x: Inizia per X
33
+ starts_with_y: Inizia per Y
34
+ starts_with_z: Inizia per Z
@@ -0,0 +1,5 @@
1
+ it:
2
+ admin:
3
+ rollincode:
4
+ number: Quantità
5
+ show: "Mostra gli elementi"
@@ -0,0 +1,31 @@
1
+ it:
2
+ simple_form:
3
+ yes: Si
4
+ no: No
5
+ required:
6
+ # text: 'required'
7
+ # mark: '*'
8
+ # You can uncomment the line below if you need to overwrite the whole required html.
9
+ # When using html, text and mark won't be used.
10
+ html: '*'
11
+ error_notification:
12
+ default_message: 'Per piacere, controlli gli errori riportati:'
13
+ # Examples
14
+ # labels:
15
+ # defaults:
16
+ # password: 'Password'
17
+ # user:
18
+ # new:
19
+ # email: 'E-mail to sign in.'
20
+ # edit:
21
+ # email: 'E-mail.'
22
+ # hints:
23
+ # defaults:
24
+ # username: 'User name to sign in.'
25
+ # password: 'No special characters, please.'
26
+ # include_blanks:
27
+ # defaults:
28
+ # age: 'Rather not say'
29
+ # prompts:
30
+ # defaults:
31
+ # age: 'Select your age'
@@ -0,0 +1,38 @@
1
+ it:
2
+ current_user: Utente corrente
3
+ hello: "Ciao Mondo"
4
+ dashboard: "Pannello di controllo"
5
+ contact: "Aiutaci a Migliorare"
6
+ manage: "Gestione"
7
+ sign_out: "Uscita"
8
+ advanced: Impostazioni
9
+ main_records: Anagrafiche
10
+ tiered_times:
11
+ dd:
12
+ zero: "0 Giorni"
13
+ one: "%{count} Giorno"
14
+ other: "%{count} Giorni"
15
+ hh:
16
+ zero: "0 Ore"
17
+ one: "%{count} Ora"
18
+ other: "%{count} Ore"
19
+ mm:
20
+ zero: "0 Minuti"
21
+ one: "%{count} Minuto"
22
+ other: "%{count} Minuti"
23
+ ss:
24
+ zero: "0 Secondi"
25
+ one: "%{count} Secondo"
26
+ other: "%{count} Secondi"
27
+ admin:
28
+ links:
29
+ label: Collegamenti
30
+ tools:
31
+ label: "Strumenti"
32
+ settings:
33
+ label: "Impostazioni"
34
+ actions:
35
+ charts:
36
+ menu: Analisi
37
+ title: Grafici
38
+ breadcrumb: Grafici
data/config/routes.rb ADDED
@@ -0,0 +1,14 @@
1
+ Rails.application.routes.draw do
2
+ # mount RailsAdminSelectize::Engine => '/rails-admin-selectize', as: 'rails_admin_selectize'
3
+ mount RailsAdmin::Engine => '/app', as: 'rails_admin'
4
+
5
+ get "home", to: "pages#home", as: "home"
6
+ get "inside", to: "pages#inside", as: "inside"
7
+ get "/contact", to: "pages#contact", as: "contact"
8
+ post "/emailconfirmation", to: "pages#email", as: "email_confirmation"
9
+
10
+ devise_for :users
11
+ devise_scope :user do
12
+ root to: "devise/sessions#new"
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ class CreateFriendlyIdSlugs < ActiveRecord::Migration[4.2]
2
+ def change
3
+ create_table :friendly_id_slugs do |t|
4
+ t.string :slug, :null => false
5
+ t.integer :sluggable_id, :null => false
6
+ t.string :sluggable_type, :limit => 50
7
+ t.string :scope
8
+ t.datetime :created_at
9
+ end
10
+ add_index :friendly_id_slugs, :sluggable_id
11
+ add_index :friendly_id_slugs, [:slug, :sluggable_type]
12
+ add_index :friendly_id_slugs, [:slug, :sluggable_type, :scope], :unique => true
13
+ add_index :friendly_id_slugs, :sluggable_type
14
+ end
15
+ end
@@ -0,0 +1,54 @@
1
+ class DeviseCreateUsers < ActiveRecord::Migration[4.2]
2
+ def change
3
+ create_table(:users) do |t|
4
+ ## Database authenticatable
5
+ t.string :username, :null => false, :default => ""
6
+ t.string :email, :null => false, :default => ""
7
+ t.string :encrypted_password, :null => false, :default => ""
8
+
9
+ ## Admin
10
+ t.boolean :admin, :null => false, :default => false
11
+
12
+ ## Lock
13
+ t.boolean :locked, :null => false, :default => false
14
+
15
+ ## Friendly_id
16
+ t.string :slug
17
+
18
+ ## Recoverable
19
+ t.string :reset_password_token
20
+ t.datetime :reset_password_sent_at
21
+
22
+ ## Rememberable
23
+ t.datetime :remember_created_at
24
+
25
+ ## Trackable
26
+ t.integer :sign_in_count, :default => 0, :null => false
27
+ t.datetime :current_sign_in_at
28
+ t.datetime :last_sign_in_at
29
+ t.string :current_sign_in_ip
30
+ t.string :last_sign_in_ip
31
+
32
+ ## Confirmable
33
+ # t.string :confirmation_token
34
+ # t.datetime :confirmed_at
35
+ # t.datetime :confirmation_sent_at
36
+ # t.string :unconfirmed_email # Only if using reconfirmable
37
+
38
+ ## Lockable
39
+ # t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
40
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
41
+ # t.datetime :locked_at
42
+
43
+
44
+ t.timestamps
45
+ end
46
+
47
+ add_index :users, :username, :unique => true
48
+ add_index :users, :email, :unique => true
49
+ add_index :users, :reset_password_token, :unique => true
50
+ #add_index :users, :confirmation_token, :unique => true
51
+ add_index :users, :slug, :unique => true
52
+ # add_index :users, :unlock_token, :unique => true
53
+ end
54
+ end
@@ -0,0 +1,6 @@
1
+ class AddAuthenticationTokenToUsers < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :users, :authentication_token, :string
4
+ add_index :users, :authentication_token
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddRolesMaskToUsers < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :users, :roles, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddExternalToUser < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :users, :third_party, :boolean, default: false
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddCodeToUser < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :users, :code, :string
4
+ add_index :users, :code
5
+ end
6
+ end
@@ -0,0 +1,162 @@
1
+ class AddAdminUser < ActiveRecord::Migration[4.2]
2
+ # Model actual as of today
3
+ class User < ActiveRecord::Base
4
+ # Include default devise modules. Others available are:
5
+ # :confirmable, :lockable, :timeoutable and :omniauthable
6
+ devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :confirmable
7
+
8
+ before_create :generate_authentication_token
9
+
10
+ paginates_per 50
11
+
12
+ # Validations
13
+ # :username
14
+ validates :username, uniqueness: { case_sensitive: false }
15
+ validates_format_of :username, with: /\A[a-zA-Z0-9]*\z/, on: :create, message: "can only contain letters and digits"
16
+ validates :username, length: { in: 4..15 }
17
+ # :email
18
+ validates :email, uniqueness: { case_sensitive: false }
19
+ validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
20
+
21
+ validates :username, presence: true
22
+ validates :email, presence: true
23
+
24
+ validates :password, presence: true, on: :create
25
+ validates :password_confirmation, presence: true, on: :create
26
+
27
+ def self.paged(page_number)
28
+ order(admin: :desc, username: :asc).page page_number
29
+ end
30
+
31
+ def self.search_and_order(search, page_number)
32
+ if search
33
+ where("username LIKE ?", "%#{search.downcase}%").order(
34
+ admin: :desc, username: :asc
35
+ ).page page_number
36
+ else
37
+ order(admin: :desc, username: :asc).page page_number
38
+ end
39
+ end
40
+
41
+ def self.last_signups(count)
42
+ order(created_at: :desc).limit(count).select("id","username","slug","created_at")
43
+ end
44
+
45
+ def self.last_signins(count)
46
+ order(last_sign_in_at:
47
+ :desc).limit(count).select("id","username","slug","last_sign_in_at")
48
+ end
49
+
50
+ def self.users_count
51
+ where("admin = ? AND locked = ?",false,false).count
52
+ end
53
+
54
+ serialize :roles, Array
55
+ def roles_enum
56
+ # Do not EDIT below this line
57
+ ROLES.each_with_index.map {|a,i| [I18n.t("roles.#{a.to_sym}"), (i+1).to_s]}
58
+ end
59
+ def has_role? role
60
+ # example called from cancan's app/models/ability.rb
61
+ # if user.has_role? :admin
62
+
63
+ # for roles array stored in db... take each value, see if it matches the second column in the roles_enum array, if so, retu the 1st col of the enum as a uprcase,space_to_underscore,symbol .
64
+ chosen_roles = self.roles.map { |r| r.blank? ? nil : ROLES[r.to_i - 1] }
65
+ chosen_roles.compact.include? role
66
+ end
67
+
68
+ def title
69
+ username
70
+ end
71
+
72
+ rails_admin do
73
+ navigation_label I18n.t("admin.settings.label")
74
+ weight 10
75
+ # Field present Everywhere
76
+ field :email do
77
+ required true
78
+ end
79
+ field :username do
80
+ required true
81
+ end
82
+ field :code
83
+ field :roles, :enum do
84
+ pretty_value do # used in list view columns and show views, defaults to formatted_value for non-association fields
85
+ value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", "
86
+ end
87
+ export_value do
88
+ value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", " # used in exports, where no html/data is allowed
89
+ end
90
+ queryable false
91
+ end
92
+ field :admin do
93
+ visible do
94
+ bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
95
+ end
96
+ end
97
+ field :locked do
98
+ visible do
99
+ bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
100
+ end
101
+ end
102
+ field :third_party do
103
+ visible do
104
+ bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
105
+ end
106
+ end
107
+
108
+ # Fields only in lists and forms
109
+ list do
110
+ field :created_at
111
+ configure :email do
112
+ visible false
113
+ end
114
+ end
115
+
116
+ create do
117
+ field :password do
118
+ required true
119
+ end
120
+ field :password_confirmation do
121
+ required true
122
+ end
123
+ end
124
+
125
+ edit do
126
+ field :password do
127
+ required false
128
+ end
129
+ field :password_confirmation do
130
+ required false
131
+ end
132
+ end
133
+ end
134
+
135
+ #has_paper_trail
136
+
137
+ private
138
+
139
+ def generate_authentication_token
140
+ loop do
141
+ self.authentication_token = SecureRandom.base64(64)
142
+ break unless User.find_by(authentication_token: authentication_token)
143
+ end
144
+ end
145
+ end
146
+
147
+
148
+ def up
149
+ puts "Generating admin user"
150
+ User.reset_column_information
151
+ u=User.find_or_initialize_by(username: "admin")
152
+ puts "Utente Admin: #{u.inspect}"
153
+ u.email = "admin@example.com"
154
+ psswd = SecureRandom.hex(5)
155
+ puts "\tThecore admin password is:\n\n\t\t#{psswd}\n\n\tplease save it somewhere, securely."
156
+ u.password = psswd
157
+ u.password_confirmation = psswd
158
+ u.admin = true
159
+ # u.skip_confirmation!
160
+ u.save!
161
+ end
162
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveFriendlyIdSlugs < ActiveRecord::Migration[4.2]
2
+ def change
3
+ drop_table :friendly_id_slugs
4
+ end
5
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1 @@
1
+
data/lib/abilities.rb ADDED
@@ -0,0 +1,20 @@
1
+ module TheCoreAbilities
2
+ def core_abilities user
3
+ # So the static link navigation can be set runtime (yes it's an hack)
4
+ RailsAdmin.config do |config|
5
+ config.navigation_static_label = I18n.t("admin.links.label")
6
+ end
7
+ # Normal core abilities file
8
+ if user
9
+ can :access, :rails_admin # grant access to rails_admin
10
+ can :dashboard, :all # allow access to dashboard
11
+ if user.admin?
12
+ can :manage, :all # only allow admin users to access Rails Admin
13
+ cannot :destroy, User do |u|
14
+ # prevents killing himself
15
+ u.id == user.id
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,145 @@
1
+ module ActiveRecordExtension
2
+ extend ActiveSupport::Concern
3
+
4
+ # add your instance methods here
5
+ # def foo
6
+ # "foo"
7
+ # end
8
+ # def taris_deep_clone_method
9
+ # Rails.logger.debug "FEBWUFBEUWFJEWNKJNFJDKSBFKJREHJBFKJE: Deep Cloning"
10
+ # copy = self.amoeba_dup
11
+ # copy.save
12
+ # end
13
+
14
+ # add your static(class) methods here
15
+ module ClassMethods
16
+ #E.g: Order.top_ten
17
+ def top_ten
18
+ limit(10)
19
+ end
20
+
21
+ def name_or_title_or_code_or_barcode_starts_with letter
22
+ # Se ha name o code o barcode, uso uno di questi:
23
+ column = if self.column_names.include? "name"
24
+ :name
25
+ elsif self.column_names.include? "title"
26
+ :title
27
+ elsif self.column_names.include? "code"
28
+ :code
29
+ elsif self.column_names.include? "barcode"
30
+ :barcode
31
+ end
32
+ # Ecco la ricerca dedicata a Postgres, la facciamo multiplatform? Fatto
33
+ query = "#{letter}%"
34
+ match = arel_table[column].matches(query)
35
+ where(match)
36
+ end
37
+
38
+ def starts_with_a
39
+ name_or_title_or_code_or_barcode_starts_with :a
40
+ end
41
+
42
+ def starts_with_b
43
+ name_or_title_or_code_or_barcode_starts_with :b
44
+ end
45
+
46
+ def starts_with_c
47
+ name_or_title_or_code_or_barcode_starts_with :c
48
+ end
49
+
50
+ def starts_with_d
51
+ name_or_title_or_code_or_barcode_starts_with :d
52
+ end
53
+
54
+ def starts_with_e
55
+ name_or_title_or_code_or_barcode_starts_with :e
56
+ end
57
+
58
+ def starts_with_f
59
+ name_or_title_or_code_or_barcode_starts_with :f
60
+ end
61
+
62
+ def starts_with_g
63
+ name_or_title_or_code_or_barcode_starts_with :g
64
+ end
65
+
66
+ def starts_with_h
67
+ name_or_title_or_code_or_barcode_starts_with :h
68
+ end
69
+
70
+ def starts_with_i
71
+ name_or_title_or_code_or_barcode_starts_with :i
72
+ end
73
+
74
+ def starts_with_j
75
+ name_or_title_or_code_or_barcode_starts_with :j
76
+ end
77
+
78
+ def starts_with_k
79
+ name_or_title_or_code_or_barcode_starts_with :k
80
+ end
81
+
82
+ def starts_with_l
83
+ name_or_title_or_code_or_barcode_starts_with :l
84
+ end
85
+
86
+ def starts_with_m
87
+ name_or_title_or_code_or_barcode_starts_with :m
88
+ end
89
+
90
+ def starts_with_n
91
+ name_or_title_or_code_or_barcode_starts_with :n
92
+ end
93
+
94
+ def starts_with_o
95
+ name_or_title_or_code_or_barcode_starts_with :o
96
+ end
97
+
98
+ def starts_with_p
99
+ name_or_title_or_code_or_barcode_starts_with :p
100
+ end
101
+
102
+ def starts_with_q
103
+ name_or_title_or_code_or_barcode_starts_with :q
104
+ end
105
+
106
+ def starts_with_r
107
+ name_or_title_or_code_or_barcode_starts_with :r
108
+ end
109
+
110
+ def starts_with_s
111
+ name_or_title_or_code_or_barcode_starts_with :s
112
+ end
113
+
114
+ def starts_with_t
115
+ name_or_title_or_code_or_barcode_starts_with :t
116
+ end
117
+
118
+ def starts_with_u
119
+ name_or_title_or_code_or_barcode_starts_with :u
120
+ end
121
+
122
+ def starts_with_v
123
+ name_or_title_or_code_or_barcode_starts_with :v
124
+ end
125
+
126
+ def starts_with_w
127
+ name_or_title_or_code_or_barcode_starts_with :w
128
+ end
129
+
130
+ def starts_with_x
131
+ name_or_title_or_code_or_barcode_starts_with :x
132
+ end
133
+
134
+ def starts_with_y
135
+ name_or_title_or_code_or_barcode_starts_with :y
136
+ end
137
+
138
+ def starts_with_z
139
+ name_or_title_or_code_or_barcode_starts_with :z
140
+ end
141
+ end
142
+ end
143
+
144
+ # include the extension
145
+ ActiveRecord::Base.send(:include, ActiveRecordExtension)
@@ -0,0 +1,21 @@
1
+ require 'active_support/concern'
2
+
3
+ module ActiveRecordPaperclipConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_attached_file :asset, styles: {
8
+ thumb: "100x100#",
9
+ small: "150x150>",
10
+ medium: "200x200>",
11
+ large: "600x600>"
12
+ }
13
+ validates_attachment_content_type :asset, content_type: /\Aimage\/.*\Z/
14
+ # add a delete_<asset_name> method:
15
+ attr_accessor :delete_asset
16
+ before_validation { self.asset.clear if self.delete_asset == '1' }
17
+ end
18
+ end
19
+
20
+ # Do not auto include the asset, not all the models have it
21
+ # ActiveRecord::Base.send(:include, ActiveRecordPaperclipConcern)