bespoke 0.1.1 → 0.1.2

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.
@@ -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