hanlon 0.0.1 → 0.0.3

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hanlon (0.0.1)
4
+ hanlon (0.0.3)
5
5
  haml
6
6
 
7
7
  GEM
@@ -1,7 +1,22 @@
1
1
  require 'haml'
2
2
  require 'hanlon/version'
3
- require 'hanlon/engine'
4
- require 'hanlon/loader'
3
+ require 'hanlon/methods_finder'
4
+ require 'hanlon/template_loader'
5
5
 
6
6
  module Hanlon
7
+ def self.included base
8
+ base.extend TemplateLoader
9
+ end
10
+
11
+ def execute_hanlon engine, name, *args
12
+ @method_being_searched_for = name
13
+ @arguments_for_method = args
14
+ engine.render self
15
+ end
16
+
17
+ def hanlon name, &block
18
+ (name.to_s == @method_being_searched_for) ?
19
+ block.call(*@arguments_for_method) :
20
+ ''
21
+ end
7
22
  end
@@ -0,0 +1,21 @@
1
+ module Hanlon
2
+ class MethodsFinder
3
+ def self.find engine
4
+ Hanlon::MethodsFinder.new(engine).methods
5
+ end
6
+
7
+ def initialize engine
8
+ @methods = []
9
+ @engine = engine
10
+ end
11
+
12
+ def hanlon name, &block
13
+ @methods.push name.to_s
14
+ end
15
+
16
+ def methods
17
+ @engine.render(self)
18
+ @methods
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ module Hanlon
2
+ module TemplateLoader
3
+ def load_template template
4
+ engine = Haml::Engine.new template
5
+ MethodsFinder.find(engine).each do |name|
6
+ define_method name do |*args|
7
+ execute_hanlon engine, name, *args
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Hanlon
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,23 @@
1
+ # hanlon: Rails helpers defined in haml
2
+
3
+ ## Example
4
+
5
+ class RobGreeter
6
+ include Hanlon
7
+ load_template %q<
8
+
9
+ - hanlon :yell do |message|
10
+ %p= message.upcase
11
+
12
+ - hanlon :message do
13
+ %h1= yell 'Hey there, Rob'
14
+ %p= 'I wanted to let you know that I just adore your flaming, red mane. You remind me of a confident jungle cat, constantly on the prowl. Hit me up soon, tiger.'
15
+ >
16
+ end
17
+
18
+ puts RobGreeter.new.message
19
+
20
+ ## Result
21
+
22
+ <h1><p>HEY THERE, ROB</p></h1>
23
+ <p>I wanted to let you know that I just adore your flaming, red mane. You remind me of a confident jungle cat, constantly on the prowl. Hit me up soon, tiger.</p>
@@ -13,3 +13,7 @@ RSpec.configure do |config|
13
13
  end
14
14
 
15
15
  require 'hanlon'
16
+
17
+ def template temp
18
+ File.read("#{File.dirname __FILE__}/templates/#{temp}")
19
+ end
@@ -0,0 +1,5 @@
1
+ - hanlon :greet do |name|
2
+ Hello #{name}
3
+
4
+ - hanlon :greet_user do |user|
5
+ = greet user[:name]
@@ -0,0 +1,11 @@
1
+ - hanlon :operation do |op, num_1, num_2, result|
2
+ %p
3
+ %span.operations> #{num_1} #{op} #{num_2} =
4
+ %span.result>= result
5
+
6
+ - hanlon :add do |num_1, num_2|
7
+ = operation '+', num_1, num_2, num_1 + num_2
8
+
9
+ - hanlon :substract do |num_1, num_2|
10
+ = operation '-', num_1, num_2, num_1 - num_2
11
+
@@ -1,4 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hanlon do
4
+ before :all do
5
+ class RobHanlon
6
+ include Hanlon
7
+ load_template template('math.hanlon')
8
+ end
9
+ end
10
+ it 'should add some methods when included in a class' do
11
+ RobHanlon.should respond_to :load_template
12
+ RobHanlon.new.should respond_to :execute_hanlon
13
+ RobHanlon.new.should respond_to :hanlon
14
+ end
15
+
16
+ it 'should load hanlon methods' do
17
+ RobHanlon.new.should respond_to :substract
18
+ RobHanlon.new.should respond_to :add
19
+ RobHanlon.new.should respond_to :operation
20
+ end
21
+
22
+ it 'should execute the hanlon methods without error' do
23
+ RobHanlon.new.add(1, 4).should == "<p><span class='operations'>1 + 4 =</span><span class='result'>5</span></p>\n"
24
+ end
4
25
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hanlon::MethodsFinder do
4
+ describe "#find" do
5
+ it 'should return a list of methods in a template' do
6
+ engine = Haml::Engine.new template("math.hanlon")
7
+ Hanlon::MethodsFinder.find(engine).should =~ ['add', 'substract', 'operation']
8
+ end
9
+ end
10
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - cohitre
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-08-07 00:00:00 -07:00
17
+ date: 2011-08-08 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -59,13 +59,15 @@ files:
59
59
  - Rakefile
60
60
  - hanlon.gemspec
61
61
  - lib/hanlon.rb
62
- - lib/hanlon/engine.rb
63
- - lib/hanlon/loader.rb
62
+ - lib/hanlon/methods_finder.rb
63
+ - lib/hanlon/template_loader.rb
64
64
  - lib/hanlon/version.rb
65
+ - readme.md
65
66
  - spec/spec_helper.rb
66
- - spec/unit/engine_spec.rb
67
+ - spec/templates/greetings.hanlon
68
+ - spec/templates/math.hanlon
67
69
  - spec/unit/hanlon_spec.rb
68
- - spec/unit/loader_spec.rb
70
+ - spec/unit/methods_finder_spec.rb
69
71
  has_rdoc: true
70
72
  homepage: ""
71
73
  licenses: []
@@ -100,6 +102,7 @@ specification_version: 3
100
102
  summary: Define rails helpers with Haml
101
103
  test_files:
102
104
  - spec/spec_helper.rb
103
- - spec/unit/engine_spec.rb
105
+ - spec/templates/greetings.hanlon
106
+ - spec/templates/math.hanlon
104
107
  - spec/unit/hanlon_spec.rb
105
- - spec/unit/loader_spec.rb
108
+ - spec/unit/methods_finder_spec.rb
@@ -1,24 +0,0 @@
1
- module Hanlon
2
- class Engine
3
- def initialize hanlon_text, options={}
4
- @haml_engine = Haml::Engine.new hanlon_text, options
5
- end
6
-
7
- def module
8
- @module ||= process
9
- end
10
-
11
- def process
12
- loader = Hanlon::Loader.new
13
- @haml_engine.render loader
14
- @module = loader.build
15
- end
16
-
17
- def evaluate haml
18
- klass = Class.new
19
- klass.send :include, self.module
20
- engine = Haml::Engine.new haml
21
- engine.render klass.new
22
- end
23
- end
24
- end
@@ -1,30 +0,0 @@
1
- module Hanlon
2
- class Loader
3
- def initialize
4
- @loaded_methods = {}
5
- end
6
-
7
- def add_method name, &block
8
- @loaded_methods[name] = block
9
- end
10
-
11
- def hanlon name, &block
12
- add_method name do |*helper_args|
13
- capture_haml *helper_args, &block
14
- end
15
- end
16
-
17
- def [] name
18
- @loaded_methods[name]
19
- end
20
-
21
- def build
22
- loaded_methods = @loaded_methods
23
- Module.new do
24
- loaded_methods.each_pair do |key, value|
25
- define_method key, value
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,17 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hanlon::Engine do
4
- describe '#process' do
5
- it 'should return a module with the defined methods' do
6
- engine = Hanlon::Engine.new %q<
7
- - hanlon :greeting do |name|
8
- %p== hello #{name}.
9
- - hanlon :headline do
10
- %h1 Headline>
11
-
12
- engine.module.should be_a(Module)
13
- engine.evaluate("= greeting 'Carlos'").should == "<p>hello Carlos.</p>\n"
14
- engine.evaluate("= headline").should == "<h1>Headline</h1>\n"
15
- end
16
- end
17
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hanlon::Loader do
4
- describe '#add_method' do
5
- it 'should add a method to the methods hash' do
6
- loader = Hanlon::Loader.new
7
- loader.add_method :headline do
8
- 'headline'
9
- end
10
- loader[:headline].should be_a Proc
11
- end
12
- end
13
-
14
- describe '#build' do
15
- it 'should return a module with the defined methods' do
16
- loader = Hanlon::Loader.new
17
- loader.add_method :headline do
18
- 'headline'
19
- end
20
- loader.add_method :paragraph do
21
- 'bogus'
22
- end
23
- mod = loader.build
24
- mod.should be_a Module
25
- ModuleHelper = mod
26
- class ModuleTester
27
- include ModuleHelper
28
- end
29
- ModuleTester.new.paragraph.should == 'bogus'
30
- ModuleTester.new.headline.should == 'headline'
31
- end
32
- end
33
- end