versacommerce_app 1.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/CHANGELOG +2 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +68 -0
- data/Rakefile +13 -0
- data/install.rb +20 -0
- data/lib/generators/versacommerce_app/README +15 -0
- data/lib/generators/versacommerce_app/USAGE +21 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/favicon.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/grid-18px.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-100.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-114.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-57.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-72.png +0 -0
- data/lib/generators/versacommerce_app/templates/app/controllers/home_controller.rb +13 -0
- data/lib/generators/versacommerce_app/templates/app/controllers/sessions_controller.rb +68 -0
- data/lib/generators/versacommerce_app/templates/app/helpers/home_helper.rb +4 -0
- data/lib/generators/versacommerce_app/templates/app/helpers/sessions_helper.rb +4 -0
- data/lib/generators/versacommerce_app/templates/app/views/home/index.html.erb +161 -0
- data/lib/generators/versacommerce_app/templates/app/views/layouts/application.html.erb +129 -0
- data/lib/generators/versacommerce_app/templates/app/views/sessions/new.html.erb +15 -0
- data/lib/generators/versacommerce_app/templates/config/versacommerce_api.yml +0 -0
- data/lib/generators/versacommerce_app/templates/public/404.html +40 -0
- data/lib/generators/versacommerce_app/templates/public/422.html +40 -0
- data/lib/generators/versacommerce_app/templates/public/500.html +40 -0
- 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/lib/generators/versacommerce_app/versacommerce_app_generator.rb +65 -0
- data/lib/versacommerce_app/configuration.rb +47 -0
- data/lib/versacommerce_app/ensure_api_session.rb +33 -0
- data/lib/versacommerce_app/railtie.rb +18 -0
- data/lib/versacommerce_app/version.rb +4 -0
- data/lib/versacommerce_app.rb +18 -0
- data/versacommerce_app.gemspec +22 -0
- metadata +115 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a2a7f4d54e37905ba1e19d57a2ef5a907b988073
|
4
|
+
data.tar.gz: 4d3590c5b311ad9a259b9be92f87c521c0e120f1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4f566827b163e6736531db2f8e25fe95cb763215671485556c2def3643059d01950eda0209b95db3e6e2fcef76e23f3b831a69a336b76e5f13bd3958dffc26f8
|
7
|
+
data.tar.gz: e716a95df6f8491922f4cb57b9d69813ab925bab4c7231ad5773aa29008aed6e3b94abafad5a329d6ac17dd6b54f80938c80d345e2d6db4ed5e221268a921d74
|
data/.gitignore
ADDED
data/CHANGELOG
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2013 VersaCommerce
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# VersaCommerce App Generator
|
2
|
+
|
3
|
+
VersaCommerce application generator for Rails 3.1 and Rails 4.0
|
4
|
+
|
5
|
+
## Description
|
6
|
+
|
7
|
+
This gem makes it easy to get a Rails 3.1 or Rails 4.0 app up and running with the VersaCommerce API.
|
8
|
+
|
9
|
+
The generator creates a basic SessionsController for authenticating with your shop and a HomeController which displays basic information about your products, orders and the shop itself.
|
10
|
+
|
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
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
``` sh
|
16
|
+
# Create a new rails app
|
17
|
+
$ rails new my_versacommerce_app
|
18
|
+
$ cd my_versacommerce_app
|
19
|
+
|
20
|
+
# Add the gem versacommerce_app to your Gemfile
|
21
|
+
$ echo "gem 'versacommerce_app'" >> Gemfile
|
22
|
+
$ bundle install
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
``` sh
|
28
|
+
$ rails generate versacommerce_app your_app_api_key your_app_secret
|
29
|
+
```
|
30
|
+
|
31
|
+
### Example
|
32
|
+
|
33
|
+
``` sh
|
34
|
+
$ rails generate versacommerce_app aabbcc1122334455667788 gghhhiijjkk998877665544
|
35
|
+
```
|
36
|
+
|
37
|
+
This will create a SessionsController and HomeController with their own views.
|
38
|
+
|
39
|
+
## Configuring VersaCommerce App
|
40
|
+
|
41
|
+
It's possible to set your API key and secret key from different sources:
|
42
|
+
|
43
|
+
* Configuration in a Rails `<environment>.rb` config file
|
44
|
+
|
45
|
+
``` ruby
|
46
|
+
config.versacommerce.api_key = 'your api key'
|
47
|
+
config.versacommerce.secret = 'your secret'
|
48
|
+
```
|
49
|
+
|
50
|
+
* Configuration loaded from `<environment>` key in `versacommerce_app.yml`
|
51
|
+
|
52
|
+
``` yaml
|
53
|
+
development:
|
54
|
+
api_key: your api key
|
55
|
+
secret: your secret
|
56
|
+
```
|
57
|
+
|
58
|
+
## Next...
|
59
|
+
|
60
|
+
Start your application:
|
61
|
+
|
62
|
+
``` sh
|
63
|
+
$ rails server
|
64
|
+
```
|
65
|
+
|
66
|
+
Now visit http://localhost:3000 and register (install) your application with a VersaCommerce store. Even if Rails tells you to visit your app at http://0.0.0.0:3000, go to http://localhost:3000.
|
67
|
+
|
68
|
+
After your application has been given whatever API permissions, you're ready to start experimenting with the VersaCommerce API. Have Fun :)
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
|
+
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.libs << 'lib/versacommerce_app'
|
8
|
+
t.libs << 'test'
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
|
+
t.verbose = true
|
11
|
+
end
|
12
|
+
|
13
|
+
task :default => :test
|
data/install.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
puts
|
2
|
+
puts "VERSACOMMERCE APP GENERATOR"
|
3
|
+
puts
|
4
|
+
puts "Every app needs to:"
|
5
|
+
puts
|
6
|
+
puts "1. Registered with VersaCommerce. You will receive an APP_KEY and a shared secret."
|
7
|
+
puts "2. Registered with a Shop. This will provide a token."
|
8
|
+
puts
|
9
|
+
puts
|
10
|
+
puts "To get going, register your app with VersaCommerce:"
|
11
|
+
puts
|
12
|
+
puts " - Send an E-Mail to support@versacommerce.de, we will get in touch with you immediately."
|
13
|
+
puts
|
14
|
+
puts " * Now run the generator:"
|
15
|
+
puts
|
16
|
+
puts " $ rails generate versacommerce_app API_KEY SHARED_SECRET"
|
17
|
+
puts
|
18
|
+
puts " $ rails server"
|
19
|
+
puts
|
20
|
+
puts " * Visit http://localhost:3000 and use a shop URL to install this app."
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
What's next?
|
3
|
+
------------
|
4
|
+
|
5
|
+
Start your application with:
|
6
|
+
|
7
|
+
$ rails server
|
8
|
+
|
9
|
+
Now visit http://localhost:3000 and register (install) your application with a VersaCommerce store.
|
10
|
+
|
11
|
+
After your application has been given read or read/write API permission by the
|
12
|
+
shop, you're ready to start experimenting with the VersaCommerce API.
|
13
|
+
|
14
|
+
|
15
|
+
API Reference https://github.com/versacommerce/vc-api
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Description:
|
2
|
+
This is a generator for creating a basic VersaCommerce application to quickly get
|
3
|
+
you started. You can see some examples on how to use the VersaCommerce API.
|
4
|
+
|
5
|
+
The generator creates a basic sessions controller for authenticating with your
|
6
|
+
Shop and a controller called "home" which displays basic information
|
7
|
+
about your products, orders and articles.
|
8
|
+
|
9
|
+
Note: It's recommended to use this on a new Rails project, so that the
|
10
|
+
generator won't overwrite/delete some of your files.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
Pass your API key and then your Secret, which the sessions controller
|
14
|
+
will need to authenticate with your shop.
|
15
|
+
If you don't have an API key yet, register your application with us.
|
16
|
+
|
17
|
+
|
18
|
+
Examples:
|
19
|
+
rails/generate versacommerce_app aabbccddeee112233445566 ppooiikkkhh99887...
|
20
|
+
|
21
|
+
This will create a sessions controller and a home controller and views.
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class HomeController < ApplicationController
|
3
|
+
around_filter :ensure_current_api_session
|
4
|
+
|
5
|
+
def index
|
6
|
+
# get 10 products
|
7
|
+
@products = VersacommerceAPI::Product.find(:all, :params => {:limit => 10})
|
8
|
+
|
9
|
+
# get latest 5 orders
|
10
|
+
@orders = VersacommerceAPI::Order.find(:all, :params => {:limit => 5, :order => "created_at DESC" })
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class SessionsController < ApplicationController
|
3
|
+
|
4
|
+
def new
|
5
|
+
authenticate if params[:shop].present?
|
6
|
+
end
|
7
|
+
|
8
|
+
def create
|
9
|
+
authenticate
|
10
|
+
end
|
11
|
+
|
12
|
+
def destroy
|
13
|
+
session[:versacommerce] = nil
|
14
|
+
flash[:success] = "Successfully logged out."
|
15
|
+
redirect_to :action => 'new'
|
16
|
+
end
|
17
|
+
|
18
|
+
def finalize
|
19
|
+
current_session = VersacommerceAPI::Session.new(params[:shop], params[:t], params)
|
20
|
+
if current_session.valid?
|
21
|
+
#
|
22
|
+
# IF YOU WANT TO SAVE THE TOKEN FOR LATER USE,
|
23
|
+
#
|
24
|
+
# 1) CREATE A MODEL
|
25
|
+
# $ rails generate model user shop:string token:string
|
26
|
+
# $ rake db:create && rake db:migrate
|
27
|
+
#
|
28
|
+
# 2) SAVE THE TOKEN RIGHT HERE
|
29
|
+
# User.where(shop: params[:shop]).first_or_create do |user|
|
30
|
+
# user.token = params[:t]
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# 3) USE THE TOKEN TO CONNECT TO THIS SHOP WITHOUT USER INTERACTION
|
34
|
+
# https://github.com/versacommerce/versacommerce_api (see sample code)
|
35
|
+
#
|
36
|
+
session[:versacommerce] = current_session
|
37
|
+
flash[:success] = "Connection established to: #{params[:shop]}"
|
38
|
+
redirect_to return_address
|
39
|
+
else
|
40
|
+
flash[:warning] = "Connection failed."
|
41
|
+
redirect_to :action => 'index'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
def authenticate
|
48
|
+
if shop_name = sanitize_shop_param(params)
|
49
|
+
redirect_to VersacommerceAPI::Session.new(shop_name).create_permission_url
|
50
|
+
else
|
51
|
+
redirect_to return_address
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def return_address
|
56
|
+
session[:return_to] || root_url
|
57
|
+
end
|
58
|
+
|
59
|
+
def sanitize_shop_param(params)
|
60
|
+
return unless params[:shop].present?
|
61
|
+
name = params[:shop].to_s.strip
|
62
|
+
name += '.versacommerce.de' if !name.include?("versacommerce.de") && !name.include?(".")
|
63
|
+
name.sub('https://', '').sub('http://', '')
|
64
|
+
u = URI("http://#{name}")
|
65
|
+
u.host.ends_with?("versacommerce.de") ? u.host : nil
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
<div class="page-header">
|
2
|
+
<h1>How does this work?</h1>
|
3
|
+
</div>
|
4
|
+
<p class="lead">
|
5
|
+
This is the VersaCommerce App Template build on <a href="http://getbootstrap.com" target="_blank">Bootstrap 3</a>.
|
6
|
+
To get the ball rolling: It uses the <a href="https://github.com/versacommerce/versacommerce_api" target="_blank">VersaCommerce API GEM</a> for accessing the VersaCommerce admin REST web services. It is build with the <a href="https://github.com/versacommerce/versacommerce_app" target="_blank">versacommerce_app generator</a> which provides a <a href="https://github.com/versacommerce/versacommerce_app/blob/master/lib/versacommerce_app/ensure_api_session.rb" target="_blank">module</a> to ensure the API-Session.
|
7
|
+
</p>
|
8
|
+
|
9
|
+
|
10
|
+
<div class="panel panel-default">
|
11
|
+
<div class="panel-heading">
|
12
|
+
<h3 class="panel-title">Check out the code</h3>
|
13
|
+
</div>
|
14
|
+
<div class="panel-body">
|
15
|
+
<p>
|
16
|
+
<p><strong>Check out the</strong> <code>home_controller</code></p>
|
17
|
+
<p>The controller in this demo application fetches the newest 5 orders and products and makes them available as instance variables <code>@orders</code> and <code>@products</code></p>
|
18
|
+
</p>
|
19
|
+
<p>
|
20
|
+
<p><strong>Take a look at</strong> <code>index.html.erb</code></p>
|
21
|
+
<p>Index is the Ruby template you are currently viewing. Have a look at the markup and Ruby code to see how the VersaCommerce API is being used. It's located at <code>views/home/index.html.erb</code></p>
|
22
|
+
</p>
|
23
|
+
<p>
|
24
|
+
<p><strong>Check out the</strong> <code>sessions_controller</code></p>
|
25
|
+
<p>The sessions-controller in this demo application makes sure, you are connected to a VersaCommerce Shop. If not, it asks you to register (install) your app with a shop. After authorisation it calls the action <code>sessions#finalize</code>. If you want to store the "registration-token" <code>token</code> for unattended usage, you can place your code right here.</p>
|
26
|
+
</p>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
|
31
|
+
<div class="panel panel-default">
|
32
|
+
<div class="panel-heading">
|
33
|
+
<h3 class="panel-title">Additional Documentation</h3>
|
34
|
+
</div>
|
35
|
+
<div class="panel-body">
|
36
|
+
<p>
|
37
|
+
<%= link_to 'API documentation', 'https://github.com/versacommerce/vc-api' %><br/>
|
38
|
+
<span class="note">Learn what you can do with the VersaCommerce API</span>
|
39
|
+
</p>
|
40
|
+
<p>
|
41
|
+
<%= link_to 'Bootstrap documentation', 'http://twitter.github.com/bootstrap/' %><br/>
|
42
|
+
<span class="note">Find out what you can do with Twitter Bootstrap</span>
|
43
|
+
</p>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
|
48
|
+
<div class="panel panel-default">
|
49
|
+
<div class="panel-heading">
|
50
|
+
<h3 class="panel-title">About this Shop</h3>
|
51
|
+
</div>
|
52
|
+
<div class="panel-body">
|
53
|
+
<p>
|
54
|
+
<p><strong>Name</strong></p>
|
55
|
+
<p><%= current_shop.shop.name %></p>
|
56
|
+
</p>
|
57
|
+
<p>
|
58
|
+
<p><strong>URL</strong></p>
|
59
|
+
<p><%= current_shop.shop.url %></p>
|
60
|
+
</p>
|
61
|
+
<p>
|
62
|
+
<p><strong>Price includes tax</strong></p>
|
63
|
+
<p><%= current_shop.shop.price_includes_tax%></p>
|
64
|
+
</p>
|
65
|
+
<p>
|
66
|
+
<p><strong>Currency</strong></p>
|
67
|
+
<p><%= current_shop.shop.currency_code%></p>
|
68
|
+
</p>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
|
72
|
+
|
73
|
+
<div class="panel panel-default">
|
74
|
+
<div class="panel-heading">
|
75
|
+
<h3 class="panel-title">Recent Orders</h3>
|
76
|
+
</div>
|
77
|
+
<div class="panel-body">
|
78
|
+
|
79
|
+
<% if @orders.blank? %>
|
80
|
+
<table class="table table-striped">
|
81
|
+
<tr>
|
82
|
+
<td><em>There are no orders in your shop.</em></td>
|
83
|
+
</tr>
|
84
|
+
</table>
|
85
|
+
<% else %>
|
86
|
+
<table class="table table-striped">
|
87
|
+
<thead>
|
88
|
+
<tr>
|
89
|
+
<th>Order</th>
|
90
|
+
<th>Customer</th>
|
91
|
+
<th>Status</th>
|
92
|
+
<th>Total</th>
|
93
|
+
</tr>
|
94
|
+
</thead>
|
95
|
+
<% @orders.each do |order| %>
|
96
|
+
<tr>
|
97
|
+
<td><%= link_to order.code, "https://#{current_shop.url}/admin/orders/#{order.id}", :target => 'blank' %></td>
|
98
|
+
<td><%= "#{order.billing_address.firstname} #{order.billing_address.lastname}" %></td>
|
99
|
+
<td>
|
100
|
+
<%= order.status %>
|
101
|
+
</td>
|
102
|
+
<td><%= order.total %> <%= order.currency %></td>
|
103
|
+
</tr>
|
104
|
+
<% end %>
|
105
|
+
</table>
|
106
|
+
<% end %>
|
107
|
+
|
108
|
+
</div>
|
109
|
+
</div>
|
110
|
+
|
111
|
+
|
112
|
+
<h4>New Products</h4>
|
113
|
+
|
114
|
+
<% if @products.blank? %>
|
115
|
+
|
116
|
+
<div class="panel-group">
|
117
|
+
<div class="panel-heading">
|
118
|
+
<em>There are no products in your shop.</em>
|
119
|
+
</div>
|
120
|
+
</div>
|
121
|
+
|
122
|
+
<% else %>
|
123
|
+
|
124
|
+
<div class="accordion" id="accordion">
|
125
|
+
<div class="panel-group">
|
126
|
+
|
127
|
+
<% @products.each_with_index do |product, index| %>
|
128
|
+
<div class="panel panel-default">
|
129
|
+
|
130
|
+
<div class="panel-heading">
|
131
|
+
<h4 class="panel-title">
|
132
|
+
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapse<%= product.id %>">
|
133
|
+
<%= product.title %>
|
134
|
+
</a>
|
135
|
+
<span class="pull-right muted"><%= product.price %> <%= current_shop.shop.currency_code %></span>
|
136
|
+
</h4>
|
137
|
+
</div>
|
138
|
+
|
139
|
+
<div id="collapse<%= product.id %>" class="panel-body collapse <% if index == 0 %>in<% end %>">
|
140
|
+
<div class="panel-body">
|
141
|
+
<%= image_tag( product.featured_image.medium, class: "pull-right" ) unless product.featured_image_url.blank? %>
|
142
|
+
<p><strong>SKU:</strong> <%= product.code %></p>
|
143
|
+
<p><strong>Category:</strong> <%= product.category %></p>
|
144
|
+
<p><strong>Vendor:</strong> <%= product.vendor %></p>
|
145
|
+
<%= raw(product.description_html) %>
|
146
|
+
<br/>
|
147
|
+
<p class="muted">Created at <%= product.created_on.strftime("%Y-%m-%d") %></p>
|
148
|
+
<br/>
|
149
|
+
<%= link_to "Open this product in /admin", "http://#{current_shop.url}/admin/catalog/products/#{product.id}/edit", :target => 'blank', class: "btn btn-default" %>
|
150
|
+
</div>
|
151
|
+
</div>
|
152
|
+
|
153
|
+
</div>
|
154
|
+
<% end %>
|
155
|
+
|
156
|
+
</div>
|
157
|
+
|
158
|
+
</div>
|
159
|
+
<% end %>
|
160
|
+
|
161
|
+
<br/><br/>
|
@@ -0,0 +1,129 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta name="description" content="">
|
7
|
+
<meta name="author" content="">
|
8
|
+
<link rel="shortcut icon" href="../assets/favicon.png">
|
9
|
+
<link rel="apple-touch-icon" href="../assets/versacommerce-57.png">
|
10
|
+
<link rel="apple-touch-icon" sizes="72x72" href="../assets/versacommerce-72.png">
|
11
|
+
<link rel="apple-touch-icon" sizes="114x114" href="../assets/versacommerce-114.png">
|
12
|
+
|
13
|
+
<title>VersaCommerce Sample App</title>
|
14
|
+
|
15
|
+
<!-- Bootstrap core CSS -->
|
16
|
+
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
|
17
|
+
|
18
|
+
<%= stylesheet_link_tag 'application' %>
|
19
|
+
|
20
|
+
<style type="text/css" media="screen">
|
21
|
+
/* Sticky footer styles
|
22
|
+
-------------------------------------------------- */
|
23
|
+
|
24
|
+
html,
|
25
|
+
body {
|
26
|
+
height: 100%;
|
27
|
+
/* The html and body elements cannot have any padding or margin. */
|
28
|
+
}
|
29
|
+
|
30
|
+
/* Wrapper for page content to push down footer */
|
31
|
+
#wrap {
|
32
|
+
min-height: 100%;
|
33
|
+
height: auto !important;
|
34
|
+
height: 100%;
|
35
|
+
/* Negative indent footer by its height */
|
36
|
+
margin: 0 auto -60px;
|
37
|
+
/* Pad bottom by footer height */
|
38
|
+
padding: 0 0 60px;
|
39
|
+
}
|
40
|
+
|
41
|
+
/* Set the fixed height of the footer here */
|
42
|
+
#footer {
|
43
|
+
height: 60px;
|
44
|
+
background-color: #f5f5f5;
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
/* Custom page CSS
|
49
|
+
-------------------------------------------------- */
|
50
|
+
|
51
|
+
#wrap > .container {
|
52
|
+
padding: 60px 15px 0;
|
53
|
+
}
|
54
|
+
.container .credit {
|
55
|
+
margin: 20px 0;
|
56
|
+
}
|
57
|
+
|
58
|
+
#footer > .container {
|
59
|
+
padding-left: 15px;
|
60
|
+
padding-right: 15px;
|
61
|
+
}
|
62
|
+
|
63
|
+
code {
|
64
|
+
font-size: 80%;
|
65
|
+
}
|
66
|
+
</style>
|
67
|
+
|
68
|
+
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
69
|
+
<!--[if lt IE 9]>
|
70
|
+
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
71
|
+
<!-- <script src="../../assets/js/respond.min.js"></script> -->
|
72
|
+
<![endif]-->
|
73
|
+
<%= csrf_meta_tags %>
|
74
|
+
</head>
|
75
|
+
|
76
|
+
<body>
|
77
|
+
|
78
|
+
<!-- Wrap all page content here -->
|
79
|
+
<div id="wrap">
|
80
|
+
<!-- Fixed navbar -->
|
81
|
+
<div class="navbar navbar-default navbar-fixed-top">
|
82
|
+
<div class="container">
|
83
|
+
<div class="navbar-header">
|
84
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
85
|
+
<span class="icon-bar"></span>
|
86
|
+
<span class="icon-bar"></span>
|
87
|
+
<span class="icon-bar"></span>
|
88
|
+
</button>
|
89
|
+
<%= link_to 'VersaCommerce App', '/', :class => 'navbar-brand' %>
|
90
|
+
</div>
|
91
|
+
<% if current_shop %>
|
92
|
+
<div class="collapse navbar-collapse">
|
93
|
+
<ul class="nav navbar-nav">
|
94
|
+
<li><a href="https://github.com/versacommerce/vc-api" target="_blank">API Documentation</a></li>
|
95
|
+
<li><a href="https://github.com/versacommerce/versacommerce_api" target="_blank">API GEM</a></li>
|
96
|
+
<li class="dropdown">
|
97
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= current_shop.url %> <b class="caret"></b></a>
|
98
|
+
<ul class="dropdown-menu">
|
99
|
+
<li><%= link_to raw('<i class="icon-home"></i> Shop'), "http://"+current_shop.url, :target => 'blank' %></li>
|
100
|
+
<li><%= link_to raw('<i class="icon-cog"></i> Admin'), "http://"+current_shop.url+"/admin", :target => 'blank' %></li>
|
101
|
+
<li class="divider"></li>
|
102
|
+
<li><%= link_to raw('<i class="icon-off"></i> Logout'), logout_path, :method => :delete %></li>
|
103
|
+
</ul>
|
104
|
+
</li>
|
105
|
+
</ul>
|
106
|
+
</div><!--/.nav-collapse -->
|
107
|
+
<% end %>
|
108
|
+
</div>
|
109
|
+
</div>
|
110
|
+
|
111
|
+
<!-- Begin page content -->
|
112
|
+
<div class="container">
|
113
|
+
<% flash.each do |type, message| %>
|
114
|
+
<div class="alert alert-<%= type %>"><%= message %></div>
|
115
|
+
<% end %>
|
116
|
+
<%= yield %>
|
117
|
+
</div>
|
118
|
+
</div>
|
119
|
+
|
120
|
+
<div id="footer">
|
121
|
+
<div class="container">
|
122
|
+
<p class="text-muted credit">VersaCommerce Example App. Created by <a href="http://www.versacommerce.de" target="_blank">versacommerce.de</a></p>
|
123
|
+
</div>
|
124
|
+
</div>
|
125
|
+
|
126
|
+
<%= javascript_include_tag 'application' %>
|
127
|
+
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
|
128
|
+
</body>
|
129
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="page-header" id="login-header">
|
2
|
+
<%= image_tag 'versacommerce-100.png', class: "pull-right", style: "opacity:.55" %>
|
3
|
+
<h1>Register this app with your shop.</h1>
|
4
|
+
<h1><small>This app requires you to login to start using it.</small></h1>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<div>
|
8
|
+
<%= form_tag login_path, :class => 'form-inline' do %>
|
9
|
+
<span class="help-block">Please enter the shop url. Example: myshop.versacommerce.de</span>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= text_field_tag 'shop', nil, size: 40, :placeholder => 'myshop.versacommerce.de', :class => 'form-control' %>
|
12
|
+
</div>
|
13
|
+
<%= submit_tag 'Install / Register', :class => 'btn btn-primary btn-large' %>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
File without changes
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>404 Error: This page doesn't exist!</title>
|
5
|
+
|
6
|
+
<style>
|
7
|
+
.container { text-align:center;}
|
8
|
+
.navbar .brand { float:none;}
|
9
|
+
</style>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div class="navbar navbar-fixed-top">
|
14
|
+
<div class="navbar-inner">
|
15
|
+
<div class="container">
|
16
|
+
<a href="/" class="brand">VersaCommerce Demo App</a>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="container">
|
22
|
+
<div class="content">
|
23
|
+
<div class="page-header">
|
24
|
+
<h1>AH! 404!</h1>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<h3><i class="icon-warning-sign" style="margin-top:6px; opacity:.5;"></i> Well dang, looks like this page doesn't exist.</h3>
|
28
|
+
<p class="muted">Well, not this one, but the one you were looking for... at least there's a kitten!</p>
|
29
|
+
<br/>
|
30
|
+
<p><img src="http://gifs.gifbin.com/122009/1259928856_surprised_kitten.gif" style="border-radius:10px;"/></p>
|
31
|
+
<br/>
|
32
|
+
<p><button type="button" value ="back" onClick="window.history.back();" class='btn btn-primary'><i class="icon-chevron-left" style="opacity:.25"></i> Back to the app</button></p>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<footer>
|
36
|
+
<p>A VersaCommerce app by (company name here)</p>
|
37
|
+
</footer>
|
38
|
+
</div> <!-- /container -->
|
39
|
+
</body>
|
40
|
+
</html>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>422 Error: Your change was rejected</title>
|
5
|
+
|
6
|
+
<style>
|
7
|
+
.container { text-align:center;}
|
8
|
+
.navbar .brand { float:none;}
|
9
|
+
</style>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div class="navbar navbar-fixed-top">
|
14
|
+
<div class="navbar-inner">
|
15
|
+
<div class="container">
|
16
|
+
<a href="/" class="brand">VersaCommerce Demo App</a>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="container">
|
22
|
+
<div class="content">
|
23
|
+
|
24
|
+
<div class="page-header">
|
25
|
+
<h1>422 Error</h1>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<h3><i class="icon-warning-sign" style="margin-top:6px; opacity:.5;"></i> Sorry, the change you requested was rejected.</h3>
|
29
|
+
<p class="muted">Did you try to change something you don't have access to?</p>
|
30
|
+
|
31
|
+
<p><button type="button" value ="back" onClick="window.history.back();" class='btn btn-primary'><i class="icon-chevron-left" style="opacity:.25"></i> Back to the app</button></p>
|
32
|
+
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<footer>
|
36
|
+
<p>A VersaCommerce app by (company name here)</p>
|
37
|
+
</footer>
|
38
|
+
</div> <!-- /container -->
|
39
|
+
</body>
|
40
|
+
</html>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>500 Error: Something went horribly wrong</title>
|
5
|
+
|
6
|
+
<style>
|
7
|
+
.container { text-align:center;}
|
8
|
+
.navbar .brand { float:none;}
|
9
|
+
</style>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div class="navbar navbar-fixed-top">
|
14
|
+
<div class="navbar-inner">
|
15
|
+
<div class="container">
|
16
|
+
<a href="/" class="brand">VersaCommerce Demo App</a>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="container">
|
22
|
+
<div class="content">
|
23
|
+
|
24
|
+
<div class="page-header">
|
25
|
+
<h1>AH! 500 Error!</h1>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<h3><i class="icon-warning-sign" style="margin-top:6px; opacity:.5;"></i> We're sorry, but something went wrong.</h3>
|
29
|
+
<p class="muted">The developer of this app has been notified.</p>
|
30
|
+
|
31
|
+
<p><button type="button" value ="back" onClick="window.history.back();" class='btn btn-primary'><i class="icon-chevron-left" style="opacity:.25"></i> Back to the app</button></p>
|
32
|
+
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<footer>
|
36
|
+
<p>A VersaCommerce app by (company name here)</p>
|
37
|
+
</footer>
|
38
|
+
</div> <!-- /container -->
|
39
|
+
</body>
|
40
|
+
</html>
|
Binary file
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rails/generators'
|
3
|
+
|
4
|
+
class VersacommerceAppGenerator < Rails::Generators::Base
|
5
|
+
argument :api_key, :type => :string, :required => false
|
6
|
+
argument :secret, :type => :string, :required => false
|
7
|
+
|
8
|
+
class_option :skip_routes, :type => :boolean, :default => false, :desc => 'pass true to skip route generation'
|
9
|
+
|
10
|
+
def self.source_root
|
11
|
+
File.join(File.dirname(__FILE__), 'templates')
|
12
|
+
end
|
13
|
+
|
14
|
+
def copy_files
|
15
|
+
directory 'app'
|
16
|
+
directory 'public'
|
17
|
+
directory 'config'
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove_static_index
|
21
|
+
remove_file 'public/index.html'
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_config_variables
|
25
|
+
return if api_key.blank? || secret.blank?
|
26
|
+
|
27
|
+
append_file 'config/versacommerce_api.yml', <<-DATA
|
28
|
+
development:
|
29
|
+
api_key: #{api_key}
|
30
|
+
secret: #{secret}
|
31
|
+
|
32
|
+
test:
|
33
|
+
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
34
|
+
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
35
|
+
|
36
|
+
production:
|
37
|
+
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
38
|
+
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
39
|
+
DATA
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_routes
|
43
|
+
unless options[:skip_routes]
|
44
|
+
route_without_newline "root :to => 'home#index'"
|
45
|
+
route "end"
|
46
|
+
route_without_newline " delete '/logout' => :destroy"
|
47
|
+
route_without_newline " post '/login' => :create"
|
48
|
+
route_without_newline " get '/login' => :new"
|
49
|
+
route_without_newline " get '/finalize' => :finalize"
|
50
|
+
route_without_newline "controller :sessions do"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def show_readme
|
55
|
+
`bundle install`
|
56
|
+
readme '../README'
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def route_without_newline(routing_code)
|
62
|
+
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
63
|
+
inject_into_file 'config/routes.rb', "\n #{routing_code}", { after: sentinel, verbose: false }
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class VersacommerceApp::Configuration
|
3
|
+
VALID_KEYS = [:api_key, :secret]
|
4
|
+
attr_writer *VALID_KEYS
|
5
|
+
|
6
|
+
def initialize(params={})
|
7
|
+
self.params = default_params.merge(params)
|
8
|
+
end
|
9
|
+
|
10
|
+
VALID_KEYS.each do |meth|
|
11
|
+
define_method meth do
|
12
|
+
meth = meth.to_s
|
13
|
+
config_from_env(meth) || config_from_rails(meth) || config_from_file(meth) || ''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_accessor :params
|
20
|
+
|
21
|
+
def config_from_env(meth)
|
22
|
+
ENV["VERSACOMMERCE_#{meth.upcase}"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def config_from_rails(meth)
|
26
|
+
instance_variable_get("@#{meth}")
|
27
|
+
end
|
28
|
+
|
29
|
+
def config_from_file(meth)
|
30
|
+
@config_file ||= load_config
|
31
|
+
@config_file[Rails.env].try(:[], meth) || @config_file['common'].try(:[], meth)
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_config
|
35
|
+
File.exist?(config_filepath) ? YAML.load_file(config_filepath) : {}
|
36
|
+
end
|
37
|
+
|
38
|
+
def config_filepath
|
39
|
+
params[:config_file]
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_params
|
43
|
+
{
|
44
|
+
config_file: File.join(Rails.root, 'config', 'versacommerce_api.yml')
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module VersacommerceApp::EnsureApiSession
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
rescue_from ActiveResource::UnauthorizedAccess, :with => :close_session
|
7
|
+
end
|
8
|
+
|
9
|
+
def ensure_current_api_session
|
10
|
+
if session[:versacommerce]
|
11
|
+
begin
|
12
|
+
VersacommerceAPI::Base.activate_session(session[:versacommerce])
|
13
|
+
yield
|
14
|
+
ensure
|
15
|
+
VersacommerceAPI::Base.clear_session
|
16
|
+
end
|
17
|
+
else
|
18
|
+
session[:return_to] = request.fullpath if request.get?
|
19
|
+
redirect_to login_path(shop: params[:shop])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def current_shop
|
24
|
+
session[:versacommerce]
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def close_session
|
30
|
+
session[versacommerce] = nil
|
31
|
+
redirect_to login_path
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
class VersacommerceApp::Railtie < ::Rails::Railtie
|
5
|
+
|
6
|
+
config.before_configuration do
|
7
|
+
config.versacommerce = VersacommerceApp.configuration
|
8
|
+
end
|
9
|
+
|
10
|
+
initializer "versacommerce_app.action_controller_integration" do
|
11
|
+
ActionController::Base.send :include, VersacommerceApp::EnsureApiSession
|
12
|
+
ActionController::Base.send :helper_method, :current_shop
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "versacommerce_app.setup_session" do
|
16
|
+
VersacommerceApp.setup_session
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'versacommerce_api'
|
3
|
+
|
4
|
+
module VersacommerceApp
|
5
|
+
|
6
|
+
def self.configuration
|
7
|
+
@configuration ||= VersacommerceApp::Configuration.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.setup_session
|
11
|
+
VersacommerceAPI::Session.setup(:api_key => VersacommerceApp.configuration.api_key, :secret => VersacommerceApp.configuration.secret)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'versacommerce_app/ensure_api_session'
|
16
|
+
require 'versacommerce_app/configuration'
|
17
|
+
require 'versacommerce_app/railtie'
|
18
|
+
require 'versacommerce_app/version'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "versacommerce_app/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "versacommerce_app"
|
7
|
+
s.version = VersacommerceApp::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.author = "VersaCommerce"
|
10
|
+
s.email = ["support@versacommerce.de"]
|
11
|
+
s.homepage = "http://www.versacommerce.de"
|
12
|
+
s.summary = %q{This gem is used to get quickly started with the VersaCommerce API}
|
13
|
+
s.description = %q{This generator creates a basic sessions controller for authenticating with your Shop. Also a home controller which lets you access your shop easily.}
|
14
|
+
|
15
|
+
s.add_runtime_dependency('rails', '>= 3.1', '< 5.0')
|
16
|
+
s.add_runtime_dependency('versacommerce_api', '~> 1.0.2')
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: versacommerce_app
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.17
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- VersaCommerce
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
- - <
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.1'
|
30
|
+
- - <
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: versacommerce_api
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 1.0.2
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.0.2
|
47
|
+
description: This generator creates a basic sessions controller for authenticating
|
48
|
+
with your Shop. Also a home controller which lets you access your shop easily.
|
49
|
+
email:
|
50
|
+
- support@versacommerce.de
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- .gitignore
|
56
|
+
- CHANGELOG
|
57
|
+
- Gemfile
|
58
|
+
- LICENSE
|
59
|
+
- README.md
|
60
|
+
- Rakefile
|
61
|
+
- install.rb
|
62
|
+
- lib/generators/versacommerce_app/README
|
63
|
+
- lib/generators/versacommerce_app/USAGE
|
64
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/favicon.png
|
65
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/grid-18px.png
|
66
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-100.png
|
67
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-114.png
|
68
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-57.png
|
69
|
+
- lib/generators/versacommerce_app/templates/app/assets/images/versacommerce-72.png
|
70
|
+
- lib/generators/versacommerce_app/templates/app/controllers/home_controller.rb
|
71
|
+
- lib/generators/versacommerce_app/templates/app/controllers/sessions_controller.rb
|
72
|
+
- lib/generators/versacommerce_app/templates/app/helpers/home_helper.rb
|
73
|
+
- lib/generators/versacommerce_app/templates/app/helpers/sessions_helper.rb
|
74
|
+
- lib/generators/versacommerce_app/templates/app/views/home/index.html.erb
|
75
|
+
- lib/generators/versacommerce_app/templates/app/views/layouts/application.html.erb
|
76
|
+
- lib/generators/versacommerce_app/templates/app/views/sessions/new.html.erb
|
77
|
+
- lib/generators/versacommerce_app/templates/config/versacommerce_api.yml
|
78
|
+
- lib/generators/versacommerce_app/templates/public/404.html
|
79
|
+
- lib/generators/versacommerce_app/templates/public/422.html
|
80
|
+
- lib/generators/versacommerce_app/templates/public/500.html
|
81
|
+
- lib/generators/versacommerce_app/templates/public/favicon.png
|
82
|
+
- lib/generators/versacommerce_app/templates/public/versacommerce-114.png
|
83
|
+
- lib/generators/versacommerce_app/templates/public/versacommerce-57.png
|
84
|
+
- lib/generators/versacommerce_app/templates/public/versacommerce-72.png
|
85
|
+
- lib/generators/versacommerce_app/versacommerce_app_generator.rb
|
86
|
+
- lib/versacommerce_app.rb
|
87
|
+
- lib/versacommerce_app/configuration.rb
|
88
|
+
- lib/versacommerce_app/ensure_api_session.rb
|
89
|
+
- lib/versacommerce_app/railtie.rb
|
90
|
+
- lib/versacommerce_app/version.rb
|
91
|
+
- versacommerce_app.gemspec
|
92
|
+
homepage: http://www.versacommerce.de
|
93
|
+
licenses: []
|
94
|
+
metadata: {}
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 2.0.3
|
112
|
+
signing_key:
|
113
|
+
specification_version: 4
|
114
|
+
summary: This gem is used to get quickly started with the VersaCommerce API
|
115
|
+
test_files: []
|