versacommerce_app 1.0.24 → 1.0.25
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -0
- data/lib/generators/versacommerce_app/templates/app/controllers/application_controller.rb +6 -0
- data/lib/generators/versacommerce_app/templates/app/controllers/sessions_controller.rb +13 -0
- data/lib/generators/versacommerce_app/templates/app/views/home/index.html.erb +1 -1
- data/lib/generators/versacommerce_app/templates/app/views/layouts/application.html.erb +47 -11
- data/lib/generators/versacommerce_app/templates/config/locales/de.yml +2 -0
- data/lib/generators/versacommerce_app/templates/config/locales/en.yml +3 -0
- data/lib/generators/versacommerce_app/templates/public/javascripts/respond.min.js +6 -0
- data/lib/versacommerce_app/ensure_api_session.rb +1 -1
- data/lib/versacommerce_app/version.rb +1 -1
- metadata +17 -13
- checksums.yaml +0 -7
- data/lib/generators/versacommerce_app/templates/public/favicon.png +0 -0
- data/lib/generators/versacommerce_app/templates/public/versacommerce-114.png +0 -0
- data/lib/generators/versacommerce_app/templates/public/versacommerce-57.png +0 -0
- data/lib/generators/versacommerce_app/templates/public/versacommerce-72.png +0 -0
data/README.md
CHANGED
@@ -10,6 +10,15 @@ The generator creates a basic SessionsController for authenticating with your sh
|
|
10
10
|
|
11
11
|
*Note: It's recommended to use this on a new Rails project, so that the generator won't overwrite/delete some of your files.*
|
12
12
|
|
13
|
+
## Register your app first
|
14
|
+
|
15
|
+
To use the VersaCommerce API you will need an application registration for your store.
|
16
|
+
|
17
|
+
1. SignUp as an developer: http://app.versacommerce.de/developer/signup
|
18
|
+
2. Login to your developer account: http://app.versacommerce.de/developer
|
19
|
+
3. Register your app.
|
20
|
+
|
21
|
+
|
13
22
|
## Installation
|
14
23
|
|
15
24
|
``` sh
|
@@ -19,4 +19,10 @@ class ApplicationController < ActionController::Base
|
|
19
19
|
Rails.application.routes.default_url_options[:locale]= I18n.locale
|
20
20
|
end
|
21
21
|
|
22
|
+
# prepare variable for the views
|
23
|
+
def set_installed_shops
|
24
|
+
@installed_shops = session[:installed_shops]
|
25
|
+
end
|
26
|
+
|
27
|
+
|
22
28
|
end
|
@@ -34,6 +34,10 @@ class SessionsController < ApplicationController
|
|
34
34
|
# https://github.com/versacommerce/versacommerce_api (see sample code)
|
35
35
|
#
|
36
36
|
session[:versacommerce] = current_session
|
37
|
+
|
38
|
+
# save current shop to array in session, to allow switching between shops
|
39
|
+
save_installed_shop
|
40
|
+
|
37
41
|
flash[:success] = t('sessions.controller.finalize_ok')
|
38
42
|
redirect_to return_address
|
39
43
|
else
|
@@ -65,4 +69,13 @@ class SessionsController < ApplicationController
|
|
65
69
|
u.host.ends_with?("versacommerce.de") ? u.host : nil
|
66
70
|
end
|
67
71
|
|
72
|
+
|
73
|
+
def save_installed_shop
|
74
|
+
session[:installed_shops] ||= []
|
75
|
+
unless session[:installed_shops].include?(current_shop.url)
|
76
|
+
session[:installed_shops].push(current_shop.url)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
68
81
|
end
|
@@ -94,7 +94,7 @@
|
|
94
94
|
</thead>
|
95
95
|
<% @orders.each do |order| %>
|
96
96
|
<tr>
|
97
|
-
<td><%= link_to order.code, "
|
97
|
+
<td><%= link_to order.code, "http://#{current_shop.url}/admin/sales/orders/#{order.id}", :target => 'blank' %></td>
|
98
98
|
<td><%= "#{order.billing_address.firstname} #{order.billing_address.lastname}" %></td>
|
99
99
|
<td>
|
100
100
|
<%= order.status %>
|
@@ -5,12 +5,12 @@
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
6
|
<meta name="description" content="">
|
7
7
|
<meta name="author" content="">
|
8
|
-
<link rel="shortcut icon" href="
|
9
|
-
<link rel="apple-touch-icon" href="
|
10
|
-
<link rel="apple-touch-icon" sizes="72x72" href="
|
11
|
-
<link rel="apple-touch-icon" sizes="114x114" href="
|
8
|
+
<link rel="shortcut icon" href="<%= asset_path("favicon.png") %>">
|
9
|
+
<link rel="apple-touch-icon" href="<%= asset_path("versacommerce-57.png") %>">
|
10
|
+
<link rel="apple-touch-icon" sizes="72x72" href="<%= asset_path("versacommerce-72.png") %>">
|
11
|
+
<link rel="apple-touch-icon" sizes="114x114" href="<%= asset_path("versacommerce-114.png") %>">
|
12
12
|
|
13
|
-
<title
|
13
|
+
<title><%= t(:app_title, default: "VersaCommerce Example App") %></title>
|
14
14
|
|
15
15
|
<!-- Bootstrap core CSS -->
|
16
16
|
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
|
@@ -63,12 +63,17 @@
|
|
63
63
|
code {
|
64
64
|
font-size: 80%;
|
65
65
|
}
|
66
|
+
|
67
|
+
.dropdown-menu>li>a.switch-shop-current {
|
68
|
+
font-weight: bold;
|
69
|
+
cursor: default;
|
70
|
+
}
|
66
71
|
</style>
|
67
72
|
|
68
73
|
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
69
74
|
<!--[if lt IE 9]>
|
70
|
-
|
71
|
-
|
75
|
+
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
76
|
+
<script src="/respond.min.js"></script>
|
72
77
|
<![endif]-->
|
73
78
|
<%= csrf_meta_tags %>
|
74
79
|
</head>
|
@@ -86,7 +91,7 @@
|
|
86
91
|
<span class="icon-bar"></span>
|
87
92
|
<span class="icon-bar"></span>
|
88
93
|
</button>
|
89
|
-
<%= link_to
|
94
|
+
<%= link_to t(:app_title, default: "VersaCommerce Example App"), "/", class: "navbar-brand" %>
|
90
95
|
</div>
|
91
96
|
<% if current_shop %>
|
92
97
|
<div class="collapse navbar-collapse">
|
@@ -96,13 +101,30 @@
|
|
96
101
|
<li class="dropdown">
|
97
102
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= current_shop.url %> <b class="caret"></b></a>
|
98
103
|
<ul class="dropdown-menu">
|
99
|
-
<li><%= link_to raw('<i class="icon-home"></i> Shop'), "http
|
100
|
-
<li><%= link_to raw('<i class="icon-cog"></i> Admin'), "http
|
104
|
+
<li><%= link_to raw('<i class="icon-home"></i> Shop'), "http://#{current_shop.url}", :target => 'blank' %></li>
|
105
|
+
<li><%= link_to raw('<i class="icon-cog"></i> Admin'), "http://#{current_shop.url}/admin", :target => 'blank' %></li>
|
101
106
|
<li class="divider"></li>
|
102
107
|
<li><%= link_to raw('<i class="icon-off"></i> Logout'), logout_path, :method => :delete %></li>
|
103
108
|
</ul>
|
104
109
|
</li>
|
105
110
|
</ul>
|
111
|
+
|
112
|
+
<!-- switch between shops, change event handled by js -->
|
113
|
+
<%- unless @installed_shops.blank? %>
|
114
|
+
<ul class="nav navbar-nav pull-right">
|
115
|
+
<li class="dropdown">
|
116
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= t('sessions.views.switch_shop') %> <b class="caret"></b></a>
|
117
|
+
<ul class="dropdown-menu">
|
118
|
+
<%- @installed_shops.each do |shop| %>
|
119
|
+
<li><%= link_to shop.split('.').first.titleize, 'javascript:void(0);', class: (current_shop.url == shop ? 'switch-shop-current' : 'switch-shop'), rel: (current_shop.url == shop ? nil : shop)%></li>
|
120
|
+
<%- end %>
|
121
|
+
<li><%= link_to t('layout.add_new_shop'), login_path %></li>
|
122
|
+
</ul>
|
123
|
+
</li>
|
124
|
+
</ul>
|
125
|
+
<%- end %>
|
126
|
+
<!-- end of shops switch -->
|
127
|
+
|
106
128
|
</div><!--/.nav-collapse -->
|
107
129
|
<% end %>
|
108
130
|
</div>
|
@@ -113,17 +135,31 @@
|
|
113
135
|
<% flash.each do |type, message| %>
|
114
136
|
<div class="alert alert-<%= type %>"><%= message %></div>
|
115
137
|
<% end %>
|
138
|
+
|
116
139
|
<%= yield %>
|
117
140
|
</div>
|
118
141
|
</div>
|
119
142
|
|
120
143
|
<div id="footer">
|
121
144
|
<div class="container">
|
122
|
-
<p class="text-muted credit"
|
145
|
+
<p class="text-muted credit"><%= t(:app_title, default: "VersaCommerce Example App") %>. <%= t(:created_by_html, link: link_to("versacommerce.de", "http://www.versacommerce.de", target: "_blank")) %></p>
|
123
146
|
</div>
|
124
147
|
</div>
|
125
148
|
|
126
149
|
<%= javascript_include_tag 'application' %>
|
127
150
|
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
|
151
|
+
|
152
|
+
<script type="text/javascript">
|
153
|
+
$(function() {
|
154
|
+
return $('a.switch-shop').on('click', function(e) {
|
155
|
+
var shop_url;
|
156
|
+
e.preventDefault();
|
157
|
+
shop_url = $(e.target).prop('rel');
|
158
|
+
if (shop_url) {
|
159
|
+
return window.location = '/login/?shop=' + shop_name;
|
160
|
+
}
|
161
|
+
});
|
162
|
+
});
|
163
|
+
</script>
|
128
164
|
</body>
|
129
165
|
</html>
|
@@ -20,8 +20,11 @@
|
|
20
20
|
# available at http://guides.rubyonrails.org/i18n.html.
|
21
21
|
|
22
22
|
en:
|
23
|
+
app_title: "VersaCommerce Example App"
|
24
|
+
created_by_html: "Created by %{link}"
|
23
25
|
sessions:
|
24
26
|
views:
|
27
|
+
switch_shop: 'Switch shop'
|
25
28
|
new:
|
26
29
|
title: "Register this app with your shop."
|
27
30
|
subtitle: "This app requires you to login to start using it."
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/*! Respond.js v1.4.2: min/max-width media query polyfill
|
2
|
+
* Copyright 2013 Scott Jehl
|
3
|
+
* Licensed under MIT
|
4
|
+
* http://j.mp/respondjs */
|
5
|
+
|
6
|
+
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
|
metadata
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: versacommerce_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.25
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- VersaCommerce
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rails
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '3.1'
|
20
22
|
- - <
|
@@ -23,8 +25,9 @@ dependencies:
|
|
23
25
|
type: :runtime
|
24
26
|
prerelease: false
|
25
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
26
29
|
requirements:
|
27
|
-
- - '>='
|
30
|
+
- - ! '>='
|
28
31
|
- !ruby/object:Gem::Version
|
29
32
|
version: '3.1'
|
30
33
|
- - <
|
@@ -33,6 +36,7 @@ dependencies:
|
|
33
36
|
- !ruby/object:Gem::Dependency
|
34
37
|
name: versacommerce_api
|
35
38
|
requirement: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
41
|
- - ~>
|
38
42
|
- !ruby/object:Gem::Version
|
@@ -40,6 +44,7 @@ dependencies:
|
|
40
44
|
type: :runtime
|
41
45
|
prerelease: false
|
42
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
43
48
|
requirements:
|
44
49
|
- - ~>
|
45
50
|
- !ruby/object:Gem::Version
|
@@ -82,10 +87,7 @@ files:
|
|
82
87
|
- lib/generators/versacommerce_app/templates/public/404.html
|
83
88
|
- lib/generators/versacommerce_app/templates/public/422.html
|
84
89
|
- lib/generators/versacommerce_app/templates/public/500.html
|
85
|
-
- lib/generators/versacommerce_app/templates/public/
|
86
|
-
- lib/generators/versacommerce_app/templates/public/versacommerce-114.png
|
87
|
-
- lib/generators/versacommerce_app/templates/public/versacommerce-57.png
|
88
|
-
- lib/generators/versacommerce_app/templates/public/versacommerce-72.png
|
90
|
+
- lib/generators/versacommerce_app/templates/public/javascripts/respond.min.js
|
89
91
|
- lib/generators/versacommerce_app/versacommerce_app_generator.rb
|
90
92
|
- lib/versacommerce_app.rb
|
91
93
|
- lib/versacommerce_app/configuration.rb
|
@@ -95,25 +97,27 @@ files:
|
|
95
97
|
- versacommerce_app.gemspec
|
96
98
|
homepage: http://www.versacommerce.de
|
97
99
|
licenses: []
|
98
|
-
metadata: {}
|
99
100
|
post_install_message:
|
100
101
|
rdoc_options: []
|
101
102
|
require_paths:
|
102
103
|
- lib
|
103
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
104
106
|
requirements:
|
105
|
-
- - '>='
|
107
|
+
- - ! '>='
|
106
108
|
- !ruby/object:Gem::Version
|
107
109
|
version: '0'
|
108
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
109
112
|
requirements:
|
110
|
-
- - '>='
|
113
|
+
- - ! '>='
|
111
114
|
- !ruby/object:Gem::Version
|
112
115
|
version: '0'
|
113
116
|
requirements: []
|
114
117
|
rubyforge_project:
|
115
|
-
rubygems_version:
|
118
|
+
rubygems_version: 1.8.25
|
116
119
|
signing_key:
|
117
|
-
specification_version:
|
120
|
+
specification_version: 3
|
118
121
|
summary: This gem is used to get quickly started with the VersaCommerce API
|
119
122
|
test_files: []
|
123
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 62705fc9128b5e4d629987e1b5eeede07edf66fd
|
4
|
-
data.tar.gz: 6ac10203db08b806ddba31cfe8580a22a8a447cf
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 3731e607a25d4881d3e10e82b629d9819c4aa89b0cfa5c3f9038152f0c0b019d1889db51f98715021629a4ede70d0e42756c0c84e0a7e929f0467371600e0a03
|
7
|
-
data.tar.gz: b19646e51f33f7d4b71acbb17c233475b9f36012a769088b6617e0a47e51619d3d32bfa8af93da44cbc52e95cc4f9f6a1dd6e8a4efbecd28847bcd3c4117ee88
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|