marv 0.3.2 → 0.4.0
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/.document +5 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile +8 -10
- data/Gemfile.lock +16 -43
- data/LICENSE +0 -24
- data/README.md +9 -10
- data/Rakefile +4 -20
- data/VERSION +1 -1
- data/bin/marv +1 -1
- data/layouts/config/global.rb +31 -0
- data/layouts/config/project.rb +27 -0
- data/layouts/config/{router.php.erb → router.php} +5 -1
- data/layouts/config/server.rb +12 -0
- data/layouts/config/{wp-config.php.erb → wp-config.php} +0 -0
- data/layouts/plugin/{images → assets/images}/screenshot.png +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/admin.coffee +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/admin.js +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/plugin.coffee +0 -0
- data/layouts/plugin/assets/javascripts/plugin.js +1 -0
- data/layouts/plugin/{stylesheets → assets/stylesheets}/plugin.scss +0 -0
- data/layouts/plugin/functions/{plugin.php.erb → plugin.php} +8 -7
- data/layouts/theme/{images → assets/images}/screenshot.png +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/admin.coffee +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/admin.js +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/theme.coffee +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/theme.js +0 -0
- data/layouts/theme/assets/stylesheets/_header.scss +18 -0
- data/layouts/theme/{stylesheets/style.scss.erb → assets/stylesheets/style.scss} +0 -0
- data/layouts/theme/functions/{functions.php.erb → functions.php} +0 -0
- data/layouts/theme/includes/{filters-admin.php.erb → filters-admin.php} +0 -0
- data/layouts/theme/includes/{filters.php.erb → filters.php} +0 -0
- data/layouts/theme/includes/{helpers.php.erb → helpers.php} +0 -0
- data/layouts/theme/templates/{404.php.erb → pages/404.php} +0 -0
- data/layouts/theme/templates/{archive.php.erb → pages/archive.php} +0 -0
- data/layouts/theme/templates/{author.php.erb → pages/author.php} +0 -0
- data/layouts/theme/templates/{search.php.erb → pages/search.php} +0 -0
- data/layouts/theme/templates/partials/{comments.php.erb → comments.php} +0 -0
- data/layouts/theme/templates/partials/{content-none.php.erb → content-none.php} +0 -0
- data/layouts/theme/templates/partials/{content.php.erb → content.php} +0 -0
- data/layouts/theme/templates/partials/{searchform.php.erb → searchform.php} +0 -0
- data/lib/marv.rb +8 -8
- data/lib/marv/cli.rb +15 -192
- data/lib/marv/cli/project.rb +57 -0
- data/lib/marv/cli/server.rb +65 -0
- data/lib/marv/global.rb +285 -0
- data/lib/marv/project/actions.rb +144 -0
- data/lib/marv/project/builder.rb +61 -0
- data/lib/marv/project/builder/assets.rb +112 -0
- data/lib/marv/{engines.rb → project/builder/engines.rb} +3 -1
- data/lib/marv/project/builder/functions.rb +112 -0
- data/lib/marv/project/builder/templates.rb +37 -0
- data/lib/marv/project/create.rb +139 -0
- data/lib/marv/project/guard.rb +83 -0
- data/lib/marv/project/guard/assets.rb +37 -0
- data/lib/{guard/marv → marv/project/guard}/config.rb +5 -9
- data/lib/marv/project/guard/functions.rb +44 -0
- data/lib/marv/project/guard/templates.rb +35 -0
- data/lib/marv/project/project.rb +149 -0
- data/lib/marv/server/actions.rb +79 -0
- data/lib/marv/server/create.rb +100 -0
- data/lib/marv/server/server.rb +201 -0
- data/marv.gemspec +69 -71
- metadata +82 -107
- data/.rspec +0 -1
- data/features/step_definitions/marv_steps.rb +0 -38
- data/features/support/env.rb +0 -17
- data/layouts/config/project-config.rb +0 -17
- data/layouts/plugin/javascripts/plugin.js +0 -1
- data/layouts/theme/stylesheets/_header.scss.erb +0 -18
- data/lib/guard/marv/assets.rb +0 -33
- data/lib/guard/marv/folders.rb +0 -33
- data/lib/guard/marv/functions.rb +0 -34
- data/lib/guard/marv/templates.rb +0 -33
- data/lib/marv/builder.rb +0 -355
- data/lib/marv/error.rb +0 -8
- data/lib/marv/generator.rb +0 -140
- data/lib/marv/guard.rb +0 -68
- data/lib/marv/project.rb +0 -134
- data/lib/marv/server.rb +0 -284
- data/spec/lib/marv/project_spec.rb +0 -34
- data/spec/spec_helper.rb +0 -12
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'zip'
|
2
|
+
|
3
|
+
module Marv
|
4
|
+
module Project
|
5
|
+
class Actions
|
6
|
+
|
7
|
+
# Initialize project actions
|
8
|
+
def initialize(project, builder)
|
9
|
+
@project = project
|
10
|
+
@task = project.task
|
11
|
+
@builder = builder
|
12
|
+
@global = Marv::Global.new(project.task)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Link project
|
16
|
+
def link(dir)
|
17
|
+
@link_dir = dir
|
18
|
+
|
19
|
+
link_options
|
20
|
+
link_target
|
21
|
+
create_link
|
22
|
+
end
|
23
|
+
|
24
|
+
# Packgage project
|
25
|
+
def package(filename)
|
26
|
+
@package_name = filename
|
27
|
+
|
28
|
+
create_package
|
29
|
+
end
|
30
|
+
|
31
|
+
# Ask for link details
|
32
|
+
def link_options
|
33
|
+
options = {}
|
34
|
+
options[:folder] = @task.ask "Where do you want to link your project?", :limited_to => ["themes", "plugins"], :default => "themes"
|
35
|
+
|
36
|
+
@link_options = options
|
37
|
+
end
|
38
|
+
|
39
|
+
# Link to server
|
40
|
+
def link_to_server
|
41
|
+
unless @link_dir.nil?
|
42
|
+
::File.join(@global.servers_path, @link_dir, 'wp-content', @link_options[:folder], ::File.basename(@project.root))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Link to wordpress
|
47
|
+
def link_to_folder
|
48
|
+
unless @link_dir.nil?
|
49
|
+
unless @global.servers.include?(@link_dir)
|
50
|
+
::File.join(@link_dir, 'wp-content', @link_options[:folder], ::File.basename(@project.root))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Link target
|
56
|
+
def link_target
|
57
|
+
target = ::File.join(@global.global_path, @link_options[:folder], ::File.basename(@project.root))
|
58
|
+
target = link_to_server unless link_to_server.nil?
|
59
|
+
target = link_to_folder unless link_to_folder.nil?
|
60
|
+
|
61
|
+
@link_target = target
|
62
|
+
end
|
63
|
+
|
64
|
+
# Create project link
|
65
|
+
def create_link
|
66
|
+
unless ::File.directory?(@project.build_path)
|
67
|
+
@task.shell.mute do
|
68
|
+
@task.empty_directory @project.build_path
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
@task.create_link @link_target, @project.build_path
|
73
|
+
end
|
74
|
+
|
75
|
+
# Create package
|
76
|
+
def create_package
|
77
|
+
create_package_dir
|
78
|
+
set_package_filename
|
79
|
+
build_to_temp_dir
|
80
|
+
create_temp_zip
|
81
|
+
create_zip_file
|
82
|
+
remove_temp_files
|
83
|
+
end
|
84
|
+
|
85
|
+
# Create package directory
|
86
|
+
def create_package_dir
|
87
|
+
@task.shell.mute do
|
88
|
+
unless ::File.directory?(@project.package_path)
|
89
|
+
@task.empty_directory @project.package_path
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Set the package file name
|
95
|
+
def set_package_filename
|
96
|
+
if @package_name.nil?
|
97
|
+
@package_name = ::File.basename(@project.root)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Built to a temporary directory
|
102
|
+
def build_to_temp_dir
|
103
|
+
@builder.build_project
|
104
|
+
|
105
|
+
# Copy build files to temporary directory
|
106
|
+
@task.shell.mute do
|
107
|
+
@task.directory @project.build_path, ::File.join(@project.package_path, @package_name)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Create temporary package
|
112
|
+
def create_temp_zip
|
113
|
+
tmp_filename = ::File.join(@project.package_path, "#{@package_name}.tmp")
|
114
|
+
|
115
|
+
# Create an temporary file
|
116
|
+
::Zip.continue_on_exists_proc = true
|
117
|
+
::Zip::File.open(tmp_filename, Zip::File::CREATE) do |zip|
|
118
|
+
# Get all filenames
|
119
|
+
filenames = ::Dir.glob(::File.join(@project.package_path, @package_name, '**', '*'))
|
120
|
+
|
121
|
+
# Add each file in the zip file
|
122
|
+
filenames.each do |filename|
|
123
|
+
zip.add filename.gsub("#{@project.package_path}/", ''), filename
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Create the package
|
129
|
+
def create_zip_file
|
130
|
+
zip_filename = ::File.join(@project.package_path, "#{@package_name}.zip")
|
131
|
+
@task.copy_file ::File.join(@project.package_path, "#{@package_name}.tmp"), zip_filename
|
132
|
+
end
|
133
|
+
|
134
|
+
# Remove temporary build directory
|
135
|
+
def remove_temp_files
|
136
|
+
@task.shell.mute do
|
137
|
+
@task.remove_dir ::File.join(@project.package_path, @package_name)
|
138
|
+
@task.remove_file ::File.join(@project.package_path, "#{@package_name}.tmp")
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'marv/project/builder/engines'
|
2
|
+
require 'marv/project/builder/assets'
|
3
|
+
require 'marv/project/builder/functions'
|
4
|
+
require 'marv/project/builder/templates'
|
5
|
+
|
6
|
+
module Marv
|
7
|
+
module Project
|
8
|
+
class Builder
|
9
|
+
|
10
|
+
attr_accessor :task, :project, :assets, :functions, :templates
|
11
|
+
|
12
|
+
# Initialize project builder
|
13
|
+
def initialize(project)
|
14
|
+
@project = project
|
15
|
+
@task = project.task
|
16
|
+
@config = project.config
|
17
|
+
@assets = Marv::Project::Assets.new(self)
|
18
|
+
@functions = Marv::Project::Functions.new(self)
|
19
|
+
@templates = Marv::Project::Templates.new(self)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Start builder
|
23
|
+
def build_project
|
24
|
+
clean_directory
|
25
|
+
|
26
|
+
@assets.build_assets
|
27
|
+
@assets.clean_images
|
28
|
+
@assets.copy_images
|
29
|
+
|
30
|
+
@templates.clean_templates
|
31
|
+
@templates.copy_templates
|
32
|
+
|
33
|
+
@functions.clean_functions
|
34
|
+
@functions.copy_functions
|
35
|
+
@functions.clean_includes
|
36
|
+
@functions.copy_includes
|
37
|
+
@functions.clean_folders
|
38
|
+
@functions.copy_folders
|
39
|
+
end
|
40
|
+
|
41
|
+
# Build project to a directory
|
42
|
+
def build_to(dir)
|
43
|
+
build_project
|
44
|
+
# Remove build directory
|
45
|
+
@task.shell.mute do
|
46
|
+
@task.remove_dir ::File.expand_path(dir)
|
47
|
+
end
|
48
|
+
# Copy files from .watch/build directory
|
49
|
+
@task.directory @project.build_path, ::File.expand_path(dir)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Clean build directory
|
53
|
+
def clean_directory
|
54
|
+
@task.shell.mute do
|
55
|
+
@task.remove_dir @project.build_path
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
|
3
|
+
module Marv
|
4
|
+
module Project
|
5
|
+
class Assets
|
6
|
+
|
7
|
+
# Initialize assets builder
|
8
|
+
def initialize(builder)
|
9
|
+
@builder = builder
|
10
|
+
@task = builder.task
|
11
|
+
@project = builder.project
|
12
|
+
@config = builder.project.config
|
13
|
+
|
14
|
+
init_sprockets
|
15
|
+
end
|
16
|
+
|
17
|
+
# Clean images
|
18
|
+
def clean_images
|
19
|
+
@task.shell.mute do
|
20
|
+
# Remove screenshot image
|
21
|
+
::Dir.glob(::File.join(@project.build_path, 'screenshot.*')).each do |file|
|
22
|
+
@task.remove_file file
|
23
|
+
end
|
24
|
+
|
25
|
+
# Remove images folder
|
26
|
+
@task.remove_dir ::File.join(@project.build_path, 'images')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Copy images
|
31
|
+
def copy_images
|
32
|
+
@task.shell.mute do
|
33
|
+
::Dir.glob(::File.join(@project.assets_path, 'images', '*')).each do |filename|
|
34
|
+
# Check for screenshot and move it into main build directory
|
35
|
+
if filename.index(/screenshot/)
|
36
|
+
@task.copy_file filename, ::File.join(@project.build_path, ::File.basename(filename)), :force => true
|
37
|
+
else
|
38
|
+
# Copy the other files in images directory
|
39
|
+
@task.copy_file filename, ::File.join(@project.build_path, 'images'), :force => true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Build assets
|
46
|
+
def build_assets
|
47
|
+
@project.assets.each do |asset|
|
48
|
+
# Catch any sprockets errors and continue the process
|
49
|
+
begin
|
50
|
+
build_asset_file asset
|
51
|
+
rescue Exception => e
|
52
|
+
print_asset_error asset, e.message
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Build asset file
|
58
|
+
def build_asset_file(asset)
|
59
|
+
destination = ::File.join(@project.build_path, asset)
|
60
|
+
|
61
|
+
@task.shell.mute do
|
62
|
+
sprocket = @sprockets.find_asset(asset.last)
|
63
|
+
# Create asset destination
|
64
|
+
@task.empty_directory ::File.dirname(destination) unless ::File.directory?(::File.dirname(destination))
|
65
|
+
# Write file to destination
|
66
|
+
sprocket.write_to(destination) unless sprocket.nil?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Print error to screen and file
|
71
|
+
def print_asset_error(asset, message)
|
72
|
+
destination = ::File.join(@project.build_path, asset)
|
73
|
+
|
74
|
+
@task.say "Error while building #{asset.last}:"
|
75
|
+
@task.say message, :red
|
76
|
+
|
77
|
+
@task.shell.mute do
|
78
|
+
@task.create_file destination unless ::File.exists?(destination)
|
79
|
+
@task.append_to_file destination, message
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Init sprockets
|
84
|
+
def init_sprockets
|
85
|
+
@sprockets = ::Sprockets::Environment.new
|
86
|
+
|
87
|
+
['javascripts', 'stylesheets'].each do |dir|
|
88
|
+
@sprockets.append_path ::File.join(@project.assets_path, dir)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Check for js compression
|
92
|
+
if @config[:compress_js]
|
93
|
+
@sprockets.js_compressor = :uglify
|
94
|
+
end
|
95
|
+
|
96
|
+
# Check for css compression
|
97
|
+
if @config[:compress_css]
|
98
|
+
@sprockets.css_compressor = :scss
|
99
|
+
end
|
100
|
+
|
101
|
+
# Passing the @project instance variable to the Sprockets::Context instance
|
102
|
+
# used for processing the asset ERB files
|
103
|
+
@sprockets.context_class.instance_exec(@project) do |project|
|
104
|
+
define_method :config do
|
105
|
+
project.config
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Marv
|
2
|
+
module Project
|
3
|
+
class Functions
|
4
|
+
|
5
|
+
# Initialize functions builder
|
6
|
+
def initialize(builder)
|
7
|
+
@builder = builder
|
8
|
+
@task = builder.task
|
9
|
+
@project = builder.project
|
10
|
+
@config = builder.project.config
|
11
|
+
end
|
12
|
+
|
13
|
+
# Clean functions
|
14
|
+
def clean_functions
|
15
|
+
@task.shell.mute do
|
16
|
+
#remove functions and plugin php
|
17
|
+
@task.remove_file ::File.join(@project.build_path, ::File.basename(@project.functions_file))
|
18
|
+
@task.remove_file ::File.join(@project.build_path, ::File.basename(@project.plugin_file))
|
19
|
+
|
20
|
+
# Remove functions folder
|
21
|
+
@task.remove_dir ::File.join(@project.build_path, 'functions')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Copy functions
|
26
|
+
def copy_functions
|
27
|
+
@task.shell.mute do
|
28
|
+
files = copy_functions_files
|
29
|
+
|
30
|
+
::Dir.glob(::File.join(@project.functions_path, '*')).each do |file|
|
31
|
+
unless files.include?(file)
|
32
|
+
@task.copy_file file, ::File.join(@project.build_path, 'functions', ::File.basename(file)), :force => true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Copy functions
|
39
|
+
def copy_functions_files
|
40
|
+
files = [@project.functions_file, @project.plugin_file]
|
41
|
+
|
42
|
+
::Dir.glob(::File.join(@project.functions_path, '*')).each do |file|
|
43
|
+
if files.include?(file)
|
44
|
+
@task.copy_file file, ::File.join(@project.build_path, ::File.basename(file)), :force => true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
return files
|
49
|
+
end
|
50
|
+
|
51
|
+
# Clean includes
|
52
|
+
def clean_includes
|
53
|
+
@task.shell.mute do
|
54
|
+
@task.remove_dir ::File.join(@project.build_path, 'includes')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Copy includes
|
59
|
+
def copy_includes
|
60
|
+
@task.shell.mute do
|
61
|
+
::Dir.glob(::File.join(@project.includes_path, '**', '*')).each do |file|
|
62
|
+
source = file.gsub(@project.source_path, '')
|
63
|
+
target = ::File.join(@project.build_path, source)
|
64
|
+
|
65
|
+
@task.copy_file file, target, :force => true unless ::File.directory?(file)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Clean folders
|
71
|
+
def clean_folders
|
72
|
+
@task.shell.mute do
|
73
|
+
# Clean extra folder from project root
|
74
|
+
extra_folders.each do |folder|
|
75
|
+
source = folder.gsub(@project.source_path, '')
|
76
|
+
target = ::File.join(@project.build_path, source)
|
77
|
+
|
78
|
+
@task.remove_dir target
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Copy folders
|
84
|
+
def copy_folders
|
85
|
+
@task.shell.mute do
|
86
|
+
# Copy extra folders to project root
|
87
|
+
extra_folders.each do |folder|
|
88
|
+
source = folder.gsub(@project.source_path, '')
|
89
|
+
target = ::File.join(@project.build_path, source)
|
90
|
+
|
91
|
+
@task.directory folder, target
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Extra folders
|
97
|
+
def extra_folders
|
98
|
+
default = ['assets', 'functions', 'includes', 'templates']
|
99
|
+
folders = []
|
100
|
+
# Remove marv folders from root path
|
101
|
+
::Dir.glob(::File.join(@project.source_path, '*')).each do |folder|
|
102
|
+
if ::File.directory?(folder) and ! default.include?(::File.basename(folder))
|
103
|
+
folders << folder
|
104
|
+
end
|
105
|
+
end
|
106
|
+
# Return folders array
|
107
|
+
return folders
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Marv
|
2
|
+
module Project
|
3
|
+
class Templates
|
4
|
+
|
5
|
+
# Initialize templates builder
|
6
|
+
def initialize(builder)
|
7
|
+
@builder = builder
|
8
|
+
@task = builder.task
|
9
|
+
@project = builder.project
|
10
|
+
@config = builder.project.config
|
11
|
+
end
|
12
|
+
|
13
|
+
# Clean Templates
|
14
|
+
def clean_templates
|
15
|
+
@task.shell.mute do
|
16
|
+
::Dir.glob(::File.join(@project.build_path, '*.php')).each do |file|
|
17
|
+
unless file.include?('functions.php') || file.include?(::File.basename(@project.plugin_file))
|
18
|
+
@task.remove_file file
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Copy templates
|
25
|
+
def copy_templates
|
26
|
+
@task.shell.mute do
|
27
|
+
::Dir.glob(::File.join(@project.templates_path, '**', '*')).each do |file|
|
28
|
+
target = ::File.join(@project.build_path, ::File.basename(file))
|
29
|
+
|
30
|
+
@task.copy_file file, target, :force => true unless ::File.directory?(file)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|