middleman-core 3.3.2 → 3.3.3

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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/features/helpers_select_tag.feature +6 -8
  3. data/lib/middleman-core.rb +1 -2
  4. data/lib/middleman-core/application.rb +10 -9
  5. data/lib/middleman-core/cli.rb +9 -13
  6. data/lib/middleman-core/cli/build.rb +26 -27
  7. data/lib/middleman-core/cli/bundler.rb +6 -7
  8. data/lib/middleman-core/cli/console.rb +10 -13
  9. data/lib/middleman-core/cli/extension.rb +2 -4
  10. data/lib/middleman-core/cli/init.rb +27 -28
  11. data/lib/middleman-core/cli/server.rb +43 -44
  12. data/lib/middleman-core/configuration.rb +13 -11
  13. data/lib/middleman-core/core_extensions/data.rb +21 -29
  14. data/lib/middleman-core/core_extensions/extensions.rb +8 -8
  15. data/lib/middleman-core/core_extensions/external_helpers.rb +3 -5
  16. data/lib/middleman-core/core_extensions/file_watcher.rb +7 -11
  17. data/lib/middleman-core/core_extensions/front_matter.rb +5 -6
  18. data/lib/middleman-core/core_extensions/rendering.rb +40 -30
  19. data/lib/middleman-core/core_extensions/request.rb +16 -19
  20. data/lib/middleman-core/core_extensions/routing.rb +37 -36
  21. data/lib/middleman-core/core_extensions/show_exceptions.rb +1 -5
  22. data/lib/middleman-core/extension.rb +14 -16
  23. data/lib/middleman-core/extensions.rb +4 -6
  24. data/lib/middleman-core/load_paths.rb +3 -6
  25. data/lib/middleman-core/logger.rb +1 -3
  26. data/lib/middleman-core/meta_pages.rb +11 -11
  27. data/lib/middleman-core/meta_pages/config_setting.rb +4 -4
  28. data/lib/middleman-core/meta_pages/sitemap_resource.rb +2 -2
  29. data/lib/middleman-core/meta_pages/sitemap_tree.rb +4 -4
  30. data/lib/middleman-core/preview_server.rb +12 -11
  31. data/lib/middleman-core/profiling.rb +6 -8
  32. data/lib/middleman-core/renderers/asciidoc.rb +12 -13
  33. data/lib/middleman-core/renderers/coffee_script.rb +2 -4
  34. data/lib/middleman-core/renderers/erb.rb +3 -4
  35. data/lib/middleman-core/renderers/haml.rb +2 -4
  36. data/lib/middleman-core/renderers/kramdown.rb +3 -4
  37. data/lib/middleman-core/renderers/less.rb +3 -9
  38. data/lib/middleman-core/renderers/liquid.rb +4 -8
  39. data/lib/middleman-core/renderers/markdown.rb +7 -11
  40. data/lib/middleman-core/renderers/redcarpet.rb +14 -16
  41. data/lib/middleman-core/renderers/sass.rb +36 -15
  42. data/lib/middleman-core/renderers/slim.rb +7 -10
  43. data/lib/middleman-core/renderers/stylus.rb +2 -6
  44. data/lib/middleman-core/sitemap.rb +6 -13
  45. data/lib/middleman-core/sitemap/extensions/ignores.rb +4 -10
  46. data/lib/middleman-core/sitemap/extensions/on_disk.rb +3 -7
  47. data/lib/middleman-core/sitemap/extensions/proxies.rb +7 -12
  48. data/lib/middleman-core/sitemap/extensions/redirects.rb +7 -15
  49. data/lib/middleman-core/sitemap/extensions/request_endpoints.rb +7 -15
  50. data/lib/middleman-core/sitemap/extensions/traversal.rb +4 -7
  51. data/lib/middleman-core/sitemap/queryable.rb +22 -27
  52. data/lib/middleman-core/sitemap/resource.rb +13 -25
  53. data/lib/middleman-core/sitemap/store.rb +11 -15
  54. data/lib/middleman-core/templates.rb +9 -12
  55. data/lib/middleman-core/templates/default.rb +6 -7
  56. data/lib/middleman-core/templates/empty.rb +0 -1
  57. data/lib/middleman-core/templates/extension/Gemfile +1 -1
  58. data/lib/middleman-core/templates/extension/Rakefile +2 -2
  59. data/lib/middleman-core/templates/extension/lib/lib.rb +0 -1
  60. data/lib/middleman-core/templates/html5.rb +6 -7
  61. data/lib/middleman-core/templates/local.rb +1 -2
  62. data/lib/middleman-core/templates/mobile.rb +3 -4
  63. data/lib/middleman-core/templates/shared/config.ru +1 -1
  64. data/lib/middleman-core/util.rb +5 -6
  65. data/lib/middleman-core/version.rb +1 -1
  66. data/lib/middleman-more/core_extensions/compass.rb +0 -1
  67. data/lib/middleman-more/core_extensions/default_helpers.rb +25 -16
  68. data/lib/middleman-more/core_extensions/i18n.rb +24 -23
  69. data/lib/middleman-more/extensions/asset_hash.rb +4 -6
  70. data/lib/middleman-more/extensions/asset_host.rb +1 -1
  71. data/lib/middleman-more/extensions/automatic_alt_tags.rb +2 -3
  72. data/lib/middleman-more/extensions/automatic_image_sizes.rb +4 -5
  73. data/lib/middleman-more/extensions/cache_buster.rb +0 -1
  74. data/lib/middleman-more/extensions/gzip.rb +1 -1
  75. data/lib/middleman-more/extensions/lorem.rb +8 -8
  76. data/lib/middleman-more/extensions/minify_css.rb +9 -8
  77. data/lib/middleman-more/extensions/minify_javascript.rb +5 -6
  78. data/lib/middleman-more/extensions/relative_assets.rb +0 -1
  79. data/lib/middleman-more/templates/smacss.rb +6 -7
  80. data/middleman-core.gemspec +1 -1
  81. metadata +5 -5
@@ -2,7 +2,6 @@ require 'active_support/core_ext/object/inclusion'
2
2
 
3
3
  module Middleman
4
4
  module Sitemap
5
-
6
5
  # Code adapted from https://github.com/ralph/document_mapper/
7
6
  module Queryable
8
7
  OPERATOR_MAPPING = {
@@ -21,11 +20,11 @@ module Middleman
21
20
  OperatorNotSupportedError = Class.new StandardError
22
21
 
23
22
  module API
24
- def select(options = {})
23
+ def select(options={})
25
24
  documents = resources.select { |r| !r.raw_data.empty? }
26
25
  options[:where].each do |selector, selector_value|
27
26
  documents = documents.select do |document|
28
- next unless document.raw_data.has_key? selector.attribute
27
+ next unless document.raw_data.key? selector.attribute
29
28
  document_value = document.raw_data[selector.attribute]
30
29
  operator = OPERATOR_MAPPING[selector.operator]
31
30
  document_value.send operator, selector_value
@@ -74,51 +73,47 @@ module Middleman
74
73
  end
75
74
 
76
75
  def where(constraints_hash)
77
- selector_hash = constraints_hash.reject { |key, value| !key.is_a? Selector }
78
- symbol_hash = constraints_hash.reject { |key, value| key.is_a? Selector }
76
+ selector_hash = constraints_hash.reject { |key, _| !key.is_a? Selector }
77
+ symbol_hash = constraints_hash.reject { |key, _| key.is_a? Selector }
79
78
  symbol_hash.each do |attribute, value|
80
- selector = Selector.new(:attribute => attribute, :operator => 'equal')
81
- selector_hash.update({ selector => value })
79
+ selector = Selector.new(attribute: attribute, operator: 'equal')
80
+ selector_hash.update(selector => value)
82
81
  end
83
- Query.new @model, opts(:where => @where.merge(selector_hash))
82
+ Query.new @model, opts(where: @where.merge(selector_hash))
84
83
  end
85
84
 
86
- def opts new_opts
87
- { :where => {}.merge(@where),
88
- :order_by => @order_by,
89
- :offset => @offset,
90
- :limit => @limit
85
+ def opts(new_opts)
86
+ { where: {}.merge(@where),
87
+ order_by: @order_by,
88
+ offset: @offset,
89
+ limit: @limit
91
90
  }.merge(new_opts)
92
91
  end
93
92
 
94
93
  def order_by(field)
95
- Query.new @model, opts(:order_by => field.is_a?(Symbol) ? {field => :asc} : field)
94
+ Query.new @model, opts(order_by: field.is_a?(Symbol) ? { field => :asc } : field)
96
95
  end
97
96
 
98
97
  def offset(number)
99
- Query.new @model, opts(:offset => number)
98
+ Query.new @model, opts(offset: number)
100
99
  end
101
100
 
102
101
  def limit(number)
103
- Query.new @model, opts(:limit => number)
102
+ Query.new @model, opts(limit: number)
104
103
  end
105
104
 
106
105
  def first
107
- self.all.first
106
+ all.first
108
107
  end
109
108
 
110
109
  def last
111
- self.all.last
110
+ all.last
112
111
  end
113
112
 
114
113
  def all
115
- result = @model.select(:where => @where, :order_by => @order_by)
116
- if @offset.present?
117
- result = result.last([result.size - @offset, 0].max)
118
- end
119
- if @limit.present?
120
- result = result.first(@limit)
121
- end
114
+ result = @model.select(where: @where, order_by: @order_by)
115
+ result = result.last([result.size - @offset, 0].max) if @offset.present?
116
+ result = result.first(@limit) if @limit.present?
122
117
  result
123
118
  end
124
119
  end
@@ -126,7 +121,7 @@ module Middleman
126
121
  class Selector
127
122
  attr_reader :attribute, :operator
128
123
 
129
- def initialize(opts = {})
124
+ def initialize(opts={})
130
125
  unless VALID_OPERATORS.include? opts[:operator]
131
126
  raise OperatorNotSupportedError
132
127
  end
@@ -149,7 +144,7 @@ class Symbol
149
144
 
150
145
  unless method_defined?(:"<=>")
151
146
  def <=>(other)
152
- self.to_s <=> other.to_s
147
+ to_s <=> other.to_s
153
148
  end
154
149
  end
155
150
  end
@@ -2,10 +2,8 @@ require 'middleman-core/sitemap/extensions/traversal'
2
2
  require 'middleman-core/sitemap/extensions/content_type'
3
3
 
4
4
  module Middleman
5
-
6
5
  # Sitemap namespace
7
6
  module Sitemap
8
-
9
7
  # Sitemap Resource class
10
8
  class Resource
11
9
  include Middleman::Sitemap::Extensions::Traversal
@@ -13,7 +11,7 @@ module Middleman
13
11
 
14
12
  # @return [Middleman::Application]
15
13
  attr_reader :app
16
- delegate :logger, :instrument, :to => :app
14
+ delegate :logger, :instrument, to: :app
17
15
 
18
16
  # @return [Middleman::Sitemap::Store]
19
17
  attr_reader :store
@@ -46,7 +44,7 @@ module Middleman
46
44
  @source_file = source_file
47
45
  @destination_path = @path
48
46
 
49
- @local_metadata = { :options => {}, :locals => {}, :page => {}, :blocks => [] }
47
+ @local_metadata = { options: {}, locals: {}, page: {}, blocks: [] }
50
48
  end
51
49
 
52
50
  # Whether this resource has a template file
@@ -62,15 +60,11 @@ module Middleman
62
60
  result = store.metadata_for_path(path).dup
63
61
 
64
62
  file_meta = store.metadata_for_file(source_file).dup
65
- if file_meta.has_key?(:blocks)
66
- result[:blocks] += file_meta.delete(:blocks)
67
- end
63
+ result[:blocks] += file_meta.delete(:blocks) if file_meta.key?(:blocks)
68
64
  result.deep_merge!(file_meta)
69
65
 
70
66
  local_meta = @local_metadata.dup
71
- if local_meta.has_key?(:blocks)
72
- result[:blocks] += local_meta.delete(:blocks)
73
- end
67
+ result[:blocks] += local_meta.delete(:blocks) if local_meta.key?(:blocks)
74
68
  result.deep_merge!(local_meta)
75
69
 
76
70
  result[:blocks] = result[:blocks].flatten.compact
@@ -81,11 +75,9 @@ module Middleman
81
75
  # @param [Hash] metadata A metadata block like provides_metadata_for_path takes
82
76
  def add_metadata(metadata={}, &block)
83
77
  metadata = metadata.dup
84
- if metadata.has_key?(:blocks)
85
- @local_metadata[:blocks] += metadata.delete(:blocks)
86
- end
78
+ @local_metadata[:blocks] += metadata.delete(:blocks) if metadata.key?(:blocks)
87
79
  @local_metadata.deep_merge!(metadata)
88
- @local_metadata[:blocks] += [ block ] if block_given?
80
+ @local_metadata[:blocks] += [block] if block_given?
89
81
  end
90
82
 
91
83
  # The output/preview URL for this resource
@@ -99,19 +91,17 @@ module Middleman
99
91
  end
100
92
 
101
93
  def request_path
102
- self.destination_path
94
+ destination_path
103
95
  end
104
96
 
105
97
  # Render this resource
106
98
  # @return [String]
107
99
  def render(opts={}, locs={}, &block)
108
- if !template?
109
- return app.template_data_for_file(source_file)
110
- end
100
+ return app.template_data_for_file(source_file) unless template?
111
101
 
112
102
  relative_source = Pathname(source_file).relative_path_from(Pathname(app.root))
113
103
 
114
- instrument 'render.resource', :path => relative_source, :destination_path => destination_path do
104
+ instrument 'render.resource', path: relative_source, destination_path: destination_path do
115
105
  md = metadata.dup
116
106
  opts = md[:options].deep_merge(opts)
117
107
 
@@ -126,18 +116,16 @@ module Middleman
126
116
  locs = md[:locals].deep_merge(locs)
127
117
 
128
118
  # Forward remaining data to helpers
129
- if md.has_key?(:page)
130
- app.data.store('page', md[:page])
131
- end
119
+ app.data.store('page', md[:page]) if md.key?(:page)
132
120
 
133
121
  blocks = Array(md[:blocks]).dup
134
122
  blocks << block if block_given?
135
123
 
136
- app.current_path ||= self.destination_path
124
+ app.current_path ||= destination_path
137
125
 
138
126
  # Certain output file types don't use layouts
139
- if !opts.has_key?(:layout)
140
- opts[:layout] = false if %w(.js .json .css .txt).include?(self.ext)
127
+ unless opts.key?(:layout)
128
+ opts[:layout] = false if %w(.js .json .css .txt).include?(ext)
141
129
  end
142
130
 
143
131
  app.render_template(source_file, locs, opts, blocks)
@@ -4,10 +4,8 @@ require 'monitor'
4
4
  require 'middleman-core/sitemap/queryable'
5
5
 
6
6
  module Middleman
7
-
8
7
  # Sitemap namespace
9
8
  module Sitemap
10
-
11
9
  # The Store class
12
10
  #
13
11
  # The Store manages a collection of Resource objects, which represent
@@ -15,7 +13,6 @@ module Middleman
15
13
  # which is the path relative to the source directory, minus any template
16
14
  # extensions. All "path" parameters used in this class are source paths.
17
15
  class Store
18
-
19
16
  # @return [Middleman::Application]
20
17
  attr_accessor :app
21
18
 
@@ -52,12 +49,13 @@ module Middleman
52
49
  # @param [Symbol] name Name of the manipulator for debugging
53
50
  # @param [Class, Module] inst Abstract namespace which can update the resource list
54
51
  # @return [void]
55
- def register_resource_list_manipulator(name, inst, unused=true)
52
+ def register_resource_list_manipulator(name, inst, *)
56
53
  @resource_list_manipulators << [name, inst]
57
54
  rebuild_resource_list!(:registered_new)
58
55
  end
59
56
 
60
57
  # Rebuild the list of resources from scratch, using registed manipulators
58
+ # rubocop:disable UnusedMethodArgument
61
59
  # @return [void]
62
60
  def rebuild_resource_list!(reason=nil)
63
61
  @lock.synchronize do
@@ -120,14 +118,14 @@ module Middleman
120
118
  # @param [String] source_file
121
119
  # @return [Hash]
122
120
  def metadata_for_file(source_file)
123
- blank_metadata = { :options => {}, :locals => {}, :page => {}, :blocks => [] }
121
+ blank_metadata = { options: {}, locals: {}, page: {}, blocks: [] }
124
122
 
125
- provides_metadata.inject(blank_metadata) do |result, (callback, matcher)|
123
+ provides_metadata.reduce(blank_metadata) do |result, (callback, matcher)|
126
124
  next result if matcher && !source_file.match(matcher)
127
125
 
128
126
  metadata = callback.call(source_file).dup
129
127
 
130
- if metadata.has_key?(:blocks)
128
+ if metadata.key?(:blocks)
131
129
  result[:blocks] << metadata[:blocks]
132
130
  metadata.delete(:blocks)
133
131
  end
@@ -154,9 +152,9 @@ module Middleman
154
152
  def metadata_for_path(request_path)
155
153
  return @_cached_metadata[request_path] if @_cached_metadata[request_path]
156
154
 
157
- blank_metadata = { :options => {}, :locals => {}, :page => {}, :blocks => [] }
155
+ blank_metadata = { options: {}, locals: {}, page: {}, blocks: [] }
158
156
 
159
- @_cached_metadata[request_path] = provides_metadata_for_path.inject(blank_metadata) do |result, (callback, matcher)|
157
+ @_cached_metadata[request_path] = provides_metadata_for_path.reduce(blank_metadata) do |result, (callback, matcher)|
160
158
  case matcher
161
159
  when Regexp
162
160
  next result unless request_path =~ matcher
@@ -213,7 +211,7 @@ module Middleman
213
211
 
214
212
  @app.logger.debug '== Rebuilding resource list'
215
213
 
216
- @resources = @resource_list_manipulators.inject([]) do |result, (_, inst)|
214
+ @resources = @resource_list_manipulators.reduce([]) do |result, (_, inst)|
217
215
  newres = inst.manipulate_resource_list(result)
218
216
 
219
217
  # Reset lookup cache
@@ -255,9 +253,7 @@ module Middleman
255
253
  if @app.respond_to? :langs
256
254
  path_bits = path.split('.')
257
255
  lang = path_bits.last
258
- if @app.langs.include?(lang.to_sym)
259
- return path_bits[0..-2].join('.')
260
- end
256
+ return path_bits[0..-2].join('.') if @app.langs.include?(lang.to_sym)
261
257
  end
262
258
 
263
259
  path
@@ -269,9 +265,9 @@ module Middleman
269
265
  def find_extension(path, file)
270
266
  input_ext = File.extname(file)
271
267
 
272
- if !input_ext.empty?
268
+ unless input_ext.empty?
273
269
  input_ext = input_ext.split('.').last.to_sym
274
- if @app.template_extensions.has_key?(input_ext)
270
+ if @app.template_extensions.key?(input_ext)
275
271
  path << ".#{@app.template_extensions[input_ext]}"
276
272
  end
277
273
  end
@@ -4,10 +4,8 @@ require 'thor/group'
4
4
 
5
5
  # Templates namespace
6
6
  module Middleman::Templates
7
-
8
7
  # Static methods
9
8
  class << self
10
-
11
9
  # Get list of registered templates and add new ones
12
10
  #
13
11
  # Middleman::Templates.register(:ext_name, klass)
@@ -22,7 +20,7 @@ module Middleman::Templates
22
20
  end
23
21
 
24
22
  # Middleman::Templates.register(name, klass)
25
- alias :registered :register
23
+ alias_method :registered, :register
26
24
  end
27
25
 
28
26
  # Base Template class. Handles basic options and paths.
@@ -41,13 +39,13 @@ module Middleman::Templates
41
39
  end
42
40
 
43
41
  # Required path for the new project to be generated
44
- argument :location, :type => :string
42
+ argument :location, type: :string
45
43
 
46
44
  # Name of the template being used to generate the project.
47
- class_option :template, :default => 'default'
45
+ class_option :template, default: 'default'
48
46
 
49
47
  # Output a config.ru file for Rack if --rack is passed
50
- class_option :rack, :type => :boolean, :default => false
48
+ class_option :rack, type: :boolean, default: false
51
49
 
52
50
  # Write a Rack config.ru file for project
53
51
  # @return [void]
@@ -56,8 +54,8 @@ module Middleman::Templates
56
54
  template 'shared/config.ru', File.join(location, 'config.ru')
57
55
  end
58
56
 
59
- class_option :'skip-bundle', :type => :boolean, :default => false
60
- class_option :'skip-gemfile', :type => :boolean, :default => false
57
+ class_option :'skip-bundle', type: :boolean, default: false
58
+ class_option :'skip-gemfile', type: :boolean, default: false
61
59
 
62
60
  # Write a Bundler Gemfile file for project
63
61
  # @return [void]
@@ -72,7 +70,7 @@ module Middleman::Templates
72
70
  end
73
71
 
74
72
  # Output a .gitignore file
75
- class_option :'skip-git', :type => :boolean, :default => false
73
+ class_option :'skip-git', type: :boolean, default: false
76
74
 
77
75
  # Write a .gitignore file for project
78
76
  # @return [void]
@@ -96,9 +94,8 @@ require 'middleman-core/templates/mobile'
96
94
  require 'middleman-more/templates/smacss'
97
95
 
98
96
  # Local templates
99
- if ENV['HOME'] # Sometimes HOME doesn't exist, in which case there's no point to local templates
100
- require 'middleman-core/templates/local'
101
- end
97
+ # Sometimes HOME doesn't exist, in which case there's no point to local templates
98
+ require 'middleman-core/templates/local' if ENV['HOME']
102
99
 
103
100
  # Barebones template
104
101
  require 'middleman-core/templates/empty'
@@ -1,15 +1,14 @@
1
1
  # Default Middleman template
2
2
  class Middleman::Templates::Default < Middleman::Templates::Base
3
-
4
3
  class_option 'css_dir',
5
- :default => 'stylesheets',
6
- :desc => 'The path to the css files'
4
+ default: 'stylesheets',
5
+ desc: 'The path to the css files'
7
6
  class_option 'js_dir',
8
- :default => 'javascripts',
9
- :desc => 'The path to the javascript files'
7
+ default: 'javascripts',
8
+ desc: 'The path to the javascript files'
10
9
  class_option 'images_dir',
11
- :default => 'images',
12
- :desc => 'The path to the image files'
10
+ default: 'images',
11
+ desc: 'The path to the image files'
13
12
 
14
13
  # Template files are relative to this file
15
14
  # @return [String]
@@ -1,6 +1,5 @@
1
1
  # A barebones template with nothing much in it
2
2
  class Middleman::Templates::Empty < Middleman::Templates::Base
3
-
4
3
  # Template files are relative to this file
5
4
  # @return [String]
6
5
  def self.source_root
@@ -16,4 +16,4 @@ group :test do
16
16
  gem 'fivemat'
17
17
  gem 'aruba'
18
18
  gem 'rspec'
19
- end
19
+ end
@@ -9,6 +9,6 @@ end
9
9
 
10
10
  require 'rake/clean'
11
11
 
12
- task :test => ['cucumber']
12
+ task test: ['cucumber']
13
13
 
14
- task :default => :test
14
+ task default: :test
@@ -28,7 +28,6 @@ class MyExtension < ::Middleman::Extension
28
28
  # def a_helper
29
29
  # end
30
30
  # end
31
-
32
31
  end
33
32
 
34
33
  # Register extensions which can be activated
@@ -1,15 +1,14 @@
1
1
  # HTML5 Boilerplate template
2
2
  class Middleman::Templates::Html5 < Middleman::Templates::Base
3
-
4
3
  class_option 'css_dir',
5
- :default => 'css',
6
- :desc => 'The path to the css files'
4
+ default: 'css',
5
+ desc: 'The path to the css files'
7
6
  class_option 'js_dir',
8
- :default => 'js',
9
- :desc => 'The path to the javascript files'
7
+ default: 'js',
8
+ desc: 'The path to the javascript files'
10
9
  class_option 'images_dir',
11
- :default => 'img',
12
- :desc => 'The path to the image files'
10
+ default: 'img',
11
+ desc: 'The path to the image files'
13
12
 
14
13
  # Templates are relative to this file
15
14
  # @return [String]