fat_free_crm 0.15.0.beta → 0.15.0.beta.2

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.

Potentially problematic release.


This version of fat_free_crm might be problematic. Click here for more details.

Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -0
  3. data/.rubocop_todo.yml +517 -0
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG.md +145 -9
  6. data/Gemfile +11 -13
  7. data/Gemfile.lock +104 -92
  8. data/README.md +2 -9
  9. data/app/assets/javascripts/application.js.erb +1 -1
  10. data/app/assets/javascripts/crm_select2.js.coffee +0 -1
  11. data/app/controllers/application_controller.rb +6 -6
  12. data/app/controllers/comments_controller.rb +7 -5
  13. data/app/controllers/entities/contacts_controller.rb +4 -4
  14. data/app/controllers/entities/opportunities_controller.rb +3 -3
  15. data/app/controllers/entities_controller.rb +3 -2
  16. data/app/controllers/home_controller.rb +21 -14
  17. data/app/controllers/passwords_controller.rb +1 -1
  18. data/app/controllers/users_controller.rb +3 -3
  19. data/app/helpers/accounts_helper.rb +2 -2
  20. data/app/helpers/application_helper.rb +20 -19
  21. data/app/helpers/campaigns_helper.rb +1 -1
  22. data/app/helpers/opportunities_helper.rb +4 -3
  23. data/app/helpers/tasks_helper.rb +6 -4
  24. data/app/helpers/users_helper.rb +1 -1
  25. data/app/helpers/versions_helper.rb +1 -1
  26. data/app/inputs/date_pair_input.rb +1 -1
  27. data/app/inputs/date_time_input.rb +1 -1
  28. data/app/models/entities/contact.rb +1 -0
  29. data/app/models/entities/lead.rb +4 -9
  30. data/app/models/entities/opportunity.rb +3 -6
  31. data/app/models/fields/field.rb +2 -3
  32. data/app/models/polymorphic/address.rb +1 -1
  33. data/app/models/polymorphic/comment.rb +1 -1
  34. data/app/models/polymorphic/task.rb +2 -3
  35. data/app/models/polymorphic/version.rb +5 -5
  36. data/app/models/setting.rb +6 -7
  37. data/app/models/users/user.rb +2 -2
  38. data/app/views/shared/_tags.html.haml +1 -5
  39. data/config/environments/test.rb +1 -1
  40. data/config/initializers/assets.rb +1 -1
  41. data/config/initializers/paper_trail.rb +1 -1
  42. data/config/initializers/simple_form.rb +1 -1
  43. data/config/initializers/views.rb +0 -1
  44. data/config/locales/th.rb +4 -4
  45. data/config/unicorn.rb +2 -2
  46. data/db/migrate/20100928030620_remove_uuid.rb +2 -4
  47. data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
  48. data/db/migrate/20120224073107_remove_default_value_and_clear_settings.rb +1 -1
  49. data/db/schema.rb +0 -2
  50. data/fat_free_crm.gemspec +5 -5
  51. data/lib/fat_free_crm.rb +1 -3
  52. data/lib/fat_free_crm/callback.rb +2 -1
  53. data/lib/fat_free_crm/core_ext/string.rb +2 -2
  54. data/lib/fat_free_crm/engine.rb +1 -1
  55. data/lib/fat_free_crm/fields.rb +1 -1
  56. data/lib/fat_free_crm/i18n.rb +1 -1
  57. data/lib/fat_free_crm/mail_processor/base.rb +8 -2
  58. data/lib/fat_free_crm/mail_processor/comment_replies.rb +2 -1
  59. data/lib/fat_free_crm/permissions.rb +1 -1
  60. data/lib/fat_free_crm/version.rb +1 -1
  61. data/lib/gravatar_image_tag.rb +2 -2
  62. data/lib/tasks/ffcrm/comment_replies.rake +2 -2
  63. data/lib/tasks/ffcrm/config.rake +7 -6
  64. data/lib/tasks/ffcrm/demo.rake +1 -1
  65. data/lib/tasks/ffcrm/dropbox.rake +2 -2
  66. data/lib/tasks/ffcrm/setup.rake +4 -2
  67. data/lib/tasks/ffcrm/update_data.rake +5 -7
  68. data/spec/controllers/entities/campaigns_controller_spec.rb +1 -1
  69. data/spec/controllers/entities/leads_controller_spec.rb +1 -1
  70. data/spec/controllers/home_controller_spec.rb +5 -5
  71. data/spec/controllers/tasks_controller_spec.rb +3 -2
  72. data/spec/factories/sequences.rb +1 -2
  73. data/spec/factories/shared_factories.rb +5 -5
  74. data/spec/factories/user_factories.rb +3 -3
  75. data/spec/models/entities/opportunity_spec.rb +1 -1
  76. data/spec/models/fields/custom_field_pair_spec.rb +2 -2
  77. data/spec/models/setting_spec.rb +1 -1
  78. data/spec/shared/controllers.rb +1 -1
  79. data/spec/support/auth_macros.rb +6 -5
  80. data/spec/support/macros.rb +1 -1
  81. data/spec/views/application/auto_complete.haml_spec.rb +3 -3
  82. data/spec/views/campaigns/show.haml_spec.rb +2 -2
  83. data/spec/views/leads/update.js.haml_spec.rb +1 -1
  84. data/spec/views/tasks/index.haml_spec.rb +1 -1
  85. data/spec/views/tasks/update.js.haml_spec.rb +7 -7
  86. metadata +29 -4
@@ -23,7 +23,7 @@ module VersionsHelper
23
23
  first = link_to(h(account.name), account_path(account))
24
24
  end
25
25
  if second.present? && (account = Account.find_by_id(second))
26
- second = link_to(h(account.name), account_path(account))
26
+ second = link_to(h(account.name), account_path(account))
27
27
  end
28
28
  end
29
29
 
@@ -17,7 +17,7 @@ class DatePairInput < SimpleForm::Inputs::Base
17
17
  label = field == field1 ? I18n.t('pair.start') : I18n.t('pair.end')
18
18
  [:required, :disabled].each { |k| input_html_options.delete(k) } # ensure these come from field not default options
19
19
  input_html_options.merge!(field.input_options)
20
- input_html_options.merge!(value: value(field))
20
+ input_html_options[:value] = value(field)
21
21
  out << "<label#{' class="req"' if input_html_options[:required]}>#{label}</label>".html_safe
22
22
  text = @builder.text_field(field.name, merge_wrapper_options(input_html_options, wrapper_options))
23
23
  out << text << '</div>'.html_safe
@@ -7,7 +7,7 @@ class DateTimeInput < SimpleForm::Inputs::DateTimeInput
7
7
  def input(wrapper_options)
8
8
  add_autocomplete!
9
9
  input_html_options.merge(input_options)
10
- input_html_options.merge!(value: value)
10
+ input_html_options[:value] = value
11
11
  @builder.text_field(attribute_name, merge_wrapper_options(input_html_options, wrapper_options))
12
12
  end
13
13
 
@@ -101,6 +101,7 @@ class Contact < ActiveRecord::Base
101
101
  def self.per_page
102
102
  20
103
103
  end
104
+
104
105
  def self.first_name_position
105
106
  "before"
106
107
  end
@@ -85,6 +85,7 @@ class Lead < ActiveRecord::Base
85
85
  def self.per_page
86
86
  20
87
87
  end
88
+
88
89
  def self.first_name_position
89
90
  "before"
90
91
  end
@@ -150,9 +151,7 @@ class Lead < ActiveRecord::Base
150
151
  # Attach a task to the lead if it hasn't been attached already.
151
152
  #----------------------------------------------------------------------------
152
153
  def attach!(task)
153
- unless task_ids.include?(task.id)
154
- tasks << task
155
- end
154
+ tasks << task unless task_ids.include?(task.id)
156
155
  end
157
156
 
158
157
  # Discard a task from the lead.
@@ -175,16 +174,12 @@ class Lead < ActiveRecord::Base
175
174
 
176
175
  #----------------------------------------------------------------------------
177
176
  def increment_leads_count
178
- if campaign_id
179
- Campaign.increment_counter(:leads_count, campaign_id)
180
- end
177
+ Campaign.increment_counter(:leads_count, campaign_id) if campaign_id
181
178
  end
182
179
 
183
180
  #----------------------------------------------------------------------------
184
181
  def decrement_leads_count
185
- if campaign_id
186
- Campaign.decrement_counter(:leads_count, campaign_id)
187
- end
182
+ Campaign.decrement_counter(:leads_count, campaign_id) if campaign_id
188
183
  end
189
184
 
190
185
  # Make sure at least one user has been selected if the lead is being shared.
@@ -91,6 +91,7 @@ class Opportunity < ActiveRecord::Base
91
91
  def self.per_page
92
92
  20
93
93
  end
94
+
94
95
  def self.default_stage
95
96
  Setting[:opportunity_default_stage].try(:to_s) || 'prospecting'
96
97
  end
@@ -174,16 +175,12 @@ class Opportunity < ActiveRecord::Base
174
175
 
175
176
  #----------------------------------------------------------------------------
176
177
  def increment_opportunities_count
177
- if campaign_id
178
- Campaign.increment_counter(:opportunities_count, campaign_id)
179
- end
178
+ Campaign.increment_counter(:opportunities_count, campaign_id) if campaign_id
180
179
  end
181
180
 
182
181
  #----------------------------------------------------------------------------
183
182
  def decrement_opportunities_count
184
- if campaign_id
185
- Campaign.decrement_counter(:opportunities_count, campaign_id)
186
- end
183
+ Campaign.decrement_counter(:opportunities_count, campaign_id) if campaign_id
187
184
  end
188
185
 
189
186
  ActiveSupport.run_load_hooks(:fat_free_crm_opportunity, self)
@@ -46,7 +46,7 @@ class Field < ActiveRecord::Base
46
46
  'url' => { klass: 'CustomField', type: 'string' },
47
47
  'tel' => { klass: 'CustomField', type: 'string' },
48
48
  'select' => { klass: 'CustomField', type: 'string' },
49
- 'radio_buttons' => { klass: 'CustomField', type: 'string' },
49
+ 'radio_buttons' => { klass: 'CustomField', type: 'string' },
50
50
  'check_boxes' => { klass: 'CustomField', type: 'text' },
51
51
  'boolean' => { klass: 'CustomField', type: 'boolean' },
52
52
  'date' => { klass: 'CustomField', type: 'date' },
@@ -63,7 +63,7 @@ class Field < ActiveRecord::Base
63
63
  validates_inclusion_of :as, in: proc { field_types.keys }, message: "^Invalid field type.", allow_blank: true
64
64
 
65
65
  def column_type(field_type = as)
66
- (opts = Field.field_types[field_type]) ? opts[:type] : fail("Unknown field_type: #{field_type}")
66
+ (opts = Field.field_types[field_type]) ? opts[:type] : raise("Unknown field_type: #{field_type}")
67
67
  end
68
68
 
69
69
  def input_options
@@ -113,7 +113,6 @@ class Field < ActiveRecord::Base
113
113
  # Example options: :as => 'datepair', :type => 'date', :klass => 'CustomFieldDatePair'
114
114
  #------------------------------------------------------------------------------
115
115
  def register(options)
116
- opts = options.dup
117
116
  as = options.delete(:as)
118
117
  (@@field_types ||= BASE_FIELD_TYPES).merge!(as => options)
119
118
  end
@@ -51,7 +51,7 @@ class Address < ActiveRecord::Base
51
51
  def self.reject_address(attributes)
52
52
  exists = attributes['id'].present?
53
53
  empty = %w(street1 street2 city state zipcode country full_address).map { |name| attributes[name].blank? }.all?
54
- attributes.merge!(_destroy: 1) if exists && empty
54
+ attributes[:_destroy] = 1 if exists && empty
55
55
  (!exists && empty)
56
56
  end
57
57
 
@@ -23,7 +23,7 @@ class Comment < ActiveRecord::Base
23
23
  belongs_to :user
24
24
  belongs_to :commentable, polymorphic: true
25
25
 
26
- scope :created_by, lambda { |user| where(user_id: user.id) }
26
+ scope :created_by, ->(user) { where(user_id: user.id) }
27
27
 
28
28
  validates_presence_of :user, :commentable, :comment
29
29
  has_paper_trail class_name: 'Version', meta: { related: :commentable },
@@ -166,6 +166,7 @@ class Task < ActiveRecord::Base
166
166
  "due_later"
167
167
  end
168
168
  end
169
+
169
170
  # Returns list of tasks grouping them by due date as required by tasks/index.
170
171
  #----------------------------------------------------------------------------
171
172
  def self.find_all_grouped(user, view)
@@ -194,7 +195,7 @@ class Task < ActiveRecord::Base
194
195
  def self.totals(user, view = "pending")
195
196
  return {} unless ALLOWED_VIEWS.include?(view)
196
197
  settings = (view == "completed" ? Setting.task_completed : Setting.task_bucket)
197
- settings.inject(HashWithIndifferentAccess[all: 0]) do |hash, key|
198
+ settings.each_with_object(HashWithIndifferentAccess[all: 0]) do |key, hash|
198
199
  hash[key] = (view == "assigned" ? assigned_by(user).send(key).pending.count : my(user).send(key).send(view).count)
199
200
  hash[:all] += hash[key]
200
201
  hash
@@ -220,8 +221,6 @@ class Task < ActiveRecord::Base
220
221
  Time.zone.now.midnight + 100.years
221
222
  when "specific_time"
222
223
  calendar ? parse_calendar_date : nil
223
- else # due_later or due_asap
224
- nil
225
224
  end
226
225
  end
227
226
 
@@ -13,10 +13,10 @@ class Version < PaperTrail::Version
13
13
  belongs_to :related, polymorphic: true
14
14
  belongs_to :user, foreign_key: :whodunnit
15
15
 
16
- scope :default_order, lambda { order('created_at DESC') }
17
- scope :include_events, lambda { |*events| where(event: events) }
18
- scope :exclude_events, lambda { |*events| where('event NOT IN (?)', events) }
19
- scope :for, lambda { |user| where(whodunnit: user.id.to_s) }
16
+ scope :default_order, -> { order('created_at DESC') }
17
+ scope :include_events, ->(*events) { where(event: events) }
18
+ scope :exclude_events, ->(*events) { where('event NOT IN (?)', events) }
19
+ scope :for, ->(user) { where(whodunnit: user.id.to_s) }
20
20
 
21
21
  class << self
22
22
  def recent_for_user(user, limit = 10)
@@ -32,7 +32,7 @@ class Version < PaperTrail::Version
32
32
  .offset(offset)
33
33
  .default_order
34
34
 
35
- break if query.size == 0
35
+ break if query.empty?
36
36
  versions += query.select { |v| v.item.present? }
37
37
  versions.uniq! { |v| [v.item_id, v.item_type] }
38
38
  offset += limit * 2
@@ -56,15 +56,11 @@ class Setting < ActiveRecord::Base
56
56
  # Check database
57
57
  if database_and_table_exists?
58
58
  if setting = find_by_name(name.to_s)
59
- unless setting.value.nil?
60
- return cache[name] = setting.value
61
- end
59
+ return cache[name] = setting.value unless setting.value.nil?
62
60
  end
63
61
  end
64
62
  # Check YAML settings
65
- if yaml_settings.key?(name)
66
- return cache[name] = yaml_settings[name]
67
- end
63
+ return cache[name] = yaml_settings[name] if yaml_settings.key?(name)
68
64
  end
69
65
 
70
66
  # Set setting value
@@ -89,7 +85,10 @@ class Setting < ActiveRecord::Base
89
85
  # Returns false if table or database is unavailable.
90
86
  # Catches all database-related errors, so that Setting will return nil
91
87
  # instead of crashing the entire application.
92
- table_exists? rescue false
88
+
89
+ table_exists?
90
+ rescue
91
+ false
93
92
  end
94
93
 
95
94
  # Loads settings from YAML files
@@ -105,7 +105,7 @@ class User < ActiveRecord::Base
105
105
 
106
106
  #----------------------------------------------------------------------------
107
107
  def awaits_approval?
108
- self.suspended? && login_count == 0 && Setting.user_signup == :needs_approval
108
+ suspended? && login_count == 0 && Setting.user_signup == :needs_approval
109
109
  end
110
110
 
111
111
  #----------------------------------------------------------------------------
@@ -161,7 +161,7 @@ class User < ActiveRecord::Base
161
161
  def has_related_assets?
162
162
  sum = %w(Account Campaign Lead Contact Opportunity Comment Task).detect do |asset|
163
163
  klass = asset.constantize
164
-
164
+
165
165
  asset != "Comment" && klass.assigned_to(self).exists? || klass.created_by(self).exists?
166
166
  end
167
167
  !sum.nil?
@@ -3,8 +3,4 @@
3
3
  %td{ :valign => :top, :colspan => span }
4
4
  .label= t(:tags) + ":"
5
5
 
6
- = f.hidden_field :tag_list,
7
- {:class => "select2_tag", :data => {:tags => Tag.all.map{|t| t.name},
8
- :url => url_for(action: 'field_group'), :placeholder => t(:select_or_create_tags),
9
- :multiple => true, :asset_id => f.object.try(:id),
10
- }, value: f.object.tag_list.join(",")}
6
+ = f.select :tag_list, Tag.all.map{|t| t.name}, {}, {:class => "select2_tag", :data => {:tags => true, :url => url_for(action: 'field_group'), :placeholder => t(:select_or_create_tags), :multiple => true, :asset_id => f.object.try(:id)}, :multiple => true}
@@ -28,7 +28,7 @@ if defined?(FatFreeCRM::Application)
28
28
  config.action_dispatch.show_exceptions = false
29
29
 
30
30
  # Disable request forgery protection in test environment
31
- config.action_controller.allow_forgery_protection = false
31
+ config.action_controller.allow_forgery_protection = false
32
32
 
33
33
  # Tell Action Mailer not to deliver emails to the real world.
34
34
  # The :test delivery method accumulates sent emails in the
@@ -8,7 +8,7 @@ Rails.application.config.assets.version = '1.0'
8
8
 
9
9
  # Precompile additional assets.
10
10
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
11
- Rails.application.config.assets.precompile += %w( print.css chosen-sprite.png jquery-ui/* jquery_ui_datepicker/*.js )
11
+ Rails.application.config.assets.precompile += %w(print.css chosen-sprite.png jquery-ui/* jquery_ui_datepicker/*.js)
12
12
 
13
13
  # Don't initialize Rails environment
14
14
  Rails.application.config.assets.initialize_on_precompile = false
@@ -1 +1 @@
1
- PaperTrail.config.track_associations = false
1
+ PaperTrail.config.track_associations = false
@@ -57,7 +57,7 @@ SimpleForm.setup do |config|
57
57
  # config.collection_value_methods = [ :id, :to_s ]
58
58
 
59
59
  # How the label text should be generated altogether with the required text.
60
- config.label_text = lambda { |label, _required, _explicit_label| "#{label}" }
60
+ config.label_text = ->(label, _required, _explicit_label) { label.to_s }
61
61
 
62
62
  # You can define the class to use on all labels. Default is nil.
63
63
  # config.label_class = nil
@@ -43,5 +43,4 @@
43
43
  controllers: ['campaigns'], actions: ['index'], template: 'campaigns/index_long' },
44
44
  { name: 'campaigns_show_normal', title: 'Normal format', icon: 'fa-list',
45
45
  controllers: ['campaigns'], actions: ['show'], template: nil }, # default show view
46
-
47
46
  ].each { |view| FatFreeCRM::ViewFactory.new(view) }
data/config/locales/th.rb CHANGED
@@ -41,9 +41,9 @@ end
41
41
 
42
42
  date: {
43
43
  formats: {
44
- default: lambda { |date, _opts| "%d-%m-#{date.year + 543}" },
44
+ default: ->(date, _opts) { "%d-%m-#{date.year + 543}" },
45
45
  short: "%d %b",
46
- long: lambda { |date, _opts| "%d %B #{date.year + 543}" }
46
+ long: ->(date, _opts) { "%d %B #{date.year + 543}" }
47
47
  },
48
48
 
49
49
  day_names: %w(อาทิตย์ จันทร์ อังคาร พุธ พฤหัสบดี ศุกร์ เสาร์),
@@ -56,9 +56,9 @@ end
56
56
 
57
57
  time: {
58
58
  formats: {
59
- default: lambda { |date, _opts| "%a %d %b #{date.year + 543} %H:%M:%S %z" },
59
+ default: ->(date, _opts) { "%a %d %b #{date.year + 543} %H:%M:%S %z" },
60
60
  short: "%d %b %H:%M น.",
61
- long: lambda { |date, _opts| "%d %B #{date.year + 543} %H:%M น." }
61
+ long: ->(date, _opts) { "%d %B #{date.year + 543} %H:%M น." }
62
62
  },
63
63
  am: "ก่อนเที่ยง",
64
64
  pm: "หลังเที่ยง"
data/config/unicorn.rb CHANGED
@@ -12,7 +12,7 @@ worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
12
12
  timeout 15
13
13
  preload_app true
14
14
 
15
- before_fork do |server, worker|
15
+ before_fork do |_server, _worker|
16
16
  Signal.trap 'TERM' do
17
17
  puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
18
18
  Process.kill 'QUIT', Process.pid
@@ -22,7 +22,7 @@ before_fork do |server, worker|
22
22
  ActiveRecord::Base.connection.disconnect!
23
23
  end
24
24
 
25
- after_fork do |server, worker|
25
+ after_fork do |_server, _worker|
26
26
  Signal.trap 'TERM' do
27
27
  puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
28
28
  end
@@ -4,14 +4,12 @@ class RemoveUuid < ActiveRecord::Migration
4
4
  def self.up
5
5
  [:users, :accounts, :campaigns, :leads, :contacts, :opportunities, :tasks].each do |table|
6
6
  remove_column table, :uuid
7
- if self.uuid_configured?
8
- execute("DROP TRIGGER IF EXISTS #{table}_uuid")
9
- end
7
+ execute("DROP TRIGGER IF EXISTS #{table}_uuid") if uuid_configured?
10
8
  end
11
9
  end
12
10
 
13
11
  def self.down
14
- fail ActiveRecord::IrreversibleMigration, "Can't recover deleted UUIDs"
12
+ raise ActiveRecord::IrreversibleMigration, "Can't recover deleted UUIDs"
15
13
  end
16
14
 
17
15
  private
@@ -6,7 +6,8 @@ class AddFieldGroupsKlassName < ActiveRecord::Migration
6
6
  %w(Account Campaign Contact Lead Opportunity).each do |entity|
7
7
  klass = entity.classify.constantize
8
8
  field_group = FieldGroup.new
9
- field_group.label, field_group.klass_name = 'Custom Fields', klass.name
9
+ field_group.label = 'Custom Fields'
10
+ field_group.klass_name = klass.name
10
11
  field_group.save!
11
12
  Field.where(field_group_id: nil, klass_name: klass.name).update_all(field_group_id: field_group.id)
12
13
  end
@@ -3,7 +3,7 @@ class RemoveDefaultValueAndClearSettings < ActiveRecord::Migration
3
3
  remove_column :settings, :default_value
4
4
 
5
5
  # Truncate settings table
6
- if connection.adapter_name.downcase == "sqlite"
6
+ if connection.adapter_name.casecmp("sqlite").zero?
7
7
  execute("DELETE FROM settings")
8
8
  else # mysql and postgres
9
9
  execute("TRUNCATE settings")
data/db/schema.rb CHANGED
@@ -12,7 +12,6 @@
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
14
  ActiveRecord::Schema.define(version: 20160511053730) do
15
-
16
15
  # These are extensions that must be enabled in order to support this database
17
16
  enable_extension "plpgsql"
18
17
 
@@ -455,5 +454,4 @@ ActiveRecord::Schema.define(version: 20160511053730) do
455
454
  add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id", using: :btree
456
455
  add_index "versions", ["transaction_id"], name: "index_versions_on_transaction_id", using: :btree
457
456
  add_index "versions", ["whodunnit"], name: "index_versions_on_whodunnit", using: :btree
458
-
459
457
  end
data/fat_free_crm.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.required_ruby_version = '>= 2.0.0'
21
21
  gem.license = 'MIT'
22
22
 
23
- gem.add_dependency 'rails', '~> 4.2.0'
23
+ gem.add_dependency 'rails', '~> 4.2'
24
24
  gem.add_dependency 'rails-observers'
25
25
  # Sprockets 2.2.3 appears to have a bug resolving assets from the engine update to '>= 3.0.0 once released'
26
26
  gem.add_dependency 'sprockets-rails', '2.2.2'
@@ -35,7 +35,7 @@ Gem::Specification.new do |gem|
35
35
  # Manually added paperclip gem dependency "cocaine" in order to fix load error: "no such file to load -- cocaine"
36
36
  gem.add_dependency 'cocaine'
37
37
  gem.add_dependency 'paper_trail', '~> 6.0.0'
38
- gem.add_dependency 'authlogic', '>= 3.4.4'
38
+ gem.add_dependency 'authlogic', '>= 3.4.4', '< 3.5.0' # View tests fail on authlogic 3.5.0+
39
39
  gem.add_dependency 'acts_as_commentable'
40
40
  gem.add_dependency 'acts-as-taggable-on', '>= 3.4.3'
41
41
  gem.add_dependency 'dynamic_form'
@@ -52,12 +52,12 @@ Gem::Specification.new do |gem|
52
52
  gem.add_dependency 'psych', '~> 1' if RUBY_VERSION.to_f < 2.0
53
53
  gem.add_dependency 'thor'
54
54
  gem.add_dependency 'rails_autolink'
55
- gem.add_dependency 'coffee-script-source', '~>1.8.0' # pegged until https://github.com/jashkenas/coffeescript/issues/3829 is resolved
55
+ gem.add_dependency 'coffee-script-source', '~> 1.8', '>= 1.8.0' # pegged until https://github.com/jashkenas/coffeescript/issues/3829 is resolved
56
56
  gem.add_dependency 'country_select'
57
57
 
58
58
  # FatFreeCRM has released it's own versions of the following gems:
59
59
  #-----------------------------------------------------------------
60
- gem.add_dependency 'ransack_ui', '>= 1.3.1'
61
- gem.add_dependency 'ransack', '~> 1.6.2'
60
+ gem.add_dependency 'ransack_ui', '~> 1.3', '>= 1.3.1'
61
+ gem.add_dependency 'ransack', '~> 1.6', '>= 1.6.2'
62
62
  gem.add_dependency 'email_reply_parser_ffcrm'
63
63
  end
data/lib/fat_free_crm.rb CHANGED
@@ -26,9 +26,7 @@ module FatFreeCRM
26
26
  end
27
27
 
28
28
  # Load Fat Free CRM as a Rails Engine, unless running as a Rails Application
29
- unless defined?(FatFreeCRM::Application)
30
- require 'fat_free_crm/engine'
31
- end
29
+ require 'fat_free_crm/engine' unless defined?(FatFreeCRM::Application)
32
30
 
33
31
  require 'fat_free_crm/load_settings' # register load hook for Setting
34
32