adyen-skinbuilder 0.2.6 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -4
- data/.travis.yml +5 -0
- data/CHANGELOG.md +22 -0
- data/Gemfile.lock +51 -7
- data/LICENSE +3 -3
- data/README.markdown +83 -24
- data/Rakefile +6 -0
- data/adyen-skinbuilder.gemspec +12 -11
- data/bin/adyen-skinbuilder +28 -3
- data/lib/adyen-skinbuilder.rb +1 -4
- data/lib/adyen-skinbuilder/helper/adyen.rb +29 -0
- data/lib/adyen-skinbuilder/helper/render.rb +32 -0
- data/lib/adyen-skinbuilder/server.rb +112 -58
- data/lib/adyen-skinbuilder/server/views/_adyen_form.html.erb +37 -0
- data/{adyen/main_content.html → lib/adyen-skinbuilder/server/views/_adyen_payment_fields.html.erb} +534 -530
- data/lib/adyen-skinbuilder/server/views/css/reset.css +306 -0
- data/lib/adyen-skinbuilder/server/views/img/icons/error.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK1.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK10.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK2.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK3.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK4.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK5.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK6.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK7.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK8.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK9.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKCANCELLED.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKPENDING.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKREFUSED.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/amex_small.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/card.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/ideal.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/mc_small.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/unknown_small.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/vias_small.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/visa.png +0 -0
- data/lib/adyen-skinbuilder/server/views/img/pm/visa_small.png +0 -0
- data/lib/adyen-skinbuilder/server/views/index.html.erb +118 -0
- data/lib/adyen-skinbuilder/server/views/js/default.js +385 -0
- data/lib/adyen-skinbuilder/server/views/layout.html.erb +33 -0
- data/lib/adyen-skinbuilder/server/views/skeleton.html +56 -0
- data/lib/adyen-skinbuilder/server/views/skin.html.erb +18 -0
- data/lib/adyen-skinbuilder/version.rb +1 -1
- data/lib/hash.rb +15 -0
- data/spec/fixtures/example.zip +0 -0
- data/spec/fixtures/skins/DV3tf95f/inc/order_data.txt +1 -0
- data/spec/fixtures/skins/JH0815/css/screen.css +262 -0
- data/spec/fixtures/skins/JH0815/skin.html.erb +13 -0
- data/spec/lib/adyen-skinbuilder/server_spec.rb +166 -38
- data/spec/spec_helper.rb +2 -2
- metadata +109 -31
- data/adyen/skeleton.html +0 -70
- data/lib/adyen-skinbuilder/launcher.rb +0 -40
- data/lib/adyen-skinbuilder/railtie.rb +0 -9
- data/lib/adyen-skinbuilder/tasks/skin.rake +0 -65
data/.gitignore
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
.bundle
|
1
|
+
pkg
|
2
|
+
.rvmrc
|
3
|
+
.adyenrc
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## Far Future??
|
4
|
+
* multiple user, assets upload, hosted system
|
5
|
+
|
6
|
+
## Todo
|
7
|
+
* beautify index page, add 'new', 'edit', 'download'
|
8
|
+
* add locale support
|
9
|
+
* add more functions to binary to get a proper CLI tool (or move to adyen-admin??)
|
10
|
+
* more helper e.g. cutom fields
|
11
|
+
* auto re-login when session timed out
|
12
|
+
|
13
|
+
## v0.3.0
|
14
|
+
* read adyen-admin credentials from cfg file
|
15
|
+
* show local / remote skins, option to sync
|
16
|
+
* add skin upload -> 'adyen-admin'
|
17
|
+
* add skin export
|
18
|
+
* gemify
|
19
|
+
* add custom skin path
|
20
|
+
* add order_data
|
21
|
+
* allow partials
|
22
|
+
* 100% function compatiable with version 0.2.0 (check raketasks)
|
data/Gemfile.lock
CHANGED
@@ -1,33 +1,76 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
adyen-skinbuilder (0.
|
5
|
-
|
6
|
-
|
4
|
+
adyen-skinbuilder (0.3.0.rc2)
|
5
|
+
adyen-admin
|
6
|
+
sinatra
|
7
|
+
sinatra-contrib
|
8
|
+
vegas
|
7
9
|
|
8
10
|
GEM
|
9
11
|
remote: http://rubygems.org/
|
10
12
|
specs:
|
13
|
+
adyen-admin (0.0.7)
|
14
|
+
mechanize
|
15
|
+
rubyzip
|
16
|
+
backports (2.5.1)
|
11
17
|
diff-lcs (1.1.3)
|
18
|
+
domain_name (0.5.3)
|
19
|
+
unf (~> 0.0.3)
|
20
|
+
eventmachine (0.12.10)
|
12
21
|
ffi (1.0.11)
|
13
22
|
guard (1.0.1)
|
14
23
|
ffi (>= 0.5.0)
|
15
24
|
thor (~> 0.14.6)
|
16
|
-
guard-rspec (0.
|
25
|
+
guard-rspec (0.7.0)
|
17
26
|
guard (>= 0.10.0)
|
27
|
+
mechanize (2.3)
|
28
|
+
domain_name (~> 0.5, >= 0.5.1)
|
29
|
+
mime-types (~> 1.17, >= 1.17.2)
|
30
|
+
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
31
|
+
net-http-persistent (~> 2.5, >= 2.5.2)
|
32
|
+
nokogiri (~> 1.4)
|
33
|
+
ntlm-http (~> 0.1, >= 0.1.1)
|
34
|
+
webrobots (~> 0.0, >= 0.0.9)
|
35
|
+
mime-types (1.18)
|
36
|
+
net-http-digest_auth (1.2)
|
37
|
+
net-http-persistent (2.6)
|
38
|
+
nokogiri (1.5.2)
|
39
|
+
ntlm-http (0.1.1)
|
18
40
|
rack (1.4.1)
|
41
|
+
rack-protection (1.2.0)
|
42
|
+
rack
|
19
43
|
rack-test (0.6.1)
|
20
44
|
rack (>= 1.0)
|
45
|
+
rake (0.9.2.2)
|
21
46
|
rspec (2.9.0)
|
22
47
|
rspec-core (~> 2.9.0)
|
23
48
|
rspec-expectations (~> 2.9.0)
|
24
49
|
rspec-mocks (~> 2.9.0)
|
25
50
|
rspec-core (2.9.0)
|
26
|
-
rspec-expectations (2.9.
|
51
|
+
rspec-expectations (2.9.1)
|
27
52
|
diff-lcs (~> 1.1.3)
|
28
53
|
rspec-mocks (2.9.0)
|
29
|
-
|
54
|
+
rubyzip (0.9.7)
|
55
|
+
sinatra (1.3.2)
|
56
|
+
rack (~> 1.3, >= 1.3.6)
|
57
|
+
rack-protection (~> 1.2)
|
58
|
+
tilt (~> 1.3, >= 1.3.3)
|
59
|
+
sinatra-contrib (1.3.1)
|
60
|
+
backports (>= 2.0)
|
61
|
+
eventmachine
|
62
|
+
rack-protection
|
63
|
+
rack-test
|
64
|
+
sinatra (~> 1.3.0)
|
65
|
+
tilt (~> 1.3)
|
30
66
|
thor (0.14.6)
|
67
|
+
tilt (1.3.3)
|
68
|
+
unf (0.0.5)
|
69
|
+
unf_ext
|
70
|
+
unf_ext (0.0.4)
|
71
|
+
vegas (0.1.11)
|
72
|
+
rack (>= 1.0.0)
|
73
|
+
webrobots (0.0.13)
|
31
74
|
|
32
75
|
PLATFORMS
|
33
76
|
ruby
|
@@ -36,4 +79,5 @@ DEPENDENCIES
|
|
36
79
|
adyen-skinbuilder!
|
37
80
|
guard-rspec
|
38
81
|
rack-test
|
39
|
-
|
82
|
+
rake
|
83
|
+
rspec
|
data/LICENSE
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
Copyright (c)
|
2
|
-
Priit Haamer
|
1
|
+
Copyright (c) 2012
|
2
|
+
Priit Haamer, Tobias Bielohlawek
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
a copy of this software and associated documentation files (the
|
@@ -18,4 +18,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
18
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
19
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
20
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
CHANGED
@@ -1,33 +1,70 @@
|
|
1
|
-
|
1
|
+
# Adyen Skinbuilder [![Build Status](https://secure.travis-ci.org/priithaamer/adyen-skinbuilder.png?branch=master)](http://travis-ci.org/priithaamer/adyen-skinbuilder)
|
2
|
+
|
3
|
+
Simple Sinatra server to make Adyen skin authoring easier. It performs the template rendering on your local machine, which is very much similar to the end result generated in Adyen. Given adyen admin credentials provided, it allows to upload and test skins with just one click.
|
2
4
|
|
3
5
|
## Install
|
4
6
|
|
5
7
|
sudo gem install adyen-skinbuilder
|
6
8
|
|
9
|
+
|
7
10
|
## Usage
|
8
11
|
|
9
|
-
|
12
|
+
Adyen Skinbuilder provides a Index page for full overview on all remote and local skins and options to up-/download etc. To load the page, start the server by providing the local path to your skin directory:
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
$ adyen-skinbuilder ~/Documents
|
15
|
+
|
16
|
+
Alternatively provide the full path to a skin which opens the browser and shows the rendered result directly.
|
17
|
+
|
18
|
+
$ adyen-skinbuilder ~/Documents/DV3tf95f
|
19
|
+
|
20
|
+
|
21
|
+
See `adyen-skinbuilder --help` for more options to run server on different port or with logging etc. Run `adyen-skinbuilder -k` to shutdown.
|
22
|
+
|
23
|
+
|
24
|
+
## Skin Strucutre
|
25
|
+
|
26
|
+
Usually Adyen requires to split up the skin page in up to four different files. But no worries, Skinbuilder does that for you. Yes, you read right: you just put all the html content in one file called `skin.html.erb` - Skinbuilder will auto split, zip and even upload the skin. Within the skin file you can make use of handy helper methods to define the adyen form and payment fields or even to render other partials.
|
27
|
+
|
28
|
+
A most minimal file would look like:
|
29
|
+
|
30
|
+
```html
|
31
|
+
<h1> exmaple skin</h1>
|
32
|
+
|
33
|
+
<% adyen_form_tag do %>
|
34
|
+
<h3>header</h3>
|
35
|
+
<%= adyen_payment_fields %>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
```
|
19
39
|
|
20
|
-
|
40
|
+
### Code Sharing
|
21
41
|
|
22
|
-
|
42
|
+
Witha large number of skins it makes sense to reuse code + styling among several skins. This gem supports several ways how to share code in between:
|
23
43
|
|
24
|
-
|
44
|
+
#### Shared Partials
|
25
45
|
|
26
|
-
|
46
|
+
Similar as in rails, Skinbuilder allows to render other files inline, e.g.:
|
27
47
|
|
28
|
-
### Base directory
|
29
48
|
|
30
|
-
|
49
|
+
```html
|
50
|
+
<h1>Exmaple Skin with partial</h1>
|
51
|
+
|
52
|
+
<%= render_partial 'header.html' %>
|
53
|
+
|
54
|
+
<% adyen_form_tag do %>
|
55
|
+
<h3>header</h3>
|
56
|
+
<%= adyen_payment_fields %>
|
57
|
+
<% end %>
|
58
|
+
|
59
|
+
```
|
60
|
+
|
61
|
+
This will load and render `header.html.erb` for your skin root on top of the form.
|
62
|
+
|
63
|
+
#### Base directory
|
64
|
+
|
65
|
+
_Deprecated since Version 0.3_
|
66
|
+
|
67
|
+
Another way is to create a `base` directory to provide fallback files that will be included in all skins without the need to duplicate them. Let's consider this example:
|
31
68
|
|
32
69
|
+- ~/Documents
|
33
70
|
+- base
|
@@ -40,21 +77,26 @@ If you have multiple skin directories, this gem supports base directory that can
|
|
40
77
|
|
41
78
|
File in specific skin directory takes precedence when building skin zip file. In this example, `cheader.txt` will be bundled from skin directory `DV3tf95f/inc` but `cfooter.txt` comes from `base/inc`.
|
42
79
|
|
43
|
-
|
80
|
+
### Order Data
|
44
81
|
|
45
82
|
Adyen let's you post order data that will be shown in shopping cart view as part of html. You can put `order_data.txt` file into `inc/` folder in the skin directory. This file will be included automatically in the same place, where adyen would put it.
|
46
83
|
|
47
|
-
##
|
84
|
+
## Interacting with remote Adyen Admin
|
48
85
|
|
49
|
-
|
86
|
+
To interact with the remote Adyen Admin interface, Skinbuilder makes use of the [adyen-admin](https://github.com/rngtng/adyen-admin) gem. This
|
87
|
+
allows to download/upload skins easily. To enable remote admin, provide the Adyen Admin credentials within the `.adyenrc` file, either in you home- or execution root directory. !!We encourage to set up a dedicated useraccount with low rights for that!!
|
50
88
|
|
51
|
-
|
89
|
+
An example `.adyenrc` file:
|
52
90
|
|
53
|
-
|
91
|
+
scope: test
|
92
|
+
accountname: <your account>
|
93
|
+
username: <your username>
|
94
|
+
password: <your password>
|
54
95
|
|
55
|
-
rake adyen:skin:build SKIN=/path/to/skin/directory TARGET=/path/to/target
|
56
96
|
|
57
|
-
|
97
|
+
Navigate to the index page `/` and hit `Sync once and you'll find the option to upload the skins. In anycase you always can download the zipped skinfile via the `compile` link. *By now, only adyen test is provided*
|
98
|
+
|
99
|
+
## More meaningful file naming
|
58
100
|
|
59
101
|
Adyen requires the name of root directory within the zip file to exactly match the skincode, e.g. `DV3tf95f`.
|
60
102
|
These skincodes are not very meaningful and hard to remember.
|
@@ -66,6 +108,23 @@ So in this example, the zip file would be called `BrandX-shop-DV3tf95f.zip`, and
|
|
66
108
|
|
67
109
|
If the skin directory does not match this pattern, the zip and root directory within the zip will both be named after the original skin directory name.
|
68
110
|
|
69
|
-
## Contributors
|
111
|
+
## Contributors
|
70
112
|
|
71
113
|
[See the list of contributiors](https://github.com/priithaamer/adyen-skinbuilder/network/members)
|
114
|
+
|
115
|
+
|
116
|
+
## Contributing
|
117
|
+
|
118
|
+
We'll check out your contribution if you:
|
119
|
+
|
120
|
+
- Provide a comprehensive suite of tests for your fork.
|
121
|
+
- Have a clear and documented rationale for your changes.
|
122
|
+
- Package these up in a pull request.
|
123
|
+
|
124
|
+
We'll do our best to help you out with any contribution issues you may have.
|
125
|
+
|
126
|
+
|
127
|
+
## License
|
128
|
+
|
129
|
+
The license is included as LICENSE in this directory.
|
130
|
+
|
data/Rakefile
CHANGED
data/adyen-skinbuilder.gemspec
CHANGED
@@ -5,21 +5,22 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = 'adyen-skinbuilder'
|
6
6
|
s.version = Adyen::Skinbuilder::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
-
s.authors = ['Priit Haamer']
|
9
|
-
s.email = ['priit@edicy.com']
|
8
|
+
s.authors = ['Priit Haamer', 'Tobias Bielohlawek']
|
9
|
+
s.email = ['priit@edicy.com', 'tobi@soundcloud.com']
|
10
10
|
s.homepage = 'http://rubygems.org/gems/adyen-skinbuilder'
|
11
|
-
s.summary = %q{Simple
|
12
|
-
s.description = %q{Provides helpful
|
11
|
+
s.summary = %q{Simple Sinatra server to make coding Adyen skins easier}
|
12
|
+
s.description = %q{Provides helpful command line tools to run sinatra server and bundle adyen skin files}
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ['lib']
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
|
19
|
+
%w(sinatra sinatra-contrib vegas adyen-admin).each do |gem|
|
20
|
+
s.add_runtime_dependency *gem.split(' ')
|
21
|
+
end
|
22
|
+
|
23
|
+
%w(rake rspec guard-rspec rack-test).each do |gem|
|
24
|
+
s.add_development_dependency *gem.split(' ')
|
25
|
+
end
|
25
26
|
end
|
data/bin/adyen-skinbuilder
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/adyen-skinbuilder/server")
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/hash")
|
5
|
+
require 'vegas'
|
5
6
|
|
6
|
-
|
7
|
+
opts = {}
|
8
|
+
|
9
|
+
|
10
|
+
if (skins = ARGV.last) && File.directory?(skins)
|
11
|
+
opts[:skins_directory] = skins
|
12
|
+
|
13
|
+
begin
|
14
|
+
skin = Adyen::Admin::Skin.new(:path => skins) #auto launch skin
|
15
|
+
opts[:launch_path] = "/#{skin.code}"
|
16
|
+
rescue ArgumentError
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
adyen_rc_file = ".adyenrc"
|
21
|
+
|
22
|
+
if !File.exists?(adyen_rc_file)
|
23
|
+
adyen_rc_file = File.expand_path("~/#{adyen_rc_file}")
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
opts[:adyen_admin_cfg] = YAML::load(::File.open(adyen_rc_file)).symbolize_keys!
|
28
|
+
rescue
|
29
|
+
end
|
30
|
+
|
31
|
+
Vegas::Runner.new(Adyen::SkinBuilder::Server, 'adyen-skinbuilder', opts)
|
data/lib/adyen-skinbuilder.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
require 'adyen-skinbuilder/server'
|
2
1
|
require 'adyen-skinbuilder/version'
|
3
|
-
require 'adyen-skinbuilder/
|
4
|
-
|
5
|
-
require 'adyen-skinbuilder/railtie' if defined?(::Rails) && ::Rails::VERSION::MAJOR >= 3
|
2
|
+
#require 'adyen-skinbuilder/server'
|
6
3
|
|
7
4
|
# TODO: skin bundle generator
|
8
5
|
# TODO: Init task to build adyen skins directory structure
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Adyen
|
2
|
+
module SkinBuilder
|
3
|
+
module Helper
|
4
|
+
module Adyen
|
5
|
+
|
6
|
+
# start the adyen form, if no block padded payment fields are auto included
|
7
|
+
def adyen_form_tag(&block)
|
8
|
+
buffer << render_partial(:adyen_form, :views => settings.views, :block => block)
|
9
|
+
end
|
10
|
+
|
11
|
+
# render the payment fields
|
12
|
+
def adyen_payment_fields(&block)
|
13
|
+
if block_given?
|
14
|
+
capture &block
|
15
|
+
else
|
16
|
+
render_partial :adyen_payment_fields, :views => settings.views
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# to be done
|
21
|
+
# def adyen_custom_field_tag
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def adyen_custom_hidden_tag
|
25
|
+
# end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Adyen
|
2
|
+
module SkinBuilder
|
3
|
+
module Helper
|
4
|
+
module Render
|
5
|
+
|
6
|
+
# the output buffer
|
7
|
+
def buffer
|
8
|
+
@_out_buf || @_buf
|
9
|
+
end
|
10
|
+
|
11
|
+
# capture rednered output to a string
|
12
|
+
def capture
|
13
|
+
pos = buffer.size
|
14
|
+
yield
|
15
|
+
buffer.slice!(pos..buffer.size)
|
16
|
+
end
|
17
|
+
|
18
|
+
# renders a file from the inc folder of the skin
|
19
|
+
def render_file(file)
|
20
|
+
file = skin_path @skin_code, "/inc/#{file}.txt"
|
21
|
+
File.read(file) if File.exists?(file)
|
22
|
+
end
|
23
|
+
|
24
|
+
# render an erb partial inline
|
25
|
+
def render_partial(file, locals = {})
|
26
|
+
views = locals.delete(:views) || skin_path(@skin_code)
|
27
|
+
erb "_#{file}.html".to_sym, :layout => false, :views => views, :locals => locals
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,77 +1,131 @@
|
|
1
|
-
require '
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'sinatra/base'
|
5
|
+
require 'adyen-skinbuilder/helper/adyen'
|
6
|
+
require 'adyen-skinbuilder/helper/render'
|
7
|
+
|
8
|
+
require 'adyen-admin'
|
2
9
|
|
3
10
|
module Adyen
|
4
11
|
module SkinBuilder
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
12
|
+
class Server < Sinatra::Base
|
13
|
+
dir = File.dirname(File.expand_path(__FILE__))
|
14
|
+
|
15
|
+
set :views, "#{dir}/server/views"
|
16
|
+
|
17
|
+
# method will be overwritten by _vegas_ if skin directory given
|
18
|
+
def self.skins_directory
|
19
|
+
File.expand_path(".")
|
11
20
|
end
|
12
|
-
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
21
|
+
|
22
|
+
def self.adyen_admin_cfg
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def skins_directory
|
27
|
+
@@skins_directory ||= begin
|
28
|
+
Adyen::Admin::Skin.new(:path => settings.skins_directory)
|
29
|
+
File.dirname(settings.skins_directory)
|
30
|
+
rescue ArgumentError
|
31
|
+
settings.skins_directory
|
18
32
|
end
|
19
|
-
body = body.gsub(%r{\<!-- Adyen Main Content --\>}, main_content)
|
20
|
-
|
21
|
-
[200, {'Content-Type' => 'text/html'}, [body]]
|
22
33
|
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
def main_content
|
27
|
-
File.read(File.join(File.dirname(__FILE__), '../../adyen/main_content.html')).gsub(%r{\<!-- Adyen Order Data --\>}, get_inc('order_data'))
|
34
|
+
|
35
|
+
def skin_path(*path)
|
36
|
+
File.join(skins_directory, *path)
|
28
37
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
File.read(File.join(@skins_directory, 'base', 'inc', "#{filename}.txt"))
|
36
|
-
else
|
37
|
-
"<!-- == #{filename}.txt IS MISSING == -->"
|
38
|
+
|
39
|
+
def skin_file(skin_code)
|
40
|
+
skin_path(skin_code, "skin.html").tap do |file|
|
41
|
+
if !File.exists?("#{file}.erb")
|
42
|
+
file.replace File.join(settings.views, "skin.html")
|
43
|
+
end
|
38
44
|
end
|
39
45
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
|
47
|
+
def store(output)
|
48
|
+
output.scan(/<!-- ### inc\/([a-z]+) -->(.+?)<!-- ### -->/m) do |name, content|
|
49
|
+
file = skin_path @skin_code, "/inc/#{name}.txt"
|
50
|
+
`mkdir -p #{File.dirname(file)}`
|
51
|
+
File.open(file, "w") do |f|
|
52
|
+
f.write content.strip
|
53
|
+
end
|
54
|
+
end
|
45
55
|
end
|
46
|
-
def each(&block); end
|
47
|
-
end
|
48
|
-
|
49
|
-
class Server
|
50
|
-
|
51
|
-
class << self
|
52
56
|
|
53
|
-
|
54
|
-
|
57
|
+
def adyen_login
|
58
|
+
if settings.adyen_admin_cfg && !Adyen::Admin.authenticated?
|
59
|
+
cfg = settings.adyen_admin_cfg
|
60
|
+
Adyen::Admin.login(cfg[:accountname], cfg[:username], cfg[:password])
|
55
61
|
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
end
|
63
|
+
|
64
|
+
helpers Helper::Render, Helper::Adyen
|
65
|
+
|
66
|
+
get '/sf/:skin_code/*' do |skin_code, path|
|
67
|
+
if (file = skin_path(skin_code, path)) && File.exists?(file)
|
68
|
+
send_file file
|
69
|
+
elsif (file = skin_path("base", path)) && File.exists?(file)
|
70
|
+
send_file file
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
get '/hpp/*' do |path|
|
75
|
+
send_file File.join(settings.views, path).tap { |file|
|
76
|
+
if !File.exists?(file)
|
77
|
+
`mkdir -p #{File.dirname(file)}`
|
78
|
+
`wget https://test.adyen.com/hpp/#{path} -O #{file}`
|
79
|
+
end
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
get '/favicon.ico' do
|
84
|
+
end
|
85
|
+
|
86
|
+
# skin page
|
87
|
+
get '/:skin_code' do |skin_code|
|
88
|
+
@skin_code = skin_code
|
89
|
+
|
90
|
+
erb(skin_file(@skin_code).to_sym, {
|
91
|
+
:views => '/',
|
92
|
+
:layout => File.join(settings.views, "layout.html").to_sym
|
93
|
+
}).tap do |output|
|
94
|
+
if @skin = Adyen::Admin::Skin.new(:path => skin_path(skin_code))
|
95
|
+
if params[:compile]
|
96
|
+
store(output)
|
97
|
+
send_file(@skin.compile) && return
|
98
|
+
elsif params[:upload]
|
99
|
+
store(output)
|
100
|
+
adyen_login
|
101
|
+
@skin.upload
|
67
102
|
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# cache remote skins
|
108
|
+
@@skin_cache = nil
|
68
109
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
110
|
+
# index page
|
111
|
+
get '/' do
|
112
|
+
Adyen::Admin::Skin.default_path = skin_path
|
113
|
+
if params[:sync]
|
114
|
+
Adyen::Admin::Skin.purge_cache
|
115
|
+
adyen_login
|
116
|
+
@@skin_cache = Adyen::Admin::Skin.all
|
117
|
+
end
|
118
|
+
if params[:download] && (@skin = Adyen::Admin::Skin.find(params[:download]))
|
119
|
+
@skin.download.tap do |zip_file|
|
120
|
+
@skin.decompile(zip_file)
|
121
|
+
`cp #{skin_file(@skin.code)}.erb #{@skin.path}`
|
122
|
+
`rm -f #{zip_file}`
|
73
123
|
end
|
74
124
|
end
|
125
|
+
@skins = @@skin_cache || Adyen::Admin::Skin.all_local
|
126
|
+
@adyen_admin_cfg = settings.adyen_admin_cfg
|
127
|
+
|
128
|
+
erb 'index.html'.to_sym, :layout => false
|
75
129
|
end
|
76
130
|
end
|
77
131
|
end
|