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.
- data/lib/bespoke/exportable.rb +27 -0
- data/lib/bespoke/version.rb +1 -1
- data/spec/exportable_spec.rb +36 -5
- metadata +2 -2
data/lib/bespoke/exportable.rb
CHANGED
@@ -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])
|
data/lib/bespoke/version.rb
CHANGED
data/spec/exportable_spec.rb
CHANGED
@@ -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.
|
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.
|
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-
|
12
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|