spree_multi_share 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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