yarrow 0.3.2 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71cc6bb31451de567a4dc5f5ef84df45855d3a21
4
- data.tar.gz: 7ad6ffae5eeaec2084b50a295a10b07610f2fb5f
3
+ metadata.gz: 648a0f70b24617f5498150579e5c18775c1b4c8c
4
+ data.tar.gz: 25f8f7a1f34525764329e798169c0c430362f31a
5
5
  SHA512:
6
- metadata.gz: 8b5e08f3edca9b08b59e7ed777e50b0e5b7e738a7e7c1f5a14440919e9d93c84ab4b5b5b55b46061d520deaebd7cee84c43dc7c6beff160c23a4b2c4643ff850
7
- data.tar.gz: 378379ec11cb8944230afc693ca8b1df083e192e6ad53ddebc70d083bd26b2e63fc58b9c4690f7d848aa741edb86071c0f8f404cb34aa7c9264cfd29a18226c5
6
+ metadata.gz: 887acaa6c3d7fe08fe3c8ef0ede960c825a312e47510a10b456f3170c052dfacfe041609fdf5d7d599d98efd6b49ba71d74b7fdb4aa84369911f42e5f4e6449a
7
+ data.tar.gz: fc1cfe571626692b46cf1946f54294e74c87dee9c81df8545e9585245756baf2caa84472021563331f21c68a15b1e239a025d3b30e9b2884148f450d97052b37
data/bin/yarrow-server CHANGED
@@ -9,5 +9,7 @@ $:.unshift(File.join(File.dirname(File.expand_path(path)), '..', 'lib'))
9
9
 
10
10
  require 'yarrow'
11
11
 
12
+ Yarrow::Configuration.register_defaults
13
+
12
14
  server = Yarrow::Server.new
13
15
  server.run
@@ -1,13 +1,10 @@
1
1
  module Yarrow
2
-
3
2
  ##
4
3
  # Hash-like object containing runtime configuration values. Can be accessed indifferently
5
4
  # via object style lookups or symbol keys.
6
5
  #
7
6
  class Configuration < Hashie::Mash
8
-
9
7
  class << self
10
-
11
8
  ##
12
9
  # Provides access to the registered global configuration.
13
10
  #
@@ -20,12 +17,24 @@ module Yarrow
20
17
  end
21
18
 
22
19
  ##
23
- # Loads and registers a global configuration object.
20
+ # Loads and registers a global configuration instance.
21
+ #
22
+ # This will reset any previously initialized configuration.
24
23
  #
25
24
  # @param [String] path to YAML file
26
25
  #
27
26
  def register(file)
28
- @@configuration = self.load(file)
27
+ @@configuration = load(file)
28
+ end
29
+
30
+ ##
31
+ # Loads and registers a global configuration instance with
32
+ # library-provided defaults.
33
+ #
34
+ # This will reset any previously initialized configuration.
35
+ #
36
+ def register_defaults
37
+ @@configuration = load_defaults
29
38
  end
30
39
 
31
40
  ##
@@ -56,15 +65,22 @@ module Yarrow
56
65
  self.new(YAML.load_file(file))
57
66
  end
58
67
 
68
+ ##
69
+ # Yarrow is distributed with a `defaults.yml` which provides minimum
70
+ # boostrap configuration and default settings for various internal
71
+ # classes. Use this method to automatically load these defaults.
72
+ #
73
+ # @return [Yarrow::Configuration]
74
+ def load_defaults
75
+ load(File.join(File.dirname(__FILE__), 'defaults.yml'))
76
+ end
59
77
  end
60
-
61
78
  end
62
79
 
63
80
  ##
64
81
  # Embeds global configuration access in a client object.
65
82
  #
66
83
  module Configurable
67
-
68
84
  ##
69
85
  # Provides access to the registered global configuration. This can
70
86
  # be overriden by subclasses to customize behaviour (eg: in test cases).
@@ -74,12 +90,10 @@ module Yarrow
74
90
  def config
75
91
  Configuration.instance
76
92
  end
77
-
78
93
  end
79
94
 
80
95
  ##
81
96
  # Raised when a required config section or property is missing.
82
97
  class ConfigurationError < StandardError
83
98
  end
84
-
85
99
  end
@@ -22,7 +22,7 @@ module Yarrow
22
22
  @arguments = arguments
23
23
  @options = {}
24
24
  @targets = []
25
- @config = Configuration.load(File.dirname(__FILE__) + "/defaults.yml")
25
+ @config = Configuration.load_defaults
26
26
  end
27
27
 
28
28
  def config
@@ -1,7 +1,7 @@
1
1
  # Default configuration settings for Yarrow.
2
2
  # This is loaded when the configuration is initialized.
3
3
  input_dir: content
4
- output_dir: public
4
+ output_dir: .
5
5
  meta:
6
6
  title: Default Project
7
7
  author: Default Name
@@ -21,4 +21,8 @@ server:
21
21
  port: 8888
22
22
  host: localhost
23
23
  handler: thin
24
+ middleware:
25
+ - Rack::ShowExceptions
26
+ - Rack::CommonLogger
27
+ - Rack::ContentLength
24
28
 
data/lib/yarrow/server.rb CHANGED
@@ -44,11 +44,13 @@ module Yarrow
44
44
  def app
45
45
  root = docroot
46
46
  index = @index_file || 'index.html'
47
+ plugins = middleware || []
47
48
 
48
49
  Rack::Builder.new do
49
- use Rack::ShowExceptions
50
- use Rack::CommonLogger
51
- use Rack::ContentLength
50
+ plugins.each do |plugin|
51
+ puts plugin
52
+ use plugin
53
+ end
52
54
  use DirectoryIndex, root: root, index: index
53
55
  run Rack::Directory.new(root)
54
56
  end
@@ -73,13 +75,20 @@ module Yarrow
73
75
  config.output_dir || Dir.pwd
74
76
  end
75
77
 
78
+ ##
79
+ # @return [Array<Class>]
80
+ def middleware
81
+ plugins = config.server.middleware || []
82
+ plugins.map { |plugin| Kernel.const_get(plugin) }
83
+ end
84
+
76
85
  ##
77
86
  # Stub to fill in default Rack options that will eventually be
78
87
  # provided by config.
79
88
  #
80
89
  # TODO: remove this and use config.merge to build a single access point
81
90
  def rack_options
82
- rack_options = {
91
+ {
83
92
  :Port => config.server.port,
84
93
  :Host => config.server.port,
85
94
  :server => config.server.handler.to_sym,
@@ -0,0 +1,40 @@
1
+ module Yarrow
2
+ module Tools
3
+ # TODO: consider renaming this to OutputDocument.
4
+ class OutputFile
5
+ include ::Configurable
6
+
7
+ WRITE_MODE = 'w+:UTF-8'.freeze
8
+
9
+ # @return [String] Basename reflecting the server convention (usually: index.html)
10
+ def index_name
11
+ @index_name ||= config.index_name || 'index.html'
12
+ end
13
+
14
+ # @return [String] Docroot of the output target
15
+ def docroot
16
+ @docroot ||= config.output_dir
17
+ end
18
+
19
+ # Write an output file to the specified path under the docroot.
20
+ #
21
+ # @param path [String]
22
+ # @param content [String]
23
+ def write(path, content)
24
+ # If the target path is a directory,
25
+ # generate a default index filename.
26
+ if path[path.length-1] == '/'
27
+ path = "#{path}#{index_name}"
28
+ end
29
+
30
+ target_path = Pathname.new("docroot#{path}")
31
+
32
+ FileUtils.mkdir_p(target_path.dirname)
33
+
34
+ File.open(target_path.to_s, WRITE_MODE) do |file|
35
+ file.puts(content)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,4 +1,4 @@
1
1
  module Yarrow
2
2
  APP_NAME = 'Yarrow'.freeze
3
- VERSION = '0.3.2'.freeze
3
+ VERSION = '0.3.3'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yarrow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rickerby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2015-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -181,6 +181,7 @@ files:
181
181
  - lib/yarrow/output/mapper.rb
182
182
  - lib/yarrow/server.rb
183
183
  - lib/yarrow/tools/front_matter.rb
184
+ - lib/yarrow/tools/output_file.rb
184
185
  - lib/yarrow/version.rb
185
186
  homepage: http://rubygemspec.org/gems/yarrow
186
187
  licenses: