jail 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +25 -12
- data/app/assets/stylesheets/jail/application.css +22 -7
- data/app/controllers/jail/cdnjs_controller.rb +20 -0
- data/app/models/jail/cdnjs.rb +68 -0
- data/app/models/jail/github.rb +53 -43
- data/app/views/jail/cdnjs/_files.html.erb +6 -0
- data/app/views/jail/cdnjs/index.html.erb +11 -0
- data/app/views/jail/cdnjs/show.html.erb +26 -0
- data/app/views/layouts/jail/application.html.erb +10 -2
- data/config/routes.rb +10 -0
- data/lib/jail/version.rb +1 -1
- data/test/dummy/log/development.log +9860 -0
- data/test/dummy/tmp/cache/assets/C78/2D0/sprockets%2F049c9453e2d03a13463ad15568c8521f +0 -0
- data/test/dummy/tmp/cache/assets/D29/F40/sprockets%2F15ce02e64710b4fa1d3a21f6270fdc74 +0 -0
- data/test/dummy/tmp/cache/assets/D81/500/sprockets%2F23e9c52aedd634ee57e66663cffa1868 +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -1
- data/test/dummy/vendor/assets/images/chosen-sprite.png +0 -0
- data/test/dummy/vendor/assets/javascripts/chosen.jquery.js +952 -0
- data/test/dummy/vendor/assets/stylesheets/chosen.css +392 -0
- metadata +15 -12
- data/test/dummy/vendor/assets/javascripts/jquery.nivo.slider.js +0 -662
- data/test/dummy/vendor/assets/javascripts/jquery.stickem.js +0 -163
- data/test/dummy/vendor/assets/javascripts/tooltipsy.source.js +0 -226
- data/test/dummy/vendor/assets/stylesheets/default.css +0 -93
data/README.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# Jail
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
Found a nice Jquery plugin you'd like to try out ? Now starts the RSIs :
|
4
|
+
Download, unpack, find the source files, open your app folder, drag in the javascript folder, drag in the stylesheet folder, drag in the images folder... Oh but wait, there's a better version of (modal/fancybox/slider/datepicker...). Download, unpack, find the source... _This must stop !_
|
5
|
+
|
6
|
+
Meet Jail : it puts all your Javascripts (& cie) in Rails, with just a click!
|
7
|
+
|
8
|
+
**NOW** With the 158 (sept/12) [CDNJS libraries](/cdnjs/cdnjs).
|
6
9
|
|
7
10
|
## Install
|
8
11
|
|
@@ -18,24 +21,26 @@ http://localhost:3000/jail/
|
|
18
21
|
|
19
22
|
Chose a plugin, follow the link, Install. You're done.
|
20
23
|
|
24
|
+
|
21
25
|

|
22
26
|
|
23
27
|
---
|
24
28
|
|
25
|
-
Oh
|
29
|
+
Oh wait you might have to add :
|
26
30
|
|
27
31
|
//=require myplugin.js
|
28
32
|
|
29
|
-
|
33
|
+
And if you're not happy with the actual set of Jquery plugins proposed. Add your own!
|
30
34
|
|
31
35
|
config/initializers/jail.rb
|
32
36
|
|
33
37
|
module Jail
|
34
38
|
LOGIN = 'login:password' #optional
|
35
|
-
Github.add_githublist(Rails.root.join("config/jail.backboneplugins.yml"))
|
36
|
-
Github.add_githublist(Rails.root.join("config/jail.whatever.yml"))
|
39
|
+
Jail::Github.add_githublist(Rails.root.join("config/jail.backboneplugins.yml"))
|
40
|
+
Jail::Github.add_githublist(Rails.root.join("config/jail.whatever.yml"))
|
37
41
|
end
|
38
42
|
|
43
|
+
Buth the list is bound to grow quickly.
|
39
44
|
|
40
45
|
## Usage (alt)
|
41
46
|
|
@@ -48,7 +53,7 @@ But it must exist in the yaml file !!!
|
|
48
53
|
|
49
54
|
## Contribute
|
50
55
|
|
51
|
-
The list of plugins are in a yaml file : config/
|
56
|
+
The list of plugins are in a yaml file : config/jail.jqueryplugins.yml
|
52
57
|
Add more plugins and pull a request!
|
53
58
|
Would it be better to have them in the db ?
|
54
59
|
|
@@ -57,13 +62,21 @@ Would it be better to have them in the db ?
|
|
57
62
|
|
58
63
|
Other approaches where :
|
59
64
|
- create a gem for each jquery plugin. But that means updating the gem with the latest release of each plugin and nobody wants to keep track of dozens of repos.
|
60
|
-
- Do a generator instead but, while the thought came to me while writing this gem, I didn't find any remote feature in Thor (may be wrong though since rails templates has it).
|
65
|
+
- Do a generator instead but, while the thought came to me while writing this gem, I didn't find any remote feature in Thor (may be wrong though since rails templates has it). **update** : it has one (of course)!
|
61
66
|
|
62
67
|
## TODO
|
63
68
|
|
64
|
-
-
|
65
|
-
- plugin
|
66
|
-
-
|
69
|
+
- Pjax for laoding plugin
|
70
|
+
- plugin installed? (check file existence)
|
71
|
+
- plugin outdated? (overkill ?)
|
72
|
+
- bin/jail
|
73
|
+
|
74
|
+
## Changelog
|
75
|
+
|
76
|
+
- 0.1.1 CDNJS Integration + Some Github Refactoring
|
77
|
+
|
78
|
+
## Thanks to
|
67
79
|
|
80
|
+
- [Walter Davis](/walterdavis) for suggesting the awesome idea of including the cdnjs library.
|
68
81
|
|
69
82
|
This project rocks and uses MIT-LICENSE.
|
@@ -12,7 +12,9 @@
|
|
12
12
|
*= require_tree .
|
13
13
|
*/
|
14
14
|
|
15
|
-
body, div {
|
15
|
+
body, div {
|
16
|
+
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
|
17
|
+
margin: 0; padding:0;}
|
16
18
|
|
17
19
|
|
18
20
|
#header, #page, #footer {
|
@@ -25,28 +27,41 @@ body, div { margin: 0; padding:0;}
|
|
25
27
|
background-color: #444}
|
26
28
|
|
27
29
|
#header a {
|
30
|
+
text-decoration: none;
|
28
31
|
color: #EEE;}
|
29
32
|
|
33
|
+
fieldset {
|
34
|
+
color: #444;
|
35
|
+
background-color: #CCC}
|
36
|
+
|
37
|
+
legend {
|
38
|
+
padding: 3px 9px;
|
39
|
+
color: #CCC;
|
40
|
+
background-color: #444;
|
41
|
+
border: thin solid #222;
|
42
|
+
}
|
43
|
+
|
44
|
+
.smaller {
|
45
|
+
font-size: .7em;}
|
46
|
+
|
30
47
|
.notice {
|
31
48
|
text-align: center;
|
32
49
|
background-color: #BCED91;
|
33
50
|
border: thin solid #629632;
|
34
51
|
color:; #629632;
|
35
|
-
padding: 18px;
|
36
|
-
}
|
52
|
+
padding: 18px;}
|
37
53
|
|
38
54
|
ul.jaillinks {
|
39
55
|
width: 400px;
|
40
|
-
list-style: none;
|
41
|
-
}
|
56
|
+
list-style: none;}
|
42
57
|
|
43
58
|
ul.jaillinks li a {
|
44
59
|
color: #777;
|
45
60
|
display: block;
|
46
61
|
text-decoration: none;
|
47
62
|
padding: 6px;
|
48
|
-
border-bottom: thin dashed #DDD;
|
49
|
-
|
63
|
+
border-bottom: thin dashed #DDD;}
|
64
|
+
|
50
65
|
ul.jaillinks li a:hover {
|
51
66
|
background-color: #DDD}
|
52
67
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_dependency "jail/application_controller"
|
2
|
+
|
3
|
+
module Jail
|
4
|
+
class CdnjsController < ApplicationController
|
5
|
+
def index
|
6
|
+
@cdnjs = Cdnjs.libs.map(&:name)
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
@cdnjs = Cdnjs.find(params[:name])
|
11
|
+
end
|
12
|
+
|
13
|
+
def install
|
14
|
+
@cdnjs = Cdnjs.find(params[:name])
|
15
|
+
@cdnjs.install(params["files"])
|
16
|
+
|
17
|
+
redirect_to( "/jail/cdnjs/#{params[:name]}", :notice => "Installed!" )
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Jail
|
2
|
+
class Cdnjs
|
3
|
+
attr_reader :github, :root_path, :package_path
|
4
|
+
delegate :name, :filename, :version, :description,
|
5
|
+
:homepage, :repositories, :maintainers, :to => :package #etc
|
6
|
+
|
7
|
+
def self.github
|
8
|
+
@github ||= Jail::Github.find("cdnjs", "cdnjs", "ajax/libs")
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.libs
|
12
|
+
@libs ||= github.contents
|
13
|
+
end
|
14
|
+
libs # load & memoize cdnjs libraries
|
15
|
+
|
16
|
+
def self.lib(path)
|
17
|
+
github.where(path).contents
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find_path(name)
|
21
|
+
hash = libs.find { |hashie| hashie.path.split("/").last == name }
|
22
|
+
hash and hash.path # raise if not found ?
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.find(name)
|
26
|
+
path = find_path(name)
|
27
|
+
lib = lib(path)
|
28
|
+
|
29
|
+
self.new(path, lib)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(path, lib)
|
33
|
+
@github = self.class.github
|
34
|
+
@root_path = path
|
35
|
+
@package_path = lib.find {|h| h.type == "file"}.path
|
36
|
+
end
|
37
|
+
|
38
|
+
def package
|
39
|
+
@package ||= Hashie::Mash.new ActiveSupport::JSON.decode( github.where(package_path).read )
|
40
|
+
end
|
41
|
+
|
42
|
+
# gets the version from the package.json & returns a path
|
43
|
+
def version_path
|
44
|
+
Pathname(root_path).join(version)
|
45
|
+
end
|
46
|
+
|
47
|
+
def files
|
48
|
+
@files ||= github.where(version_path).contents
|
49
|
+
end
|
50
|
+
|
51
|
+
def file(name)
|
52
|
+
github.where(version_path.join(name))
|
53
|
+
end
|
54
|
+
|
55
|
+
def mapped_files
|
56
|
+
files.map(&:name).group_by {|name| Pathname(name).extname }
|
57
|
+
end
|
58
|
+
|
59
|
+
def install(params)
|
60
|
+
files_to_write = params.map {|file, num| file if num == "1"}.compact!
|
61
|
+
|
62
|
+
files_to_write.each do |name|
|
63
|
+
file(name).download()
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
data/app/models/jail/github.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Jail
|
2
2
|
# This is a wrapper around ::Github
|
3
3
|
class Github
|
4
|
-
|
4
|
+
attr_reader :github, :name, :repo, :spec
|
5
|
+
attr_accessor :path
|
5
6
|
cattr_accessor :githublist
|
6
7
|
|
7
8
|
def self.add_githublist(yaml_path)
|
@@ -10,33 +11,38 @@ module Jail
|
|
10
11
|
end
|
11
12
|
|
12
13
|
self.githublist={}
|
13
|
-
add_githublist(Jail::Engine.root.join("config", "jail.jqueryplugins.yml"))
|
14
|
+
add_githublist( Jail::Engine.root.join("config", "jail.jqueryplugins.yml") )
|
14
15
|
|
15
16
|
# TODO : raise if missing descr:
|
16
17
|
def self.all
|
17
18
|
githublist.group_by {|k, v| v[:descr].match(/\w+:/).to_s if v[:descr]}
|
18
19
|
end
|
19
20
|
|
20
|
-
#
|
21
|
-
def self.find(
|
22
|
-
|
23
|
-
yo.
|
24
|
-
yo.repo= arepo
|
25
|
-
yo.path= apath
|
26
|
-
yo.spec= githublist["#{yo.name}/#{yo.repo}"]
|
21
|
+
# Uhh useless ? Or AR Sexy ?
|
22
|
+
def self.find(name, repo, path = nil)
|
23
|
+
new(name, repo).tap do |yo|
|
24
|
+
yo.path= path
|
27
25
|
end
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
@
|
28
|
+
def initialize(name, repo)
|
29
|
+
@name= name
|
30
|
+
@repo= repo
|
31
|
+
@spec= self.class.githublist["#{@name}/#{@repo}"]
|
32
|
+
@github = defined?(Jail::LOGIN) ?
|
34
33
|
::Github.new({ :basic_auth => Jail::LOGIN }) :
|
35
34
|
::Github.new
|
36
35
|
end
|
37
36
|
|
37
|
+
# another AR alike for chaining
|
38
|
+
def where(path)
|
39
|
+
self.path= path
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
# do I need this method ?
|
38
44
|
def repos
|
39
|
-
github.repos.get(name, repo)
|
45
|
+
@repos ||= github.repos.get(name, repo)
|
40
46
|
end
|
41
47
|
|
42
48
|
def contents
|
@@ -50,49 +56,53 @@ module Jail
|
|
50
56
|
github.markdown.render :text => text
|
51
57
|
end
|
52
58
|
|
53
|
-
|
54
|
-
|
55
|
-
self.path= apath
|
59
|
+
def read
|
60
|
+
#raise "blah" unless contents.type == "file"
|
56
61
|
text = Base64.decode64 contents.content
|
57
62
|
end
|
58
63
|
|
59
|
-
def
|
60
|
-
|
61
|
-
download(:js)
|
62
|
-
download(:css)
|
63
|
-
download(:img)
|
64
|
-
end
|
65
|
-
|
66
|
-
def remove
|
67
|
-
delete_file(:js)
|
68
|
-
delete_file(:css)
|
69
|
-
delete_file(:img)
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
def download(type = :js)
|
74
|
-
return if spec[type].blank?
|
75
|
-
text = read(spec[type])
|
76
|
-
target(type).open('w') {|f| f.write(text) }
|
64
|
+
def download(type = nil)
|
65
|
+
target(type).open('w') {|f| f.write( read ) }
|
77
66
|
end
|
78
67
|
|
79
|
-
def
|
80
|
-
return if spec[type].blank?
|
81
|
-
self.path = spec[type]
|
68
|
+
def delete(type = nil)
|
82
69
|
t = target(type) and t.exist? and t.delete
|
83
70
|
end
|
84
71
|
|
85
|
-
def target(type)
|
86
|
-
filename= Pathname(path).basename
|
72
|
+
def target(type=nil)
|
73
|
+
filename= Pathname(path).basename
|
74
|
+
type = type || extract_type(filename)
|
75
|
+
|
87
76
|
case type
|
88
|
-
when :js
|
77
|
+
when :js, :coffee
|
89
78
|
Rails.root.join("vendor/assets/javascripts/#{filename}")
|
90
|
-
when :css
|
79
|
+
when :css, :scss, :less
|
91
80
|
Rails.root.join("vendor/assets/stylesheets/#{filename}")
|
92
|
-
when :img
|
81
|
+
when :img, :png, :gif, :jpeg
|
93
82
|
Rails.root.join("vendor/assets/images/#{filename}")
|
94
83
|
end
|
95
84
|
end
|
96
85
|
|
86
|
+
def extract_type(filename)
|
87
|
+
type = Pathname(filename).extname
|
88
|
+
type = type.gsub(/\./, "").to_sym
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# Depends on yaml files: dont use elsewhere
|
93
|
+
#
|
94
|
+
def write_all
|
95
|
+
[:js, :css, :img].each do |type|
|
96
|
+
where(spec[type]).download(type) if spec[type]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
alias install write_all
|
100
|
+
|
101
|
+
def delete_all
|
102
|
+
[:js, :css, :img].each do |type|
|
103
|
+
where(spec[type]).delete(type) if spec[type]
|
104
|
+
end
|
105
|
+
end
|
106
|
+
alias remove delete_all
|
97
107
|
end
|
98
108
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%#=debug @cdnjs %>
|
2
|
+
|
3
|
+
<h1>
|
4
|
+
<%= link_to "CDNJS", "https://github.com/cdnjs/cdnjs" %> List of Javascripts Libraries
|
5
|
+
</h1>
|
6
|
+
|
7
|
+
<ul class='jaillinks'>
|
8
|
+
<%- @cdnjs.each do |name| %>
|
9
|
+
<li><%= link_to name, "/jail/cdnjs/#{name}" %></li>
|
10
|
+
<% end %>
|
11
|
+
</ul>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%- if flash[:notice] %>
|
2
|
+
<div class='notice'>
|
3
|
+
<%= flash[:notice] %>
|
4
|
+
</div>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<h1><%= @cdnjs.name %></h1>
|
8
|
+
<p><%= @cdnjs.description %></p>
|
9
|
+
|
10
|
+
<%= form_tag "/jail/cdnjs/#{@cdnjs.name}" do %>
|
11
|
+
<fieldset>
|
12
|
+
<legend>Files To Install (uncheck unnecesseray)</legend>
|
13
|
+
<%- @cdnjs.files.map(&:name).each do |name| %>
|
14
|
+
<p>
|
15
|
+
<%= label_tag name %>
|
16
|
+
<%= check_box('files', name, {:checked => true}, checked_value="1", unchecked_value="0") %>
|
17
|
+
</p>
|
18
|
+
<% end %>
|
19
|
+
<%= submit_tag "Install" %>
|
20
|
+
</fieldset>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<p>homepage: <%= link_to @cdnjs.homepage, @cdnjs.homepage %></p>
|
24
|
+
<%- @cdnjs.repositories.map(&:url).each do |url| %>
|
25
|
+
<p>repository : <%= link_to url, url %></p>
|
26
|
+
<% end %>
|
@@ -8,8 +8,16 @@
|
|
8
8
|
</head>
|
9
9
|
<body>
|
10
10
|
<div id="header">
|
11
|
-
<h1
|
12
|
-
|
11
|
+
<h1>
|
12
|
+
<%=link_to "Jail", root_path %>
|
13
|
+
<span class='smaller'> - Puts your Js in Rails</span>
|
14
|
+
</h1>
|
15
|
+
<div style="text-align: center;">
|
16
|
+
<%= link_to "Jail's list", "/jail/" %>
|
17
|
+
|
|
18
|
+
<%= link_to "Cdnjs's List", "/jail/cdnjs" %>
|
19
|
+
</div>
|
20
|
+
|
13
21
|
</div>
|
14
22
|
|
15
23
|
<div id="page">
|
data/config/routes.rb
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
Jail::Engine.routes.draw do
|
2
2
|
|
3
3
|
root :to => "githubs#index"
|
4
|
+
match "/cdnjs" => "cdnjs#index"
|
5
|
+
with_options(:name => /[^\/]+/ ) do |opt|
|
6
|
+
opt.match "/cdnjs/:name" => "cdnjs#show", :via => :get
|
7
|
+
opt.match "/cdnjs/:name" => "cdnjs#install", :via => :post
|
8
|
+
#opt.match "/cdnjs/:name/remove" => "cdnjs#remove"
|
9
|
+
#opt.match "/cdnjs/:name/*path" => "cdnjs#show"
|
10
|
+
end
|
11
|
+
|
4
12
|
with_options(:repo => /[^\/]+/ ) do |opt|
|
5
13
|
opt.match ":name/:repo" => "githubs#show"
|
6
14
|
opt.match ":name/:repo/install" => "githubs#install"
|
7
15
|
opt.match ":name/:repo/remove" => "githubs#remove"
|
8
16
|
opt.match ":name/:repo/*path" => "githubs#show"
|
9
17
|
end
|
18
|
+
|
19
|
+
|
10
20
|
end
|