mascot 0.1.10 → 0.1.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f77239bcb7a2bd96b15d86b979653a82c4b28a64
4
- data.tar.gz: d9cde5bb1ec8a33d691f54834a70ea41a5770a93
3
+ metadata.gz: d49c4a14896b46d0fdcd7aedd1250a104e9b5048
4
+ data.tar.gz: 101a6a075f65556c4dc0a86ca69e7a5c39459a4d
5
5
  SHA512:
6
- metadata.gz: 3b96e6d7fd9588b2fbdb2e8a52c6126b5645851e063bfe797a3a49e21edc684f57fbdf1a0b02774e933d889788092e536a0a2fe969fc5200b366b379f69dae2b
7
- data.tar.gz: 295c73a424297c6d7f0688e576eb1fdf41dfa06b1826ea1993ed580a7abcbefef61af6c031b750e7136882d085b36df8777d80a24b4c243d35fda85ac7a68cd2
6
+ metadata.gz: 65db308403d25699fd58e498e09a7c390b885894709ebb60be396eeca3f1faed0d65c574dfc75164325272462bd7672e230f505694c6e1b15a7e2f5ba1b6addc
7
+ data.tar.gz: eec51f4ec3bd95bf28831e097a646acd3faeba341529f75eb3bb93a844ffdff87c44d3aa9d9d78d29d703897bde3fb7b1960d0bda74abf8f96d73e3dfe127f61
data/lib/mascot.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "mascot/version"
2
2
 
3
3
  module Mascot
4
- # Raised if a user attempts to access a resource outside of the sitemap path.
4
+ # Raised if a user attempts to access a resource outside of the site path.
5
5
  UnsafePathAccessError = Class.new(SecurityError)
6
6
 
7
7
  # Raised by Resources if a path is added that's not a valid path.
@@ -12,8 +12,9 @@ module Mascot
12
12
 
13
13
  autoload :Asset, "mascot/asset"
14
14
  autoload :Frontmatter, "mascot/frontmatter"
15
- autoload :SafeRoot, "mascot/safe_root"
15
+ autoload :ResourcesPipeline, "mascot/resources_pipeline"
16
16
  autoload :Resources, "mascot/resources"
17
17
  autoload :Resource, "mascot/resource"
18
- autoload :Sitemap, "mascot/sitemap"
18
+ autoload :SafeRoot, "mascot/safe_root"
19
+ autoload :Site, "mascot/site"
19
20
  end
data/lib/mascot/asset.rb CHANGED
@@ -50,7 +50,7 @@ module Mascot
50
50
  end
51
51
 
52
52
  def mime_type
53
- @mime_type ||= Array(inferred_mime_type).first || DEFAULT_MIME_TYPE
53
+ @mime_type ||= inferred_mime_type || DEFAULT_MIME_TYPE
54
54
  end
55
55
 
56
56
  def exists?
@@ -75,7 +75,7 @@ module Mascot
75
75
  # Returns the mime type of the file extension. If a type can't
76
76
  # be resolved then we'll just grab the first type.
77
77
  def inferred_mime_type
78
- MIME::Types.type_for(format_extension) if format_extension
78
+ MIME::Types.type_for(format_extension).first if format_extension
79
79
  end
80
80
  end
81
81
  end
@@ -0,0 +1,27 @@
1
+ module Mascot
2
+ module Extensions
3
+ # Register layouts with resources that match certain patterns.
4
+ class Layouts
5
+ Rule = Struct.new(:layout, :processor)
6
+
7
+ def initialize
8
+ @rules = Array.new
9
+ end
10
+
11
+ # Register a layout for a set of resources.
12
+ def layout(layout, &block)
13
+ @rules << Rule.new(layout, block)
14
+ end
15
+
16
+ def process_resources(resources)
17
+ resources.each do |resource|
18
+ @rules.each do |rule|
19
+ if rule.processor.call(resource)
20
+ resource.data["layout"] ||= rule.layout
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ module Mascot
2
+ module Extensions
3
+ class ProcManipulator
4
+ def initialize(block)
5
+ @block = block
6
+ end
7
+
8
+ def process_resources(resources)
9
+ resources.each do |resource|
10
+ if @block.arity == 1
11
+ @block.call resource
12
+ else # This will blow up if 0 or greater than 2.
13
+ @block.call resource, resources
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,9 +2,12 @@ require "yaml"
2
2
 
3
3
  module Mascot
4
4
  # Parses metadata from the header of the page.
5
+
6
+ # TODO: Redo this to use File readline and pos to
7
+ # perform faster
5
8
  class Frontmatter
6
9
  DELIMITER = "---".freeze
7
- PATTERN = /\A(#{DELIMITER}\n(.+)\n#{DELIMITER}\n)?(.+)\Z/m
10
+ PATTERN = /\A(#{DELIMITER}\n(.+?)\n#{DELIMITER}\n*)?(.+)\Z/m
8
11
 
9
12
  attr_reader :body
10
13
 
@@ -0,0 +1,10 @@
1
+ require "forwardable"
2
+
3
+ module Mascot
4
+ # Processes a collection of resources
5
+ class ResourcesPipeline < Array
6
+ def process(resources)
7
+ each{ |processor| processor.process_resources resources }
8
+ end
9
+ end
10
+ end
@@ -2,7 +2,7 @@ require "pathname"
2
2
 
3
3
  module Mascot
4
4
  # Validates if a path is within another path. This prevents
5
- # users from accidentally selecting a file outside of their sitemap,
5
+ # users from accidentally selecting a file outside of their site,
6
6
  # which could be insured.
7
7
  class SafeRoot
8
8
  def initialize(path: )
@@ -1,21 +1,18 @@
1
1
  require "pathname"
2
+ require "mascot/extensions/proc_manipulator"
2
3
 
3
4
  module Mascot
4
5
  # A collection of pages from a directory.
5
- class Sitemap
6
- # Default file pattern to pick up in sitemap
6
+ class Site
7
+ # Default file pattern to pick up in site
7
8
  DEFAULT_GLOB = "**/**".freeze
8
- # Default root path for sitemap.
9
+ # Default root path for site.
9
10
  DEFAULT_ROOT_PATH = Pathname.new(".").freeze
10
- # Default root request path
11
- DEFAULT_ROOT_REQUEST_PATH = Pathname.new("/").freeze
12
11
 
13
- attr_reader :root, :request_path, :extensions
12
+ attr_reader :root, :resources_pipeline
14
13
 
15
- def initialize(root: DEFAULT_ROOT_PATH, request_path: DEFAULT_ROOT_REQUEST_PATH)
14
+ def initialize(root: DEFAULT_ROOT_PATH)
16
15
  self.root = root
17
- self.request_path = request_path
18
- @extensions = []
19
16
  end
20
17
 
21
18
  # Lazy stream of files that will be rendered by resources.
@@ -29,10 +26,16 @@ module Mascot
29
26
  def resources
30
27
  Resources.new(root_file_path: root).tap do |resources|
31
28
  assets.each { |a| resources.add_asset a }
32
- process_resources resources
29
+ resources_pipeline.process resources
33
30
  end
34
31
  end
35
32
 
33
+ # Quick and dirty way to manipulate resources in the site without
34
+ # creating classes that implement the #process_resources method
35
+ def manipulate(&block)
36
+ resources_pipeline << Extensions::ProcManipulator.new(block)
37
+ end
38
+
36
39
  # Find the page with a path.
37
40
  def get(request_path)
38
41
  resources.get(request_path)
@@ -42,15 +45,11 @@ module Mascot
42
45
  @root = Pathname.new(path)
43
46
  end
44
47
 
45
- def request_path=(path)
46
- @request_path = Pathname.new(path)
48
+ def resources_pipeline
49
+ @resources_pipeline ||= ResourcesPipeline.new
47
50
  end
48
51
 
49
52
  private
50
- def process_resources(resources)
51
- @extensions.each { |exstension| exstension.process_resources(resources) }
52
- end
53
-
54
53
  def safe_root
55
54
  SafeRoot.new(path: root)
56
55
  end
@@ -1,3 +1,3 @@
1
1
  module Mascot
2
- VERSION = "0.1.10"
2
+ VERSION = "0.1.11"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mascot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Gessler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-03 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -75,11 +75,14 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - lib/mascot.rb
77
77
  - lib/mascot/asset.rb
78
+ - lib/mascot/extensions/layouts.rb
79
+ - lib/mascot/extensions/proc_manipulator.rb
78
80
  - lib/mascot/frontmatter.rb
79
81
  - lib/mascot/resource.rb
80
82
  - lib/mascot/resources.rb
83
+ - lib/mascot/resources_pipeline.rb
81
84
  - lib/mascot/safe_root.rb
82
- - lib/mascot/sitemap.rb
85
+ - lib/mascot/site.rb
83
86
  - lib/mascot/version.rb
84
87
  - mascot.gemspec
85
88
  homepage: https://github.com/bradgessler/mascot