qedproject 0.0.5 → 0.0.8
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/bin/qedproject +13 -2
- data/lib/qedproject/helpers.rb +21 -0
- data/lib/qedproject/libraries/base.rb +23 -5
- data/lib/qedproject/libraries/jquerymobile.rb +24 -0
- data/lib/qedproject/libraries/jquerytmpl.rb +1 -0
- data/lib/qedproject/libraries/skeleton.rb +3 -1
- data/lib/qedproject/plugins.rb +12 -0
- data/lib/qedproject/project.rb +57 -50
- data/lib/qedproject/version.rb +1 -1
- data/lib/qedproject.rb +4 -0
- data/templates/assets.yml +2 -2
- data/templates/sampleSpec.coffee +3 -0
- data/vendor/jquerymobile/ajax-loader.png +0 -0
- data/vendor/jquerymobile/icon-search-black.png +0 -0
- data/vendor/jquerymobile/icons-18-black.png +0 -0
- data/vendor/jquerymobile/icons-18-white.png +0 -0
- data/vendor/jquerymobile/icons-36-black.png +0 -0
- data/vendor/jquerymobile/icons-36-white.png +0 -0
- data/vendor/jquerymobile/jquery.mobile-1.0b2.css +1640 -0
- data/vendor/jquerymobile/jquery.mobile-1.0b2.js +6259 -0
- data/vendor/jquerymobile/templates/index.html +97 -0
- metadata +15 -4
data/bin/qedproject
CHANGED
@@ -11,6 +11,7 @@ options = {}
|
|
11
11
|
LIBRARIES = QEDProject::Libraries::Base.libs.keys
|
12
12
|
OptionParser.new do |opts|
|
13
13
|
opts.banner = "Usage: qedproject <projectname> [options]"
|
14
|
+
opts.banner << "\nAvailable Libraries are: #{LIBRARIES.join(",")}"
|
14
15
|
|
15
16
|
|
16
17
|
opts.on('-s', '--sass', "Use SASS") do
|
@@ -28,10 +29,20 @@ OptionParser.new do |opts|
|
|
28
29
|
opts.on('-t', '--testing', "Set up testing with Jasmine") do
|
29
30
|
options[:testing] = true
|
30
31
|
end
|
31
|
-
|
32
|
-
opts.on(
|
32
|
+
|
33
|
+
opts.on('-p', '--public-dir [DIR]', 'Specify the name of the public folder') do |dir|
|
34
|
+
options[:public_dir] = dir
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on("-l", "--libs [LIBRARIES]", "comma-separated list of libraries to include") do |libs|
|
33
38
|
options[:libs] = libs.split(",").collect{ |f| f.to_sym }
|
34
39
|
end
|
40
|
+
|
41
|
+
opts.on('--skip-index', 'Skip creating a default index.html file') do
|
42
|
+
options[:skip_index] = true
|
43
|
+
end
|
44
|
+
|
45
|
+
|
35
46
|
end.parse!
|
36
47
|
options[:verbose] = true
|
37
48
|
project = ARGV[0]
|
data/lib/qedproject/helpers.rb
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
module QEDProject
|
2
2
|
module Helpers
|
3
|
+
|
4
|
+
# Copies a file - wraps FileUtils to print a nice message if verbose is on.
|
5
|
+
|
6
|
+
def cp(source, destination, options = {})
|
7
|
+
verbose = options[:verbose] || false
|
8
|
+
FileUtils.cp source, destination
|
9
|
+
puts "Created #{File.join destination, File.basename(source)}" if verbose
|
10
|
+
end
|
11
|
+
|
12
|
+
def cp_r(source, destination, options = {})
|
13
|
+
verbose = options[:verbose] || false
|
14
|
+
FileUtils.cp_r source, destination
|
15
|
+
puts "Created #{File.join destination, File.basename(source)}" if verbose
|
16
|
+
end
|
17
|
+
|
18
|
+
def mkdir_p(destination, options = {})
|
19
|
+
FileUtils.mkdir_p destination
|
20
|
+
puts "Created folder #{destination}" if verbose
|
21
|
+
end
|
22
|
+
|
23
|
+
|
3
24
|
# Reads a template from the file system,
|
4
25
|
# evaluates it with ERB
|
5
26
|
# places it in the output folder specified.
|
@@ -13,16 +13,33 @@ module QEDProject
|
|
13
13
|
# when creating the adapter.
|
14
14
|
# Adds the library and class to QEDProject::Libraries::Base.libs hash
|
15
15
|
# and also creates a getter method on the adapter instance
|
16
|
-
def library(name)
|
16
|
+
def library(name, base_path = __FILE__)
|
17
17
|
QEDProject::Libraries::Base.libs ||= {}
|
18
18
|
QEDProject::Libraries::Base.libs[name] = self
|
19
19
|
class_eval do
|
20
20
|
define_method :library do
|
21
21
|
name
|
22
22
|
end
|
23
|
+
|
24
|
+
define_method :vendor_root do
|
25
|
+
File.expand_path("../../../../vendor", base_path)
|
26
|
+
end
|
27
|
+
|
23
28
|
end
|
24
29
|
end
|
25
30
|
|
31
|
+
# DSL again, this lets you specify dependencies.
|
32
|
+
# Creates a dependencies class instance method
|
33
|
+
# we can use later.
|
34
|
+
def depends_on(libraries)
|
35
|
+
m = class << self; self; end
|
36
|
+
m.send :define_method, :dependencies do
|
37
|
+
libraries
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# for the DSL, creates both an instance
|
42
|
+
# method and a class instance method
|
26
43
|
def set_js_files(files)
|
27
44
|
# define class method
|
28
45
|
m = class << self; self; end
|
@@ -72,7 +89,8 @@ module QEDProject
|
|
72
89
|
|
73
90
|
def initialize(project)
|
74
91
|
@project = project
|
75
|
-
|
92
|
+
|
93
|
+
@lib_root = File.join(self.vendor_root, self.library.to_s)
|
76
94
|
@template_root = File.join(@lib_root, "templates")
|
77
95
|
end
|
78
96
|
|
@@ -84,19 +102,19 @@ module QEDProject
|
|
84
102
|
|
85
103
|
def copy_images
|
86
104
|
self.image_files.each do |lib|
|
87
|
-
|
105
|
+
cp_r File.join(self.lib_root, lib), File.join(self.project.path, self.project.images_path), :verbose => self.project.verbose
|
88
106
|
end
|
89
107
|
end
|
90
108
|
|
91
109
|
def copy_css
|
92
110
|
self.css_files.each do |lib|
|
93
|
-
|
111
|
+
cp_r File.join(self.lib_root, lib), File.join(self.project.path, self.project.css_path), :verbose => self.project.verbose
|
94
112
|
end
|
95
113
|
end
|
96
114
|
|
97
115
|
def copy_js
|
98
116
|
self.js_files.each do |lib|
|
99
|
-
|
117
|
+
cp_r File.join(self.lib_root, lib), File.join(self.project.path, self.project.js_path), :verbose => self.project.verbose
|
100
118
|
end
|
101
119
|
end
|
102
120
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module QEDProject
|
2
|
+
module Libraries
|
3
|
+
class Jquerymobile < QEDProject::Libraries::Base
|
4
|
+
library :jquerymobile
|
5
|
+
depends_on [:jquery]
|
6
|
+
set_js_files ["jquery.mobile-1.0b2.js"]
|
7
|
+
set_css_files ["jquery.mobile-1.0b2.css" ]
|
8
|
+
set_image_files [
|
9
|
+
"ajax-loader.png",
|
10
|
+
"icons-18-black.png",
|
11
|
+
"icons-18-white.png",
|
12
|
+
"icons-36-black.png",
|
13
|
+
"icons-36-white.png",
|
14
|
+
"icon-search-black.png"
|
15
|
+
]
|
16
|
+
|
17
|
+
def generate!
|
18
|
+
super
|
19
|
+
render_template_to_file "index.html", File.join(self.project.path, self.project.public_dir, "index-mobile.html"), binding
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -13,7 +13,9 @@ module QEDProject
|
|
13
13
|
|
14
14
|
def generate!
|
15
15
|
super
|
16
|
-
|
16
|
+
index_file = File.join(self.project.path, self.project.public_dir, "index.html")
|
17
|
+
FileUtils.rm_rf index_file if File.exist?(index_file)
|
18
|
+
render_template_to_file "index.html", index_file, binding
|
17
19
|
end
|
18
20
|
|
19
21
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module QEDProject
|
2
|
+
module Plugins
|
3
|
+
|
4
|
+
def self.load_plugins
|
5
|
+
Gem.refresh
|
6
|
+
(Gem::Specification.respond_to?(:each) ? Gem::Specification : Gem.source_index.find_name('')).each do |gem|
|
7
|
+
next if gem.name !~ /^qedproject-/
|
8
|
+
require gem.name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/qedproject/project.rb
CHANGED
@@ -6,8 +6,10 @@ module QEDProject
|
|
6
6
|
|
7
7
|
include QEDProject::Helpers
|
8
8
|
|
9
|
-
attr_accessor :path, :libs, :coffeescript, :sass, :jammit,
|
10
|
-
:js_path, :css_path, :images_path, :verbose, :testing
|
9
|
+
attr_accessor :path, :libs, :coffeescript, :sass, :jammit, :public_dir,
|
10
|
+
:js_path, :css_path, :images_path, :verbose, :testing, :skip_index,
|
11
|
+
:sorted_libs,
|
12
|
+
:css_assets, :js_assets
|
11
13
|
# convenience method to create a new project.
|
12
14
|
# Simply call create with the project path and the options.
|
13
15
|
def self.create(project_path, options= {})
|
@@ -32,55 +34,60 @@ module QEDProject
|
|
32
34
|
self.path = project_path
|
33
35
|
self.process_options(options)
|
34
36
|
self.set_paths
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
end
|
38
|
+
|
39
|
+
def collect_libraries
|
40
|
+
|
41
|
+
self.css_assets = []
|
42
|
+
self.js_assets = []
|
43
|
+
self.sorted_libs = []
|
44
|
+
|
45
|
+
self.libs.each do |requested_library|
|
46
|
+
raise QEDProject::BadLibraryError, "#{requested_library} is not a valid library" unless QEDProject::Libraries::Base.libs.include? requested_library
|
47
|
+
library = QEDProject::Libraries::Base.libs[requested_library]
|
48
|
+
|
49
|
+
if library.respond_to? :dependencies
|
50
|
+
dependencies = library.dependencies
|
51
|
+
dependencies.each do |d|
|
52
|
+
unless self.sorted_libs.include?(d)
|
53
|
+
self.sorted_libs << d
|
54
|
+
end
|
55
|
+
end
|
47
56
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# Convenience method for showing all of the css files that
|
52
|
-
# the project should contain. Good for creating asset lists
|
53
|
-
# and loading files in rendered templates
|
54
|
-
def css_assets
|
55
|
-
libs.inject([]) do |original, lib|
|
56
|
-
if QEDProject::Libraries::Base.libs[lib].respond_to?(:css_files)
|
57
|
-
original += QEDProject::Libraries::Base.libs[lib].css_files
|
58
|
-
else
|
59
|
-
original
|
57
|
+
|
58
|
+
unless self.sorted_libs.include?(requested_library)
|
59
|
+
self.sorted_libs << requested_library
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
63
|
-
|
62
|
+
|
63
|
+
self.sorted_libs.each do |lib|
|
64
|
+
library = QEDProject::Libraries::Base.libs[lib]
|
65
|
+
self.js_assets += library.js_files if library.respond_to?(:js_files)
|
66
|
+
self.css_assets += library.css_files if library.respond_to?(:css_files)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
64
71
|
# Sets instance methods with values from the options hash.
|
65
72
|
def process_options(options)
|
73
|
+
|
66
74
|
self.libs = options[:libs] || []
|
67
75
|
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
76
|
+
collect_libraries
|
77
|
+
self.public_dir = options[:public_dir] || "public"
|
72
78
|
self.jammit = options[:jammit]
|
73
79
|
self.sass = options[:sass]
|
74
80
|
self.coffeescript = options[:coffeescript]
|
75
81
|
self.verbose = options[:verbose]
|
76
82
|
self.testing = options[:testing]
|
83
|
+
self.skip_index = options[:skip_index]
|
77
84
|
end
|
78
85
|
|
79
86
|
# Set up the basic paths we'll use throughout
|
80
87
|
def set_paths
|
81
|
-
self.images_path = File.join(
|
82
|
-
self.js_path = self.jammit ? "javascripts" : File.join(
|
83
|
-
self.css_path = self.jammit ? "stylesheets" : File.join(
|
88
|
+
self.images_path = File.join(self.public_dir, "images")
|
89
|
+
self.js_path = self.jammit ? "javascripts" : File.join(self.public_dir, "javascripts")
|
90
|
+
self.css_path = self.jammit ? "stylesheets" : File.join(self.public_dir, "stylesheets")
|
84
91
|
end
|
85
92
|
|
86
93
|
# We need a guardfile if the user is using jammit, sass, or coffeescript.
|
@@ -101,7 +108,7 @@ module QEDProject
|
|
101
108
|
# create a guardfile if needed
|
102
109
|
def generate
|
103
110
|
self.create_project_skeleton
|
104
|
-
self.create_index
|
111
|
+
self.create_index unless self.skip_index
|
105
112
|
self.get_libraries if self.libs
|
106
113
|
self.create_asset_file if self.jammit
|
107
114
|
self.add_testing if self.testing
|
@@ -111,8 +118,8 @@ module QEDProject
|
|
111
118
|
|
112
119
|
# includes the Jasmine BDD framework for javascript testing
|
113
120
|
def add_testing
|
114
|
-
|
115
|
-
|
121
|
+
mkdir_p File.join(self.path, "spec"), :verbose => self.verbose
|
122
|
+
cp_r File.join(self.vendor_root, "jasmine", "lib"),
|
116
123
|
File.join(self.path, "spec", "lib"), :verbose => self.verbose
|
117
124
|
|
118
125
|
|
@@ -139,22 +146,22 @@ module QEDProject
|
|
139
146
|
# spec/ * optional
|
140
147
|
# Guardfile * optional
|
141
148
|
def create_project_skeleton
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
149
|
+
mkdir_p( self.path, :verbose => self.verbose)
|
150
|
+
mkdir_p( File.join(self.path, self.public_dir), :verbose => self.verbose)
|
151
|
+
mkdir_p( File.join(self.path, self.images_path), :verbose => self.verbose)
|
152
|
+
mkdir_p( File.join(self.path, "tmp"), :verbose => self.verbose)
|
153
|
+
mkdir_p( File.join(self.path, self.js_path), :verbose => self.verbose)
|
154
|
+
mkdir_p( File.join(self.path, self.css_path), :verbose => self.verbose)
|
155
|
+
mkdir_p( File.join(self.path, "config"), :verbose => self.verbose) if self.needs_config_folder?
|
156
|
+
mkdir_p( File.join(self.path, "coffeescripts"), :verbose => self.verbose) if self.coffeescript
|
157
|
+
mkdir_p( File.join(self.path, "sass"), :verbose => self.verbose) if self.sass
|
151
158
|
end
|
152
159
|
|
153
160
|
# Loop through the libraries the user added
|
154
161
|
# and run their generate methods
|
155
162
|
# which pulls in the additional optional files.
|
156
163
|
def get_libraries
|
157
|
-
|
164
|
+
self.sorted_libs.each do |lib|
|
158
165
|
library = QEDProject::Libraries::Base.libs[lib]
|
159
166
|
l = library.new(self)
|
160
167
|
l.generate!
|
@@ -173,8 +180,8 @@ module QEDProject
|
|
173
180
|
|
174
181
|
def create_index
|
175
182
|
@project = self
|
176
|
-
render_template_to_file "index.html", File.join(self.path,
|
177
|
-
puts "Created #{ File.join(self.path,
|
183
|
+
render_template_to_file "index.html", File.join(self.path, self.public_dir, "index.html"), binding
|
184
|
+
puts "Created #{ File.join(self.path, self.public_dir, "index.html")}" if self.verbose
|
178
185
|
end
|
179
186
|
|
180
187
|
def create_rakefile
|
data/lib/qedproject/version.rb
CHANGED
data/lib/qedproject.rb
CHANGED
@@ -5,10 +5,14 @@ require "qedproject/libraries/jquery"
|
|
5
5
|
require "qedproject/libraries/backbone"
|
6
6
|
require "qedproject/libraries/knockout"
|
7
7
|
require "qedproject/libraries/jquerytmpl"
|
8
|
+
require "qedproject/libraries/jquerymobile"
|
8
9
|
require "qedproject/libraries/skeleton"
|
9
10
|
require "qedproject/project"
|
11
|
+
require "qedproject/plugins"
|
10
12
|
|
11
13
|
module QEDProject
|
12
14
|
class BadLibraryError < RuntimeError
|
13
15
|
end
|
14
16
|
end
|
17
|
+
|
18
|
+
QEDProject::Plugins::load_plugins
|
data/templates/assets.yml
CHANGED
data/templates/sampleSpec.coffee
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|