hx 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009-2010 MenTaLguY <mental@rydia.net>
1
+ Copyright (c) 2009-2011 MenTaLguY <mental@rydia.net>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0
1
+ 0.12.0
@@ -28,12 +28,11 @@ require 'hx/backend/rawfiles'
28
28
  module Hx
29
29
  module Backend
30
30
 
31
- class Hobix
31
+ class HobixFilter
32
32
  include Hx::Filter
33
33
 
34
34
  def initialize(input, options)
35
- files = Hx::Backend::RawFiles.new(input, options)
36
- @source = Hx::StripPath.new(files, :suffix => ".yaml")
35
+ @source = Hx::StripPath.new(input, :suffix => ".yaml")
37
36
  end
38
37
 
39
38
  def yaml_repr(value)
@@ -86,5 +85,12 @@ class Hobix
86
85
  end
87
86
  end
88
87
 
88
+ class Hobix < HobixFilter
89
+ def initialize(input, options)
90
+ files = Hx::Backend::RawFiles.new(input, options)
91
+ super(files, options)
92
+ end
93
+ end
94
+
89
95
  end
90
96
  end
data/lib/hx.rb CHANGED
@@ -448,7 +448,6 @@ class Site
448
448
 
449
449
  attr_reader :options
450
450
  attr_reader :sources
451
- attr_reader :outputs
452
451
 
453
452
  class << self
454
453
  private :new
@@ -516,7 +515,7 @@ class Site
516
515
  end
517
516
 
518
517
  outputs = []
519
- for raw_output in raw_config.fetch('outputs', [])
518
+ for raw_output in raw_config.fetch('output', [])
520
519
  outputs << Hx.build_source(options, NULL_INPUT, sources, raw_output)
521
520
  end
522
521
 
@@ -527,22 +526,21 @@ class Site
527
526
  def initialize(options, sources, outputs)
528
527
  @options = options
529
528
  @sources = sources
530
- @outputs = outputs
531
- @combined_output = Overlay.new(*@outputs)
529
+ @output = Overlay.new(*outputs)
532
530
  end
533
531
 
534
532
  def edit_entry(path, prototype=nil)
535
- @combined_output.edit_entry(path, prototype) { |text| yield text }
533
+ @output.edit_entry(path, prototype) { |text| yield text }
536
534
  self
537
535
  end
538
536
 
539
537
  def each_entry_path(selector)
540
- @combined_output.each_entry_path(selector) { |path| yield path }
538
+ @output.each_entry_path(selector) { |path| yield path }
541
539
  self
542
540
  end
543
541
 
544
542
  def get_entry(path)
545
- @combined_output.get_entry(path)
543
+ @output.get_entry(path)
546
544
  end
547
545
  end
548
546
 
data/spec/site_spec.rb CHANGED
@@ -45,12 +45,6 @@ describe "Hx::Site.load" do
45
45
  site.sources.should include('foo')
46
46
  site.sources.should include('bar')
47
47
  end
48
-
49
- it "creates an output for every entry in outputs" do
50
- yaml_config = YAML.dump({'outputs' => [{}, {}]})
51
- site = Hx::Site.load(yaml_config, __FILE__)
52
- site.outputs.size.should == 2
53
- end
54
48
  end
55
49
 
56
50
  describe Hx::Site do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hx
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 47
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 11
8
+ - 12
9
9
  - 0
10
- version: 0.11.0
10
+ version: 0.12.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - MenTaLguY
@@ -50,14 +50,12 @@ extra_rdoc_files:
50
50
  - README.rdoc
51
51
  files:
52
52
  - .document
53
- - .gitignore
54
53
  - LICENSE
55
54
  - README.rdoc
56
55
  - Rakefile
57
56
  - VERSION
58
57
  - bin/hx
59
58
  - lib/hx.rb
60
- - lib/hx/backend/couchdb.rb
61
59
  - lib/hx/backend/hobix.rb
62
60
  - lib/hx/backend/rawfiles.rb
63
61
  - lib/hx/cli.rb
@@ -86,8 +84,8 @@ homepage: http://github.com/mental/hx
86
84
  licenses: []
87
85
 
88
86
  post_install_message:
89
- rdoc_options:
90
- - --charset=UTF-8
87
+ rdoc_options: []
88
+
91
89
  require_paths:
92
90
  - lib
93
91
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -116,14 +114,14 @@ signing_key:
116
114
  specification_version: 3
117
115
  summary: A miniature static site generator.
118
116
  test_files:
119
- - spec/spec_helper.rb
120
- - spec/rawfiles_spec.rb
121
117
  - spec/cache_spec.rb
122
118
  - spec/hx_dummy.rb
123
- - spec/nullinput_spec.rb
124
- - spec/site_spec.rb
125
119
  - spec/hx_dummy2.rb
126
- - spec/rack_spec.rb
120
+ - spec/nullinput_spec.rb
127
121
  - spec/overlay_spec.rb
128
122
  - spec/pathops_spec.rb
123
+ - spec/rack_spec.rb
124
+ - spec/rawfiles_spec.rb
129
125
  - spec/selector_spec.rb
126
+ - spec/site_spec.rb
127
+ - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
22
- hx.gemspec
@@ -1,134 +0,0 @@
1
- # hx/backend/couchdb - CouchDB backend for Hx
2
- #
3
- # Copyright (c) 2009-2010 MenTaLguY <mental@rydia.net>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- require 'cgi'
25
- require 'net/http'
26
- require 'uri'
27
- require 'json'
28
- require 'time'
29
- require 'hx'
30
-
31
- module Hx
32
- module Backend
33
-
34
- class CouchDB
35
- include Hx::Filter
36
-
37
- class HTTPError < RuntimeError
38
- attr_reader :path
39
- attr_reader :code
40
- attr_reader :response
41
-
42
- def initialize(path, code, response)
43
- @path = path
44
- @code = code
45
- @response = response
46
- end
47
-
48
- def to_s
49
- "HTTP Error #{@code} for #{path}"
50
- end
51
- end
52
-
53
- def initialize(input, options)
54
- couchdb_server = options.fetch(:couchdb_server, "http://localhost:5984/")
55
- couchdb_database = options.fetch(:couchdb_database, "entries")
56
- uri = URI.parse(couchdb_server)
57
- if uri.scheme != "http"
58
- raise RuntimeError, "Unsupported protocol #{uri.proto}"
59
- end
60
- @host = uri.host || "localhost"
61
- @port = uri.port || 80
62
- prefix = uri.path || "/"
63
- prefix = "#{prefix}/" unless prefix =~ %r(/$)
64
- @prefix = "#{prefix}#{couchdb_database}/"
65
- end
66
-
67
- def edit_entry(path, prototype=nil)
68
- begin
69
- text = get_document(path)
70
- rescue HTTPError => e
71
- raise e unless e.code == 404
72
- raise Hx::NoSuchEntryError, "No such entry #{path}" unless prototype
73
- text = prototype.to_json
74
- end
75
- text = yield text
76
- entry = JSON.parse(text)
77
- entry['updated'] = Time.now.xmlschema
78
- entry['created'] ||= entry['updated']
79
- put_document(path, entry.to_json)
80
- self
81
- end
82
-
83
- def each_entry_path(selector)
84
- listing = JSON.parse(get_document('_all_docs'))
85
- listing['rows'].each do |row|
86
- path = row['id']
87
- yield path if selector.accept_path? path
88
- end
89
- self
90
- end
91
-
92
- def get_entry(path)
93
- begin
94
- entry = JSON.parse(get_document(path))
95
- rescue HTTPError => e
96
- raise e unless e.code == 404
97
- raise Hx::NoSuchEntryError, path
98
- end
99
- for field in %(created updated)
100
- entry[field] = Time.parse(entry[field] || "")
101
- end
102
- entry
103
- end
104
-
105
- private
106
- def request_path_for(id)
107
- "#{@prefix}#{CGI.escape(id)}"
108
- end
109
-
110
- def get_document(id)
111
- request = Net::HTTP::Get.new(request_path_for(id))
112
- http_request(request)
113
- end
114
-
115
- def put_document(id, body)
116
- request = Net::HTTP::Put.new(request_path_for(id),
117
- 'Content-Type' => 'application/json')
118
- request.body = body
119
- http_request(request)
120
- end
121
-
122
- def http_request(request)
123
- response = Net::HTTP.start(@host, @port) { |http| http.request(request) }
124
- case response
125
- when Net::HTTPSuccess
126
- response.body
127
- else
128
- raise HTTPError.new(request.path, response.code.to_i, response)
129
- end
130
- end
131
- end
132
-
133
- end
134
- end