fat_free_crm 0.11.0 → 0.11.1
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.
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/Gemfile +15 -2
- data/Gemfile.lock +34 -14
- data/README.md +37 -124
- data/app/assets/javascripts/application.js.erb +1 -1
- data/app/assets/javascripts/crm.js +22 -1
- data/app/assets/javascripts/crm_fields.js +2 -3
- data/app/assets/javascripts/jquery-noconflict.js +17 -0
- data/app/assets/stylesheets/application.css.erb +1 -0
- data/app/assets/stylesheets/common.scss +26 -0
- data/app/assets/stylesheets/ffcrm_chosen.scss +1 -1
- data/app/controllers/admin/application_controller.rb +1 -1
- data/app/controllers/application_controller.rb +0 -8
- data/app/controllers/{accounts_controller.rb → entities/accounts_controller.rb} +1 -13
- data/app/controllers/{campaigns_controller.rb → entities/campaigns_controller.rb} +1 -13
- data/app/controllers/{contacts_controller.rb → entities/contacts_controller.rb} +1 -7
- data/app/controllers/{leads_controller.rb → entities/leads_controller.rb} +1 -1
- data/app/controllers/{opportunities_controller.rb → entities/opportunities_controller.rb} +1 -7
- data/app/controllers/{tasks_controller.rb → entities/tasks_controller.rb} +1 -1
- data/app/controllers/{base_controller.rb → entities_controller.rb} +32 -1
- data/app/controllers/home_controller.rb +9 -9
- data/app/controllers/lists_controller.rb +17 -0
- data/app/helpers/admin/tags_helper.rb +1 -1
- data/app/helpers/application_helper.rb +14 -14
- data/app/helpers/crm_tags_helper.rb +1 -1
- data/app/helpers/home_helper.rb +13 -15
- data/app/helpers/lists_helper.rb +17 -0
- data/app/inputs/date_time_input.rb +17 -0
- data/app/inputs/text_input.rb +17 -1
- data/app/models/{base → entities}/account.rb +0 -1
- data/app/models/{base → entities}/account_contact.rb +0 -0
- data/app/models/{base → entities}/account_opportunity.rb +0 -0
- data/app/models/{base → entities}/campaign.rb +0 -1
- data/app/models/{base → entities}/contact.rb +0 -1
- data/app/models/{base → entities}/contact_opportunity.rb +0 -0
- data/app/models/{base → entities}/lead.rb +0 -1
- data/app/models/{base → entities}/opportunity.rb +0 -1
- data/app/models/{base → entities}/task.rb +5 -6
- data/app/models/list.rb +17 -0
- data/app/models/observers/lead_observer.rb +39 -0
- data/app/models/observers/opportunity_observer.rb +54 -0
- data/app/models/observers/task_observer.rb +41 -0
- data/app/models/polymorphic/address.rb +1 -3
- data/app/models/polymorphic/avatar.rb +0 -5
- data/app/models/polymorphic/comment.rb +2 -11
- data/app/models/polymorphic/email.rb +2 -9
- data/app/models/polymorphic/tag.rb +17 -0
- data/app/models/polymorphic/tagging.rb +17 -0
- data/app/models/users/ability.rb +13 -0
- data/app/models/users/user.rb +1 -4
- data/app/views/accounts/_account.html.haml +10 -6
- data/app/views/accounts/index.html.haml +1 -1
- data/app/views/accounts/show.html.haml +6 -24
- data/app/views/admin/fields/_field.html.haml +6 -6
- data/app/views/admin/tags/_tag.html.haml +2 -2
- data/app/views/admin/tags/index.html.haml +1 -1
- data/app/views/admin/users/_user.html.haml +3 -3
- data/app/views/admin/users/index.html.haml +1 -1
- data/app/views/campaigns/_campaign.html.haml +9 -5
- data/app/views/campaigns/index.html.haml +1 -1
- data/app/views/campaigns/show.html.haml +4 -24
- data/app/views/comments/_comment.html.haml +17 -14
- data/app/views/comments/_edit.html.haml +1 -1
- data/app/views/comments/_new.html.haml +3 -3
- data/app/views/contacts/_contact.html.haml +33 -15
- data/app/views/contacts/_contacts.html.haml +6 -0
- data/app/views/contacts/_sidebar_show.html.haml +1 -1
- data/app/views/contacts/index.html.haml +1 -1
- data/app/views/contacts/show.html.haml +3 -19
- data/app/views/emails/_email.html.haml +24 -21
- data/app/views/{base → entities}/_advanced_search.html.haml +0 -0
- data/app/views/{base → entities}/_condition_fields.html.haml +0 -0
- data/app/views/{base → entities}/_grouping_fields.html.haml +0 -0
- data/app/views/{base → entities}/_sort_fields.html.haml +0 -0
- data/app/views/{base → entities}/advanced_search.js.rjs +0 -0
- data/app/views/entities/contacts.js.rjs +3 -0
- data/app/views/entities/leads.js.rjs +3 -0
- data/app/views/entities/opportunities.js.rjs +3 -0
- data/app/views/entities/versions.js.rjs +3 -0
- data/app/views/home/_activity.html.haml +19 -18
- data/app/views/home/_events_menu.html.haml +8 -0
- data/app/views/home/_options.html.haml +2 -3
- data/app/views/home/index.html.haml +1 -1
- data/app/views/leads/_lead.html.haml +42 -23
- data/app/views/leads/_leads.html.haml +6 -0
- data/app/views/leads/_sidebar_show.html.haml +1 -1
- data/app/views/leads/index.html.haml +1 -1
- data/app/views/leads/show.html.haml +3 -13
- data/app/views/opportunities/_opportunities.html.haml +6 -0
- data/app/views/opportunities/_opportunity.html.haml +23 -11
- data/app/views/opportunities/index.html.haml +1 -1
- data/app/views/opportunities/show.html.haml +4 -18
- data/app/views/shared/_comment.html.haml +3 -3
- data/app/views/shared/_edit_comment.html.haml +1 -1
- data/app/views/shared/_recent.html.haml +4 -4
- data/app/views/shared/_recently.html.haml +3 -3
- data/app/views/shared/_timeline.html.haml +2 -3
- data/app/views/tasks/_assigned.html.haml +4 -4
- data/app/views/tasks/_completed.html.haml +2 -2
- data/app/views/tasks/_pending.html.haml +2 -2
- data/app/views/tasks/_related.html.haml +4 -5
- data/app/views/tasks/_tasks.html.haml +3 -0
- data/app/views/tasks/_title.html.haml +1 -1
- data/app/views/tasks/index.html.haml +1 -1
- data/app/views/users/_avatar.html.haml +2 -2
- data/app/views/versions/_version.html.haml +9 -12
- data/app/views/versions/_versions.html.haml +11 -0
- data/config/application.rb +3 -2
- data/config/environments/development.rb +2 -2
- data/config/environments/production.rb +0 -4
- data/config/environments/staging.rb +1 -1
- data/config/initializers/action_mailer.rb +9 -0
- data/config/initializers/paper_trail.rb +80 -0
- data/config/initializers/relative_url_root.rb +23 -0
- data/config/locales/cz_fat_free_crm.yml +1 -1
- data/config/locales/en-US_fat_free_crm.yml +22 -17
- data/config/locales/fr_fat_free_crm.yml +349 -134
- data/config/routes.rb +144 -140
- data/config/settings.default.yml +14 -2
- data/db/demo/addresses.yml +2 -2
- data/db/demo/emails.yml +2 -2
- data/db/migrate/20120216042541_is_paranoid_to_paper_trail.rb +1 -2
- data/db/migrate/20120309070209_add_versions_related.rb +6 -0
- data/db/migrate/20120316045804_activities_to_versions.rb +35 -0
- data/db/schema.rb +79 -53
- data/fat_free_crm.gemspec +8 -4
- data/lib/development_tasks/gem.rake +18 -1
- data/lib/development_tasks/license.rake +2 -4
- data/lib/development_tasks/rdoc.rake +17 -0
- data/lib/development_tasks/rspec.rake +17 -0
- data/lib/fat_free_crm.rb +20 -14
- data/lib/fat_free_crm/core_ext/array.rb +0 -27
- data/lib/fat_free_crm/dropbox.rb +11 -1
- data/lib/fat_free_crm/engine.rb +21 -3
- data/lib/fat_free_crm/gem_dependencies.rb +26 -0
- data/lib/fat_free_crm/gem_ext.rb +18 -1
- data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +18 -1
- data/lib/fat_free_crm/gem_ext/authlogic/session/cookies.rb +17 -0
- data/lib/fat_free_crm/gem_ext/rails/engine.rb +17 -0
- data/lib/fat_free_crm/gem_ext/rails/text_helper.rb +17 -0
- data/lib/fat_free_crm/gem_ext/rake/task.rb +17 -0
- data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +18 -1
- data/lib/fat_free_crm/plugin_dependencies.rb +23 -5
- data/lib/fat_free_crm/renderers.rb +17 -0
- data/lib/fat_free_crm/syck_yaml.rb +17 -0
- data/lib/fat_free_crm/version.rb +1 -1
- data/lib/{country_select → plugins/country_select}/MIT-LICENSE +0 -0
- data/lib/{country_select → plugins/country_select}/README +0 -0
- data/lib/{country_select → plugins/country_select}/init.rb +0 -0
- data/lib/{country_select → plugins/country_select}/install.rb +0 -0
- data/lib/{country_select → plugins/country_select}/lib/country_select.rb +0 -0
- data/lib/{country_select → plugins/country_select}/uninstall.rb +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/Gemfile +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/README.textile +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/ROADMAP.textile +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/Rakefile +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/VERSION +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/gravatar_image_tag.gemspec +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/init.rb +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/lib/gravatar_image_tag.rb +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/spec/gravatar_image_tag_spec.rb +0 -0
- data/lib/{gravatar_image_tag → plugins/gravatar_image_tag}/spec/test_helper.rb +0 -0
- data/lib/tasks/demo.rake +32 -29
- data/lib/tasks/dropbox.rake +1 -1
- data/lib/tasks/fat_free_crm.rake +3 -2
- data/lib/tasks/plugins.rake +1 -0
- data/spec/controllers/accounts_controller_spec.rb +7 -5
- data/spec/controllers/campaigns_controller_spec.rb +11 -9
- data/spec/controllers/contacts_controller_spec.rb +7 -5
- data/spec/controllers/home_controller_spec.rb +2 -2
- data/spec/controllers/leads_controller_spec.rb +7 -5
- data/spec/controllers/opportunities_controller_spec.rb +7 -5
- data/spec/factories/shared_factories.rb +8 -11
- data/spec/lib/dropbox_spec.rb +1 -0
- data/spec/models/polymorphic/version_spec.rb +247 -0
- data/spec/models/users/user_spec.rb +0 -9
- data/spec/spec_helper.rb +4 -0
- data/spec/views/home/index.haml_spec.rb +1 -1
- data/spec/views/home/index.rjs_spec.rb +4 -4
- data/spec/views/tasks/new.rjs_spec.rb +2 -2
- data/vendor/assets/javascripts/calendar_date_select/format_french.js +24 -0
- metadata +167 -126
- data/app/models/observers/activity_observer.rb +0 -84
- data/app/models/polymorphic/activity.rb +0 -106
- data/app/views/accounts/contacts.js.rjs +0 -3
- data/app/views/accounts/opportunities.js.rjs +0 -3
- data/app/views/campaigns/leads.js.rjs +0 -3
- data/app/views/campaigns/opportunities.js.rjs +0 -3
- data/app/views/contacts/opportunities.js.rjs +0 -3
- data/app/views/home/_actions_menu.html.haml +0 -8
- data/lib/dynamic_form/MIT-LICENSE +0 -20
- data/lib/dynamic_form/README +0 -13
- data/lib/dynamic_form/Rakefile +0 -10
- data/lib/dynamic_form/dynamic_form.gemspec +0 -12
- data/lib/dynamic_form/init.rb +0 -2
- data/lib/dynamic_form/lib/action_view/helpers/dynamic_form.rb +0 -301
- data/lib/dynamic_form/lib/action_view/locale/en-US.yml +0 -8
- data/lib/dynamic_form/lib/dynamic_form.rb +0 -6
- data/lib/dynamic_form/test/dynamic_form_i18n_test.rb +0 -42
- data/lib/dynamic_form/test/dynamic_form_test.rb +0 -370
- data/lib/dynamic_form/test/test_helper.rb +0 -10
- data/lib/responds_to_parent/MIT-LICENSE +0 -20
- data/lib/responds_to_parent/README +0 -47
- data/lib/responds_to_parent/Rakefile +0 -22
- data/lib/responds_to_parent/init.rb +0 -2
- data/lib/responds_to_parent/install.rb +0 -2
- data/lib/responds_to_parent/lib/responds_to_parent.rb +0 -70
- data/lib/responds_to_parent/test/responds_to_parent_test.rb +0 -11
- data/lib/responds_to_parent/test/test_helper.rb +0 -7
- data/lib/responds_to_parent/uninstall.rb +0 -2
- data/spec/models/polymorphic/activity_spec.rb +0 -303
@@ -1,17 +1,14 @@
|
|
1
1
|
FactoryGirl.define do
|
2
|
-
factory :
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
info nil
|
7
|
-
private false
|
8
|
-
updated_at { FactoryGirl.generate(:time) }
|
2
|
+
factory :version do
|
3
|
+
whodunnit ""
|
4
|
+
item { raise "Please specify :item for the version" }
|
5
|
+
event "create"
|
9
6
|
created_at { FactoryGirl.generate(:time) }
|
10
7
|
end
|
11
8
|
|
12
9
|
|
13
10
|
factory :comment do
|
14
|
-
user
|
11
|
+
user
|
15
12
|
commentable { raise "Please specify :commentable for the comment" }
|
16
13
|
title { FactoryGirl.generate(:title) }
|
17
14
|
private false
|
@@ -24,7 +21,7 @@ FactoryGirl.define do
|
|
24
21
|
|
25
22
|
factory :email do
|
26
23
|
imap_message_id { "%08x" % rand(0xFFFFFFFF) }
|
27
|
-
user
|
24
|
+
user
|
28
25
|
mediator { raise "Please specify :mediator for the email" }
|
29
26
|
sent_from { Faker::Internet.email }
|
30
27
|
sent_to { Faker::Internet.email }
|
@@ -59,7 +56,7 @@ FactoryGirl.define do
|
|
59
56
|
|
60
57
|
|
61
58
|
factory :avatar do
|
62
|
-
user
|
59
|
+
user
|
63
60
|
entity { raise "Please specify :entity for the avatar" }
|
64
61
|
image_file_size nil
|
65
62
|
image_file_name nil
|
@@ -67,4 +64,4 @@ FactoryGirl.define do
|
|
67
64
|
updated_at { FactoryGirl.generate(:time) }
|
68
65
|
created_at { FactoryGirl.generate(:time) }
|
69
66
|
end
|
70
|
-
end
|
67
|
+
end
|
data/spec/lib/dropbox_spec.rb
CHANGED
@@ -0,0 +1,247 @@
|
|
1
|
+
# == Schema Information
|
2
|
+
#
|
3
|
+
# Table name: versions
|
4
|
+
#
|
5
|
+
# id :integer not null, primary key
|
6
|
+
# user_id :integer
|
7
|
+
# item_id :integer
|
8
|
+
# item_type :string(255)
|
9
|
+
# event :string(32) default("create")
|
10
|
+
# info :string(255) default("")
|
11
|
+
# private :boolean default(FALSE)
|
12
|
+
# created_at :datetime
|
13
|
+
# updated_at :datetime
|
14
|
+
#
|
15
|
+
|
16
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
17
|
+
|
18
|
+
describe Version do
|
19
|
+
|
20
|
+
before do
|
21
|
+
login
|
22
|
+
PaperTrail.whodunnit = @current_user.id.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should create a new instance given valid attributes" do
|
26
|
+
FactoryGirl.create(:version, :whodunnit => PaperTrail.whodunnit, :item => FactoryGirl.create(:lead))
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with multiple version records" do
|
30
|
+
before do
|
31
|
+
@lead = FactoryGirl.create(:lead)
|
32
|
+
|
33
|
+
%w(create destroy update view).each do |event|
|
34
|
+
FactoryGirl.create(:version, :event => event, :item => @lead, :whodunnit => PaperTrail.whodunnit)
|
35
|
+
FactoryGirl.create(:version, :event => event, :item => @lead, :whodunnit => "1")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should select all versions except one" do
|
40
|
+
@versions = Version.for(@current_user).exclude_events(:view)
|
41
|
+
@versions.map(&:event).should == %w(create destroy update)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should select all versions except many" do
|
45
|
+
@versions = Version.for(@current_user).exclude_events(:create, :update, :destroy)
|
46
|
+
@versions.map(&:event).should == %w(view)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should select one requested version" do
|
50
|
+
@versions = Version.for(@current_user).include_events(:destroy)
|
51
|
+
@versions.map(&:event).should == %w(destroy)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should select many requested versions" do
|
55
|
+
@versions = Version.for(@current_user).include_events(:create, :update)
|
56
|
+
@versions.map(&:event).sort.should == %w(create update)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should select versions for given user" do
|
60
|
+
@versions = Version.for(@current_user)
|
61
|
+
@versions.map(&:event).sort.should == %w(create destroy update view)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
%w(account campaign contact lead opportunity task).each do |item|
|
66
|
+
describe "Create, update, and delete (#{item})" do
|
67
|
+
before :each do
|
68
|
+
PaperTrail.enabled = true
|
69
|
+
@item = FactoryGirl.create(item.to_sym, :user => @current_user)
|
70
|
+
@conditions = {:item_id => @item.id, :item_type => @item.class.name, :whodunnit => PaperTrail.whodunnit}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should add a version when creating new #{item}" do
|
74
|
+
@version = Version.where(@conditions.merge(:event => 'create')).first
|
75
|
+
@version.should_not == nil
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should add a version when updating existing #{item}" do
|
79
|
+
if @item.respond_to?(:full_name)
|
80
|
+
@item.update_attributes(:first_name => "Billy", :last_name => "Bones")
|
81
|
+
else
|
82
|
+
@item.update_attributes(:name => "Billy Bones")
|
83
|
+
end
|
84
|
+
@version = Version.where(@conditions.merge(:event => 'update')).first
|
85
|
+
|
86
|
+
@version.should_not == nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should add a version when deleting #{item}" do
|
90
|
+
@item.destroy
|
91
|
+
@version = Version.where(@conditions.merge(:event => 'destroy')).first
|
92
|
+
|
93
|
+
@version.should_not == nil
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should add a version when commenting on a #{item}" do
|
97
|
+
@comment = FactoryGirl.create(:comment, :commentable => @item, :user => @current_user)
|
98
|
+
|
99
|
+
@version = Version.where({:related_id => @item.id, :related_type => @item.class.name, :whodunnit => PaperTrail.whodunnit, :event => 'create'}).first
|
100
|
+
@version.should_not == nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "Recently viewed items (task)" do
|
106
|
+
before do
|
107
|
+
PaperTrail.enabled = true
|
108
|
+
@task = FactoryGirl.create(:task)
|
109
|
+
@conditions = {:item_id => @task.id, :item_type => @task.class.name}
|
110
|
+
end
|
111
|
+
|
112
|
+
it "creating a new task should not add it to recently viewed items list" do
|
113
|
+
@versions = Version.where(@conditions)
|
114
|
+
|
115
|
+
@versions.map(&:event).should == %w(create) # but not view
|
116
|
+
end
|
117
|
+
|
118
|
+
it "updating a new task should not add it to recently viewed items list" do
|
119
|
+
@task.update_attribute(:updated_at, 1.second.ago)
|
120
|
+
@versions = Version.where(@conditions)
|
121
|
+
|
122
|
+
@versions.map(&:event).sort.should == %w(create update) # but not view
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "Action refinements for task updates" do
|
127
|
+
before do
|
128
|
+
@task = FactoryGirl.create(:task, :user => @current_user)
|
129
|
+
@conditions = {:item_id => @task.id, :item_type => @task.class.name, :whodunnit => PaperTrail.whodunnit}
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should create 'completed' task event" do
|
133
|
+
@task.update_attribute(:completed_at, 1.second.ago)
|
134
|
+
@versions = Version.where(@conditions)
|
135
|
+
|
136
|
+
@versions.map(&:event).sort.should == %w(complete)
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should create 'reassigned' task event" do
|
140
|
+
@task.update_attribute(:assigned_to, @current_user.id + 1)
|
141
|
+
@versions = Version.where(@conditions)
|
142
|
+
|
143
|
+
@versions.map(&:event).sort.should == %w(reassign)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should create 'rescheduled' task event" do
|
147
|
+
@task.update_attribute(:bucket, "due_tomorrow") # FactoryGirl creates :due_asap task
|
148
|
+
@versions = Version.where(@conditions)
|
149
|
+
|
150
|
+
@versions.map(&:event).sort.should == %w(reschedule)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe "Rejecting a lead" do
|
155
|
+
before do
|
156
|
+
@lead = FactoryGirl.create(:lead, :user => @current_user, :status => "new")
|
157
|
+
@conditions = {:item_id => @lead.id, :item_type => @lead.class.name, :whodunnit => PaperTrail.whodunnit}
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should create 'rejected' lead event" do
|
161
|
+
@lead.update_attribute(:status, "rejected")
|
162
|
+
@versions = Version.where(@conditions)
|
163
|
+
|
164
|
+
@versions.map(&:event).sort.should == %w(reject)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "Permissions" do
|
169
|
+
before do
|
170
|
+
@user = FactoryGirl.create(:user)
|
171
|
+
Version.delete_all
|
172
|
+
PaperTrail.enabled = true
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should not show the create/update versions if the item is private" do
|
176
|
+
@item = FactoryGirl.create(:account, :user => @current_user, :access => "Private")
|
177
|
+
@item.update_attribute(:updated_at, 1.second.ago)
|
178
|
+
|
179
|
+
@versions = Version.where({:item_id => @item.id, :item_type => @item.class.name})
|
180
|
+
@versions.map(&:event).sort.should == %w(create update)
|
181
|
+
@versions = Version.latest.visible_to(@user)
|
182
|
+
@versions.should == []
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should not show the destroy version if the item is private" do
|
186
|
+
@item = FactoryGirl.create(:account, :user => @current_user, :access => "Private")
|
187
|
+
@item.destroy
|
188
|
+
|
189
|
+
@versions = Version.where({:item_id => @item.id, :item_type => @item.class.name})
|
190
|
+
@versions.map(&:event).sort.should == %w(create destroy)
|
191
|
+
@versions = Version.latest.visible_to(@user)
|
192
|
+
@versions.should == []
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should not show create/update versions if the item was not shared with the user" do
|
196
|
+
@item = FactoryGirl.create(:account,
|
197
|
+
:user => @current_user,
|
198
|
+
:access => "Shared",
|
199
|
+
:permissions => [ FactoryGirl.build(:permission, :user => @current_user, :asset => @item) ]
|
200
|
+
)
|
201
|
+
@item.update_attribute(:updated_at, 1.second.ago)
|
202
|
+
|
203
|
+
@versions = Version.where({:item_id => @item.id, :item_type => @item.class.name})
|
204
|
+
@versions.map(&:event).sort.should == %w(create update)
|
205
|
+
@versions = Version.latest.visible_to(@user)
|
206
|
+
@versions.should == []
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should not show the destroy version if the item was not shared with the user" do
|
210
|
+
@item = FactoryGirl.create(:account,
|
211
|
+
:user => @current_user,
|
212
|
+
:access => "Shared",
|
213
|
+
:permissions => [ FactoryGirl.build(:permission, :user => @current_user, :asset => @item) ]
|
214
|
+
)
|
215
|
+
@item.destroy
|
216
|
+
|
217
|
+
@versions = Version.where({:item_id => @item.id, :item_type => @item.class.name})
|
218
|
+
@versions.map(&:event).sort.should == %w(create destroy)
|
219
|
+
@versions = Version.latest.visible_to(@user)
|
220
|
+
@versions.should == []
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should show create/update versions if the item was shared with the user" do
|
224
|
+
@item = FactoryGirl.create(:account,
|
225
|
+
:user => @current_user,
|
226
|
+
:access => "Shared",
|
227
|
+
:permissions => [ FactoryGirl.build(:permission, :user => @user, :asset => @item) ]
|
228
|
+
)
|
229
|
+
@item.update_attribute(:updated_at, 1.second.ago)
|
230
|
+
|
231
|
+
@versions = Version.where({:item_id => @item.id, :item_type => @item.class.name})
|
232
|
+
@versions.map(&:event).sort.should == %w(create update)
|
233
|
+
@versions = Version.latest.visible_to(@user)
|
234
|
+
@versions.map(&:event).sort.should == %w(create update)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe "Exportable" do
|
239
|
+
before do
|
240
|
+
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user).id, :item => FactoryGirl.create(:account))
|
241
|
+
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user, :first_name => nil, :last_name => nil).id, :item => FactoryGirl.create(:account))
|
242
|
+
end
|
243
|
+
it_should_behave_like("exportable") do
|
244
|
+
let(:exported) { Version.all }
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
@@ -89,15 +89,6 @@ describe User do
|
|
89
89
|
@user.destroyed?.should == true
|
90
90
|
end
|
91
91
|
|
92
|
-
it "once the user gets deleted all her activity records must be deleted too" do
|
93
|
-
login
|
94
|
-
FactoryGirl.create(:activity, :user => @user, :subject => FactoryGirl.create(:account))
|
95
|
-
FactoryGirl.create(:activity, :user => @user, :subject => FactoryGirl.create(:contact))
|
96
|
-
@user.activities.count.should == 2
|
97
|
-
@user.destroy
|
98
|
-
@user.activities.count.should == 0
|
99
|
-
end
|
100
|
-
|
101
92
|
it "once the user gets deleted all her permissions must be deleted too" do
|
102
93
|
FactoryGirl.create(:permission, :user => @user, :asset => FactoryGirl.create(:account))
|
103
94
|
FactoryGirl.create(:permission, :user => @user, :asset => FactoryGirl.create(:contact))
|
data/spec/spec_helper.rb
CHANGED
@@ -54,6 +54,10 @@ Spork.prefork do
|
|
54
54
|
config.include(SharedControllerSpecs, :type => :controller)
|
55
55
|
config.include(SharedModelSpecs, :type => :model)
|
56
56
|
|
57
|
+
config.before(:each) do
|
58
|
+
PaperTrail.enabled = false
|
59
|
+
end
|
60
|
+
|
57
61
|
config.before(:each, :type => :view) do
|
58
62
|
I18n.locale = 'en-US'
|
59
63
|
end
|
@@ -8,7 +8,7 @@ describe "/home/index" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should render list of activities if it's not empty" do
|
11
|
-
assign(:activities, [ FactoryGirl.create(:
|
11
|
+
assign(:activities, [ FactoryGirl.create(:version, :event => "update", :item => FactoryGirl.create(:account)) ])
|
12
12
|
|
13
13
|
render
|
14
14
|
view.should render_template(:partial => "_activity")
|
@@ -8,12 +8,12 @@ describe "/home/index" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should render [activity] template with @activities collection" do
|
11
|
-
assign(:activities, [ FactoryGirl.create(:
|
11
|
+
assign(:activities, [ FactoryGirl.create(:version, :id => 42, :event => "update", :item => FactoryGirl.create(:account), :whodunnit => @current_user.id.to_s) ])
|
12
12
|
|
13
13
|
render :template => 'home/index', :formats => [:js]
|
14
|
-
|
14
|
+
|
15
15
|
rendered.should have_rjs("activities") do |rjs|
|
16
|
-
with_tag("li[id=
|
16
|
+
with_tag("li[id=version_42]")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -21,7 +21,7 @@ describe "/home/index" do
|
|
21
21
|
assign(:activities, [])
|
22
22
|
|
23
23
|
render :template => 'home/index', :formats => [:js]
|
24
|
-
|
24
|
+
|
25
25
|
rendered.should have_rjs("activities")
|
26
26
|
rendered.should include("No activity records found.")
|
27
27
|
end
|
@@ -18,8 +18,8 @@ describe "/tasks/new" do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "new task" do
|
21
|
-
before
|
22
|
-
after
|
21
|
+
before { @task_with_time = Setting.task_calendar_with_time }
|
22
|
+
after { Setting.task_calendar_with_time = @task_with_time }
|
23
23
|
|
24
24
|
it "create: should render [new] template into :create_task div" do
|
25
25
|
params[:cancel] = nil
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// French Format: 31/12/2000 à 23:00
|
2
|
+
// Thanks, Materazzi!
|
3
|
+
|
4
|
+
Date.prototype.toFormattedString = function(include_time){
|
5
|
+
str = this.getDate() + "/" + (this.getMonth() + 1) + "/" + this.getFullYear();
|
6
|
+
if (include_time) { str += " à " + this.getHours() + ":" + this.getPaddedMinutes() }
|
7
|
+
return str;
|
8
|
+
}
|
9
|
+
|
10
|
+
Date.parseFormattedString = function (string) {
|
11
|
+
var regexp = '([0-9]{1,2})/(([0-9]{1,2})/(([0-9]{4})( ?à? ([0-9]{1,2}):([0-9]{2})? *)?)?)?';
|
12
|
+
var d = string.match(new RegExp(regexp, "i"));
|
13
|
+
if (d==null) return Date.parse(string); // at least give javascript a crack at it.
|
14
|
+
var offset = 0;
|
15
|
+
var date = new Date(d[5], 0, 1);
|
16
|
+
if (d[3]) { date.setMonth(d[3] - 1); }
|
17
|
+
if (d[5]) { date.setDate(d[1]); }
|
18
|
+
if (d[7]) {
|
19
|
+
date.setHours(parseInt(d[7], 10));
|
20
|
+
}
|
21
|
+
if (d[8]) { date.setMinutes(d[8]); }
|
22
|
+
if (d[10]) { date.setSeconds(d[10]); }
|
23
|
+
return date;
|
24
|
+
}
|
metadata
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_free_crm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Dvorkin
|
9
|
-
- Nathan Broadbent
|
10
9
|
- Ben Tillman
|
10
|
+
- Nathan Broadbent
|
11
11
|
- Stephen Kenworthy
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-03-
|
15
|
+
date: 2012-03-30 00:00:00.000000000Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rails
|
19
|
-
requirement: &
|
19
|
+
requirement: &23503020 !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 3.2.2
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *23503020
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: prototype-rails
|
30
|
-
requirement: &
|
30
|
+
requirement: &23502600 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ! '>='
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: '0'
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *23502600
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: jquery-rails
|
41
|
-
requirement: &
|
41
|
+
requirement: &23502140 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ! '>='
|
@@ -46,21 +46,21 @@ dependencies:
|
|
46
46
|
version: '0'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *23502140
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: simple_form
|
52
|
-
requirement: &
|
52
|
+
requirement: &23501640 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
57
|
+
version: 2.0.1
|
58
58
|
type: :runtime
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *23501640
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: will_paginate
|
63
|
-
requirement: &
|
63
|
+
requirement: &23501120 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
@@ -68,21 +68,21 @@ dependencies:
|
|
68
68
|
version: 3.0.2
|
69
69
|
type: :runtime
|
70
70
|
prerelease: false
|
71
|
-
version_requirements: *
|
71
|
+
version_requirements: *23501120
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: paperclip
|
74
|
-
requirement: &
|
74
|
+
requirement: &23500660 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
76
76
|
requirements:
|
77
77
|
- - ~>
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 2.
|
79
|
+
version: 2.7.0
|
80
80
|
type: :runtime
|
81
81
|
prerelease: false
|
82
|
-
version_requirements: *
|
82
|
+
version_requirements: *23500660
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: paper_trail
|
85
|
-
requirement: &
|
85
|
+
requirement: &23500280 !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
87
87
|
requirements:
|
88
88
|
- - ! '>='
|
@@ -90,10 +90,10 @@ dependencies:
|
|
90
90
|
version: '0'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
|
-
version_requirements: *
|
93
|
+
version_requirements: *23500280
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: authlogic
|
96
|
-
requirement: &
|
96
|
+
requirement: &23499740 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ~>
|
@@ -101,10 +101,10 @@ dependencies:
|
|
101
101
|
version: 3.1.0
|
102
102
|
type: :runtime
|
103
103
|
prerelease: false
|
104
|
-
version_requirements: *
|
104
|
+
version_requirements: *23499740
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: acts_as_commentable
|
107
|
-
requirement: &
|
107
|
+
requirement: &23499220 !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|
110
110
|
- - ~>
|
@@ -112,10 +112,10 @@ dependencies:
|
|
112
112
|
version: 3.0.1
|
113
113
|
type: :runtime
|
114
114
|
prerelease: false
|
115
|
-
version_requirements: *
|
115
|
+
version_requirements: *23499220
|
116
116
|
- !ruby/object:Gem::Dependency
|
117
117
|
name: acts-as-taggable-on
|
118
|
-
requirement: &
|
118
|
+
requirement: &23498760 !ruby/object:Gem::Requirement
|
119
119
|
none: false
|
120
120
|
requirements:
|
121
121
|
- - ~>
|
@@ -123,10 +123,32 @@ dependencies:
|
|
123
123
|
version: 2.2.1
|
124
124
|
type: :runtime
|
125
125
|
prerelease: false
|
126
|
-
version_requirements: *
|
126
|
+
version_requirements: *23498760
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: responds_to_parent
|
129
|
+
requirement: &23498380 !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: *23498380
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: dynamic_form
|
140
|
+
requirement: &23497920 !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: *23497920
|
127
149
|
- !ruby/object:Gem::Dependency
|
128
150
|
name: haml
|
129
|
-
requirement: &
|
151
|
+
requirement: &23492000 !ruby/object:Gem::Requirement
|
130
152
|
none: false
|
131
153
|
requirements:
|
132
154
|
- - ~>
|
@@ -134,10 +156,10 @@ dependencies:
|
|
134
156
|
version: 3.1.3
|
135
157
|
type: :runtime
|
136
158
|
prerelease: false
|
137
|
-
version_requirements: *
|
159
|
+
version_requirements: *23492000
|
138
160
|
- !ruby/object:Gem::Dependency
|
139
161
|
name: sass
|
140
|
-
requirement: &
|
162
|
+
requirement: &23491480 !ruby/object:Gem::Requirement
|
141
163
|
none: false
|
142
164
|
requirements:
|
143
165
|
- - ~>
|
@@ -145,10 +167,10 @@ dependencies:
|
|
145
167
|
version: 3.1.15
|
146
168
|
type: :runtime
|
147
169
|
prerelease: false
|
148
|
-
version_requirements: *
|
170
|
+
version_requirements: *23491480
|
149
171
|
- !ruby/object:Gem::Dependency
|
150
172
|
name: acts_as_list
|
151
|
-
requirement: &
|
173
|
+
requirement: &23490940 !ruby/object:Gem::Requirement
|
152
174
|
none: false
|
153
175
|
requirements:
|
154
176
|
- - ~>
|
@@ -156,10 +178,10 @@ dependencies:
|
|
156
178
|
version: 0.1.4
|
157
179
|
type: :runtime
|
158
180
|
prerelease: false
|
159
|
-
version_requirements: *
|
181
|
+
version_requirements: *23490940
|
160
182
|
- !ruby/object:Gem::Dependency
|
161
183
|
name: ffaker
|
162
|
-
requirement: &
|
184
|
+
requirement: &23490480 !ruby/object:Gem::Requirement
|
163
185
|
none: false
|
164
186
|
requirements:
|
165
187
|
- - ! '>='
|
@@ -167,10 +189,10 @@ dependencies:
|
|
167
189
|
version: 1.12.0
|
168
190
|
type: :runtime
|
169
191
|
prerelease: false
|
170
|
-
version_requirements: *
|
192
|
+
version_requirements: *23490480
|
171
193
|
- !ruby/object:Gem::Dependency
|
172
194
|
name: uglifier
|
173
|
-
requirement: &
|
195
|
+
requirement: &23490080 !ruby/object:Gem::Requirement
|
174
196
|
none: false
|
175
197
|
requirements:
|
176
198
|
- - ! '>='
|
@@ -178,10 +200,10 @@ dependencies:
|
|
178
200
|
version: '0'
|
179
201
|
type: :runtime
|
180
202
|
prerelease: false
|
181
|
-
version_requirements: *
|
203
|
+
version_requirements: *23490080
|
182
204
|
- !ruby/object:Gem::Dependency
|
183
205
|
name: chosen-rails
|
184
|
-
requirement: &
|
206
|
+
requirement: &23489560 !ruby/object:Gem::Requirement
|
185
207
|
none: false
|
186
208
|
requirements:
|
187
209
|
- - ! '>='
|
@@ -189,10 +211,10 @@ dependencies:
|
|
189
211
|
version: '0'
|
190
212
|
type: :runtime
|
191
213
|
prerelease: false
|
192
|
-
version_requirements: *
|
214
|
+
version_requirements: *23489560
|
193
215
|
- !ruby/object:Gem::Dependency
|
194
216
|
name: ajax-chosen-rails
|
195
|
-
requirement: &
|
217
|
+
requirement: &23489060 !ruby/object:Gem::Requirement
|
196
218
|
none: false
|
197
219
|
requirements:
|
198
220
|
- - ! '>='
|
@@ -200,10 +222,21 @@ dependencies:
|
|
200
222
|
version: 0.1.5
|
201
223
|
type: :runtime
|
202
224
|
prerelease: false
|
203
|
-
version_requirements: *
|
225
|
+
version_requirements: *23489060
|
204
226
|
- !ruby/object:Gem::Dependency
|
205
227
|
name: ransack
|
206
|
-
requirement: &
|
228
|
+
requirement: &23488620 !ruby/object:Gem::Requirement
|
229
|
+
none: false
|
230
|
+
requirements:
|
231
|
+
- - ! '>='
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: '0'
|
234
|
+
type: :runtime
|
235
|
+
prerelease: false
|
236
|
+
version_requirements: *23488620
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: cancan
|
239
|
+
requirement: &23488080 !ruby/object:Gem::Requirement
|
207
240
|
none: false
|
208
241
|
requirements:
|
209
242
|
- - ! '>='
|
@@ -211,10 +244,10 @@ dependencies:
|
|
211
244
|
version: '0'
|
212
245
|
type: :runtime
|
213
246
|
prerelease: false
|
214
|
-
version_requirements: *
|
247
|
+
version_requirements: *23488080
|
215
248
|
- !ruby/object:Gem::Dependency
|
216
249
|
name: rspec-rails
|
217
|
-
requirement: &
|
250
|
+
requirement: &23487560 !ruby/object:Gem::Requirement
|
218
251
|
none: false
|
219
252
|
requirements:
|
220
253
|
- - ~>
|
@@ -222,10 +255,10 @@ dependencies:
|
|
222
255
|
version: 2.8.1
|
223
256
|
type: :development
|
224
257
|
prerelease: false
|
225
|
-
version_requirements: *
|
258
|
+
version_requirements: *23487560
|
226
259
|
- !ruby/object:Gem::Dependency
|
227
260
|
name: capybara
|
228
|
-
requirement: &
|
261
|
+
requirement: &23487080 !ruby/object:Gem::Requirement
|
229
262
|
none: false
|
230
263
|
requirements:
|
231
264
|
- - ! '>='
|
@@ -233,10 +266,10 @@ dependencies:
|
|
233
266
|
version: '0'
|
234
267
|
type: :development
|
235
268
|
prerelease: false
|
236
|
-
version_requirements: *
|
269
|
+
version_requirements: *23487080
|
237
270
|
- !ruby/object:Gem::Dependency
|
238
271
|
name: sass-rails
|
239
|
-
requirement: &
|
272
|
+
requirement: &23486620 !ruby/object:Gem::Requirement
|
240
273
|
none: false
|
241
274
|
requirements:
|
242
275
|
- - ! '>='
|
@@ -244,10 +277,10 @@ dependencies:
|
|
244
277
|
version: '0'
|
245
278
|
type: :development
|
246
279
|
prerelease: false
|
247
|
-
version_requirements: *
|
280
|
+
version_requirements: *23486620
|
248
281
|
- !ruby/object:Gem::Dependency
|
249
282
|
name: coffee-rails
|
250
|
-
requirement: &
|
283
|
+
requirement: &23486180 !ruby/object:Gem::Requirement
|
251
284
|
none: false
|
252
285
|
requirements:
|
253
286
|
- - ! '>='
|
@@ -255,10 +288,10 @@ dependencies:
|
|
255
288
|
version: '0'
|
256
289
|
type: :development
|
257
290
|
prerelease: false
|
258
|
-
version_requirements: *
|
291
|
+
version_requirements: *23486180
|
259
292
|
- !ruby/object:Gem::Dependency
|
260
293
|
name: therubyracer
|
261
|
-
requirement: &
|
294
|
+
requirement: &23485740 !ruby/object:Gem::Requirement
|
262
295
|
none: false
|
263
296
|
requirements:
|
264
297
|
- - ! '>='
|
@@ -266,10 +299,10 @@ dependencies:
|
|
266
299
|
version: '0'
|
267
300
|
type: :development
|
268
301
|
prerelease: false
|
269
|
-
version_requirements: *
|
302
|
+
version_requirements: *23485740
|
270
303
|
- !ruby/object:Gem::Dependency
|
271
304
|
name: spork
|
272
|
-
requirement: &
|
305
|
+
requirement: &23485320 !ruby/object:Gem::Requirement
|
273
306
|
none: false
|
274
307
|
requirements:
|
275
308
|
- - ! '>='
|
@@ -277,10 +310,10 @@ dependencies:
|
|
277
310
|
version: '0'
|
278
311
|
type: :development
|
279
312
|
prerelease: false
|
280
|
-
version_requirements: *
|
313
|
+
version_requirements: *23485320
|
281
314
|
- !ruby/object:Gem::Dependency
|
282
315
|
name: database_cleaner
|
283
|
-
requirement: &
|
316
|
+
requirement: &23484900 !ruby/object:Gem::Requirement
|
284
317
|
none: false
|
285
318
|
requirements:
|
286
319
|
- - ! '>='
|
@@ -288,10 +321,10 @@ dependencies:
|
|
288
321
|
version: '0'
|
289
322
|
type: :development
|
290
323
|
prerelease: false
|
291
|
-
version_requirements: *
|
324
|
+
version_requirements: *23484900
|
292
325
|
- !ruby/object:Gem::Dependency
|
293
326
|
name: fuubar
|
294
|
-
requirement: &
|
327
|
+
requirement: &23484480 !ruby/object:Gem::Requirement
|
295
328
|
none: false
|
296
329
|
requirements:
|
297
330
|
- - ! '>='
|
@@ -299,10 +332,10 @@ dependencies:
|
|
299
332
|
version: '0'
|
300
333
|
type: :development
|
301
334
|
prerelease: false
|
302
|
-
version_requirements: *
|
335
|
+
version_requirements: *23484480
|
303
336
|
- !ruby/object:Gem::Dependency
|
304
337
|
name: factory_girl
|
305
|
-
requirement: &
|
338
|
+
requirement: &23477680 !ruby/object:Gem::Requirement
|
306
339
|
none: false
|
307
340
|
requirements:
|
308
341
|
- - ~>
|
@@ -310,11 +343,23 @@ dependencies:
|
|
310
343
|
version: 2.6.1
|
311
344
|
type: :development
|
312
345
|
prerelease: false
|
313
|
-
version_requirements: *
|
346
|
+
version_requirements: *23477680
|
347
|
+
- !ruby/object:Gem::Dependency
|
348
|
+
name: factory_girl_rails
|
349
|
+
requirement: &23477160 !ruby/object:Gem::Requirement
|
350
|
+
none: false
|
351
|
+
requirements:
|
352
|
+
- - ~>
|
353
|
+
- !ruby/object:Gem::Version
|
354
|
+
version: 1.7.0
|
355
|
+
type: :development
|
356
|
+
prerelease: false
|
357
|
+
version_requirements: *23477160
|
314
358
|
description: An open source, Ruby on Rails customer relationship management platform
|
315
359
|
email:
|
316
360
|
- mike@fatfreecrm.com
|
317
361
|
- nathan@fatfreecrm.com
|
362
|
+
- warp@fatfreecrm.com
|
318
363
|
executables: []
|
319
364
|
extensions: []
|
320
365
|
extra_rdoc_files: []
|
@@ -376,7 +421,6 @@ files:
|
|
376
421
|
- app/assets/stylesheets/print.css.scss
|
377
422
|
- app/assets/stylesheets/rails.scss
|
378
423
|
- app/assets/stylesheets/safari.scss
|
379
|
-
- app/controllers/accounts_controller.rb
|
380
424
|
- app/controllers/admin/application_controller.rb
|
381
425
|
- app/controllers/admin/field_groups_controller.rb
|
382
426
|
- app/controllers/admin/fields_controller.rb
|
@@ -386,17 +430,18 @@ files:
|
|
386
430
|
- app/controllers/admin/users_controller.rb
|
387
431
|
- app/controllers/application_controller.rb
|
388
432
|
- app/controllers/authentications_controller.rb
|
389
|
-
- app/controllers/base_controller.rb
|
390
|
-
- app/controllers/campaigns_controller.rb
|
391
433
|
- app/controllers/comments_controller.rb
|
392
|
-
- app/controllers/contacts_controller.rb
|
393
434
|
- app/controllers/emails_controller.rb
|
435
|
+
- app/controllers/entities/accounts_controller.rb
|
436
|
+
- app/controllers/entities/campaigns_controller.rb
|
437
|
+
- app/controllers/entities/contacts_controller.rb
|
438
|
+
- app/controllers/entities/leads_controller.rb
|
439
|
+
- app/controllers/entities/opportunities_controller.rb
|
440
|
+
- app/controllers/entities/tasks_controller.rb
|
441
|
+
- app/controllers/entities_controller.rb
|
394
442
|
- app/controllers/home_controller.rb
|
395
|
-
- app/controllers/leads_controller.rb
|
396
443
|
- app/controllers/lists_controller.rb
|
397
|
-
- app/controllers/opportunities_controller.rb
|
398
444
|
- app/controllers/passwords_controller.rb
|
399
|
-
- app/controllers/tasks_controller.rb
|
400
445
|
- app/controllers/users_controller.rb
|
401
446
|
- app/helpers/accounts_helper.rb
|
402
447
|
- app/helpers/addresses_helper.rb
|
@@ -424,23 +469,24 @@ files:
|
|
424
469
|
- app/helpers/users_helper.rb
|
425
470
|
- app/inputs/date_time_input.rb
|
426
471
|
- app/inputs/text_input.rb
|
427
|
-
- app/models/
|
428
|
-
- app/models/
|
429
|
-
- app/models/
|
430
|
-
- app/models/
|
431
|
-
- app/models/
|
432
|
-
- app/models/
|
433
|
-
- app/models/
|
434
|
-
- app/models/
|
435
|
-
- app/models/
|
472
|
+
- app/models/entities/account.rb
|
473
|
+
- app/models/entities/account_contact.rb
|
474
|
+
- app/models/entities/account_opportunity.rb
|
475
|
+
- app/models/entities/campaign.rb
|
476
|
+
- app/models/entities/contact.rb
|
477
|
+
- app/models/entities/contact_opportunity.rb
|
478
|
+
- app/models/entities/lead.rb
|
479
|
+
- app/models/entities/opportunity.rb
|
480
|
+
- app/models/entities/task.rb
|
436
481
|
- app/models/fields/core_field.rb
|
437
482
|
- app/models/fields/custom_field.rb
|
438
483
|
- app/models/fields/field.rb
|
439
484
|
- app/models/fields/field_group.rb
|
440
485
|
- app/models/list.rb
|
441
486
|
- app/models/mailers/notifier.rb
|
442
|
-
- app/models/observers/
|
443
|
-
- app/models/
|
487
|
+
- app/models/observers/lead_observer.rb
|
488
|
+
- app/models/observers/opportunity_observer.rb
|
489
|
+
- app/models/observers/task_observer.rb
|
444
490
|
- app/models/polymorphic/address.rb
|
445
491
|
- app/models/polymorphic/avatar.rb
|
446
492
|
- app/models/polymorphic/comment.rb
|
@@ -448,6 +494,7 @@ files:
|
|
448
494
|
- app/models/polymorphic/tag.rb
|
449
495
|
- app/models/polymorphic/tagging.rb
|
450
496
|
- app/models/setting.rb
|
497
|
+
- app/models/users/ability.rb
|
451
498
|
- app/models/users/authentication.rb
|
452
499
|
- app/models/users/permission.rb
|
453
500
|
- app/models/users/preference.rb
|
@@ -461,14 +508,12 @@ files:
|
|
461
508
|
- app/views/accounts/_sidebar_index.html.haml
|
462
509
|
- app/views/accounts/_sidebar_show.html.haml
|
463
510
|
- app/views/accounts/_top_section.html.haml
|
464
|
-
- app/views/accounts/contacts.js.rjs
|
465
511
|
- app/views/accounts/create.js.rjs
|
466
512
|
- app/views/accounts/destroy.js.rjs
|
467
513
|
- app/views/accounts/edit.js.rjs
|
468
514
|
- app/views/accounts/index.html.haml
|
469
515
|
- app/views/accounts/index.js.rjs
|
470
516
|
- app/views/accounts/new.js.rjs
|
471
|
-
- app/views/accounts/opportunities.js.rjs
|
472
517
|
- app/views/accounts/options.js.rjs
|
473
518
|
- app/views/accounts/show.html.haml
|
474
519
|
- app/views/accounts/update.js.rjs
|
@@ -533,11 +578,6 @@ files:
|
|
533
578
|
- app/views/admin/users/suspend.js.rjs
|
534
579
|
- app/views/admin/users/update.js.rjs
|
535
580
|
- app/views/authentications/new.html.haml
|
536
|
-
- app/views/base/_advanced_search.html.haml
|
537
|
-
- app/views/base/_condition_fields.html.haml
|
538
|
-
- app/views/base/_grouping_fields.html.haml
|
539
|
-
- app/views/base/_sort_fields.html.haml
|
540
|
-
- app/views/base/advanced_search.js.rjs
|
541
581
|
- app/views/campaigns/_campaign.html.haml
|
542
582
|
- app/views/campaigns/_edit.html.haml
|
543
583
|
- app/views/campaigns/_metrics.html.haml
|
@@ -554,9 +594,7 @@ files:
|
|
554
594
|
- app/views/campaigns/edit.js.rjs
|
555
595
|
- app/views/campaigns/index.html.haml
|
556
596
|
- app/views/campaigns/index.js.rjs
|
557
|
-
- app/views/campaigns/leads.js.rjs
|
558
597
|
- app/views/campaigns/new.js.rjs
|
559
|
-
- app/views/campaigns/opportunities.js.rjs
|
560
598
|
- app/views/campaigns/options.js.rjs
|
561
599
|
- app/views/campaigns/show.html.haml
|
562
600
|
- app/views/campaigns/update.js.rjs
|
@@ -569,6 +607,7 @@ files:
|
|
569
607
|
- app/views/comments/new.js.rjs
|
570
608
|
- app/views/comments/update.js.rjs
|
571
609
|
- app/views/contacts/_contact.html.haml
|
610
|
+
- app/views/contacts/_contacts.html.haml
|
572
611
|
- app/views/contacts/_edit.html.haml
|
573
612
|
- app/views/contacts/_extra.html.haml
|
574
613
|
- app/views/contacts/_new.html.haml
|
@@ -584,20 +623,28 @@ files:
|
|
584
623
|
- app/views/contacts/index.html.haml
|
585
624
|
- app/views/contacts/index.js.rjs
|
586
625
|
- app/views/contacts/new.js.rjs
|
587
|
-
- app/views/contacts/opportunities.js.rjs
|
588
626
|
- app/views/contacts/options.js.rjs
|
589
627
|
- app/views/contacts/show.html.haml
|
590
628
|
- app/views/contacts/update.js.rjs
|
591
629
|
- app/views/emails/_email.html.haml
|
592
630
|
- app/views/emails/destroy.js.rjs
|
631
|
+
- app/views/entities/_advanced_search.html.haml
|
632
|
+
- app/views/entities/_condition_fields.html.haml
|
633
|
+
- app/views/entities/_grouping_fields.html.haml
|
634
|
+
- app/views/entities/_sort_fields.html.haml
|
635
|
+
- app/views/entities/advanced_search.js.rjs
|
636
|
+
- app/views/entities/contacts.js.rjs
|
637
|
+
- app/views/entities/leads.js.rjs
|
638
|
+
- app/views/entities/opportunities.js.rjs
|
639
|
+
- app/views/entities/versions.js.rjs
|
593
640
|
- app/views/fields/_group.html.haml
|
594
641
|
- app/views/fields/_groups.html.haml
|
595
642
|
- app/views/fields/_sidebar_show.html.haml
|
596
643
|
- app/views/fields/group.js.rjs
|
597
|
-
- app/views/home/_actions_menu.html.haml
|
598
644
|
- app/views/home/_activity.html.haml
|
599
645
|
- app/views/home/_assets_menu.html.haml
|
600
646
|
- app/views/home/_duration_menu.html.haml
|
647
|
+
- app/views/home/_events_menu.html.haml
|
601
648
|
- app/views/home/_options.html.haml
|
602
649
|
- app/views/home/_users_menu.html.haml
|
603
650
|
- app/views/home/index.atom.builder
|
@@ -621,6 +668,7 @@ files:
|
|
621
668
|
- app/views/leads/_convert_permissions.html.haml
|
622
669
|
- app/views/leads/_edit.html.haml
|
623
670
|
- app/views/leads/_lead.html.haml
|
671
|
+
- app/views/leads/_leads.html.haml
|
624
672
|
- app/views/leads/_new.html.haml
|
625
673
|
- app/views/leads/_opportunity.html.haml
|
626
674
|
- app/views/leads/_options.html.haml
|
@@ -648,6 +696,7 @@ files:
|
|
648
696
|
- app/views/notifier/password_reset_instructions.html.haml
|
649
697
|
- app/views/opportunities/_edit.html.haml
|
650
698
|
- app/views/opportunities/_new.html.haml
|
699
|
+
- app/views/opportunities/_opportunities.html.haml
|
651
700
|
- app/views/opportunities/_opportunity.html.haml
|
652
701
|
- app/views/opportunities/_options.html.haml
|
653
702
|
- app/views/opportunities/_permissions.html.haml
|
@@ -701,6 +750,7 @@ files:
|
|
701
750
|
- app/views/tasks/_related.html.haml
|
702
751
|
- app/views/tasks/_selector.html.haml
|
703
752
|
- app/views/tasks/_sidebar_index.html.haml
|
753
|
+
- app/views/tasks/_tasks.html.haml
|
704
754
|
- app/views/tasks/_title.html.haml
|
705
755
|
- app/views/tasks/_top_section.html.haml
|
706
756
|
- app/views/tasks/complete.js.rjs
|
@@ -727,6 +777,7 @@ files:
|
|
727
777
|
- app/views/users/update.js.rjs
|
728
778
|
- app/views/users/upload_avatar.js.rjs
|
729
779
|
- app/views/versions/_version.html.haml
|
780
|
+
- app/views/versions/_versions.html.haml
|
730
781
|
- config.ru
|
731
782
|
- config/application.rb
|
732
783
|
- config/boot.rb
|
@@ -744,6 +795,7 @@ files:
|
|
744
795
|
- config/initializers/mime_types.rb
|
745
796
|
- config/initializers/paginate_arrays.rb
|
746
797
|
- config/initializers/paper_trail.rb
|
798
|
+
- config/initializers/relative_url_root.rb
|
747
799
|
- config/initializers/sass.rb
|
748
800
|
- config/initializers/secret_token.rb
|
749
801
|
- config/initializers/simple_form.rb
|
@@ -841,31 +893,16 @@ files:
|
|
841
893
|
- db/migrate/20120216042541_is_paranoid_to_paper_trail.rb
|
842
894
|
- db/migrate/20120220233724_add_versions_object_changes.rb
|
843
895
|
- db/migrate/20120224073107_remove_default_value_and_clear_settings.rb
|
896
|
+
- db/migrate/20120309070209_add_versions_related.rb
|
897
|
+
- db/migrate/20120316045804_activities_to_versions.rb
|
844
898
|
- db/schema.rb
|
845
899
|
- db/seeds.rb
|
846
900
|
- db/seeds/fields.rb
|
847
901
|
- fat_free_crm.gemspec
|
848
|
-
- lib/country_select/MIT-LICENSE
|
849
|
-
- lib/country_select/README
|
850
|
-
- lib/country_select/init.rb
|
851
|
-
- lib/country_select/install.rb
|
852
|
-
- lib/country_select/lib/country_select.rb
|
853
|
-
- lib/country_select/uninstall.rb
|
854
902
|
- lib/development_tasks/gem.rake
|
855
903
|
- lib/development_tasks/license.rake
|
856
904
|
- lib/development_tasks/rdoc.rake
|
857
905
|
- lib/development_tasks/rspec.rake
|
858
|
-
- lib/dynamic_form/MIT-LICENSE
|
859
|
-
- lib/dynamic_form/README
|
860
|
-
- lib/dynamic_form/Rakefile
|
861
|
-
- lib/dynamic_form/dynamic_form.gemspec
|
862
|
-
- lib/dynamic_form/init.rb
|
863
|
-
- lib/dynamic_form/lib/action_view/helpers/dynamic_form.rb
|
864
|
-
- lib/dynamic_form/lib/action_view/locale/en-US.yml
|
865
|
-
- lib/dynamic_form/lib/dynamic_form.rb
|
866
|
-
- lib/dynamic_form/test/dynamic_form_i18n_test.rb
|
867
|
-
- lib/dynamic_form/test/dynamic_form_test.rb
|
868
|
-
- lib/dynamic_form/test/test_helper.rb
|
869
906
|
- lib/fat_free_crm.rb
|
870
907
|
- lib/fat_free_crm/callback.rb
|
871
908
|
- lib/fat_free_crm/core_ext.rb
|
@@ -898,25 +935,22 @@ files:
|
|
898
935
|
- lib/fat_free_crm/syck_yaml.rb
|
899
936
|
- lib/fat_free_crm/tabs.rb
|
900
937
|
- lib/fat_free_crm/version.rb
|
901
|
-
- lib/
|
902
|
-
- lib/
|
903
|
-
- lib/
|
904
|
-
- lib/
|
905
|
-
- lib/
|
906
|
-
- lib/
|
907
|
-
- lib/gravatar_image_tag/
|
908
|
-
- lib/gravatar_image_tag/
|
909
|
-
- lib/gravatar_image_tag/
|
910
|
-
- lib/gravatar_image_tag/
|
911
|
-
- lib/
|
912
|
-
- lib/
|
913
|
-
- lib/
|
914
|
-
- lib/
|
915
|
-
- lib/
|
916
|
-
- lib/
|
917
|
-
- lib/responds_to_parent/test/responds_to_parent_test.rb
|
918
|
-
- lib/responds_to_parent/test/test_helper.rb
|
919
|
-
- lib/responds_to_parent/uninstall.rb
|
938
|
+
- lib/plugins/country_select/MIT-LICENSE
|
939
|
+
- lib/plugins/country_select/README
|
940
|
+
- lib/plugins/country_select/init.rb
|
941
|
+
- lib/plugins/country_select/install.rb
|
942
|
+
- lib/plugins/country_select/lib/country_select.rb
|
943
|
+
- lib/plugins/country_select/uninstall.rb
|
944
|
+
- lib/plugins/gravatar_image_tag/Gemfile
|
945
|
+
- lib/plugins/gravatar_image_tag/README.textile
|
946
|
+
- lib/plugins/gravatar_image_tag/ROADMAP.textile
|
947
|
+
- lib/plugins/gravatar_image_tag/Rakefile
|
948
|
+
- lib/plugins/gravatar_image_tag/VERSION
|
949
|
+
- lib/plugins/gravatar_image_tag/gravatar_image_tag.gemspec
|
950
|
+
- lib/plugins/gravatar_image_tag/init.rb
|
951
|
+
- lib/plugins/gravatar_image_tag/lib/gravatar_image_tag.rb
|
952
|
+
- lib/plugins/gravatar_image_tag/spec/gravatar_image_tag_spec.rb
|
953
|
+
- lib/plugins/gravatar_image_tag/spec/test_helper.rb
|
920
954
|
- lib/tasks/.gitkeep
|
921
955
|
- lib/tasks/.gitkeep~master
|
922
956
|
- lib/tasks/demo.rake
|
@@ -996,11 +1030,11 @@ files:
|
|
996
1030
|
- spec/models/fields/field_group_spec.rb
|
997
1031
|
- spec/models/fields/field_spec.rb
|
998
1032
|
- spec/models/list_spec.rb
|
999
|
-
- spec/models/polymorphic/activity_spec.rb
|
1000
1033
|
- spec/models/polymorphic/address_spec.rb
|
1001
1034
|
- spec/models/polymorphic/avatar_spec.rb
|
1002
1035
|
- spec/models/polymorphic/comment_spec.rb
|
1003
1036
|
- spec/models/polymorphic/email_spec.rb
|
1037
|
+
- spec/models/polymorphic/version_spec.rb
|
1004
1038
|
- spec/models/setting_spec.rb
|
1005
1039
|
- spec/models/users/authentication_spec.rb
|
1006
1040
|
- spec/models/users/permission_spec.rb
|
@@ -1137,6 +1171,7 @@ files:
|
|
1137
1171
|
- vendor/assets/javascripts/calendar_date_select/format_euro_24hr.js
|
1138
1172
|
- vendor/assets/javascripts/calendar_date_select/format_euro_24hr_ymd.js
|
1139
1173
|
- vendor/assets/javascripts/calendar_date_select/format_finnish.js
|
1174
|
+
- vendor/assets/javascripts/calendar_date_select/format_french.js
|
1140
1175
|
- vendor/assets/javascripts/calendar_date_select/format_hyphen_ampm.js
|
1141
1176
|
- vendor/assets/javascripts/calendar_date_select/format_iso_date.js
|
1142
1177
|
- vendor/assets/javascripts/calendar_date_select/format_italian.js
|
@@ -1181,15 +1216,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1181
1216
|
- - ! '>='
|
1182
1217
|
- !ruby/object:Gem::Version
|
1183
1218
|
version: '0'
|
1219
|
+
segments:
|
1220
|
+
- 0
|
1221
|
+
hash: -109531187312954119
|
1184
1222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1185
1223
|
none: false
|
1186
1224
|
requirements:
|
1187
1225
|
- - ! '>='
|
1188
1226
|
- !ruby/object:Gem::Version
|
1189
1227
|
version: '0'
|
1228
|
+
segments:
|
1229
|
+
- 0
|
1230
|
+
hash: -109531187312954119
|
1190
1231
|
requirements: []
|
1191
1232
|
rubyforge_project:
|
1192
|
-
rubygems_version: 1.8.
|
1233
|
+
rubygems_version: 1.8.8
|
1193
1234
|
signing_key:
|
1194
1235
|
specification_version: 3
|
1195
1236
|
summary: Fat Free CRM
|