hobber 0.6.2 → 0.6.4

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.
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "active_support"
4
-
5
3
  group :development do
6
4
  gem 'pry'
7
5
  gem 'rspec'
data/hobber.gemspec CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Hobber::VERSION
17
17
 
18
18
  gem.add_dependency 'tilt'
19
- gem.add_dependency 'rdiscount'
20
- gem.add_dependency 'haml'
21
19
  gem.add_dependency 'thor'
20
+
21
+ gem.add_dependency "active_support"
22
+ gem.add_dependency "sprockets"
22
23
  end
@@ -3,33 +3,55 @@ require 'hobber/rendered_object'
3
3
 
4
4
  module Hobber
5
5
  class RenderAction
6
- def initialize robjects, &block
6
+ attr_accessor :rewrite_paths
7
+ attr_accessor :rewrite_urls
8
+
9
+ def initialize robjects, binding=nil, &block
7
10
  @robjects = robjects
8
11
  @tmpl_vars = {}
9
12
  @layouts = []
10
13
  @rewrite_paths = []
11
- @rewrite_urls = []
14
+ @rewrite_urls = []
12
15
  @target_extention = nil
16
+ @caller_binding = binding || ( block && block.binding )
13
17
 
14
18
  if block
15
19
  block.arity <= 0 ? instance_eval(&block) : block.call(self)
16
20
  end
17
21
  end
18
22
 
19
- def layout robject
20
- raise ArgumentError.new('Expected RenderableObject as a layout') unless robject.is_a?(RenderableObject)
21
- @layouts << robject
23
+ def layout *robjects
24
+ robjects.each do |robject|
25
+ raise ArgumentError.new('Expected RenderableObject as a layout') unless robject.is_a?(RenderableObject)
26
+ end
27
+ @layouts.concat robjects
22
28
  end
23
29
 
24
- def tmpl_vars vars
30
+ def tmpl_vars vars=[]
31
+ if vars.empty?
32
+ return @tmpl_vars
33
+ end
25
34
  @tmpl_vars.merge!(vars)
26
35
  end
27
36
 
28
- def rewrite_path regexp, replacement
37
+ def _parse_rewrite_args *args
38
+ if args.count == 1 && args[0].is_a?(Hash)
39
+ regexp, replacement = args[0].keys.first, args[0].values.first
40
+ elsif args.count == 2
41
+ regexp, replacement = args
42
+ else
43
+ raise ArgumentError.new('[rewrite_path] Expected either [regexp => sub] or [regexp, replacement] as arguments')
44
+ end
45
+ return regexp, replacement
46
+ end
47
+
48
+ def rewrite_path *args
49
+ regexp, replacement = _parse_rewrite_args(*args)
29
50
  @rewrite_paths << [regexp, replacement]
30
51
  end
31
52
 
32
- def rewrite_url regexp, replacement
53
+ def rewrite_url *args
54
+ regexp, replacement = _parse_rewrite_args(*args)
33
55
  @rewrite_urls << [regexp, replacement]
34
56
  end
35
57
 
@@ -43,31 +65,31 @@ module Hobber
43
65
  def perform
44
66
  @robjects.map do |ro|
45
67
  RenderedObject.new(
46
- :data=>render_renderable_object(ro, @tmpl_vars, @layouts),
68
+ :data=>_render_renderable_object(ro, { :item => ro }.merge(@tmpl_vars), @layouts),
47
69
  :renderable_object=>ro,
48
70
  :layouts=> @layouts,
49
- :path=>rewrite_paths(ro.path, @rewrite_paths),
50
- :url=>rewrite_paths(ro.path, @rewrite_urls))
71
+ :path=>_rewrite_paths(ro.path, @rewrite_paths),
72
+ :url=>_rewrite_paths(ro.path, @rewrite_urls))
51
73
  end
52
74
  end
53
75
 
54
76
  protected
55
77
 
56
- def render_renderable_object ro, tmpl_vars={}, layouts=[]
78
+ def _render_renderable_object ro, tmpl_vars={}, layouts=[]
57
79
  tmpl_vars.merge!(ro.tmpl_vars)
58
80
  tmpl_vars.merge!(:current_renderable_object => ro)
59
81
 
60
- result = ro.render(tmpl_vars)
82
+ result = ro.render(tmpl_vars, @caller_binding)
61
83
 
62
84
  render_chain = layouts.reverse
63
85
  render_chain.each do |layout|
64
86
  tmpl_vars = layout.tmpl_vars.merge(tmpl_vars)
65
- result = layout.render(tmpl_vars) { result }
87
+ result = layout.render(tmpl_vars, @caller_binding) { result }
66
88
  end
67
89
  result
68
90
  end
69
91
 
70
- def rewrite_paths path, rewrites
92
+ def _rewrite_paths path, rewrites
71
93
  target_path = path.dup
72
94
  rewrites.each do |regexp, replacement|
73
95
  target_path.gsub!(regexp, replacement)
@@ -14,8 +14,7 @@ module Hobber
14
14
  @data = yield(self) if block_given?
15
15
  end
16
16
 
17
- def render(vars={}, &block)
18
- context = Object.new
17
+ def render(vars={}, context=Object.new, &block)
19
18
  _render_template_chain(@path, data, context, vars, &block)
20
19
  end
21
20
 
@@ -24,7 +23,11 @@ module Hobber
24
23
  end
25
24
 
26
25
  def [](key)
27
- tmpl_vars.fetch(key)
26
+ tmpl_vars[key]
27
+ end
28
+
29
+ def fetch(*a)
30
+ tmpl_vars.fetch(*a)
28
31
  end
29
32
 
30
33
  def data
@@ -1,3 +1,3 @@
1
1
  module Hobber
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.4"
3
3
  end
data/lib/hobber.rb CHANGED
@@ -1,26 +1,48 @@
1
1
  require 'fileutils'
2
2
  require 'thor'
3
3
  require 'logger'
4
+ require 'active_support/core_ext/hash/indifferent_access'
4
5
 
5
6
  require "hobber/version"
6
7
  require 'hobber/renderable_object'
7
8
  require 'hobber/rendered_object_saver'
8
9
  require 'hobber/render_action'
9
10
 
11
+ require 'yaml'
12
+ require 'sprockets'
13
+
10
14
  module Hobber
11
- class Shell
12
- include Thor::Shell
15
+ include Thor::Shell
16
+ include FileUtils
17
+
18
+ def assets
19
+ @assets ||= Sprockets::Environment.new
20
+ end
21
+
22
+ def load_yaml_config path
23
+ HashWithIndifferentAccess.new(YAML.load_file(path))
24
+ end
25
+
26
+ def default_tmpl_vars vars
27
+ @default_tmpl_vars ||= {}
28
+ @default_tmpl_vars.merge!(vars)
13
29
  end
14
30
 
15
- def shell
16
- @shell ||= Shell.new
31
+ def default_rewrite_path *args
32
+ @default_rewrite_paths ||= []
33
+ @default_rewrite_paths << args
34
+ end
35
+
36
+ def default_rewrite_url *args
37
+ @default_rewrite_urls ||= []
38
+ @default_rewrite_urls << args
17
39
  end
18
40
 
19
41
  def remove_output_dir dirname, options={}
20
42
  safe_mode = options.fetch(:safe, false)
21
43
 
22
44
  dirname = Pathname.new(dirname)
23
- if safe_mode && shell.no?("Do you want to remove output dir [#{dirname.realpath}]? (y/yes/other=no)")
45
+ if safe_mode && no?("Do you want to remove output dir [#{dirname.realpath}]? (y/yes/other=no)")
24
46
  return
25
47
  end
26
48
  FileUtils.rm_r dirname.realpath
@@ -41,8 +63,18 @@ module Hobber
41
63
  end
42
64
 
43
65
  def render robjects, opts={}, &block
44
- rv = RenderAction.new(robjects.to_a, &block).perform
45
- robjects.is_a?(Array) ? rv : rv.first
66
+ render_action = RenderAction.new(robjects.to_a, block.binding, &block)
67
+ if render_action.rewrite_paths.empty?
68
+ @default_rewrite_paths && @default_rewrite_paths.map { |args| render_action.rewrite_path *args }
69
+ end
70
+ if render_action.rewrite_urls.empty?
71
+ @default_rewrite_urls && @default_rewrite_urls.map { |args| render_action.rewrite_url *args }
72
+ end
73
+ if @default_tmpl_vars
74
+ render_action.tmpl_vars @default_tmpl_vars.merge(render_action.tmpl_vars)
75
+ end
76
+ rendered_objects = render_action.perform
77
+ robjects.is_a?(Array) ? rendered_objects : rendered_objects.first
46
78
  end
47
79
 
48
80
  def save *args
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hobber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-27 00:00:00.000000000Z
12
+ date: 2012-06-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt
16
- requirement: &70242806127920 !ruby/object:Gem::Requirement
16
+ requirement: &70258422315100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70242806127920
24
+ version_requirements: *70258422315100
25
25
  - !ruby/object:Gem::Dependency
26
- name: rdiscount
27
- requirement: &70242806127500 !ruby/object:Gem::Requirement
26
+ name: thor
27
+ requirement: &70258422314680 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70242806127500
35
+ version_requirements: *70258422314680
36
36
  - !ruby/object:Gem::Dependency
37
- name: haml
38
- requirement: &70242806127080 !ruby/object:Gem::Requirement
37
+ name: active_support
38
+ requirement: &70258422314260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70242806127080
46
+ version_requirements: *70258422314260
47
47
  - !ruby/object:Gem::Dependency
48
- name: thor
49
- requirement: &70242806126660 !ruby/object:Gem::Requirement
48
+ name: sprockets
49
+ requirement: &70258422313840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70242806126660
57
+ version_requirements: *70258422313840
58
58
  description: Minimal implementation ..
59
59
  email:
60
60
  - boy.maas@gmail.com