bespoke 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,13 +14,39 @@ class Bespoke
14
14
  @name = name.to_sym
15
15
  @fields = {}
16
16
  @joins = {}
17
+ @helpers = {}
17
18
  @logger = logger || Logger.new(STDERR)
18
19
  end
19
20
 
21
+ class HelperClass
22
+ def initialize(helpers, context)
23
+ @helpers, @context = helpers, context
24
+ end
25
+
26
+ def has_key?(key)
27
+ @helpers.has_key?(key) ||
28
+ @context.has_key?(key)
29
+ end
30
+
31
+ def [](key)
32
+ if @helpers.has_key?(key)
33
+ @helpers[key].call(@context)
34
+ elsif @context.has_key?(key)
35
+ @context[key]
36
+ else
37
+ super(key)
38
+ end
39
+ end
40
+ end
41
+
20
42
  def headers
21
43
  @fields.keys
22
44
  end
23
45
 
46
+ def helper(name, &block)
47
+ @helpers[name] = block
48
+ end
49
+
24
50
  def field(name, template_string)
25
51
  fields[name] = Mustache::Template.new(template_string)
26
52
  end
@@ -33,6 +59,7 @@ class Bespoke
33
59
  raise "hashes missing #{@name.inspect} (of: #{hashes.keys.inspect})" unless hashes.has_key?(@name)
34
60
  hashes[@name].map do |main_key, row|
35
61
  context = { @name => row }
62
+ context[:helper] = HelperClass.new(@helpers, context)
36
63
  @joins.each_pair do |join_name, key|
37
64
  if other_table = hashes[join_name.to_sym]
38
65
  if other_table.has_key?(row[key])
@@ -1,3 +1,3 @@
1
1
  class Bespoke
2
- VERSION = '0.1.1' unless defined?(Bespoke::VERSION)
2
+ VERSION = '0.1.2' unless defined?(Bespoke::VERSION)
3
3
  end
@@ -5,20 +5,51 @@ require 'stringio'
5
5
  describe Bespoke::Exportable do
6
6
  let(:logger) { nil }
7
7
  let(:export) { Bespoke::Exportable.new(:test, logger) }
8
+ let(:test_data) {
9
+ {
10
+ 1 => {:one => 1, :two => 2},
11
+ 2 => {:one => 5, :two => 10}
12
+ }
13
+ }
14
+
15
+ before do
16
+ export.field(:column, "{{test.one}}-{{test.two}}")
17
+ end
8
18
 
9
19
  it "initializes" do
10
20
  export
11
21
  end
12
22
 
13
23
  it "exports templated rows" do
14
- export.field(:column, "{{test.one}}-{{test.two}}")
15
- data = export.export({:test => {
16
- 1 => {:one => 1, :two => 2},
17
- 2 => {:one => 5, :two => 10}
18
- }})
24
+ data = export.export(:test => test_data)
19
25
  data.should == [["1-2"], ["5-10"]]
20
26
  end
21
27
 
28
+ context "helper methods" do
29
+ it "can be declared" do
30
+ export.field(:helped, "{{helper.helper_method}}")
31
+ export.helper(:helper_method) { |row| "help!" }
32
+
33
+ data = export.export(:test => test_data)
34
+ data.should == [["1-2", "help!"], ["5-10", "help!"]]
35
+ end
36
+
37
+ it "has access to row data" do
38
+ export.field(:helped, "{{helper.fallback}}")
39
+ export.helper(:fallback) do |row|
40
+ row[:test][:one] || row[:test][:two]
41
+ end
42
+
43
+ data = export.export(:test =>
44
+ {
45
+ 1 => {:two => 2},
46
+ 2 => {:one => 5, :two => 10}
47
+ }
48
+ )
49
+ data.should == [["-2", "2"], ["5-10", "5"]]
50
+ end
51
+ end
52
+
22
53
  context "logging" do
23
54
  let(:output) { StringIO.new }
24
55
  let(:logger) { Logger.new(output) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bespoke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-07 00:00:00.000000000 Z
12
+ date: 2014-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler