middleman-core 3.3.2 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
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]