blackboard 3.1.6 → 3.1.7

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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +132 -0
  3. data/exe/jekyll +55 -0
  4. data/lib/jekyll.rb +179 -0
  5. data/lib/jekyll/cleaner.rb +105 -0
  6. data/lib/jekyll/collection.rb +205 -0
  7. data/lib/jekyll/command.rb +65 -0
  8. data/lib/jekyll/commands/build.rb +77 -0
  9. data/lib/jekyll/commands/clean.rb +42 -0
  10. data/lib/jekyll/commands/doctor.rb +114 -0
  11. data/lib/jekyll/commands/help.rb +31 -0
  12. data/lib/jekyll/commands/new.rb +82 -0
  13. data/lib/jekyll/commands/serve.rb +205 -0
  14. data/lib/jekyll/commands/serve/servlet.rb +61 -0
  15. data/lib/jekyll/configuration.rb +348 -0
  16. data/lib/jekyll/converter.rb +48 -0
  17. data/lib/jekyll/converters/identity.rb +21 -0
  18. data/lib/jekyll/converters/markdown.rb +92 -0
  19. data/lib/jekyll/converters/markdown/kramdown_parser.rb +117 -0
  20. data/lib/jekyll/converters/markdown/rdiscount_parser.rb +33 -0
  21. data/lib/jekyll/converters/markdown/redcarpet_parser.rb +102 -0
  22. data/lib/jekyll/converters/smartypants.rb +34 -0
  23. data/lib/jekyll/convertible.rb +300 -0
  24. data/lib/jekyll/deprecator.rb +46 -0
  25. data/lib/jekyll/document.rb +447 -0
  26. data/lib/jekyll/drops/collection_drop.rb +22 -0
  27. data/lib/jekyll/drops/document_drop.rb +60 -0
  28. data/lib/jekyll/drops/drop.rb +200 -0
  29. data/lib/jekyll/drops/excerpt_drop.rb +15 -0
  30. data/lib/jekyll/drops/jekyll_drop.rb +33 -0
  31. data/lib/jekyll/drops/site_drop.rb +38 -0
  32. data/lib/jekyll/drops/unified_payload_drop.rb +25 -0
  33. data/lib/jekyll/drops/url_drop.rb +83 -0
  34. data/lib/jekyll/entry_filter.rb +72 -0
  35. data/lib/jekyll/errors.rb +10 -0
  36. data/lib/jekyll/excerpt.rb +124 -0
  37. data/lib/jekyll/external.rb +59 -0
  38. data/lib/jekyll/filters.rb +367 -0
  39. data/lib/jekyll/frontmatter_defaults.rb +188 -0
  40. data/lib/jekyll/generator.rb +3 -0
  41. data/lib/jekyll/hooks.rb +101 -0
  42. data/lib/jekyll/layout.rb +49 -0
  43. data/lib/jekyll/liquid_extensions.rb +22 -0
  44. data/lib/jekyll/liquid_renderer.rb +39 -0
  45. data/lib/jekyll/liquid_renderer/file.rb +50 -0
  46. data/lib/jekyll/liquid_renderer/table.rb +94 -0
  47. data/lib/jekyll/log_adapter.rb +115 -0
  48. data/lib/jekyll/mime.types +800 -0
  49. data/lib/jekyll/page.rb +180 -0
  50. data/lib/jekyll/plugin.rb +96 -0
  51. data/lib/jekyll/plugin_manager.rb +95 -0
  52. data/lib/jekyll/publisher.rb +21 -0
  53. data/lib/jekyll/reader.rb +126 -0
  54. data/lib/jekyll/readers/collection_reader.rb +20 -0
  55. data/lib/jekyll/readers/data_reader.rb +69 -0
  56. data/lib/jekyll/readers/layout_reader.rb +53 -0
  57. data/lib/jekyll/readers/page_reader.rb +21 -0
  58. data/lib/jekyll/readers/post_reader.rb +62 -0
  59. data/lib/jekyll/readers/static_file_reader.rb +21 -0
  60. data/lib/jekyll/regenerator.rb +175 -0
  61. data/lib/jekyll/related_posts.rb +56 -0
  62. data/lib/jekyll/renderer.rb +194 -0
  63. data/lib/jekyll/site.rb +392 -0
  64. data/lib/jekyll/static_file.rb +141 -0
  65. data/lib/jekyll/stevenson.rb +58 -0
  66. data/lib/jekyll/tags/highlight.rb +122 -0
  67. data/lib/jekyll/tags/include.rb +190 -0
  68. data/lib/jekyll/tags/post_url.rb +88 -0
  69. data/lib/jekyll/url.rb +136 -0
  70. data/lib/jekyll/utils.rb +300 -0
  71. data/lib/jekyll/utils/ansi.rb +59 -0
  72. data/lib/jekyll/utils/platforms.rb +30 -0
  73. data/lib/jekyll/version.rb +3 -0
  74. data/lib/site_template/.gitignore +3 -0
  75. data/lib/site_template/_config.yml +24 -0
  76. data/lib/site_template/_includes/footer.html +38 -0
  77. data/lib/site_template/_includes/head.html +12 -0
  78. data/lib/site_template/_includes/header.html +27 -0
  79. data/lib/site_template/_includes/icon-github.html +1 -0
  80. data/lib/site_template/_includes/icon-github.svg +1 -0
  81. data/lib/site_template/_includes/icon-twitter.html +1 -0
  82. data/lib/site_template/_includes/icon-twitter.svg +1 -0
  83. data/lib/site_template/_layouts/default.html +20 -0
  84. data/lib/site_template/_layouts/page.html +14 -0
  85. data/lib/site_template/_layouts/post.html +15 -0
  86. data/lib/site_template/_pages/about.md +15 -0
  87. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +25 -0
  88. data/lib/site_template/_sass/_base.scss +206 -0
  89. data/lib/site_template/_sass/_layout.scss +242 -0
  90. data/lib/site_template/_sass/_syntax-highlighting.scss +71 -0
  91. data/lib/site_template/css/main.scss +53 -0
  92. data/lib/site_template/feed.xml +30 -0
  93. data/lib/site_template/index.html +23 -0
  94. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -0
  95. data/lib/theme_template/Gemfile +2 -0
  96. data/lib/theme_template/LICENSE.txt.erb +21 -0
  97. data/lib/theme_template/README.md.erb +46 -0
  98. data/lib/theme_template/Rakefile.erb +74 -0
  99. data/lib/theme_template/_layouts/default.html +1 -0
  100. data/lib/theme_template/_layouts/page.html +5 -0
  101. data/lib/theme_template/_layouts/post.html +5 -0
  102. data/lib/theme_template/example/_config.yml.erb +1 -0
  103. data/lib/theme_template/example/_post.md +12 -0
  104. data/lib/theme_template/example/index.html +14 -0
  105. data/lib/theme_template/example/style.scss +7 -0
  106. data/lib/theme_template/gitignore.erb +4 -0
  107. data/lib/theme_template/theme.gemspec.erb +22 -0
  108. metadata +109 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 855b954fbff39058df1927774248f07599450674
4
- data.tar.gz: 50547cd9dded43e9dba24e4fdbbe4ced58a2876e
3
+ metadata.gz: b07878a1bec45459501de9f7dc600d4b5f299e4b
4
+ data.tar.gz: bae4f77020a641de6714b20e16a6b2f49681531d
5
5
  SHA512:
6
- metadata.gz: a4cb5249e0e4f434721858a077b75d3fa05da1372723bb18bb467d5f3530e1e858387baef8ff1d47f1dde4a8b3c1005c3c559dec93e2309b339c6b5a36bfca96
7
- data.tar.gz: 6c179d10fd2438404976b26398f4e59b21c0258bc7827985c51301243f897ed4d44c0fd10e49152a0859c5eba6626c1cabdda1b098892e2e6f071cb409ddc7bc
6
+ metadata.gz: 2cc98b08a52900b5c16e4be075535aa97b72101ea9d09519fcb83849703c35830d531f4ac84bcf480fc6eb7b604512bd5b5f78964c5cf7bc6e3b633844b5317a
7
+ data.tar.gz: 144f30992fb665acf9c07d5ed050fa27c08c79c8f36e848067c4de352a51157735cdeb028644787ec0c49d3192e36189fbc5aabb325b3be1e52c4ae71f4d4f57
data/.rubocop.yml ADDED
@@ -0,0 +1,132 @@
1
+ ---
2
+ AllCops:
3
+ TargetRubyVersion: 2.0
4
+ Include:
5
+ - lib/**/*.rb
6
+ Exclude:
7
+ - lib/jekyll/collection.rb
8
+ - lib/jekyll/configuration.rb
9
+ - lib/jekyll/convertible.rb
10
+ - lib/jekyll/document.rb
11
+ - lib/jekyll/regenerator.rb
12
+ - lib/jekyll/renderer.rb
13
+ - lib/jekyll/utils.rb
14
+ - bin/**/*
15
+ - benchmark/**/*
16
+ - script/**/*
17
+ - vendor/**/*
18
+ Lint/EndAlignment:
19
+ Severity: error
20
+ Lint/UnreachableCode:
21
+ Severity: error
22
+ Lint/UselessAccessModifier:
23
+ Enabled: false
24
+ Metrics/AbcSize:
25
+ Max: 20
26
+ Metrics/ClassLength:
27
+ Max: 300
28
+ Exclude:
29
+ - !ruby/regexp /features\/.*.rb$/
30
+ - !ruby/regexp /test\/.*.rb$/
31
+ Metrics/CyclomaticComplexity:
32
+ Max: 8
33
+ Metrics/LineLength:
34
+ Max: 90
35
+ Severity: warning
36
+ Exclude:
37
+ - !ruby/regexp /features\/.*.rb/
38
+ Metrics/MethodLength:
39
+ Max: 20
40
+ CountComments: false
41
+ Severity: error
42
+ Metrics/ModuleLength:
43
+ Max: 240
44
+ Metrics/ParameterLists:
45
+ Max: 4
46
+ Metrics/PerceivedComplexity:
47
+ Max: 8
48
+ Style/Alias:
49
+ Enabled: false
50
+ Style/AlignArray:
51
+ Enabled: false
52
+ Style/AlignHash:
53
+ EnforcedHashRocketStyle: table
54
+ Style/AlignParameters:
55
+ EnforcedStyle: with_fixed_indentation
56
+ Enabled: false
57
+ Style/AndOr:
58
+ Severity: error
59
+ Style/Attr:
60
+ Enabled: false
61
+ Style/BracesAroundHashParameters:
62
+ Enabled: false
63
+ Style/ClassAndModuleChildren:
64
+ Enabled: false
65
+ Style/Documentation:
66
+ Enabled: false
67
+ Exclude:
68
+ - !ruby/regexp /features\/.*.rb$/
69
+ Style/DoubleNegation:
70
+ Enabled: false
71
+ Style/EmptyLinesAroundAccessModifier:
72
+ Enabled: false
73
+ Style/EmptyLinesAroundModuleBody:
74
+ Enabled: false
75
+ Style/ExtraSpacing:
76
+ AllowForAlignment: true
77
+ Style/FileName:
78
+ Enabled: false
79
+ Style/FirstParameterIndentation:
80
+ EnforcedStyle: consistent
81
+ Style/GuardClause:
82
+ Enabled: false
83
+ Style/HashSyntax:
84
+ EnforcedStyle: hash_rockets
85
+ Severity: error
86
+ Style/IfUnlessModifier:
87
+ Enabled: false
88
+ Style/IndentArray:
89
+ EnforcedStyle: consistent
90
+ Style/IndentHash:
91
+ EnforcedStyle: consistent
92
+ Style/IndentationWidth:
93
+ Severity: error
94
+ Style/ModuleFunction:
95
+ Enabled: false
96
+ Style/MultilineMethodCallIndentation:
97
+ EnforcedStyle: indented
98
+ Style/MultilineOperationIndentation:
99
+ EnforcedStyle: indented
100
+ Style/MultilineTernaryOperator:
101
+ Severity: error
102
+ Style/PercentLiteralDelimiters:
103
+ PreferredDelimiters:
104
+ "%q": "{}"
105
+ "%Q": "{}"
106
+ "%r": "!!"
107
+ "%s": "()"
108
+ "%w": "()"
109
+ "%W": "()"
110
+ "%x": "()"
111
+ Style/RedundantReturn:
112
+ Enabled: false
113
+ Style/RedundantSelf:
114
+ Enabled: false
115
+ Style/RegexpLiteral:
116
+ EnforcedStyle: percent_r
117
+ Style/RescueModifier:
118
+ Enabled: false
119
+ Style/SignalException:
120
+ EnforcedStyle: only_raise
121
+ Style/SingleLineMethods:
122
+ Enabled: false
123
+ Style/SpaceAroundOperators:
124
+ Enabled: false
125
+ Style/SpaceInsideBrackets:
126
+ Enabled: false
127
+ Style/StringLiterals:
128
+ EnforcedStyle: double_quotes
129
+ Style/StringLiteralsInInterpolation:
130
+ EnforcedStyle: double_quotes
131
+ Style/UnneededCapitalW:
132
+ Enabled: false
data/exe/jekyll ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ STDOUT.sync = true
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w( .. lib )))
5
+
6
+ require "jekyll"
7
+ require "mercenary"
8
+
9
+ Jekyll::PluginManager.require_from_bundler
10
+
11
+ Jekyll::Deprecator.process(ARGV)
12
+
13
+ Mercenary.program(:jekyll) do |p|
14
+ p.version Jekyll::VERSION
15
+ p.description "Jekyll is a blog-aware, static site generator in Ruby"
16
+ p.syntax "jekyll <subcommand> [options]"
17
+
18
+ p.option "source", "-s", "--source [DIR]", "Source directory (defaults to ./)"
19
+ p.option "destination", "-d", "--destination [DIR]",
20
+ "Destination directory (defaults to ./_site)"
21
+ p.option "safe", "--safe", "Safe mode (defaults to false)"
22
+ p.option "plugins_dir", "-p", "--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]", Array,
23
+ "Plugins directory (defaults to ./_plugins)"
24
+ p.option "layouts_dir", "--layouts DIR", String,
25
+ "Layouts directory (defaults to ./_layouts)"
26
+ p.option "profile", "--profile", "Generate a Liquid rendering profile"
27
+
28
+ Jekyll::External.require_if_present(Jekyll::External.blessed_gems) do |g|
29
+ cmd = g.split("-").last
30
+ p.command(cmd.to_sym) do |c|
31
+ c.syntax cmd
32
+ c.action do
33
+ Jekyll.logger.abort_with "You must install the '#{g}' gem" \
34
+ " to use the 'jekyll #{cmd}' command."
35
+ end
36
+ end
37
+ end
38
+
39
+ Jekyll::Command.subclasses.each { |c| c.init_with_program(p) }
40
+
41
+ p.action do |args, _|
42
+ if args.empty?
43
+ Jekyll.logger.error "A subcommand is required."
44
+ puts p
45
+ abort
46
+ else
47
+ subcommand = args.first
48
+ unless p.has_command? subcommand
49
+ Jekyll.logger.abort_with "fatal: 'jekyll #{args.first}' could not" \
50
+ " be found. You may need to install the jekyll-#{args.first} gem" \
51
+ " or a related gem to be able to use this subcommand."
52
+ end
53
+ end
54
+ end
55
+ end
data/lib/jekyll.rb ADDED
@@ -0,0 +1,179 @@
1
+ $LOAD_PATH.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
2
+
3
+ # Require all of the Ruby files in the given directory.
4
+ #
5
+ # path - The String relative path from here to the directory.
6
+ #
7
+ # Returns nothing.
8
+ def require_all(path)
9
+ glob = File.join(File.dirname(__FILE__), path, '*.rb')
10
+ Dir[glob].sort.each do |f|
11
+ require f
12
+ end
13
+ end
14
+
15
+ # rubygems
16
+ require 'rubygems'
17
+
18
+ # stdlib
19
+ require 'forwardable'
20
+ require 'fileutils'
21
+ require 'time'
22
+ require 'English'
23
+ require 'pathname'
24
+ require 'logger'
25
+ require 'set'
26
+
27
+ # 3rd party
28
+ require 'safe_yaml/load'
29
+ require 'liquid'
30
+ require 'kramdown'
31
+ require 'colorator'
32
+
33
+ SafeYAML::OPTIONS[:suppress_warnings] = true
34
+
35
+ module Jekyll
36
+ # internal requires
37
+ autoload :Cleaner, 'jekyll/cleaner'
38
+ autoload :Collection, 'jekyll/collection'
39
+ autoload :Configuration, 'jekyll/configuration'
40
+ autoload :Convertible, 'jekyll/convertible'
41
+ autoload :Deprecator, 'jekyll/deprecator'
42
+ autoload :Document, 'jekyll/document'
43
+ autoload :Draft, 'jekyll/draft'
44
+ autoload :EntryFilter, 'jekyll/entry_filter'
45
+ autoload :Errors, 'jekyll/errors'
46
+ autoload :Excerpt, 'jekyll/excerpt'
47
+ autoload :External, 'jekyll/external'
48
+ autoload :Filters, 'jekyll/filters'
49
+ autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults'
50
+ autoload :Hooks, 'jekyll/hooks'
51
+ autoload :Layout, 'jekyll/layout'
52
+ autoload :CollectionReader, 'jekyll/readers/collection_reader'
53
+ autoload :DataReader, 'jekyll/readers/data_reader'
54
+ autoload :LayoutReader, 'jekyll/readers/layout_reader'
55
+ autoload :PostReader, 'jekyll/readers/post_reader'
56
+ autoload :PageReader, 'jekyll/readers/page_reader'
57
+ autoload :StaticFileReader, 'jekyll/readers/static_file_reader'
58
+ autoload :LogAdapter, 'jekyll/log_adapter'
59
+ autoload :Page, 'jekyll/page'
60
+ autoload :PluginManager, 'jekyll/plugin_manager'
61
+ autoload :Publisher, 'jekyll/publisher'
62
+ autoload :Reader, 'jekyll/reader'
63
+ autoload :Regenerator, 'jekyll/regenerator'
64
+ autoload :RelatedPosts, 'jekyll/related_posts'
65
+ autoload :Renderer, 'jekyll/renderer'
66
+ autoload :LiquidRenderer, 'jekyll/liquid_renderer'
67
+ autoload :Site, 'jekyll/site'
68
+ autoload :StaticFile, 'jekyll/static_file'
69
+ autoload :Stevenson, 'jekyll/stevenson'
70
+ autoload :URL, 'jekyll/url'
71
+ autoload :Utils, 'jekyll/utils'
72
+ autoload :VERSION, 'jekyll/version'
73
+
74
+ # extensions
75
+ require 'jekyll/plugin'
76
+ require 'jekyll/converter'
77
+ require 'jekyll/generator'
78
+ require 'jekyll/command'
79
+ require 'jekyll/liquid_extensions'
80
+
81
+ class << self
82
+ # Public: Tells you which Jekyll environment you are building in so you can skip tasks
83
+ # if you need to. This is useful when doing expensive compression tasks on css and
84
+ # images and allows you to skip that when working in development.
85
+
86
+ def env
87
+ ENV["JEKYLL_ENV"] || "development"
88
+ end
89
+
90
+ # Public: Generate a Jekyll configuration Hash by merging the default
91
+ # options with anything in _config.yml, and adding the given options on top.
92
+ #
93
+ # override - A Hash of config directives that override any options in both
94
+ # the defaults and the config file. See Jekyll::Configuration::DEFAULTS for a
95
+ # list of option names and their defaults.
96
+ #
97
+ # Returns the final configuration Hash.
98
+ def configuration(override = Hash.new)
99
+ config = Configuration.new
100
+ unless override.delete('skip_config_files')
101
+ config = config.read_config_files(config.config_files(override))
102
+ end
103
+
104
+ # Merge DEFAULTS < _config.yml < override
105
+ Configuration.from(Utils.deep_merge_hashes(config, override)).tap do |config|
106
+ set_timezone(config['timezone']) if config['timezone']
107
+ end
108
+ end
109
+
110
+ # Public: Set the TZ environment variable to use the timezone specified
111
+ #
112
+ # timezone - the IANA Time Zone
113
+ #
114
+ # Returns nothing
115
+ def set_timezone(timezone)
116
+ ENV['TZ'] = timezone
117
+ end
118
+
119
+ # Public: Fetch the logger instance for this Jekyll process.
120
+ #
121
+ # Returns the LogAdapter instance.
122
+ def logger
123
+ @logger ||= LogAdapter.new(Stevenson.new, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym)
124
+ end
125
+
126
+ # Public: Set the log writer.
127
+ # New log writer must respond to the same methods
128
+ # as Ruby's interal Logger.
129
+ #
130
+ # writer - the new Logger-compatible log transport
131
+ #
132
+ # Returns the new logger.
133
+ def logger=(writer)
134
+ @logger = LogAdapter.new(writer, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym)
135
+ end
136
+
137
+ # Public: An array of sites
138
+ #
139
+ # Returns the Jekyll sites created.
140
+ def sites
141
+ @sites ||= []
142
+ end
143
+
144
+ # Public: Ensures the questionable path is prefixed with the base directory
145
+ # and prepends the questionable path with the base directory if false.
146
+ #
147
+ # base_directory - the directory with which to prefix the questionable path
148
+ # questionable_path - the path we're unsure about, and want prefixed
149
+ #
150
+ # Returns the sanitized path.
151
+ def sanitized_path(base_directory, questionable_path)
152
+ return base_directory if base_directory.eql?(questionable_path)
153
+
154
+ questionable_path.insert(0, '/') if questionable_path.start_with?('~')
155
+ clean_path = File.expand_path(questionable_path, "/")
156
+ clean_path.sub!(/\A\w\:\//, '/')
157
+
158
+ if clean_path.start_with?(base_directory.sub(/\A\w\:\//, '/'))
159
+ clean_path
160
+ else
161
+ File.join(base_directory, clean_path)
162
+ end
163
+ end
164
+
165
+ # Conditional optimizations
166
+ Jekyll::External.require_if_present('liquid-c')
167
+ end
168
+ end
169
+
170
+ require "jekyll/drops/drop"
171
+ require "jekyll/drops/document_drop"
172
+ require_all 'jekyll/commands'
173
+ require_all 'jekyll/converters'
174
+ require_all 'jekyll/converters/markdown'
175
+ require_all 'jekyll/drops'
176
+ require_all 'jekyll/generators'
177
+ require_all 'jekyll/tags'
178
+
179
+ require 'jekyll-sass-converter'
@@ -0,0 +1,105 @@
1
+ require 'set'
2
+
3
+ module Jekyll
4
+ # Handles the cleanup of a site's destination before it is built.
5
+ class Cleaner
6
+ HIDDEN_FILE_REGEX = /\/\.{1,2}$/
7
+ attr_reader :site
8
+
9
+ def initialize(site)
10
+ @site = site
11
+ end
12
+
13
+ # Cleans up the site's destination directory
14
+ def cleanup!
15
+ FileUtils.rm_rf(obsolete_files)
16
+ FileUtils.rm_rf(metadata_file) unless @site.incremental?
17
+ end
18
+
19
+ private
20
+
21
+ # Private: The list of files and directories to be deleted during cleanup process
22
+ #
23
+ # Returns an Array of the file and directory paths
24
+ def obsolete_files
25
+ (existing_files - new_files - new_dirs + replaced_files).to_a
26
+ end
27
+
28
+ # Private: The metadata file storing dependency tree and build history
29
+ #
30
+ # Returns an Array with the metdata file as the only item
31
+ def metadata_file
32
+ [site.regenerator.metadata_file]
33
+ end
34
+
35
+ # Private: The list of existing files, apart from those included in keep_files and hidden files.
36
+ #
37
+ # Returns a Set with the file paths
38
+ def existing_files
39
+ files = Set.new
40
+ regex = keep_file_regex
41
+ dirs = keep_dirs
42
+
43
+ Utils.safe_glob(site.in_dest_dir, ["**", "*"], File::FNM_DOTMATCH).each do |file|
44
+ next if file =~ HIDDEN_FILE_REGEX || file =~ regex || dirs.include?(file)
45
+ files << file
46
+ end
47
+
48
+ files
49
+ end
50
+
51
+ # Private: The list of files to be created when site is built.
52
+ #
53
+ # Returns a Set with the file paths
54
+ def new_files
55
+ files = Set.new
56
+ site.each_site_file { |item| files << item.destination(site.dest) }
57
+ files
58
+ end
59
+
60
+ # Private: The list of directories to be created when site is built.
61
+ # These are the parent directories of the files in #new_files.
62
+ #
63
+ # Returns a Set with the directory paths
64
+ def new_dirs
65
+ new_files.map { |file| parent_dirs(file) }.flatten.to_set
66
+ end
67
+
68
+ # Private: The list of parent directories of a given file
69
+ #
70
+ # Returns an Array with the directory paths
71
+ def parent_dirs(file)
72
+ parent_dir = File.dirname(file)
73
+ if parent_dir == site.dest
74
+ []
75
+ else
76
+ [parent_dir] + parent_dirs(parent_dir)
77
+ end
78
+ end
79
+
80
+ # Private: The list of existing files that will be replaced by a directory during build
81
+ #
82
+ # Returns a Set with the file paths
83
+ def replaced_files
84
+ new_dirs.select { |dir| File.file?(dir) }.to_set
85
+ end
86
+
87
+ # Private: The list of directories that need to be kept because they are parent directories
88
+ # of files specified in keep_files
89
+ #
90
+ # Returns a Set with the directory paths
91
+ def keep_dirs
92
+ site.keep_files.map { |file| parent_dirs(site.in_dest_dir(file)) }.flatten.to_set
93
+ end
94
+
95
+ # Private: Creates a regular expression from the config's keep_files array
96
+ #
97
+ # Examples
98
+ # ['.git','.svn'] creates the following regex: /\/(\.git|\/.svn)/
99
+ #
100
+ # Returns the regular expression
101
+ def keep_file_regex
102
+ Regexp.union(site.keep_files)
103
+ end
104
+ end
105
+ end