flutterby 0.0.5 → 0.0.6

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: 871ef039693c35c6a70dbc86544957d084f247a7
4
- data.tar.gz: e7d491e74f143bf9a407113a1a24f74a34c7011f
3
+ metadata.gz: 46ebc1c85a56b410c6147dd87503c8fd59cd0d74
4
+ data.tar.gz: 5d65a75d308e436afed08be445828ab94c02396e
5
5
  SHA512:
6
- metadata.gz: bf3054184d1c4601fa3c936356269289ce99cd3f0fc03dac4c4c6400f719505dfb6c48e0e832ef5899455e54a40bb232c0a7cc91defa53d7b5987654d84173cb
7
- data.tar.gz: 4743c753fd558f18beae2982b166ef349c5072a207ab4ae5ff01711783b197fd1f8a91f8a7517fb34e617bf40ea383df961d3555006e710a7b91842e9cc4b950
6
+ metadata.gz: e4a6a0aee56906711254d63a905a6c95e5cd098cbc76bb8936e522f6eaea97af49f2c8e3bc8f749857090ff40556c77e033cc5aabb86c832ef97f3aec1ce6c1f
7
+ data.tar.gz: f1918f98a08abb87bfd9e0298abb739dc76f74a3ee01bef2f926f696a8378c2b4b89f589c74b213141877e09a902c2b7f89197935956f4e8ed48208ada0641a0
data/lib/flutterby.rb CHANGED
@@ -5,6 +5,7 @@ require "flutterby/folder"
5
5
  require "flutterby/view"
6
6
  require "flutterby/server"
7
7
 
8
+
8
9
  module Flutterby
9
10
  def Flutterby.from(fs_path, name: nil, parent: nil)
10
11
  name ||= ::File.basename(fs_path)
data/lib/flutterby/cli.rb CHANGED
@@ -35,15 +35,4 @@ Commander.configure do
35
35
  server.run!
36
36
  end
37
37
  end
38
-
39
-
40
- command :test do |c|
41
- c.syntax = 'flutterby test'
42
- c.description = 'TEST. Yo.'
43
- c.action do |args, options|
44
- root = Flutterby.from("./in", name: "/")
45
- root.list
46
- root.export("./out/")
47
- end
48
- end
49
38
  end
@@ -1,10 +1,11 @@
1
1
  module Flutterby
2
2
  class Entity
3
- attr_reader :name, :ext, :filters, :parent, :fs_path, :path, :data
3
+ attr_accessor :parent
4
+ attr_reader :name, :ext, :filters, :fs_path, :data, :children
4
5
 
5
6
  def initialize(name, parent: nil, fs_path: nil)
6
- @parent = parent
7
7
  @data = {}
8
+ reset_children!
8
9
 
9
10
  # Extract name, extension, and filters from given name
10
11
  parts = name.split(".")
@@ -12,8 +13,7 @@ module Flutterby
12
13
  @ext = parts.shift
13
14
  @filters = parts.reverse
14
15
 
15
- # Calculate full path
16
- @path = parent ? ::File.join(parent.path, full_name) : full_name
16
+ self.parent = parent
17
17
 
18
18
  # If a filesystem path was given, read the entity from disk
19
19
  if fs_path
@@ -22,30 +22,53 @@ module Flutterby
22
22
  end
23
23
  end
24
24
 
25
- def reload!
26
- read
25
+ #
26
+ # Children
27
+ #
28
+
29
+ def reset_children!
30
+ @children = []
31
+ me = self
32
+
33
+ # Inject some extra methods into this array because this is dirty old Ruby
34
+ @children.define_singleton_method(:<<) do |c|
35
+ c.parent = me
36
+ super(c)
37
+ end
38
+
39
+ @children.define_singleton_method(:find_by_name) do |name|
40
+ name = name.split('.').first
41
+ find { |c| c.name == name }
42
+ end
27
43
  end
28
44
 
29
- def list(indent: 0)
30
- puts "#{" " * indent}[#{self.class}] #{path}"
45
+ # Returns all children that will compile to a HTML page.
46
+ #
47
+ def pages
48
+ children.select { |c| c.ext == "html" }
31
49
  end
32
50
 
33
- def export(out_path)
34
- if should_publish?
35
- out_path = full_path(out_path)
36
- puts "* #{@name}: #{out_path}"
37
- write_static(out_path)
38
- end
51
+ #
52
+ # Path Algebra
53
+ #
54
+
55
+ def path
56
+ parent ? ::File.join(parent.path, full_name) : full_name
39
57
  end
40
58
 
41
59
  def url
42
60
  @url ||= ::File.join(parent ? parent.url : "/", full_name)
43
61
  end
44
62
 
45
- def full_path(base)
63
+ def full_fs_path(base:)
46
64
  ::File.expand_path(::File.join(base, full_name))
47
65
  end
48
66
 
67
+
68
+ #
69
+ # Tree Walking
70
+ #
71
+
49
72
  def root
50
73
  parent ? parent.root : self
51
74
  end
@@ -54,13 +77,51 @@ module Flutterby
54
77
  parent && parent.find(name)
55
78
  end
56
79
 
57
- def full_name
58
- @full_name ||= [name, ext].compact.join(".")
80
+ def find(path)
81
+ return self if path.nil? || path.empty?
82
+
83
+ # remove duplicate slashes
84
+ path.gsub!(%r{//}, "/")
85
+
86
+ case path
87
+ when %r{^\.\./?} then
88
+ parent ? parent.find($') : nil
89
+ when %r{^\.} then
90
+ self
91
+ when %r{^/} then
92
+ root.find($')
93
+ when %r{^([^/]+)/?} then
94
+ child = @children.find_by_name($1)
95
+ $'.empty? ? child : child.find($')
96
+ end
97
+ end
98
+
99
+
100
+ #
101
+ # Reading from filesystem
102
+ #
103
+
104
+ def reload!
105
+ reset_children!
106
+ read
59
107
  end
60
108
 
61
109
  def read
62
110
  end
63
111
 
112
+
113
+ #
114
+ # Exporting
115
+ #
116
+
117
+ def export(out_path)
118
+ if should_publish?
119
+ out_path = full_fs_path(base: out_path)
120
+ puts "* #{@name}: #{out_path}"
121
+ write_static(out_path)
122
+ end
123
+ end
124
+
64
125
  def write_static(path)
65
126
  end
66
127
 
@@ -68,6 +129,20 @@ module Flutterby
68
129
  !name.start_with?("_")
69
130
  end
70
131
 
132
+
133
+
134
+ #
135
+ # Misc
136
+ #
137
+
138
+ def to_s
139
+ "<#{self.class} #{self.path}>"
140
+ end
141
+
142
+ def full_name
143
+ @full_name ||= [name, ext].compact.join(".")
144
+ end
145
+
71
146
  def page?
72
147
  false
73
148
  end
@@ -29,14 +29,15 @@ module Flutterby
29
29
 
30
30
  def parse_frontmatter
31
31
  data = {}
32
- @contents.sub!(/\A\-\-\-\n(.+)\n\-\-\-\n/m) do
32
+
33
+ # YAML Front Matter
34
+ if @contents.sub!(/\A\-\-\-\n(.+)\n\-\-\-\n/m, "")
33
35
  data.merge! YAML.load($1)
34
- ""
35
36
  end
36
37
 
37
- @contents.sub!(/\A\+\+\+\n(.+)\n\+\+\+\n/m) do
38
+ # TOML Front Matter
39
+ if @contents.sub!(/\A\+\+\+\n(.+)\n\+\+\+\n/m, "")
38
40
  data.merge! TOML.parse($1)
39
- ""
40
41
  end
41
42
 
42
43
  data
@@ -1,38 +1,19 @@
1
1
  module Flutterby
2
2
  class Folder < Entity
3
- attr_reader :children
4
-
5
- def list(indent: 0)
6
- super
7
- children.each { |c| c.list(indent: indent + 1) }
8
- end
9
-
10
3
  def read
11
- @children = Dir[::File.join(fs_path, "*")].map do |entry|
12
- Flutterby.from(entry, parent: self)
13
- end.compact
4
+ Dir[::File.join(fs_path, "*")].each do |entry|
5
+ if entity = Flutterby.from(entry)
6
+ children << entity
7
+ end
8
+ end
14
9
  end
15
10
 
16
11
  def write_static(path)
17
12
  Dir.mkdir(path) unless ::File.exists?(path)
18
13
 
19
- @children.each do |child|
14
+ children.each do |child|
20
15
  child.export(path)
21
16
  end
22
17
  end
23
-
24
- def find(path)
25
- (name, slash, rest) = path.partition("/")
26
-
27
- name = name.split('.').first
28
- child = @children.find { |c| c.name == name }
29
- rest.empty? ? child : child.find(rest)
30
- end
31
-
32
- # Returns all children that will compile to a HTML page.
33
- #
34
- def pages
35
- children.select { |c| c.ext == "html" }
36
- end
37
18
  end
38
19
  end
@@ -1,3 +1,3 @@
1
1
  module Flutterby
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module Flutterby
2
2
  class View
3
3
  attr_reader :entity
4
+ alias_method :page, :entity
4
5
 
5
6
  def initialize(entity)
6
7
  @entity = entity
@@ -9,5 +10,13 @@ module Flutterby
9
10
  def date_format(date, fmt)
10
11
  date.strftime(fmt)
11
12
  end
13
+
14
+ def render(expr, *args)
15
+ find(expr).render(*args)
16
+ end
17
+
18
+ def find(expr)
19
+ entity.find(expr) or raise "No entity found for #{expr}"
20
+ end
12
21
  end
13
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flutterby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hendrik Mans