e9_crm 0.1.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.
Files changed (120) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +105 -0
  4. data/README.md +31 -0
  5. data/Rakefile +2 -0
  6. data/app/controllers/e9_crm/advertising_campaigns_controller.rb +3 -0
  7. data/app/controllers/e9_crm/affiliate_campaigns_controller.rb +3 -0
  8. data/app/controllers/e9_crm/base_controller.rb +5 -0
  9. data/app/controllers/e9_crm/campaign_groups_controller.rb +3 -0
  10. data/app/controllers/e9_crm/campaigns_controller.rb +4 -0
  11. data/app/controllers/e9_crm/companies_controller.rb +3 -0
  12. data/app/controllers/e9_crm/contact_emails_controller.rb +38 -0
  13. data/app/controllers/e9_crm/contact_merges_controller.rb +26 -0
  14. data/app/controllers/e9_crm/contacts_controller.rb +46 -0
  15. data/app/controllers/e9_crm/dated_costs_controller.rb +4 -0
  16. data/app/controllers/e9_crm/deals_controller.rb +19 -0
  17. data/app/controllers/e9_crm/email_campaigns_controller.rb +3 -0
  18. data/app/controllers/e9_crm/email_templates.controller.rb +3 -0
  19. data/app/controllers/e9_crm/menu_options_controller.rb +26 -0
  20. data/app/controllers/e9_crm/offers_controller.rb +3 -0
  21. data/app/controllers/e9_crm/page_views_controller.rb +20 -0
  22. data/app/controllers/e9_crm/record_attributes_controller.rb +3 -0
  23. data/app/controllers/e9_crm/reports_controller.rb +2 -0
  24. data/app/controllers/e9_crm/resources_controller.rb +43 -0
  25. data/app/controllers/e9_crm/sales_campaigns_controller.rb +3 -0
  26. data/app/helpers/e9_crm/base_helper.rb +77 -0
  27. data/app/helpers/e9_crm/campaigns_helper.rb +14 -0
  28. data/app/helpers/e9_crm/contact_merges_helper.rb +17 -0
  29. data/app/helpers/e9_crm/contacts_helper.rb +27 -0
  30. data/app/helpers/e9_crm/deals_helper.rb +15 -0
  31. data/app/helpers/e9_crm/menu_options_helper.rb +11 -0
  32. data/app/helpers/e9_crm/page_views_helper.rb +2 -0
  33. data/app/models/address_attribute.rb +4 -0
  34. data/app/models/advertising_campaign.rb +15 -0
  35. data/app/models/affiliate.rb +4 -0
  36. data/app/models/affiliate_campaign.rb +15 -0
  37. data/app/models/campaign.rb +34 -0
  38. data/app/models/campaign_group.rb +5 -0
  39. data/app/models/company.rb +4 -0
  40. data/app/models/contact.rb +258 -0
  41. data/app/models/contact_email.rb +49 -0
  42. data/app/models/dated_cost.rb +9 -0
  43. data/app/models/deal.rb +83 -0
  44. data/app/models/email_campaign.rb +13 -0
  45. data/app/models/email_template.rb +7 -0
  46. data/app/models/instant_messaging_handle_attribute.rb +4 -0
  47. data/app/models/menu_option.rb +33 -0
  48. data/app/models/offer.rb +50 -0
  49. data/app/models/page_view.rb +80 -0
  50. data/app/models/phone_number_attribute.rb +4 -0
  51. data/app/models/record_attribute.rb +41 -0
  52. data/app/models/sales_campaign.rb +15 -0
  53. data/app/models/sales_person.rb +4 -0
  54. data/app/models/tracking_cookie.rb +61 -0
  55. data/app/models/website_attribute.rb +4 -0
  56. data/app/observers/deal_observer.rb +11 -0
  57. data/app/uploaders/file_uploader.rb +34 -0
  58. data/app/views/e9_crm/campaigns/_form_inner.html.haml +5 -0
  59. data/app/views/e9_crm/contact_emails/_form.html.haml +7 -0
  60. data/app/views/e9_crm/contact_emails/_form_inner.html.haml +11 -0
  61. data/app/views/e9_crm/contact_emails/destroy.js.erb +3 -0
  62. data/app/views/e9_crm/contact_emails/send_email.js.erb +1 -0
  63. data/app/views/e9_crm/contact_merges/_field.html.haml +10 -0
  64. data/app/views/e9_crm/contact_merges/_form.html.haml +10 -0
  65. data/app/views/e9_crm/contact_merges/new.html.haml +2 -0
  66. data/app/views/e9_crm/contacts/_details.html.haml +22 -0
  67. data/app/views/e9_crm/contacts/_form_inner.html.haml +51 -0
  68. data/app/views/e9_crm/contacts/_header.html.haml +19 -0
  69. data/app/views/e9_crm/contacts/_tag_table.html.haml +15 -0
  70. data/app/views/e9_crm/contacts/index.html.haml +13 -0
  71. data/app/views/e9_crm/contacts/index.js.erb +5 -0
  72. data/app/views/e9_crm/contacts/merge.html.haml +1 -0
  73. data/app/views/e9_crm/contacts/templates.js.erb +1 -0
  74. data/app/views/e9_crm/deals/_form_inner.html.haml +5 -0
  75. data/app/views/e9_crm/deals/_header.html.haml +0 -0
  76. data/app/views/e9_crm/deals/leads.html.haml +13 -0
  77. data/app/views/e9_crm/email_templates/_form_inner.html.haml +9 -0
  78. data/app/views/e9_crm/menu_options/_form_inner.html.haml +6 -0
  79. data/app/views/e9_crm/menu_options/_header.html.haml +8 -0
  80. data/app/views/e9_crm/offers/_form.html.haml +7 -0
  81. data/app/views/e9_crm/offers/_form_inner.html.haml +42 -0
  82. data/app/views/e9_crm/offers/_form_inner.html.haml.bak +43 -0
  83. data/app/views/e9_crm/page_views/_table.html.haml +25 -0
  84. data/app/views/e9_crm/record_attributes/_address_attribute.html.haml +5 -0
  85. data/app/views/e9_crm/record_attributes/_instant_messaging_handle_attribute.html.haml +5 -0
  86. data/app/views/e9_crm/record_attributes/_phone_number_attribute.html.haml +5 -0
  87. data/app/views/e9_crm/record_attributes/_record_attribute.html.haml +10 -0
  88. data/app/views/e9_crm/record_attributes/_templates.js.erb +12 -0
  89. data/app/views/e9_crm/record_attributes/_user.html.haml +23 -0
  90. data/app/views/e9_crm/record_attributes/_website_attribute.html.haml +5 -0
  91. data/app/views/e9_crm/resources/_footer.html.haml +1 -0
  92. data/app/views/e9_crm/resources/_form.html.haml +7 -0
  93. data/app/views/e9_crm/resources/_form_inner.html.haml +5 -0
  94. data/app/views/e9_crm/resources/_header.html.haml +0 -0
  95. data/app/views/e9_crm/resources/_table.html.haml +21 -0
  96. data/app/views/e9_crm/resources/create.js.erb +6 -0
  97. data/app/views/e9_crm/resources/destroy.js.erb +3 -0
  98. data/app/views/e9_crm/resources/edit.html.haml +2 -0
  99. data/app/views/e9_crm/resources/index.html.haml +13 -0
  100. data/app/views/e9_crm/resources/index.js.erb +1 -0
  101. data/app/views/e9_crm/resources/new.html.haml +2 -0
  102. data/app/views/e9_crm/resources/show.html.haml +2 -0
  103. data/app/views/e9_crm/resources/update.js.erb +5 -0
  104. data/config/initializers/inflections.rb +3 -0
  105. data/config/locales/e9.en.yml +28 -0
  106. data/config/locales/en.yml +63 -0
  107. data/config/routes.rb +61 -0
  108. data/e9_crm.gemspec +29 -0
  109. data/lib/e9_crm/model.rb +63 -0
  110. data/lib/e9_crm/rails_extensions.rb +98 -0
  111. data/lib/e9_crm/tracking_controller.rb +78 -0
  112. data/lib/e9_crm/version.rb +3 -0
  113. data/lib/e9_crm.rb +59 -0
  114. data/lib/generators/e9_crm/install_generator.rb +32 -0
  115. data/lib/generators/e9_crm/templates/create_e9_crm_tables.rb +107 -0
  116. data/lib/generators/e9_crm/templates/initializer.rb +4 -0
  117. data/lib/generators/e9_crm/templates/javascript.js +187 -0
  118. data/test/functional/e9_crm/campaign_types_controller_test.rb +49 -0
  119. data/test/functional/home_controller_test.rb +8 -0
  120. metadata +283 -0
@@ -0,0 +1,187 @@
1
+ jQuery(function($) {
2
+ var selector_prefix = 'body.controller-e9-crm-contacts',
3
+ $selector = $(selector_prefix);
4
+
5
+ $.fn.exclusiveCheck = function() {
6
+ var selector = $(this);
7
+ return this.each(function(i) {
8
+ $(this).click(function(e) {
9
+ var clicked = this;
10
+ if (this.checked) {
11
+ selector.each(function() {
12
+ if (this != clicked) this.checked = false;
13
+ });
14
+ }
15
+ });
16
+ });
17
+ }
18
+
19
+ /*
20
+ * A function might exist for this already, but basically this stores the query variables
21
+ * in a hash when the page loads for later re-use/modification.
22
+ */
23
+ $.query = (function() {
24
+ var qs = document.location.search;
25
+
26
+ if (!qs.length) return {};
27
+
28
+ var params = {},
29
+ regex = /[?&]?([^=]+)=([^&]*)/g,
30
+ tokens, key, val;
31
+
32
+ qs = qs.split('+').join(' ');
33
+
34
+ while (tokens = regex.exec(qs)) {
35
+ key = decodeURIComponent(tokens[1]);
36
+ val = decodeURIComponent(tokens[2]);
37
+
38
+ if(/\[\]$/.test(key)) {
39
+ if (!params[key]) params[key] = [];
40
+ params[key].push(val);
41
+ } else {
42
+ params[key] = val;
43
+ }
44
+ }
45
+
46
+ return params;
47
+ })();
48
+
49
+ /*
50
+ * The status of "primary" for a User login is stored on the individual records, but must be exlcusive in
51
+ * the scope of the Contact (only one User may be primary).
52
+ *
53
+ * NOTE This function is called initially, then after adding new nested associations to the page.
54
+ */
55
+ var exclusifyEmailRadios;
56
+ (exclusifyEmailRadios = function() {
57
+ $('.nested-association input[type=radio][name$="[primary]"]', $(selector_prefix)).exclusiveCheck();
58
+ })();
59
+
60
+ /**
61
+ * Adds a new nested assocation. Depends on the nested association
62
+ * js templates being loaded.
63
+ */
64
+ $('a.add-nested-association').click(function(e) {
65
+ e.preventDefault();
66
+
67
+ var $this = $(this),
68
+ $parent = $this.closest('.nested-associations'),
69
+ template,
70
+ index;
71
+
72
+ try {
73
+ template = E9CRM.js_templates[this.getAttribute('data-association')];
74
+ } catch(e) { return }
75
+
76
+ template = template.replace(
77
+ new RegExp(E9CRM.js_templates.start_child_index, 'g'),
78
+ ++E9CRM.js_templates.current_child_index
79
+ );
80
+
81
+ $(template).appendTo($parent);
82
+
83
+ exclusifyEmailRadios();
84
+ });
85
+
86
+ /**
87
+ * Effectively destroys an added nested association, removing the container
88
+ * the association is not persisted, or hiding it and setting the _destroy
89
+ * parameter for the association if it is.
90
+ */
91
+ $('a.destroy-nested-association').live('click', function(e) {
92
+ e.preventDefault();
93
+
94
+ var $parent = $(this).closest('.nested-association').hide(),
95
+ $destro = $parent.find('input[id$=__destroy]');
96
+
97
+ if ($destro.length) {
98
+ $destro.val('1');
99
+ } else {
100
+ $parent.remove();
101
+ }
102
+ });
103
+
104
+ var filter_contacts = function(data) {
105
+ $.ajax({
106
+ dataType: 'script',
107
+ url: window.location.pathname,
108
+ data: data || $.param($.query)
109
+ });
110
+ }
111
+
112
+ $('#contact_email_form', $selector).live('submit', function(e) {
113
+ var $f = $(this);
114
+
115
+ if ($f.attr('data-count') == '0') {
116
+ alert($f.attr('data-empty'));
117
+ $f.undisable();
118
+ return false;
119
+ }
120
+ });
121
+
122
+ $.fn.undisable = function() {
123
+ $('input[type=submit]', this).removeAttr('disabled').removeClass('ui-state-hover').blur();
124
+ }
125
+
126
+ $('#contact_newsletter_form', $selector).live('submit', function(e) {
127
+ e.preventDefault();
128
+
129
+ var $f = $(this);
130
+
131
+ if (!$('select', this).children().length) {
132
+ $f.undisable();
133
+ return false;
134
+ }
135
+
136
+ if ($f.attr('data-count') == '0') {
137
+ alert($f.attr('data-empty'));
138
+ $f.undisable();
139
+ return false;
140
+ }
141
+
142
+ if (!confirm($f.attr('data-confirm'))) {
143
+ $f.undisable();
144
+ return false;
145
+ }
146
+
147
+ $f.attr('action', function(i, val) {
148
+ return val.replace(/__ID__/, $('#eid', $f).val());
149
+ });
150
+
151
+ $f.callRemote();
152
+ });
153
+
154
+ $('.tag-table', $selector).change(function(e) {
155
+ $.extend($.query, {
156
+ 'tagged[]': $.makeArray($(this).find('input[name="tagged[]"]').map(function(i, el) { return $(el).attr('checked') ? $(el).val() : null }))
157
+ });
158
+
159
+ filter_contacts();
160
+ });
161
+
162
+ $('form#contact_search_form', $(selector_prefix)).live('submit', function(e) {
163
+ e.preventDefault();
164
+
165
+ $.extend($.query, {
166
+ 'search': $(this).find('input[name=search]').val()
167
+ });
168
+
169
+ filter_contacts();
170
+ });
171
+
172
+ $('input#contact_search_clear', $(selector_prefix)).live('click', function(e) {
173
+
174
+ $(selector_prefix)
175
+ .find('form#contact_search_form input[name=search]', $selector).val('').end()
176
+ .find('.tag-table input[name="tagged[]"]', $selector).attr('checked', false)
177
+ ;
178
+
179
+ $.query = {};
180
+
181
+ filter_contacts();
182
+ });
183
+
184
+ //$('#menu_option_key_select_form select').change(function(e) {
185
+ //$(this).submit();
186
+ //});
187
+ });
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ class E9Crm::CampaignTypesControllerTest < ActionController::TestCase
4
+ setup do
5
+ @e9_crm_campaign_type = e9_crm_campaign_types(:one)
6
+ end
7
+
8
+ test "should get index" do
9
+ get :index
10
+ assert_response :success
11
+ assert_not_nil assigns(:e9_crm_campaign_types)
12
+ end
13
+
14
+ test "should get new" do
15
+ get :new
16
+ assert_response :success
17
+ end
18
+
19
+ test "should create e9_crm_campaign_type" do
20
+ assert_difference('E9Crm::CampaignType.count') do
21
+ post :create, :e9_crm_campaign_type => @e9_crm_campaign_type.attributes
22
+ end
23
+
24
+ assert_redirected_to e9_crm_campaign_type_path(assigns(:e9_crm_campaign_type))
25
+ end
26
+
27
+ test "should show e9_crm_campaign_type" do
28
+ get :show, :id => @e9_crm_campaign_type.to_param
29
+ assert_response :success
30
+ end
31
+
32
+ test "should get edit" do
33
+ get :edit, :id => @e9_crm_campaign_type.to_param
34
+ assert_response :success
35
+ end
36
+
37
+ test "should update e9_crm_campaign_type" do
38
+ put :update, :id => @e9_crm_campaign_type.to_param, :e9_crm_campaign_type => @e9_crm_campaign_type.attributes
39
+ assert_redirected_to e9_crm_campaign_type_path(assigns(:e9_crm_campaign_type))
40
+ end
41
+
42
+ test "should destroy e9_crm_campaign_type" do
43
+ assert_difference('E9Crm::CampaignType.count', -1) do
44
+ delete :destroy, :id => @e9_crm_campaign_type.to_param
45
+ end
46
+
47
+ assert_redirected_to e9_crm_campaign_types_path
48
+ end
49
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class HomeControllerTest < ActionController::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,283 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: e9_crm
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.1
6
+ platform: ruby
7
+ authors:
8
+ - Travis Cox
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-12 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: inherited_resources
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.1.2
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: has_scope
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: money
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: e9_rails
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.11
69
+ type: :runtime
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: e9_tags
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.0.11
80
+ type: :runtime
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: will_paginate
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :runtime
92
+ version_requirements: *id007
93
+ description: |
94
+ CRM Plugin for the e9 CMS
95
+ =========================
96
+
97
+ It should be noted that while this plugin is intended for use in the
98
+ e9 CMS, it does neither includes nor requires it.
99
+
100
+ To use, add as a gem and install by running:
101
+
102
+ rails g e9_crm:install
103
+
104
+ Then modify the installed initializer as per your app, including
105
+ the controller module in your desired controllers, with the final
106
+ result looking something like this:
107
+
108
+ require 'e9_crm'
109
+
110
+ User.send :include, E9Crm::Backend::ActiveRecord
111
+
112
+ Rails.configuration.after_initialize do
113
+ [
114
+ MyFirstTrackedController,
115
+ MySecondTrackedController
116
+ ].each {|c| c.send(:include, E9Crm::TrackingController) }
117
+ end
118
+
119
+ NOTE: A few assumptions are made:
120
+ ---------------------------------
121
+
122
+ 1. Your app has a "User" model
123
+ 2. Your app has a controller method #current_user to return the
124
+ currently logged in user.
125
+
126
+ email: travis@e9digital.com
127
+ executables: []
128
+
129
+ extensions: []
130
+
131
+ extra_rdoc_files: []
132
+
133
+ files:
134
+ - .gitignore
135
+ - Gemfile
136
+ - Gemfile.lock
137
+ - README.md
138
+ - Rakefile
139
+ - app/controllers/e9_crm/advertising_campaigns_controller.rb
140
+ - app/controllers/e9_crm/affiliate_campaigns_controller.rb
141
+ - app/controllers/e9_crm/base_controller.rb
142
+ - app/controllers/e9_crm/campaign_groups_controller.rb
143
+ - app/controllers/e9_crm/campaigns_controller.rb
144
+ - app/controllers/e9_crm/companies_controller.rb
145
+ - app/controllers/e9_crm/contact_emails_controller.rb
146
+ - app/controllers/e9_crm/contact_merges_controller.rb
147
+ - app/controllers/e9_crm/contacts_controller.rb
148
+ - app/controllers/e9_crm/dated_costs_controller.rb
149
+ - app/controllers/e9_crm/deals_controller.rb
150
+ - app/controllers/e9_crm/email_campaigns_controller.rb
151
+ - app/controllers/e9_crm/email_templates.controller.rb
152
+ - app/controllers/e9_crm/menu_options_controller.rb
153
+ - app/controllers/e9_crm/offers_controller.rb
154
+ - app/controllers/e9_crm/page_views_controller.rb
155
+ - app/controllers/e9_crm/record_attributes_controller.rb
156
+ - app/controllers/e9_crm/reports_controller.rb
157
+ - app/controllers/e9_crm/resources_controller.rb
158
+ - app/controllers/e9_crm/sales_campaigns_controller.rb
159
+ - app/helpers/e9_crm/base_helper.rb
160
+ - app/helpers/e9_crm/campaigns_helper.rb
161
+ - app/helpers/e9_crm/contact_merges_helper.rb
162
+ - app/helpers/e9_crm/contacts_helper.rb
163
+ - app/helpers/e9_crm/deals_helper.rb
164
+ - app/helpers/e9_crm/menu_options_helper.rb
165
+ - app/helpers/e9_crm/page_views_helper.rb
166
+ - app/models/address_attribute.rb
167
+ - app/models/advertising_campaign.rb
168
+ - app/models/affiliate.rb
169
+ - app/models/affiliate_campaign.rb
170
+ - app/models/campaign.rb
171
+ - app/models/campaign_group.rb
172
+ - app/models/company.rb
173
+ - app/models/contact.rb
174
+ - app/models/contact_email.rb
175
+ - app/models/dated_cost.rb
176
+ - app/models/deal.rb
177
+ - app/models/email_campaign.rb
178
+ - app/models/email_template.rb
179
+ - app/models/instant_messaging_handle_attribute.rb
180
+ - app/models/menu_option.rb
181
+ - app/models/offer.rb
182
+ - app/models/page_view.rb
183
+ - app/models/phone_number_attribute.rb
184
+ - app/models/record_attribute.rb
185
+ - app/models/sales_campaign.rb
186
+ - app/models/sales_person.rb
187
+ - app/models/tracking_cookie.rb
188
+ - app/models/website_attribute.rb
189
+ - app/observers/deal_observer.rb
190
+ - app/uploaders/file_uploader.rb
191
+ - app/views/e9_crm/campaigns/_form_inner.html.haml
192
+ - app/views/e9_crm/contact_emails/_form.html.haml
193
+ - app/views/e9_crm/contact_emails/_form_inner.html.haml
194
+ - app/views/e9_crm/contact_emails/destroy.js.erb
195
+ - app/views/e9_crm/contact_emails/send_email.js.erb
196
+ - app/views/e9_crm/contact_merges/_field.html.haml
197
+ - app/views/e9_crm/contact_merges/_form.html.haml
198
+ - app/views/e9_crm/contact_merges/new.html.haml
199
+ - app/views/e9_crm/contacts/_details.html.haml
200
+ - app/views/e9_crm/contacts/_form_inner.html.haml
201
+ - app/views/e9_crm/contacts/_header.html.haml
202
+ - app/views/e9_crm/contacts/_tag_table.html.haml
203
+ - app/views/e9_crm/contacts/index.html.haml
204
+ - app/views/e9_crm/contacts/index.js.erb
205
+ - app/views/e9_crm/contacts/merge.html.haml
206
+ - app/views/e9_crm/contacts/templates.js.erb
207
+ - app/views/e9_crm/deals/_form_inner.html.haml
208
+ - app/views/e9_crm/deals/_header.html.haml
209
+ - app/views/e9_crm/deals/leads.html.haml
210
+ - app/views/e9_crm/email_templates/_form_inner.html.haml
211
+ - app/views/e9_crm/menu_options/_form_inner.html.haml
212
+ - app/views/e9_crm/menu_options/_header.html.haml
213
+ - app/views/e9_crm/offers/_form.html.haml
214
+ - app/views/e9_crm/offers/_form_inner.html.haml
215
+ - app/views/e9_crm/offers/_form_inner.html.haml.bak
216
+ - app/views/e9_crm/page_views/_table.html.haml
217
+ - app/views/e9_crm/record_attributes/_address_attribute.html.haml
218
+ - app/views/e9_crm/record_attributes/_instant_messaging_handle_attribute.html.haml
219
+ - app/views/e9_crm/record_attributes/_phone_number_attribute.html.haml
220
+ - app/views/e9_crm/record_attributes/_record_attribute.html.haml
221
+ - app/views/e9_crm/record_attributes/_templates.js.erb
222
+ - app/views/e9_crm/record_attributes/_user.html.haml
223
+ - app/views/e9_crm/record_attributes/_website_attribute.html.haml
224
+ - app/views/e9_crm/resources/_footer.html.haml
225
+ - app/views/e9_crm/resources/_form.html.haml
226
+ - app/views/e9_crm/resources/_form_inner.html.haml
227
+ - app/views/e9_crm/resources/_header.html.haml
228
+ - app/views/e9_crm/resources/_table.html.haml
229
+ - app/views/e9_crm/resources/create.js.erb
230
+ - app/views/e9_crm/resources/destroy.js.erb
231
+ - app/views/e9_crm/resources/edit.html.haml
232
+ - app/views/e9_crm/resources/index.html.haml
233
+ - app/views/e9_crm/resources/index.js.erb
234
+ - app/views/e9_crm/resources/new.html.haml
235
+ - app/views/e9_crm/resources/show.html.haml
236
+ - app/views/e9_crm/resources/update.js.erb
237
+ - config/initializers/inflections.rb
238
+ - config/locales/e9.en.yml
239
+ - config/locales/en.yml
240
+ - config/routes.rb
241
+ - e9_crm.gemspec
242
+ - lib/e9_crm.rb
243
+ - lib/e9_crm/model.rb
244
+ - lib/e9_crm/rails_extensions.rb
245
+ - lib/e9_crm/tracking_controller.rb
246
+ - lib/e9_crm/version.rb
247
+ - lib/generators/e9_crm/install_generator.rb
248
+ - lib/generators/e9_crm/templates/create_e9_crm_tables.rb
249
+ - lib/generators/e9_crm/templates/initializer.rb
250
+ - lib/generators/e9_crm/templates/javascript.js
251
+ - test/functional/e9_crm/campaign_types_controller_test.rb
252
+ - test/functional/home_controller_test.rb
253
+ has_rdoc: true
254
+ homepage: http://www.e9digital.com
255
+ licenses: []
256
+
257
+ post_install_message:
258
+ rdoc_options: []
259
+
260
+ require_paths:
261
+ - lib
262
+ required_ruby_version: !ruby/object:Gem::Requirement
263
+ none: false
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ version: "0"
268
+ required_rubygems_version: !ruby/object:Gem::Requirement
269
+ none: false
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: "0"
274
+ requirements: []
275
+
276
+ rubyforge_project: e9_crm
277
+ rubygems_version: 1.6.2
278
+ signing_key:
279
+ specification_version: 3
280
+ summary: CRM engine plugin for the e9 CMS
281
+ test_files:
282
+ - test/functional/e9_crm/campaign_types_controller_test.rb
283
+ - test/functional/home_controller_test.rb