spree_multi_share 1.3.1 → 1.3.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE +26 -0
  6. data/README.md +4 -0
  7. data/Rakefile +15 -0
  8. data/Versionfile +11 -0
  9. data/app/assets/images/spree/aol_logo.jpg +0 -0
  10. data/app/assets/images/spree/cs_logo.gif +0 -0
  11. data/app/assets/images/spree/cs_signup.png +0 -0
  12. data/app/assets/images/spree/gmail_logo.jpg +0 -0
  13. data/app/assets/images/spree/msn_logo.jpg +0 -0
  14. data/app/assets/images/spree/osx_logo.jpg +0 -0
  15. data/app/assets/images/spree/outlook_logo.png +0 -0
  16. data/app/assets/images/spree/windows_logo.png +0 -0
  17. data/app/assets/javascripts/admin/spree_multi_share.js +1 -0
  18. data/app/assets/javascripts/spree/cloud_sender.js +2 -0
  19. data/app/assets/javascripts/store/spree_multi_share.js +1 -0
  20. data/app/assets/stylesheets/admin/spree_multi_share.css +3 -0
  21. data/app/assets/stylesheets/spree/cloud_sender.css +4 -0
  22. data/app/assets/stylesheets/store/spree_multi_share.css +3 -0
  23. data/app/controllers/spree/admin/cloudsponge_settings_controller.rb +15 -0
  24. data/app/controllers/spree/cloud_sender_controller.rb +175 -0
  25. data/app/helpers/spree/cloud_sender_helper.rb +2 -0
  26. data/app/mailers/spree/cloud_mailer.rb +21 -0
  27. data/app/models/spree/cloudsponge_configuration.rb +5 -0
  28. data/app/models/spree/mail_to_cloud.rb +42 -0
  29. data/app/overrides/add_cloudsponge_settings_to_admin_configurations_menu.rb +5 -0
  30. data/app/overrides/add_email_to_cloud_link_to_products.rb +7 -0
  31. data/app/views/spree/admin/cloudsponge_settings/edit.html.erb +39 -0
  32. data/app/views/spree/cloud_mailer/mail_to_cloud.text.erb +3 -0
  33. data/app/views/spree/cloud_sender/importAOL.html.erb +56 -0
  34. data/app/views/spree/cloud_sender/importCheck.html.erb +1 -0
  35. data/app/views/spree/cloud_sender/importContacts.html.erb +104 -0
  36. data/app/views/spree/cloud_sender/importGmail.html.erb +62 -0
  37. data/app/views/spree/cloud_sender/importOSX.html.erb +95 -0
  38. data/app/views/spree/cloud_sender/importOutlook.html.erb +95 -0
  39. data/app/views/spree/cloud_sender/send_mail.html.erb +150 -0
  40. data/app/views/spree/products/_mail_to_cloud.text.erb +14 -0
  41. data/config/locales/en.yml +18 -0
  42. data/config/routes.rb +18 -0
  43. data/db/migrate/20130125181027_create_spree_mail_to_clouds.rb +8 -0
  44. data/lib/generators/spree_multi_share/install/install_generator.rb +29 -0
  45. data/lib/spree_multi_share/engine.rb +29 -0
  46. data/lib/spree_multi_share.rb +2 -0
  47. data/script/rails +7 -0
  48. data/spec/controllers/spree/cloud_sender_controller_spec.rb +5 -0
  49. data/spec/helpers/spree/cloud_sender_helper_spec.rb +15 -0
  50. data/spec/mailers/spree/cloud_mailer_spec.rb +5 -0
  51. data/spec/models/spree/mail_to_cloud_spec.rb +5 -0
  52. data/spec/spec_helper.rb +46 -0
  53. data/spree_multi_share.gemspec +30 -0
  54. metadata +61 -4
@@ -0,0 +1,62 @@
1
+ <div id="waitingDiv"><b>Loading Your Address Book...</b><br/><i>(Larger contact lists may take longer to load)</i></div>
2
+ <div id="contentDiv">
3
+ <br/>
4
+ If you have popups disabled you will need to enable them for the authorization window to appear..<br/>
5
+ If you do not see the authorization popup, click <a target='_blank' href='<%= @authURL %>'><b>here</b></a> to open it.<br/>
6
+ <br/>
7
+ <input type="button" value="Cancel" onclick="closeWindow()">
8
+ </div>
9
+
10
+
11
+ <script>
12
+ function authPopup(){
13
+ window.open('<%= @authURL %>', '', 'width=500,height=400');
14
+ }
15
+ authPopup();
16
+
17
+ jQuery("#importText").html("<b>Waiting for Authorization...</b><br><small><i>powered by</i> <a target='new' href='http://www.cloudsponge.com'>Cloudsponge</a></small>");
18
+ </script>
19
+
20
+ <script>
21
+ var i = 0;
22
+ var authReceived = false;
23
+ var intervalID = setInterval(checkAuth, 1000);
24
+
25
+ function checkAuth(){
26
+ i = i + 1;
27
+ tempString = "Loading Your Address Book"
28
+ for (j=0; j<(i%6); j++)
29
+ tempString = tempString + ".";
30
+ jQuery("#waitingDiv").html("<b>" + tempString + "</b><br/><i>(Larger contact lists may take longer to load)</i>");
31
+
32
+ jQuery.ajax("/importCheck/<%= @importID %>", {
33
+ complete:function(jqXHR, textStatus) {
34
+ if (jqXHR.responseText == "true")
35
+ authReceived = true;
36
+ }
37
+ })
38
+
39
+ if (authReceived){
40
+ clearInterval(intervalID);
41
+ jQuery("#waitingDiv").html("<b>Authorization Received!</b>");
42
+ jQuery("#importText").html("<b>Loading Contacts. Please wait...</b>");
43
+ jQuery.ajax("/importContacts/<%= @importID %>?service=<%= params[:service] %><% if !(params[:new_client_waiting_list_id].nil?) %>&new_client_waiting_list_id=<%= params[:new_client_waiting_list_id] %><% end %>", {
44
+ complete:function(jqXHR, textStatus) {
45
+ document.getElementById("waitingDiv").style.display = 'none';
46
+ jQuery("#contentDiv").html(jqXHR.responseText);
47
+ }
48
+ })
49
+ }
50
+ }
51
+ </script>
52
+
53
+ <script>
54
+ function closeWindow(){
55
+ document.getElementById("importGMAILLogo").style.display = 'none';
56
+ document.getElementById("importWINDOWSLIVELogo").style.display = 'none';
57
+ document.getElementById("importText").style.display = 'none';
58
+ document.getElementById("importDiv").style.display = 'none';
59
+ document.getElementById("addressSelectionDiv").style.display = 'block';
60
+ clearInterval(intervalID);
61
+ }
62
+ </script>
@@ -0,0 +1,95 @@
1
+ <div id="waitingDiv"><b>Loading Your Address Book...</b><br/><i>(Larger contact lists may take longer to load)</i></div>
2
+ <div id="contentDiv">
3
+ <br/>
4
+ <!--[if !IE]> Firefox and others will use outer object -->
5
+ <object classid="java:ContactsApplet"
6
+ type="application/x-java-applet"
7
+ archive="<%= @authURL %>"
8
+ height="1"
9
+ width="1">
10
+ <!-- Konqueror browser needs the following param -->
11
+ <param name="archive" value="<%= @authURL %>" />
12
+ <param name="cookieValue" value="document.cookie"/>
13
+ <param name="importId" value="<%= @importID %>"/>
14
+ <param name="MAYSCRIPT" value="true">
15
+ <!--<![endif]-->
16
+
17
+ <!-- MSIE (Microsoft Internet Explorer) will use inner object -->
18
+ <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
19
+ codebase="http://java.sun.com/update/1.6.0/jinstall-6u30-windows-i586.cab"
20
+ height="0"
21
+ width="0" >
22
+ <param name="code" value="ContactsApplet" />
23
+ <param name="archive" value="<%= @authURL %>" />
24
+ <param name="cookieValue" value="document.cookie"/>
25
+ <param name="importId" value="<%= @importID %>"/>
26
+ <param name="MAYSCRIPT" value="true">
27
+
28
+ <!-- Chrome falls through to this innermost applet -->
29
+ <applet archive="url" code="ContactsApplet" height="1" width="1" MAYSCRIPT>
30
+ <param name="cookieValue" value="document.cookie" />
31
+ <param name="importId" value="<%= @importID %>"/>
32
+ <param name="MAYSCRIPT" value="true">
33
+ <strong>
34
+ This browser does not have a Java Plug-in.<br />
35
+ <a href="http://java.sun.com/products/plugin/downloads/index.html">
36
+ Get the latest Java Plug-in here.
37
+ </a>
38
+ </strong>
39
+ </applet>
40
+ </object>
41
+
42
+ <!--[if !IE]> close outer object -->
43
+ </object>
44
+ <!--<![endif]-->
45
+ <br/>
46
+ <input type="button" value="Cancel" onclick="closeWindow()">
47
+ </div>
48
+
49
+
50
+ <script>
51
+ jQuery("#importText").html("<b>Waiting for Authorization...</b>");
52
+ </script>
53
+
54
+ <script>
55
+ var i = 0;
56
+ var authReceived = false;
57
+ var intervalID = setInterval(checkAuth, 1000);
58
+
59
+ function checkAuth(){
60
+ i = i + 1;
61
+ tempString = "Loading Your Address Book"
62
+ for (j=0; j<(i%6); j++)
63
+ tempString = tempString + ".";
64
+ jQuery("#waitingDiv").html("<b>" + tempString + "</b><br/><i>(Larger contact lists may take longer to load)</i>");
65
+
66
+ jQuery.ajax("/importCheck/<%= @importID %>", {
67
+ complete:function(jqXHR, textStatus) {
68
+ if (jqXHR.responseText == "true")
69
+ authReceived = true;
70
+ }
71
+ })
72
+
73
+ if (authReceived){
74
+ clearInterval(intervalID);
75
+ jQuery("#waitingDiv").html("<b>Authorization Received!</b>");
76
+ jQuery("#importText").html("<b>Loading Contacts. Please wait...</b>");
77
+ jQuery.ajax("/importContacts/<%= @importID %>?service=OSX<% if !(params[:new_client_waiting_list_id].nil?) %>&new_client_waiting_list_id=<%= params[:new_client_waiting_list_id] %><% end %>", {
78
+ complete:function(jqXHR, textStatus) {
79
+ document.getElementById("waitingDiv").style.display = 'none';
80
+ jQuery("#contentDiv").html(jqXHR.responseText);
81
+ }
82
+ })
83
+ }
84
+ }
85
+ </script>
86
+
87
+ <script>
88
+ function closeWindow(){
89
+ document.getElementById("importOSXLogo").style.display = 'none';
90
+ document.getElementById("importText").style.display = 'none';
91
+ document.getElementById("importDiv").style.display = 'none';
92
+ document.getElementById("addressSelectionDiv").style.display = 'block';
93
+ clearInterval(intervalID);
94
+ }
95
+ </script>
@@ -0,0 +1,95 @@
1
+ <div id="waitingDiv"><b>Loading Your Address Book...</b><br/><i>(Larger contact lists may take longer to load)</i></div>
2
+ <div id="contentDiv">
3
+ <br/>
4
+ <!--[if !IE]> Firefox and others will use outer object -->
5
+ <object classid="java:ContactsApplet"
6
+ type="application/x-java-applet"
7
+ archive="<%= @authURL %>"
8
+ height="1"
9
+ width="1">
10
+ <!-- Konqueror browser needs the following param -->
11
+ <param name="archive" value="<%= @authURL %>" />
12
+ <param name="cookieValue" value="document.cookie"/>
13
+ <param name="importId" value="<%= @importID %>"/>
14
+ <param name="MAYSCRIPT" value="true">
15
+ <!--<![endif]-->
16
+
17
+ <!-- MSIE (Microsoft Internet Explorer) will use inner object -->
18
+ <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
19
+ codebase="http://java.sun.com/update/1.6.0/jinstall-6u30-windows-i586.cab"
20
+ height="0"
21
+ width="0" >
22
+ <param name="code" value="ContactsApplet" />
23
+ <param name="archive" value="<%= @authURL %>" />
24
+ <param name="cookieValue" value="document.cookie"/>
25
+ <param name="importId" value="<%= @importID %>"/>
26
+ <param name="MAYSCRIPT" value="true">
27
+
28
+ <!-- Chrome falls through to this innermost applet -->
29
+ <applet archive="url" code="ContactsApplet" height="1" width="1" MAYSCRIPT>
30
+ <param name="cookieValue" value="document.cookie" />
31
+ <param name="importId" value="<%= @importID %>"/>
32
+ <param name="MAYSCRIPT" value="true">
33
+ <strong>
34
+ This browser does not have a Java Plug-in.<br />
35
+ <a href="http://java.sun.com/products/plugin/downloads/index.html">
36
+ Get the latest Java Plug-in here.
37
+ </a>
38
+ </strong>
39
+ </applet>
40
+ </object>
41
+
42
+ <!--[if !IE]> close outer object -->
43
+ </object>
44
+ <!--<![endif]-->
45
+ <br/>
46
+ <input type="button" value="Cancel" onclick="closeWindow()">
47
+ </div>
48
+
49
+
50
+ <script>
51
+ jQuery("#importText").html("<b>Waiting for Authorization...</b>");
52
+ </script>
53
+
54
+ <script>
55
+ var i = 0;
56
+ var authReceived = false;
57
+ var intervalID = setInterval(checkAuth, 1000);
58
+
59
+ function checkAuth(){
60
+ i = i + 1;
61
+ tempString = "Loading Your Address Book"
62
+ for (j=0; j<(i%6); j++)
63
+ tempString = tempString + ".";
64
+ jQuery("#waitingDiv").html("<b>" + tempString + "</b><br/><i>(Larger contact lists may take longer to load)</i>");
65
+
66
+ jQuery.ajax("/importCheck/<%= @importID %>", {
67
+ complete:function(jqXHR, textStatus) {
68
+ if (jqXHR.responseText == "true")
69
+ authReceived = true;
70
+ }
71
+ })
72
+
73
+ if (authReceived){
74
+ clearInterval(intervalID);
75
+ jQuery("#waitingDiv").html("<b>Authorization Received!</b>");
76
+ jQuery("#importText").html("<b>Loading Contacts. Please wait...</b>");
77
+ jQuery.ajax("/importContacts/<%= @importID %>?service=OUTLOOK<% if !(params[:new_client_waiting_list_id].nil?) %>&new_client_waiting_list_id=<%= params[:new_client_waiting_list_id] %><% end %>", {
78
+ complete:function(jqXHR, textStatus) {
79
+ document.getElementById("waitingDiv").style.display = 'none';
80
+ jQuery("#contentDiv").html(jqXHR.responseText);
81
+ }
82
+ })
83
+ }
84
+ }
85
+ </script>
86
+
87
+ <script>
88
+ function closeWindow(){
89
+ document.getElementById("importOutlookLogo").style.display = 'none';
90
+ document.getElementById("importText").style.display = 'none';
91
+ document.getElementById("importDiv").style.display = 'none';
92
+ document.getElementById("addressSelectionDiv").style.display = 'block';
93
+ clearInterval(intervalID);
94
+ }
95
+ </script>
@@ -0,0 +1,150 @@
1
+ <h1><%= t('cloudsponge.tell_about', :product => @object.name) %></h1>
2
+ <br/>
3
+ <%= form_for(@mail_to_cloud, :url => email_to_cloud_path(params[:type], @object)) do |f| -%>
4
+ <%= render 'spree/shared/error_messages', :target => @mail_to_cloud %>
5
+
6
+ <b><%= f.label(:sender_name, t('cloudsponge.sender_name')) %></b><br/><%= f.text_field(:sender_name) %><br/>
7
+ <br/>
8
+ <b><%= f.label(:sender_email, t('cloudsponge.sender_email')) %></b><br/><%= f.text_field(:sender_email) %><br/>
9
+ <br/>
10
+ <b><%= f.label(:message, t('cloudsponge.message')) %></b><br/>
11
+ <%= f.text_area(:message, :cols => 50, :rows => 4) %><br/>
12
+ <br/>
13
+ <div id="addressSelectionDiv">
14
+ <b>Look up contacts in your address book by clicking the appropriate logo:</b><br/>
15
+ <small><i>powered by</i> <a target='new' href='http://www.cloudsponge.com'>Cloudsponge</a></small><br/>
16
+ <br/>
17
+
18
+ <%= image_tag "spree/gmail_logo.jpg", :height => 30, :class => "holderWhite", :onclick => "importGmail('GMAIL')", :style => "cursor:pointer" %>
19
+ &nbsp; &nbsp; &nbsp;
20
+ <%= image_tag "spree/windows_logo.png", :height => 30, :class => "holderWhite", :onclick => "importGmail('WINDOWSLIVE')", :style => "cursor:pointer" %>
21
+ &nbsp; &nbsp; &nbsp;
22
+ <%= image_tag "spree/aol_logo.jpg", :height => 30, :class => "holderWhite", :onclick => "showAOLLogin()", :style => "cursor:pointer" %>
23
+ &nbsp; &nbsp; &nbsp;
24
+ <%= image_tag "spree/outlook_logo.png", :height => 30, :class => "holderWhite", :onclick => "importOutlook()", :style => "cursor:pointer" %>
25
+ &nbsp; &nbsp; &nbsp;
26
+ <%= image_tag "spree/osx_logo.jpg", :height => 30, :class => "holderWhite", :onclick => "importOSX()", :style => "cursor:pointer" %><br/>
27
+ <br/>
28
+ <b>OR</b> you can just type one or more emails below:<br/>
29
+ <b>Your Friend's Email:</b>&nbsp; <i>(separate multiple emails with a comma)</i><br/><%= f.text_field(:recipient_email) %><br/>
30
+ <br/>
31
+ <%= f.submit t('cloudsponge.send_message') %>
32
+ </div>
33
+ <div id="importGMAILLogo" style="display:none;float:left"><%= image_tag "spree/gmail_logo.jpg", :height => 50 %></div>
34
+ <div id="importWINDOWSLIVELogo" style="display:none;float:left"><%= image_tag "spree/windows_logo.png", :height => 50 %></div>
35
+ <div id="importOutlookLogo" style="display:none;float:left"><%= image_tag "spree/outlook_logo.png", :height => 50 %></div>
36
+ <div id="importOSXLogo" style="display:none;float:left"><%= image_tag "spree/osx_logo.jpg", :height => 50 %></div>
37
+ <div id="importAOLLogo" style="display:none;float:left"><%= image_tag "spree/aol_logo.jpg", :height => 50 %></div>
38
+ <div style="float:left;width:25px">&nbsp;</div>
39
+ <div id="importText" style="display:none;float:left;">&nbsp;</div>
40
+ <div style="clear:both">&nbsp;</div>
41
+ <div id="importDiv" style="display:none;padding:10px;width:690px;min-height:200px"></div>
42
+ <% end -%>
43
+
44
+ <script>
45
+ function importGmail(service)
46
+ {
47
+ document.getElementById("addressSelectionDiv").style.display = 'none';
48
+ document.getElementById("import" + service + "Logo").style.display = 'block';
49
+ jQuery("#importText").html("<b>Please Wait...</b>");
50
+ jQuery("#importDiv").html("");
51
+ document.getElementById("importText").style.display = 'block';
52
+ document.getElementById("importDiv").style.display = 'block';
53
+ jQuery.ajax("/importGmail/?service=" + service, {
54
+ complete:function(jqXHR, textStatus) {
55
+ jQuery("#importDiv").html(jqXHR.responseText);
56
+ }
57
+ })
58
+ }
59
+ function showAOLLogin(){
60
+ document.getElementById("addressSelectionDiv").style.display = 'none';
61
+ document.getElementById("importAOLLogo").style.display = 'block';
62
+ jQuery("#importText").html("<b>Please Enter Your Username and Password:</b><br/><small><i>powered by</i></small> <a target='new' href='http://www.cloudsponge.com'>Cloudsponge</a>");
63
+ jQuery("#importDiv").html("<b>Username</b>: <input type='text' size='20' id='username'><br/><b>Password</b>: <input type='password' size='25' id='password'><br/><br/><input type='button' value='Get Contacts' onclick='importAOL()'>&nbsp; &nbsp;<input type='button' value='Cancel' onclick='hideAOLLogin()'>");
64
+ document.getElementById("importText").style.display = 'block';
65
+ document.getElementById("importDiv").style.display = 'block';
66
+ }
67
+ function hideAOLLogin(){
68
+ document.getElementById("addressSelectionDiv").style.display = 'block';
69
+ document.getElementById("importAOLLogo").style.display = 'none';
70
+ document.getElementById("importText").style.display = 'none';
71
+ document.getElementById("importDiv").style.display = 'none';
72
+ }
73
+ function importAOL()
74
+ {
75
+ username = document.getElementById('username').value;
76
+ password = document.getElementById('password').value;
77
+ if ((username == '') || (password == ''))
78
+ {
79
+ alert('You must enter a username and password to proceed!');
80
+ }
81
+ else
82
+ {
83
+ document.getElementById("importAOLLogo").style.display = 'block';
84
+ jQuery("#importText").html("<b>Please Wait...</b>");
85
+ jQuery("#importDiv").html("");
86
+ document.getElementById("importText").style.display = 'block';
87
+ document.getElementById("importDiv").style.display = 'block';
88
+ jQuery.ajax("/importAOL/?service=AOL&username=" + username + "&password=" + password, {
89
+ complete:function(jqXHR, textStatus) {
90
+ jQuery("#importDiv").html(jqXHR.responseText);
91
+ }
92
+ });
93
+ }
94
+
95
+ }
96
+ function importOutlook()
97
+ {
98
+ document.getElementById("addressSelectionDiv").style.display = 'none';
99
+ document.getElementById("importOutlookLogo").style.display = 'block';
100
+ jQuery("#importText").html("<b>Please Wait...</b>");
101
+ jQuery("#importDiv").html("");
102
+ document.getElementById("importText").style.display = 'block';
103
+ document.getElementById("importDiv").style.display = 'block';
104
+ jQuery.ajax("/importOutlook/", {
105
+ complete:function(jqXHR, textStatus) {
106
+ jQuery("#importDiv").html(jqXHR.responseText);
107
+ }
108
+ });
109
+ }
110
+ function importOSX()
111
+ {
112
+ document.getElementById("addressSelectionDiv").style.display = 'none';
113
+ document.getElementById("importOSXLogo").style.display = 'block';
114
+ jQuery("#importText").html("<b>Please Wait...</b>");
115
+ jQuery("#importDiv").html("");
116
+ document.getElementById("importText").style.display = 'block';
117
+ document.getElementById("importDiv").style.display = 'block';
118
+ jQuery.ajax("/importOSX/", {
119
+ complete:function(jqXHR, textStatus) {
120
+ jQuery("#importDiv").html(jqXHR.responseText);
121
+ }
122
+ });
123
+ }
124
+ </script>
125
+
126
+ <!--
127
+ <%= form_for(@mail_to_cloud, :url => email_to_cloud_path(params[:type], @object)) do |f| -%>
128
+ <%= render 'spree/shared/error_messages', :target => @mail_to_cloud %>
129
+
130
+ <p>
131
+ <%= f.label(:sender_name, t('cloudsponge.sender_name')) %><br/>
132
+ <%= f.text_field(:sender_name) %>
133
+ </p>
134
+ <p>
135
+ <%= f.label(:sender_email, t('cloudsponge.sender_email')) %><br/>
136
+ <%= f.text_field(:sender_email) %>
137
+ </p>
138
+ <p>
139
+ <%= f.label(:recipient_email, t('cloudsponge.recipient_email')) %><br/>
140
+ <%= f.text_field(:recipient_email) %>
141
+ </p>
142
+ <p>
143
+ <%= f.label(:message, t('cloudsponge.message')) %><br/>
144
+ <%= f.text_area(:message) %>
145
+ </p>
146
+ <p>
147
+ <%= f.submit t('cloudsponge.send_message') %>
148
+ </p>
149
+ <% end -%>
150
+ -->
@@ -0,0 +1,14 @@
1
+ I think you would like this item:
2
+
3
+ * <%= product.name %>
4
+
5
+ <% unless mail.message.blank? -%>
6
+ <%= mail.message %>
7
+ <% end -%>
8
+
9
+ <%= mail.sender_name %>
10
+
11
+ Click the link below to view the <%= product.name %> page.
12
+ <%= spree.product_url(product) %>
13
+
14
+ For more online shopping, visit <%= spree.products_url %>
@@ -0,0 +1,18 @@
1
+ ---
2
+ en:
3
+ cloudsponge:
4
+ send_to_cloud: "Tell your friends!"
5
+ tell_about: "Tell your friends about: %{product}"
6
+ sender_name: "Your name"
7
+ sender_email: "Your email address"
8
+ recipient_email: "Your friend's email address"
9
+ recipient_emails: "Email addresses (comma separated)"
10
+ message: "Type a personal message to your friend(s), if you wish"
11
+ send_message: "Tell your friends!"
12
+ mail_sent_to: "Mail sent to %{email} "
13
+ send_to_other: "Send to more friends"
14
+ you_would_like_this: "%{sender_name} wants you to see this item at %{site}"
15
+
16
+ cloudsponge_settings: "CloudSponge Settings"
17
+ domain_key: "Domain Key"
18
+ domain_password: "Domain Password"
data/config/routes.rb ADDED
@@ -0,0 +1,18 @@
1
+ Spree::Core::Engine.routes.prepend do
2
+
3
+ match "/email_to_cloud/:type/:id" => 'cloud_sender#send_mail', :as => :email_to_cloud
4
+
5
+ match '/importGmail', :to => 'cloud_sender#importGmail'
6
+ match '/importOutlook', :to => 'cloud_sender#importOutlook'
7
+ match '/importOSX', :to => 'cloud_sender#importOSX'
8
+ match '/importAOL', :to => 'cloud_sender#importAOL'
9
+ match '/importCheck/:id', :to => 'cloud_sender#importCheck'
10
+ match '/importContacts/:id', :to => 'cloud_sender#importContacts'
11
+
12
+ match '/cloudsponge_proxy', :to => 'cloud_sender#cloudsponge_proxy'
13
+
14
+ namespace :admin do
15
+ resource :cloudsponge_settings
16
+ end
17
+
18
+ end
@@ -0,0 +1,8 @@
1
+ class CreateSpreeMailToClouds < ActiveRecord::Migration
2
+ def change
3
+ create_table :spree_mail_to_clouds do |t|
4
+
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ module SpreeMultiShare
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def add_javascripts
6
+ append_file 'app/assets/javascripts/store/all.js', "//= require store/spree_multi_share\n"
7
+ append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_multi_share\n"
8
+ end
9
+
10
+ def add_stylesheets
11
+ inject_into_file 'app/assets/stylesheets/store/all.css', " *= require store/spree_multi_share\n", :before => /\*\//, :verbose => true
12
+ inject_into_file 'app/assets/stylesheets/admin/all.css', " *= require admin/spree_multi_share\n", :before => /\*\//, :verbose => true
13
+ end
14
+
15
+ def add_migrations
16
+ run 'bundle exec rake railties:install:migrations FROM=spree_multi_share'
17
+ end
18
+
19
+ def run_migrations
20
+ res = ask 'Would you like to run the migrations now? [Y/n]'
21
+ if res == '' || res.downcase == 'y'
22
+ run 'bundle exec rake db:migrate'
23
+ else
24
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Spree::Cloudsponge
2
+ end
3
+
4
+ module SpreeCloudsponge
5
+ class Engine < Rails::Engine
6
+ require 'spree/core'
7
+ isolate_namespace Spree
8
+ engine_name 'spree_multi_share'
9
+
10
+ config.autoload_paths += %W(#{config.root}/lib)
11
+
12
+ initializer "spree.email_to_cloud.preferences", :after => "spree.environment" do |app|
13
+ Spree::Cloudsponge::Config = Spree::CloudspongeConfiguration.new
14
+ end
15
+
16
+ # use rspec for tests
17
+ config.generators do |g|
18
+ g.test_framework :rspec
19
+ end
20
+
21
+ def self.activate
22
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
23
+ Rails.configuration.cache_classes ? require(c) : load(c)
24
+ end
25
+ end
26
+
27
+ config.to_prepare &method(:activate).to_proc
28
+ end
29
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_multi_share/engine'
data/script/rails ADDED
@@ -0,0 +1,7 @@
1
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+
3
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
+ ENGINE_PATH = File.expand_path('../../lib/spree_multi_share/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::CloudSenderController do
4
+
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the Spree::CloudSenderHelper. For example:
5
+ #
6
+ # describe Spree::CloudSenderHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe Spree::CloudSenderHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Spree::CloudMailer do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::MailToCloud do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,46 @@
1
+ # Configure Rails Environment
2
+ ENV['RAILS_ENV'] = 'test'
3
+
4
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
5
+
6
+ require 'rspec/rails'
7
+ require 'ffaker'
8
+
9
+ # Requires supporting ruby files with custom matchers and macros, etc,
10
+ # in spec/support/ and its subdirectories.
11
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
12
+
13
+ # Requires factories defined in spree_core
14
+ require 'spree/core/testing_support/factories'
15
+ require 'spree/core/testing_support/controller_requests'
16
+ require 'spree/core/testing_support/authorization_helpers'
17
+ require 'spree/core/url_helpers'
18
+
19
+ RSpec.configure do |config|
20
+ config.include FactoryGirl::Syntax::Methods
21
+
22
+ # == URL Helpers
23
+ #
24
+ # Allows access to Spree's routes in specs:
25
+ #
26
+ # visit spree.admin_path
27
+ # current_path.should eql(spree.products_path)
28
+ config.include Spree::Core::UrlHelpers
29
+
30
+ # == Mock Framework
31
+ #
32
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
33
+ #
34
+ # config.mock_with :mocha
35
+ # config.mock_with :flexmock
36
+ # config.mock_with :rr
37
+ config.mock_with :rspec
38
+
39
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
40
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
41
+
42
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
43
+ # examples within a transaction, remove the following line or assign false
44
+ # instead of true.
45
+ config.use_transactional_fixtures = true
46
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.name = 'spree_multi_share'
5
+ s.version = '1.3.2'
6
+ s.summary = 'Extension for Spree that allows customers to share products for store credit.'
7
+ s.description = 'Extension for Spree that allows customers to share products with their cloud friends for store credit. Powered by CloudSponge.'
8
+ s.required_ruby_version = '>= 1.8.7'
9
+
10
+ s.author = 'Derek Sweet'
11
+ s.email = 'derek@arizonabay.com'
12
+ # s.homepage = 'http://www.spreecommerce.com'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_path = 'lib'
17
+ s.requirements << 'none'
18
+
19
+ s.add_dependency 'spree_core', '~> 1.3.1'
20
+ s.add_dependency 'httpclient'
21
+ s.add_dependency 'cloudsponge'
22
+
23
+ s.add_development_dependency 'capybara', '~> 1.1.2'
24
+ s.add_development_dependency 'coffee-rails'
25
+ s.add_development_dependency 'factory_girl', '~> 2.6.4'
26
+ s.add_development_dependency 'ffaker'
27
+ s.add_development_dependency 'rspec-rails', '~> 2.9'
28
+ s.add_development_dependency 'sass-rails'
29
+ s.add_development_dependency 'sqlite3'
30
+ end