mr_hyde 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ec62071e2cf42fc9b179c84964c68874b92babab
4
+ data.tar.gz: 6c6470ac9a73127c09b80618ec54c5b45ca0e25f
5
+ SHA512:
6
+ metadata.gz: 6ed4ab1d0e48757ec3640cbb0b099ac58b0ce2541eec6b38eb79847e3d917faee12e2291dd997fa64ed7eb2bf10779665a706edddf63f3b9f8c56284ceeb6920
7
+ data.tar.gz: b18c81a9d1d4923dbd8d0afe491909d711ba35587a094d472ea68fcbd8b0cee27050fcce25d559e1cdcb0fb356bd1156b5d52cf1d848f32d35dd7e29fe4bddb1
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .sass-cache/
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.0
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mr_hyde.gemspec
4
+ gemspec
5
+
6
+ gem 'jekyll', '2.5.3'
7
+ gem 'mercenary', '0.3.5'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # MrHyde
2
+
3
+ Mr. Hyde lets you generate and manage as many sites as you want.
4
+
5
+ It's based on [Jekyll](https://github.com/jekyll/jekyll), in fact Mr. Hyde wraps Jekyll to give you the possibilty of managing many sites.
6
+
7
+ The current version is based on [Jekyll 2.5.3](https://github.com/jekyll/jekyll/tree/v2.5.3).
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'mr_hyde'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ ```bash
20
+ $ bundle
21
+ ```
22
+
23
+ Or install it yourself as:
24
+
25
+ ```bash
26
+ $ gem install mr_hyde
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ In order to use Mr. Hyde the first thing you must do is creating the Mr. Hyde rootl folder with the next command:
32
+
33
+ ```bash
34
+ $ mrhyde new [PATH]
35
+ ```
36
+
37
+ The previuos command creates the basic structure folder in the passed in PATH or in the same folder if no PATH given.
38
+
39
+ Once created get in the Mr. Hyde root folder and you can execute the next commands:
40
+
41
+ ```bash
42
+ $ cd PATH
43
+ $ mrhyde site new SITE_NAME
44
+ $ mrhyde site build SITE_NAME
45
+ ```
46
+
47
+ The above commands give you first site, by now if you want to run on a server get in the site/SITE_NAME and executes:
48
+
49
+ ```bash
50
+ $ cd root_folder/site/site_name
51
+ $ jekyll serve
52
+ ```
53
+
54
+ If you want to know more about this, please refer to [Jekyll](http://jekyllrb.com/).
55
+
56
+ Removing the built site is:
57
+
58
+ ```bash
59
+ $ mrhyde site rm SITE_NAME
60
+ $ mrhyde site rm SITE_NAME --full
61
+ ```
62
+
63
+ The last command with the _--full_ option removes the site source as well, so take care with this option.
64
+
65
+ You can see more information about the commands with the command line _--help_ option:
66
+
67
+ ```bash
68
+ $ mrhyde site new --help
69
+ ```
70
+
71
+ ## Contributing
72
+
73
+ 1. Fork it ( https://github.com/[my-github-username]/mr_hyde/fork )
74
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
75
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
76
+ 4. Push to the branch (`git push origin my-new-feature`)
77
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ ENV["JEKYLL_LOG_LEVEL"] = "error"
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs.push "lib"
8
+ t.test_files = FileList["spec/*_spec.rb"]
9
+ #t.test_files = FileList["test/*_test.rb"]
10
+ #t.pattern = "test/*_test.rb"
11
+ t.verbose = true
12
+ end
data/bin/mrhyde ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ STDOUT.sync = true
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
6
+
7
+ require 'io/console'
8
+ require 'mercenary'
9
+ require 'mr_hyde'
10
+ require 'mr_hyde/commands/remove'
11
+
12
+ Mercenary.program(:mrhyde) do |p|
13
+ p.version MrHyde::VERSION
14
+ p.description "Mr. Hyde is a tool intended to manage as many blog as you want powered by Jekyll."
15
+ p.syntax "mrhyde <subcommand>"
16
+
17
+ p.command(:new) do |c|
18
+ c.syntax "new <subcommand>"
19
+ c.description "Creates a new Mr. Hyde site scaffold in path"
20
+ c.option "force", "--force", "Force creation even if PATH already exists"
21
+
22
+ c.action do |args, options|
23
+ MrHyde::Commands::New.process(args, options)
24
+ end
25
+ end
26
+
27
+ p.command(:site) do |site|
28
+ site.syntax "site <subcommand>"
29
+ site.description "Manage all sites from command line"
30
+
31
+ site.command(:new) do |snew|
32
+ snew.syntax "new name[ name ... n]"
33
+ snew.description "Creates a new Jekyll site or sites"
34
+
35
+ snew.option "force", "--force", "Force creation even if PATH already exists"
36
+ snew.option "blank", "--blank", "Creates scaffolding but with empty files"
37
+
38
+ snew.action do |args, options|
39
+ MrHyde::Commands::New.process({ :type => :site, :args => args }, options)
40
+ end
41
+ end
42
+
43
+ site.command(:remove) do |srm|
44
+ srm.syntax "remove name[ name ... n] "
45
+ srm.description "Remove a Jekyll site when on Mr.Hyde root folder. By default it removes just the built site."
46
+
47
+ srm.alias(:rm)
48
+
49
+ srm.option "force", "--force", "Don't ask for remove blog"
50
+ srm.option "all", "--all", "Remove all built sites. This option works alone."
51
+ srm.option "full", "--full", "Remove all built and draft site or sites. This option can be used with the rest of options."
52
+
53
+ srm.action do |args, options|
54
+ MrHyde::Commands::Remove.process(args, options)
55
+ end
56
+ end
57
+
58
+ site.command(:build) do |sbuild|
59
+ sbuild.syntax "build name[ name ... n] "
60
+ sbuild.description "Build the named blog or blogs, by default if no name is indicated then all blog will be built"
61
+
62
+ sbuild.option "all", "--all", "Build all blogs"
63
+
64
+ sbuild.action do |args, options|
65
+ MrHyde::Commands::Build.process args, options
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ p.action do |args, options|
72
+ if args.empty?
73
+ puts p
74
+ else
75
+ unless p.has_command?(args.first)
76
+ MrHyde.logger.abort_with "Invalid command. Use --help for more information"
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,146 @@
1
+ require "jekyll"
2
+ require "fileutils"
3
+ require "mr_hyde"
4
+ require "mr_hyde/configuration"
5
+
6
+ # TODO: The site place must be taken from the default config or the one provided by user
7
+ module MrHyde
8
+ class Blog
9
+
10
+ class << self
11
+ # Creates the directory and necessary files for the blog
12
+ # args
13
+ # :name
14
+ # String => creates the concrete blog
15
+ # Array[String] => creates the correspondings blog names
16
+ # Returns
17
+ # boolean
18
+ def create(args, opts = {})
19
+ opts = MrHyde.configuration(opts)
20
+
21
+ if args.kind_of? Array and not args.empty?
22
+ args.each do |bn|
23
+ begin
24
+ create_blog(bn, opts)
25
+ rescue Exception => e
26
+ raise e unless e.class == SystemExit
27
+ end
28
+ end
29
+ elsif args.kind_of? String
30
+ create_blog args, opts
31
+ end
32
+ rescue Exception => e
33
+ MrHyde.logger.error "cannot create blog: #{e}"
34
+ end
35
+
36
+ # Removes the blog directory
37
+ # Params:
38
+ # Hash[:path] (String)
39
+ # Returns
40
+ # boolean
41
+ def remove(args, opts = {})
42
+ opts = MrHyde.configuration(opts)
43
+
44
+ if opts['all']
45
+ list(opts['sources']).each do |sm|
46
+ remove_blog sm, opts
47
+ end
48
+ elsif args.kind_of? Array
49
+ args.each do |sm|
50
+ remove_blog sm, opts
51
+ end
52
+ else
53
+ remove_blog args, opts
54
+ end
55
+ rescue Exception => e
56
+ MrHyde.logger.error "cannot remove the blog: #{e}"
57
+ end
58
+
59
+ # Builds the blog
60
+ # Params:
61
+ # :name
62
+ # String => builds the concrete blog
63
+ # Array[String] => builds the correspondings blog names
64
+ # empty => It builds all blogs
65
+ # Returns
66
+ # boolean
67
+ def build(args, opts = {})
68
+ args = [args] if args.kind_of? String
69
+ opts = MrHyde.configuration(opts)
70
+
71
+ if opts["all"]
72
+ build_blogs list(opts['sources']), opts
73
+ elsif args.kind_of? Array
74
+ build_blogs args, opts
75
+ elsif args.kind_of? String
76
+ build_blog args
77
+ end
78
+ rescue Exception => e
79
+ MrHyde.logger.error "cannot build site: #{e}"
80
+ MrHyde.logger.error e.backtrace
81
+ end
82
+
83
+ def list(path)
84
+ entries = Dir.entries(path)
85
+ entries.reject! { |item| item == '.' or item == '..' }
86
+ entries
87
+ end
88
+
89
+ def exist?(name, opts)
90
+ File.exist? File.join(opts['sources'], name)
91
+ end
92
+
93
+ def built?(name, opts)
94
+ File.exist? File.join(opts['destination'], name)
95
+ end
96
+
97
+ private
98
+
99
+ def create_blog(args, opts = {})
100
+ Jekyll::Commands::New.process [File.join(opts['sources'], args)], opts
101
+ exist? args, opts
102
+ end
103
+
104
+ def remove_blog(name, opts = {})
105
+ if opts['full'] and File.exist? File.join(opts['sources'], name)
106
+ FileUtils.remove_dir File.join(opts['sources'], name)
107
+ MrHyde.logger.info "#{name} removed from #{opts['sources']}"
108
+ end
109
+ if File.exist? File.join(opts['destination'], name)
110
+ FileUtils.remove_dir File.join(opts['destination'], name)
111
+ MrHyde.logger.info "#{name} removed from #{opts['destination']}"
112
+ end
113
+ end
114
+
115
+ def build_blogs(site_names, opts)
116
+ site_names.each do |sn|
117
+ begin
118
+ build_blog(sn, opts)
119
+ rescue Exception => e
120
+ MrHyde.logger.error e
121
+ end
122
+ end
123
+ end
124
+
125
+ def build_blog(name, opts)
126
+ Jekyll::Commands::Build.process 'source' => File.join(opts['sources'], name),
127
+ 'destination' => File.join(opts['destination'], name)
128
+ built? name, opts
129
+ end
130
+
131
+ def site?
132
+ File.exist? MrHyde.configuration.root
133
+ end
134
+
135
+ def check_blog(blog_name, method, message)
136
+ if not send(method, blog_name)
137
+ MrHyde.logger.debug message
138
+ return false
139
+ end
140
+ true
141
+ end
142
+
143
+ end
144
+
145
+ end
146
+ end
@@ -0,0 +1,22 @@
1
+ require "jekyll/command"
2
+
3
+ def command_class; Jekyll::Command; end
4
+
5
+ module MrHyde
6
+ class Command < command_class
7
+ class << self
8
+ # Create a full Jekyll configuration with the options passed in as overrides
9
+ #
10
+ # options - the configuration overrides
11
+ #
12
+ # Returns a full MrHyde configuration
13
+ def configuration_from_options(options)
14
+ MrHyde.configuration(options)
15
+ end
16
+
17
+ def configuration
18
+ MrHyde.configuration
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ require "fileutils"
2
+
3
+ require "mr_hyde"
4
+ require "mr_hyde/configuration"
5
+ require "mr_hyde/extensions/new"
6
+ require "mr_hyde/command"
7
+ require "mr_hyde/blog"
8
+
9
+ module MrHyde
10
+ module Commands
11
+ class Build < MrHyde::Command
12
+ class << self
13
+ # Options
14
+ def process(args, opts = {})
15
+ MrHyde::Blog.build args, opts
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ require "fileutils"
2
+
3
+ require "jekyll"
4
+
5
+ require "mr_hyde"
6
+ require "mr_hyde/configuration"
7
+ require "mr_hyde/extensions/new"
8
+ require "mr_hyde/command"
9
+ require "mr_hyde/blog"
10
+
11
+ module MrHyde
12
+ module Commands
13
+ class New < MrHyde::Command
14
+ class << self
15
+ # Options
16
+ # :type => what type of element we want to create [:blog|:site]
17
+ # by default it creates a new MrHyde site
18
+ # if :type is :blog then
19
+ # :name => blog's name
20
+ #
21
+ def process(args, opts = {})
22
+ case args.delete(:type)
23
+ when :site then new_site(args[:args], opts)
24
+ else scaffold(args, opts)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def scaffold(args, opts)
31
+ new_site_path = MrHyde.create args, opts
32
+ MrHyde.logger.info "New Mr. Hyde Site installed in #{new_site_path}"
33
+ rescue SystemExit => se
34
+ MrHyde.logger.abort_with "Conflict:", se.message
35
+ end
36
+
37
+ def new_site(args, opts)
38
+ Blog.create(args, opts)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,14 @@
1
+ require "mr_hyde/command"
2
+ require "mr_hyde/blog"
3
+
4
+ module MrHyde
5
+ module Commands
6
+ class Remove < MrHyde::Command
7
+ class << self
8
+ def process(args, opts = {})
9
+ Blog.remove args, opts
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ require "jekyll/configuration"
2
+
3
+ module MrHyde
4
+
5
+ class Configuration < Jekyll::Configuration
6
+
7
+ DEFAULTS = {
8
+ 'sources' => 'sources',
9
+ 'destination' => 'site',
10
+ 'config' => '_mrhyde.yml',
11
+ 'jekyll_config' => '_jekyll.yml'
12
+ }
13
+
14
+ def read_config_files(files)
15
+ configuration = clone
16
+
17
+ begin
18
+ files.each do |config_file|
19
+ new_config = read_config_file(config_file)
20
+ configuration = Jekyll::Utils.deep_merge_hashes(configuration, new_config)
21
+ end
22
+ rescue ArgumentError => err
23
+ MrHyde.logger.warn "WARNING:", "Error reading configuration. " +
24
+ "Using defaults (and options)."
25
+ $stderr.puts "#{err}"
26
+ end
27
+ configuration
28
+ end
29
+ end
30
+ end
Binary file
@@ -0,0 +1,23 @@
1
+ require 'jekyll/command'
2
+ require 'jekyll/commands/new'
3
+
4
+ module MrHyde
5
+ module Extensions
6
+ class New < Jekyll::Commands::New
7
+ class << self
8
+ def template
9
+ site_template
10
+ end
11
+
12
+ def default_config_file
13
+ File.join template, '_config.yml'
14
+ end
15
+
16
+ def create_sample_site
17
+ create_sample_files
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module MrHyde
2
+ VERSION = "0.1.0"
3
+ end
data/lib/mr_hyde.rb ADDED
@@ -0,0 +1,93 @@
1
+ require "mr_hyde/version"
2
+ require "mr_hyde/blog"
3
+ require "mr_hyde/configuration"
4
+ require "mr_hyde/commands/new"
5
+ require "mr_hyde/commands/build"
6
+
7
+ require "logger"
8
+ require "fileutils"
9
+
10
+ require "jekyll/stevenson"
11
+ require "jekyll/log_adapter"
12
+ require "jekyll/utils"
13
+
14
+ module MrHyde
15
+ class << self
16
+ attr_accessor :configuration
17
+
18
+ def configure
19
+ self.configuration ||= Configuration.new
20
+ yield(configuration) if block_given?
21
+ end
22
+
23
+ def configuration(override = Hash.new)
24
+ config = Configuration[Configuration::DEFAULTS]
25
+ override = Configuration[override].stringify_keys
26
+
27
+ unless override.delete('skip_config_files')
28
+ override['config'] ||= config['config']
29
+ config = config.read_config_files(config.config_files(override))
30
+ end
31
+ # Merge DEFAULTS < _config.yml < override
32
+ config = Jekyll::Utils.deep_merge_hashes(config, override).stringify_keys
33
+ set_timezone(config['timezone']) if config['timezone']
34
+
35
+ config
36
+ end
37
+
38
+ # Public: Fetch the logger instance for this Jekyll process.
39
+ #
40
+ # Returns the LogAdapter instance.
41
+ def logger
42
+ Jekyll.logger
43
+ end
44
+
45
+ # Creates the folders for the sources and destination,
46
+ # by default will be created under root folder.
47
+ # Copies the default _config.yml for all blogs, in root folder.
48
+ #
49
+ # Throws a SystemExit exception
50
+ #
51
+ def create(args, opts = {})
52
+ args = [args] if args.kind_of? String
53
+ new_site_path = File.expand_path(args.join(" "), Dir.pwd)
54
+ FileUtils.mkdir_p new_site_path
55
+ if preserve_source_location?(new_site_path, opts)
56
+ raise SystemExit.new "#{new_site_path} exists and is not empty."
57
+ end
58
+
59
+ if opts['blank']
60
+ create_black_site new_site_path
61
+ else
62
+ create_sample_files new_site_path
63
+ end
64
+ new_site_path
65
+ end
66
+
67
+ def build(opts = {})
68
+ Commands::Build.process opts
69
+ end
70
+
71
+ private
72
+
73
+ def preserve_source_location?(path, opts)
74
+ !opts["force"] && !Dir["#{path}/**/*"].empty?
75
+ end
76
+
77
+ def create_sample_files(path)
78
+ FileUtils.cp_r site_template + '/.', path
79
+ FileUtils.copy_file MrHyde::Extensions::New.default_config_file,
80
+ File.join(path, '_jekyll.yml')
81
+ Dir.chdir(path) do
82
+ FileUtils.mkdir(%w(sources)) unless File.exist? 'sources'
83
+ Blog.create ['welcome_site'], { 'force' => 'force' }
84
+ end
85
+
86
+ end
87
+
88
+ def site_template
89
+ File.expand_path("./site_template", File.dirname(__FILE__))
90
+ end
91
+ end
92
+
93
+ end
@@ -0,0 +1,11 @@
1
+ # Site settings
2
+ title: Your awesome title
3
+ email: your-email@domain.com
4
+ description: > # this means to ignore newlines until "baseurl:"
5
+ Write an awesome description for your new site here. You can edit this
6
+ line in _config.yml. It will appear in your document head meta (for
7
+ Google search results) and in your feed.xml site description.
8
+ baseurl: "" # the subpath of your site, e.g. /blog/
9
+ url: "http://yourdomain.com" # the base hostname & protocol for your site
10
+ twitter_username: mrhyderb
11
+ github_username: mrhyde
File without changes
File without changes
data/mr_hyde.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mr_hyde/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mr_hyde"
8
+ spec.version = MrHyde::VERSION
9
+ spec.authors = ["Enrique Arias Cervero"]
10
+ spec.email = ["enrique.arias.cervero@gmail.com"]
11
+ spec.summary = %q{Mr. Hyde lets you generate and manage as many sites as you want.}
12
+ spec.description = %q{Mr. Hyde lets you generate and manage as many sites as you want, something similar like Medium. It's based on Jekyll.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "minitest", "~> 5.4", ">= 5.4.3"
24
+
25
+ spec.add_runtime_dependency "jekyll", "~> 2.5", "2.5.3"
26
+ end
@@ -0,0 +1,49 @@
1
+ require "minitest/autorun"
2
+ require "minitest/pride"
3
+ require "mr_hyde"
4
+ require "mr_hyde/blog"
5
+ require "fileutils"
6
+
7
+ describe "MrHyde" do
8
+ before do
9
+ @path = 'mthyde_build_test'
10
+ MrHyde.create @path
11
+ end
12
+
13
+ after do
14
+ FileUtils.remove_dir(@path) if File.exist? @path
15
+ end
16
+
17
+ it "can build a single site" do
18
+ Dir.chdir(File.join Dir.pwd, @path) do
19
+ MrHyde::Blog.create 'site_test'
20
+ MrHyde::Blog.build 'site_test'
21
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['destination'], 'site_test').must_be :==, true
22
+ end
23
+ end
24
+
25
+ it "can build an array of sites" do
26
+ Dir.chdir(File.join Dir.pwd, @path) do
27
+ site_names = []
28
+ 5.times { |i| site_names << "site_test_#{i}" }
29
+ MrHyde::Blog.create site_names
30
+ MrHyde::Blog.build site_names
31
+ site_names.each do |bn|
32
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['destination'], bn).must_be :==, true
33
+ end
34
+ end
35
+ end
36
+
37
+ it "can build all sites in sources path" do
38
+ Dir.chdir(File.join Dir.pwd, @path) do
39
+ site_names = []
40
+ 5.times { |i| site_names << "blog_test_#{i}" }
41
+ MrHyde::Blog.create site_names
42
+ MrHyde::Blog.build [], { 'all' => 'all' }
43
+ site_names.each do |bn|
44
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['destination'], bn).must_be :==, true
45
+ end
46
+ end
47
+ end
48
+
49
+ end
data/spec/new_spec.rb ADDED
@@ -0,0 +1,55 @@
1
+ require "minitest/autorun"
2
+ require "minitest/pride"
3
+ require "mr_hyde"
4
+ require "mr_hyde/blog"
5
+ require "fileutils"
6
+
7
+ describe "MrHyde" do
8
+ before do
9
+ #@path = Dir.mktmpdir('mrhyde_new_test')
10
+ @path = 'mrhyde_new_test'
11
+ end
12
+
13
+ after do
14
+ FileUtils.remove_dir(@path) if File.exist? @path
15
+ end
16
+
17
+ it "creates a new MrHyde folder with the basics" do
18
+ MrHyde.create @path
19
+
20
+ File.exist?(@path).must_be :==, true
21
+ File.exist?(File.join @path, MrHyde::Configuration::DEFAULTS['sources']).must_be :==, true
22
+ File.exist?(File.join @path, MrHyde::Configuration::DEFAULTS['destination']).must_be :==, true
23
+ File.exist?(File.join @path, MrHyde::Configuration::DEFAULTS['config']).must_be :==, true
24
+ File.exist?(File.join @path, MrHyde::Configuration::DEFAULTS['jekyll_config']).must_be :==, true
25
+ end
26
+
27
+ it "cannot create over an existing project" do
28
+ MrHyde.create @path
29
+ lambda { MrHyde.create @path }.must_raise SystemExit
30
+ end
31
+
32
+ describe "creating new sites" do
33
+ before do
34
+ MrHyde.create @path
35
+ end
36
+
37
+ it "can create a single site" do
38
+ Dir.chdir(File.join Dir.pwd, @path) do
39
+ MrHyde::Blog.create 'site_test'
40
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['sources'], 'site_test').must_be :==, true
41
+ end
42
+ end
43
+
44
+ it "can create an array of sites" do
45
+ Dir.chdir(File.join Dir.pwd, @path) do
46
+ arr_blog_names = []
47
+ 10.times { |i| arr_blog_names << "site_test_#{i}" }
48
+ MrHyde::Blog.create arr_blog_names
49
+ arr_blog_names.each do |bn|
50
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['sources'], bn).must_be :==, true
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
data/spec/rm_spec.rb ADDED
@@ -0,0 +1,75 @@
1
+ require "minitest/autorun"
2
+ require "minitest/pride"
3
+ require "mr_hyde"
4
+ require "mr_hyde/blog"
5
+ require "fileutils"
6
+
7
+ describe "MrHyde" do
8
+ before do
9
+ #@path = Dir.mktmpdir('mrhyde_new_test')
10
+ @path = 'mrhyde_new_test'
11
+ @site = 'site_test'
12
+ MrHyde.create @path
13
+ end
14
+
15
+ after do
16
+ FileUtils.remove_dir(@path) if File.exist? @path
17
+ end
18
+
19
+ # Helpers
20
+ def create_build_remove(site, opts = {})
21
+ MrHyde::Blog.create site
22
+ MrHyde::Blog.build site
23
+ if opts['all']
24
+ MrHyde::Blog.remove [], opts
25
+ else
26
+ MrHyde::Blog.remove site, opts
27
+ end
28
+ end
29
+
30
+ def remove_site(path, site, opts = {})
31
+ Dir.chdir(File.join Dir.pwd, path) do
32
+ create_build_remove site, opts
33
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['sources'], site).must_be :==, (opts['full'] ? false : true)
34
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['destination'], site).must_be :==, false
35
+ end
36
+ end
37
+
38
+ def remove_sites(path, sites_number, opts = {})
39
+ site_names = []
40
+ sites_number.times { |i| site_names << "site_test_#{i}" }
41
+
42
+ Dir.chdir(File.join Dir.pwd, path) do
43
+ create_build_remove site_names, opts
44
+ site_names.each do |sn|
45
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['sources'], sn).must_be :==, (opts['full'] ? false : true)
46
+ File.exist?(File.join MrHyde::Configuration::DEFAULTS['destination'], sn).must_be :==, false
47
+ end
48
+ end
49
+ end
50
+
51
+ # Specs
52
+ it "can remove a built site" do
53
+ remove_site @path, @site
54
+ end
55
+
56
+ it "can remove a list of built sites" do
57
+ remove_sites @path, 5
58
+ end
59
+
60
+ it "can remove all built sites" do
61
+ remove_sites @path, 5, { 'all' => 'all' }
62
+ end
63
+
64
+ it "can remove a site completely" do
65
+ remove_site @path, @site, { 'full' => 'full' }
66
+ end
67
+
68
+ it "can remove a list of sites completely" do
69
+ remove_sites @path, 5, { 'full' => 'full' }
70
+ end
71
+
72
+ it "can remove all sites completely" do
73
+ remove_sites @path, 5, { 'all' => 'all', 'full' => 'full' }
74
+ end
75
+ end
data/test/blog_test.rb ADDED
@@ -0,0 +1,46 @@
1
+ require "mr_hyde"
2
+ require "mr_hyde/blog"
3
+ require "minitest/autorun"
4
+ require "minitest/unit"
5
+ require "minitest/pride"
6
+
7
+ require "fileutils"
8
+
9
+ class TestBlog < Minitest::Test
10
+ def setup
11
+ @tmp_dir = File.join(File.expand_path(File.dirname(__FILE__)), 'tmp')
12
+ @blog_dir = 'test_blog'
13
+ MrHyde.configure do |config|
14
+ config.root_path = @tmp_dir
15
+ end
16
+ MrHyde::Blog.create name: @blog_dir
17
+ end
18
+
19
+ def teardown
20
+ FileUtils.remove_dir @tmp_dir
21
+ end
22
+
23
+ def test_create
24
+ assert File.exist?(File.join MrHyde.configuration.source_path, @blog_dir)
25
+ end
26
+
27
+ def test_remove
28
+ MrHyde::Blog.remove name: @blog_dir
29
+ assert !Dir.entries(MrHyde.configuration.source_path).include?(@blog_dir)
30
+ end
31
+
32
+ def test_build
33
+ MrHyde::Blog.build name: @blog_dir
34
+ assert File.exist?(File.join MrHyde.configuration.destination_path, @blog_dir)
35
+ end
36
+
37
+ def test_exists
38
+ assert MrHyde::Blog.exist? @blog_dir
39
+ end
40
+
41
+ def test_is_build
42
+ MrHyde::Blog.build name: @blog_dir
43
+ assert MrHyde::Blog.built? @blog_dir
44
+ end
45
+
46
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mr_hyde
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Enrique Arias Cervero
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.4'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 5.4.3
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '5.4'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 5.4.3
61
+ - !ruby/object:Gem::Dependency
62
+ name: jekyll
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.5'
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 2.5.3
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '2.5'
78
+ - - '='
79
+ - !ruby/object:Gem::Version
80
+ version: 2.5.3
81
+ description: Mr. Hyde lets you generate and manage as many sites as you want, something
82
+ similar like Medium. It's based on Jekyll.
83
+ email:
84
+ - enrique.arias.cervero@gmail.com
85
+ executables:
86
+ - mrhyde
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".ruby-version"
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - bin/mrhyde
97
+ - lib/mr_hyde.rb
98
+ - lib/mr_hyde/blog.rb
99
+ - lib/mr_hyde/command.rb
100
+ - lib/mr_hyde/commands/build.rb
101
+ - lib/mr_hyde/commands/new.rb
102
+ - lib/mr_hyde/commands/remove.rb
103
+ - lib/mr_hyde/configuration.rb
104
+ - lib/mr_hyde/extensions/.new.rb.swp
105
+ - lib/mr_hyde/extensions/new.rb
106
+ - lib/mr_hyde/version.rb
107
+ - lib/site_template/_mrhyde.yml
108
+ - lib/site_template/site/css/main.css
109
+ - lib/site_template/site/index.html
110
+ - mr_hyde.gemspec
111
+ - spec/build_spec.rb
112
+ - spec/new_spec.rb
113
+ - spec/rm_spec.rb
114
+ - test/blog_test.rb
115
+ homepage: ''
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.4.5
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Mr. Hyde lets you generate and manage as many sites as you want.
139
+ test_files:
140
+ - spec/build_spec.rb
141
+ - spec/new_spec.rb
142
+ - spec/rm_spec.rb
143
+ - test/blog_test.rb