yarrow 0.3.2 → 0.3.3

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