middleman-versions 1.0.0
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/Gemfile +18 -0
- data/README.md +63 -0
- data/Rakefile +14 -0
- data/features/support/env.rb +4 -0
- data/fixtures/directory_with_files/v1.yml +32 -0
- data/fixtures/directory_with_files/v2.json +46 -0
- data/lib/middleman/middleman-versions.rb +8 -0
- data/lib/middleman/versions/extension.rb +35 -0
- data/lib/middleman/versions/helpers/file_handler.rb +24 -0
- data/lib/middleman/versions/version.rb +5 -0
- data/lib/middleman-versions.rb +1 -0
- data/lib/middleman_extension.rb +1 -0
- data/middleman-versions.gemspec +24 -0
- data/spec/file_handler_spec.rb +13 -0
- data/spec/spec_helper.rb +1 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dc29a097675e1b478a5c5dd6064b194f3e0639ff
|
4
|
+
data.tar.gz: cdaf29ebcbeae782eea896914007575e36768bbc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 700b08cf243e77f92c3484807eec7b593629ca77f06de26f53dc9c5edfcdf8b684fcf317c3ace38bec369645b5777f5d5a67f0a3fc19468e3f88691c673fb6bb
|
7
|
+
data.tar.gz: 4df9e19ba9916467ead7c512513abf23279e31c621328532842fa08a64930dc932da3e44d763d3bca0223b66ab5639e4aedd0c191f329946a41468e626a4e5b3
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# If you do not have OpenSSL installed, update
|
2
|
+
# the following line to use "http://" instead
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in middleman-versions.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'rake'
|
10
|
+
gem 'rdoc'
|
11
|
+
gem 'yard'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem 'cucumber'
|
16
|
+
gem 'aruba'
|
17
|
+
gem 'rspec'
|
18
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#middleman-versions
|
2
|
+
Compile different middleman site versions with custom data injected in each one
|
3
|
+
|
4
|
+
## How to use it
|
5
|
+
* Add gem to your Gemfile
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
gem 'middleman-versions'
|
9
|
+
```
|
10
|
+
* Install gems
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
bundle install
|
14
|
+
```
|
15
|
+
|
16
|
+
* Edit config.rb and add:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
activate :versions do |foo|
|
20
|
+
#extension configuration params
|
21
|
+
end
|
22
|
+
```
|
23
|
+
|
24
|
+
## Extension params:
|
25
|
+
| Param name | Description | Type | Default value | Mandatory |
|
26
|
+
|----------------------|------------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|-----------|
|
27
|
+
| versions_path | Directory where we have our data files | String | versions/ | Not |
|
28
|
+
| versions | List of files that will be treated as versions files | Array of: {:path => "name of file", :decorated_name => "name to be showed in interface"} | Empty | Yes |
|
29
|
+
| origin_template | Template where will be injected the data readed from files | String | index.html | Not |
|
30
|
+
| destination_template | Name of final compiled file | String | index.html | Not |
|
31
|
+
|
32
|
+
## Injected variables on Template
|
33
|
+
| Variable name | Description | Type | Example |
|
34
|
+
|-----------------|-------------------------------------|---------------|----------------------------------------------------------------------------------------------|
|
35
|
+
| versions_paths | List of all versions final paths | Array[String] | ["v1/index.html", "v2/index.html"] |
|
36
|
+
| versions_list | List of all version decorated names | Array[String] | ["v1","v2"] |
|
37
|
+
| version_data | Data readed from version file | Hash | {"license"=>{"name"=>"Apache 2.0", "url"=>"http://www.apache.org/licenses/LICENSE-2.0.html"}} |
|
38
|
+
| current_version | Current version of page itself | String | v1 |
|
39
|
+
| current_path | Current final path of page itself | String | v1/index.html |
|
40
|
+
|
|
41
|
+
## Compile to static site
|
42
|
+
When you execute ````middleman build``` you will get a structure like this
|
43
|
+
|
44
|
+
```
|
45
|
+
build
|
46
|
+
└─── v1
|
47
|
+
│ │ index.html
|
48
|
+
│
|
49
|
+
└─── v2
|
50
|
+
| │ index.html
|
51
|
+
│
|
52
|
+
└─── resources
|
53
|
+
└─── fonts
|
54
|
+
└─── images
|
55
|
+
└─── javascripts
|
56
|
+
└─── stylesheets
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
## TODO:
|
61
|
+
- [ ] Example Middleman project using this gem
|
62
|
+
- [ ] Load all files in versions_path and use file name as decorated_name instead of set versions hash
|
63
|
+
- [ ] Load subdirectories in versions_path as versions and merge all files inside subdirectory as the same version
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
|
6
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
7
|
+
t.cucumber_opts = '--color --tags ~@wip --strict'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rake/clean'
|
11
|
+
|
12
|
+
task test: ['cucumber']
|
13
|
+
|
14
|
+
task default: :test
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
routes:
|
3
|
+
- url_parameters:
|
4
|
+
id: Esta es el id del usuario que queremos modificar
|
5
|
+
body:
|
6
|
+
mandatory_parameters:
|
7
|
+
username:
|
8
|
+
validations: Debe tener un numero por que si
|
9
|
+
type: String
|
10
|
+
password:
|
11
|
+
validations: Tiene que ser 1234
|
12
|
+
type: String
|
13
|
+
email:
|
14
|
+
validations: Debe ser de google
|
15
|
+
type: String
|
16
|
+
optional_parameters:
|
17
|
+
aficiones:
|
18
|
+
validations: Debe contener 300 caracteres como minimo
|
19
|
+
type: String
|
20
|
+
example_data:
|
21
|
+
username: supertomate@gmail.com
|
22
|
+
password: supertomate@gmail.com
|
23
|
+
aficiones: supertomate@gmail.com
|
24
|
+
email: supertomate@gmail.com
|
25
|
+
headers:
|
26
|
+
content_type: application/json
|
27
|
+
accept: application/json
|
28
|
+
method: put
|
29
|
+
description: Modificar un usuario
|
30
|
+
path: "/users"
|
31
|
+
description: Esta es la seccion dedicada a las rutas de usuario. El usuario es cada una de las personas o entes que tienen acceso a una o varias empresas.
|
32
|
+
title: Usuario v1
|
@@ -0,0 +1,46 @@
|
|
1
|
+
{
|
2
|
+
"routes": [
|
3
|
+
{
|
4
|
+
"url_parameters": {
|
5
|
+
"id": "Esta es el id del usuario que queremos modificar"
|
6
|
+
},
|
7
|
+
"body": {
|
8
|
+
"mandatory_parameters": {
|
9
|
+
"username": {
|
10
|
+
"validations": "Debe tener un numero por que si",
|
11
|
+
"type": "String"
|
12
|
+
},
|
13
|
+
"password": {
|
14
|
+
"validations": "Tiene que ser 1234",
|
15
|
+
"type": "String"
|
16
|
+
},
|
17
|
+
"email": {
|
18
|
+
"validations": "Debe ser de google",
|
19
|
+
"type": "String"
|
20
|
+
}
|
21
|
+
},
|
22
|
+
"optional_parameters": {
|
23
|
+
"aficiones": {
|
24
|
+
"validations": "Debe contener 300 caracteres como minimo",
|
25
|
+
"type": "String"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
},
|
29
|
+
"example_data": {
|
30
|
+
"username": "supertomate@gmail.com",
|
31
|
+
"password": "supertomate@gmail.com",
|
32
|
+
"aficiones": "supertomate@gmail.com",
|
33
|
+
"email": "supertomate@gmail.com"
|
34
|
+
},
|
35
|
+
"headers": {
|
36
|
+
"content_type": "application/json",
|
37
|
+
"accept": "application/json"
|
38
|
+
},
|
39
|
+
"method": "put",
|
40
|
+
"description": "Modificar un usuario"
|
41
|
+
}
|
42
|
+
],
|
43
|
+
"path": "/users",
|
44
|
+
"description": "Esta es la seccion dedicada a las rutas de usuario. El usuario es cada una de las personas o entes que tienen acceso a una o varias empresas.",
|
45
|
+
"title": "Usuario v2"
|
46
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Middleman
|
2
|
+
class VersionsExtension < ::Middleman::Extension
|
3
|
+
option :versions_path, 'versions/', 'Directory path where we search the versions'
|
4
|
+
option :versions, [], 'Array of hashes, {:path => "name of file", :decorated_name => "name to be showed in interface"}'
|
5
|
+
option :origin_template, 'index.html', 'Template where data will be inserted the data'
|
6
|
+
option :destination_template, 'index.html', 'Compiled template name'
|
7
|
+
|
8
|
+
def initialize(app, options_hash={}, &block)
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def after_configuration
|
14
|
+
app.config[:versions_options] = options
|
15
|
+
versions_list = options.versions.map{|x| x[:decorated_name]}
|
16
|
+
versions_paths = options.versions.map{|x| x[:decorated_name] + "/" + options.destination_template}
|
17
|
+
|
18
|
+
options.versions.each do |version|
|
19
|
+
full_version_path = options.versions_path + version[:path]
|
20
|
+
version_data = Versions::FileHandler::load_file(full_version_path)
|
21
|
+
current_path = "#{version[:decorated_name]}/#{options.destination_template}"
|
22
|
+
|
23
|
+
app.proxy "#{current_path}", "/#{options.origin_template}",
|
24
|
+
:locals => {
|
25
|
+
:versions_paths => versions_paths,
|
26
|
+
:versions_list => versions_list,
|
27
|
+
:version_data => version_data ,
|
28
|
+
:current_version => version[:decorated_name],
|
29
|
+
:current_path => "#{current_path}"
|
30
|
+
},
|
31
|
+
:ignore => true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Versions
|
3
|
+
module FileHandler
|
4
|
+
def self.load_file(path)
|
5
|
+
case File.extname(path)
|
6
|
+
when ".yml",".yaml"
|
7
|
+
load_yaml_file path
|
8
|
+
when ".json"
|
9
|
+
load_json_file path
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private_class_method def self.load_yaml_file(path)
|
14
|
+
require 'yaml'
|
15
|
+
YAML::load(File.open(path))
|
16
|
+
end
|
17
|
+
|
18
|
+
private_class_method def self.load_json_file(path)
|
19
|
+
require 'json'
|
20
|
+
JSON.parse( IO.read(path))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'middleman/middleman-versions'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'middleman-versions'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "middleman-versions"
|
6
|
+
s.version = "1.0.0"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Pedro Rivas", "Cuéntica","Guillermo Latorre", "David Olmos"]
|
9
|
+
s.email = ["rmdrobs@gmail.com", "contacto@cuentica.com", "superwillyfoc@gmail.com", "olmos.david@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/cuentica/middleman-versions.git"
|
11
|
+
s.summary = %q{Compile different middleman versions with custom data injected in each one}
|
12
|
+
s.description = %q{Compile different middleman versions with custom data injected in each one}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
# The version of middleman-core your extension depends on
|
20
|
+
s.add_runtime_dependency("middleman-core", [">= 4.0.0"])
|
21
|
+
|
22
|
+
# Additional dependencies
|
23
|
+
# s.add_runtime_dependency("gem-name", "gem-version")
|
24
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require_relative '../lib/middleman/versions/helpers/file_handler'
|
3
|
+
|
4
|
+
describe "FileHandler" do
|
5
|
+
it "load_file method must return a non empty hash from json file" do
|
6
|
+
version_hash = Middleman::Versions::FileHandler::load_file(File.join(File.dirname(__FILE__),"../fixtures/directory_with_files/v2.json"))
|
7
|
+
expect(version_hash).to include({"title" => "Usuario v2"})
|
8
|
+
end
|
9
|
+
it "load_file method must return a non empty hash from yml file" do
|
10
|
+
version_hash = Middleman::Versions::FileHandler::load_file(File.join(File.dirname(__FILE__),"../fixtures/directory_with_files/v1.yml"))
|
11
|
+
expect(version_hash).to include({"title" => "Usuario v1"})
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'rspec'
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-versions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pedro Rivas
|
8
|
+
- Cuéntica
|
9
|
+
- Guillermo Latorre
|
10
|
+
- David Olmos
|
11
|
+
autorequire:
|
12
|
+
bindir: bin
|
13
|
+
cert_chain: []
|
14
|
+
date: 2016-11-14 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: middleman-core
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 4.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.0.0
|
30
|
+
description: Compile different middleman versions with custom data injected in each
|
31
|
+
one
|
32
|
+
email:
|
33
|
+
- rmdrobs@gmail.com
|
34
|
+
- contacto@cuentica.com
|
35
|
+
- superwillyfoc@gmail.com
|
36
|
+
- olmos.david@gmail.com
|
37
|
+
executables: []
|
38
|
+
extensions: []
|
39
|
+
extra_rdoc_files: []
|
40
|
+
files:
|
41
|
+
- ".gitignore"
|
42
|
+
- Gemfile
|
43
|
+
- README.md
|
44
|
+
- Rakefile
|
45
|
+
- features/support/env.rb
|
46
|
+
- fixtures/directory_with_files/v1.yml
|
47
|
+
- fixtures/directory_with_files/v2.json
|
48
|
+
- lib/middleman-versions.rb
|
49
|
+
- lib/middleman/middleman-versions.rb
|
50
|
+
- lib/middleman/versions/extension.rb
|
51
|
+
- lib/middleman/versions/helpers/file_handler.rb
|
52
|
+
- lib/middleman/versions/version.rb
|
53
|
+
- lib/middleman_extension.rb
|
54
|
+
- middleman-versions.gemspec
|
55
|
+
- spec/file_handler_spec.rb
|
56
|
+
- spec/spec_helper.rb
|
57
|
+
homepage: https://github.com/cuentica/middleman-versions.git
|
58
|
+
licenses: []
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.5.1
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Compile different middleman versions with custom data injected in each one
|
80
|
+
test_files: []
|