hobber 0.6.2 → 0.6.4

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