alephant-publisher 0.5.1 → 0.6.1
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.
- checksums.yaml +4 -4
- data/alephant-publisher.gemspec +2 -1
- data/lib/alephant/publisher/version.rb +1 -1
- data/lib/alephant/publisher/view_mapper.rb +58 -0
- data/lib/alephant/publisher/views/base.rb +44 -0
- data/lib/alephant/publisher/views/html.rb +60 -0
- data/lib/alephant/publisher/views/json.rb +18 -0
- data/lib/alephant/publisher/views.rb +26 -0
- data/lib/alephant/publisher/writer.rb +10 -10
- data/lib/alephant/publisher.rb +2 -0
- data/spec/archiver_spec.rb +1 -1
- data/spec/fixtures/components/foo/models/bar.rb +1 -1
- data/spec/fixtures/components/foo/models/foo.rb +1 -1
- data/spec/fixtures/components/foo/models/json.rb +21 -0
- data/spec/processor_spec.rb +2 -2
- data/spec/publisher_spec.rb +1 -1
- data/spec/{render_mapper_spec.rb → view_mapper_spec.rb} +5 -26
- data/spec/views_json_spec.rb +33 -0
- data/spec/writer_spec.rb +15 -37
- metadata +108 -86
- data/lib/alephant/publisher/render_mapper.rb +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa40ce959677b14f7a5c135013a4deac722a26a7
|
4
|
+
data.tar.gz: 4eaf4ef0c0d96ba7829bdbb8ddaf9318b71d8d9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b1868ff97a51e4157dbdf3e4f82c786292c13b8911e76587e22ca8d01eafdd6d7abd4ac6057e3bac937db6a10d76f1dd1b38b6023919d1c8ca0af4043fc1abd
|
7
|
+
data.tar.gz: 13ffe1f81e279b4567fe016a3fbb5d59be49fe0fe7f1a7760c477c3494b8e43644d08bf7477f06c38b47b1a1d1fd9ef1320c3669cd0dc35dec1e524213f12fb8
|
data/alephant-publisher.gemspec
CHANGED
@@ -36,11 +36,12 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_runtime_dependency 'jsonpath'
|
37
37
|
spec.add_runtime_dependency 'crimp'
|
38
38
|
spec.add_runtime_dependency 'peach'
|
39
|
+
spec.add_runtime_dependency 'i18n'
|
40
|
+
spec.add_runtime_dependency 'hashie'
|
39
41
|
spec.add_runtime_dependency 'alephant-support'
|
40
42
|
spec.add_runtime_dependency 'alephant-sequencer'
|
41
43
|
spec.add_runtime_dependency 'alephant-cache'
|
42
44
|
spec.add_runtime_dependency 'alephant-logger'
|
43
|
-
spec.add_runtime_dependency 'alephant-renderer'
|
44
45
|
spec.add_runtime_dependency 'alephant-lookup'
|
45
46
|
spec.add_runtime_dependency 'alephant-preview'
|
46
47
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'alephant/logger'
|
2
|
+
|
3
|
+
module Alephant
|
4
|
+
module Publisher
|
5
|
+
class ViewMapper
|
6
|
+
include Logger
|
7
|
+
include Renderer
|
8
|
+
|
9
|
+
DEFAULT_LOCATION = 'components'
|
10
|
+
|
11
|
+
def initialize(component_id, view_base_path=nil)
|
12
|
+
self.base_path = "#{view_base_path}/#{component_id}" unless view_base_path.nil?
|
13
|
+
@component_id = component_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def base_path
|
17
|
+
@base_path || DEFAULT_LOCATION
|
18
|
+
end
|
19
|
+
|
20
|
+
def base_path=(path)
|
21
|
+
@base_path = File.directory?(path) ? path : (raise "Invalid path: '#{path}'")
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate(data)
|
25
|
+
model_locations.reduce({}) do |obj, file|
|
26
|
+
obj.tap do |o|
|
27
|
+
model_id = model_id_for file
|
28
|
+
o[model_id] = model(model_id, data)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def model(view_id, data)
|
36
|
+
require model_location_for view_id
|
37
|
+
Views.get_registered_class(view_id).new(data)
|
38
|
+
end
|
39
|
+
|
40
|
+
def model_location_for(view_id)
|
41
|
+
File.join(base_path, 'models', "#{view_id}.rb")
|
42
|
+
end
|
43
|
+
|
44
|
+
def model_locations
|
45
|
+
Dir[model_base_path]
|
46
|
+
end
|
47
|
+
|
48
|
+
def model_base_path
|
49
|
+
"#{base_path}/models/*"
|
50
|
+
end
|
51
|
+
|
52
|
+
def model_id_for(location)
|
53
|
+
location.split('/').last.sub(/\.rb/, '')
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'alephant/publisher/views'
|
2
|
+
require 'json'
|
3
|
+
require 'hashie'
|
4
|
+
|
5
|
+
module Alephant::Publisher::Views
|
6
|
+
module Base
|
7
|
+
def self.included base
|
8
|
+
base.send :include, InstanceMethods
|
9
|
+
base.extend ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
attr_reader :data, :content_type, :base_path
|
14
|
+
|
15
|
+
def initialize(data = {})
|
16
|
+
@data = Hashie::Mash.new data
|
17
|
+
@base_path = self.class.base_path
|
18
|
+
|
19
|
+
setup
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_h
|
23
|
+
whitelist.reduce({}) { |m,s| m.tap { |m| m[s] = self.send(s) } }
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup; end
|
27
|
+
def whitelist; [] end
|
28
|
+
end
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
attr_accessor :base_path
|
32
|
+
|
33
|
+
def inherited(subclass)
|
34
|
+
current_dir = File.dirname(caller.first[/^[^:]+/])
|
35
|
+
dir_path = Pathname.new(File.join(current_dir,'..')).realdirpath
|
36
|
+
|
37
|
+
subclass.base_path = dir_path.to_s
|
38
|
+
|
39
|
+
Alephant::Publisher::Views.register(subclass)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'alephant/publisher/views/base'
|
2
|
+
require 'mustache'
|
3
|
+
require 'i18n'
|
4
|
+
|
5
|
+
module Alephant::Publisher::Views
|
6
|
+
class Html < Mustache
|
7
|
+
include Base
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@content_type = "text/html"
|
11
|
+
load_translations_from base_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def locale
|
15
|
+
:en
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def load_translations_from(base_path)
|
21
|
+
if I18n.load_path.empty?
|
22
|
+
I18n.config.enforce_available_locales = false
|
23
|
+
I18n.load_path = i18n_load_path_from(base_path)
|
24
|
+
I18n.backend.load_translations
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def i18n_load_path_from(base_path)
|
29
|
+
Dir[
|
30
|
+
File.join(
|
31
|
+
Pathname.new(base_path).parent,
|
32
|
+
'locale',
|
33
|
+
'*.yml')
|
34
|
+
]
|
35
|
+
.flatten
|
36
|
+
.uniq
|
37
|
+
end
|
38
|
+
|
39
|
+
def t(key, params = {})
|
40
|
+
I18n.locale = locale
|
41
|
+
prefix = /\/([^\/]+)\.mustache/.match(template_file)[1]
|
42
|
+
params.merge! :default => key unless params[:default]
|
43
|
+
translation = I18n.translate("#{prefix}.#{key}", params)
|
44
|
+
end
|
45
|
+
|
46
|
+
def template
|
47
|
+
@template_string ||= File.open(template_file).read
|
48
|
+
end
|
49
|
+
|
50
|
+
def template_name
|
51
|
+
Mustache.underscore(self.class.to_s).split('/').last
|
52
|
+
end
|
53
|
+
|
54
|
+
def template_file
|
55
|
+
File.join(base_path,'templates',"#{template_name}.#{template_extension}")
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'alephant/publisher/views/base'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Alephant::Publisher::Views
|
5
|
+
class Json
|
6
|
+
include Base
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@content_type = "application/json"
|
10
|
+
end
|
11
|
+
|
12
|
+
def render
|
13
|
+
JSON.generate(to_h)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'alephant/publisher/views/html'
|
2
|
+
require 'alephant/publisher/views/json'
|
3
|
+
|
4
|
+
module Alephant
|
5
|
+
module Publisher
|
6
|
+
module Views
|
7
|
+
@@views = {}
|
8
|
+
|
9
|
+
def self.register(klass)
|
10
|
+
@@views[underscorify(klass.name.split('::').last)] = klass
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.get_registered_class(id)
|
14
|
+
@@views[id]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.underscorify(str)
|
18
|
+
str.gsub(/::/, '/').
|
19
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
20
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
21
|
+
tr("-", "_").
|
22
|
+
downcase
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -8,7 +8,7 @@ require 'alephant/lookup'
|
|
8
8
|
require 'alephant/logger'
|
9
9
|
require 'alephant/sequencer'
|
10
10
|
require 'alephant/support/parser'
|
11
|
-
require 'alephant/publisher/
|
11
|
+
require 'alephant/publisher/view_mapper'
|
12
12
|
|
13
13
|
module Alephant
|
14
14
|
module Publisher
|
@@ -23,7 +23,7 @@ module Alephant
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def mapper
|
26
|
-
@mapper ||=
|
26
|
+
@mapper ||= ViewMapper.new(
|
27
27
|
config[:renderer_id],
|
28
28
|
config[:view_path]
|
29
29
|
)
|
@@ -49,17 +49,17 @@ module Alephant
|
|
49
49
|
protected
|
50
50
|
|
51
51
|
def perform
|
52
|
-
Proc.new {
|
52
|
+
Proc.new { views.each { |id, view| write(id, view) } }
|
53
53
|
end
|
54
54
|
|
55
|
-
def write(id,
|
55
|
+
def write(id, view)
|
56
56
|
seq_for(id).sequence(message) do
|
57
|
-
store(id,
|
57
|
+
store(id, view, location_for(id))
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def store(id,
|
62
|
-
cache.put(location,
|
61
|
+
def store(id, view, location)
|
62
|
+
cache.put(location, view.render, view.content_type, :msg_id => message.id)
|
63
63
|
lookup.write(id, options, seq_id, location)
|
64
64
|
end
|
65
65
|
|
@@ -68,7 +68,7 @@ module Alephant
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def batch
|
71
|
-
@batch ||= (
|
71
|
+
@batch ||= (views.count > 1) ? seq_for(config[:renderer_id]) : nil
|
72
72
|
end
|
73
73
|
|
74
74
|
def batch?
|
@@ -92,8 +92,8 @@ module Alephant
|
|
92
92
|
@seq_id ||= Sequencer::Sequencer.sequence_id_from(message, config[:sequence_id_path])
|
93
93
|
end
|
94
94
|
|
95
|
-
def
|
96
|
-
@
|
95
|
+
def views
|
96
|
+
@views ||= mapper.generate(data)
|
97
97
|
end
|
98
98
|
|
99
99
|
def opt_hash
|
data/lib/alephant/publisher.rb
CHANGED
@@ -7,6 +7,8 @@ require 'alephant/publisher/sqs_helper/archiver'
|
|
7
7
|
require 'alephant/logger'
|
8
8
|
require 'alephant/support/aop'
|
9
9
|
require 'alephant/publisher/processor'
|
10
|
+
require 'alephant/publisher/views'
|
11
|
+
require 'alephant/publisher/views/base'
|
10
12
|
|
11
13
|
module Alephant
|
12
14
|
module Publisher
|
data/spec/archiver_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Alephant::Publisher::SQSHelper::Archiver do
|
|
4
4
|
describe "#see" do
|
5
5
|
it "calls cache put with the correct params" do
|
6
6
|
time_now = DateTime.parse("Feb 24 1981")
|
7
|
-
DateTime.
|
7
|
+
allow(DateTime).to receive(:now).and_return(time_now)
|
8
8
|
|
9
9
|
q = double("queue").as_null_object
|
10
10
|
c = double("cache").as_null_object
|
data/spec/processor_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Alephant::Publisher::Processor do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
Alephant::Publisher::Writer.
|
7
|
-
Alephant::Publisher::Writer.
|
6
|
+
allow_any_instance_of(Alephant::Publisher::Writer).to receive(:initialize)
|
7
|
+
allow_any_instance_of(Alephant::Publisher::Writer).to receive(:run!)
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "#consume(msg)" do
|
data/spec/publisher_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Alephant::Publisher do
|
|
5
5
|
let(:instance) { Alephant::Publisher.create(options) }
|
6
6
|
|
7
7
|
before(:each) do
|
8
|
-
Alephant::Publisher::SQSHelper::Queue.
|
8
|
+
allow_any_instance_of(Alephant::Publisher::SQSHelper::Queue).to receive(:initialize)
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "#initialize(opts = {}, logger)" do
|
@@ -1,20 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Alephant::Publisher::
|
3
|
+
describe Alephant::Publisher::ViewMapper do
|
4
4
|
let(:component_id) { :foo }
|
5
5
|
let(:data) {{ :foo => :bar }}
|
6
6
|
let(:path) { File.join(File.dirname(__FILE__), 'fixtures/components') }
|
7
7
|
|
8
|
-
subject { Alephant::Publisher::
|
9
|
-
|
10
|
-
before(:each) do
|
11
|
-
File.stub(:directory?).and_return(true)
|
12
|
-
end
|
8
|
+
subject { Alephant::Publisher::ViewMapper }
|
13
9
|
|
14
10
|
describe "initialize(view_base_path)" do
|
15
11
|
context "view_base_path = invalid_path" do
|
16
12
|
it "should raise an error" do
|
17
|
-
File.stub(:directory?).and_return(false)
|
18
13
|
expect {
|
19
14
|
subject.new(component_id, './invalid_path')
|
20
15
|
}.to raise_error
|
@@ -24,8 +19,8 @@ describe Alephant::Publisher::RenderMapper do
|
|
24
19
|
context "view_base_path = '.'" do
|
25
20
|
it "sets base_path" do
|
26
21
|
expect(
|
27
|
-
subject.new(component_id,
|
28
|
-
).to eq("
|
22
|
+
subject.new(component_id, path).base_path
|
23
|
+
).to eq("#{path}/#{component_id}")
|
29
24
|
end
|
30
25
|
end
|
31
26
|
|
@@ -33,27 +28,11 @@ describe Alephant::Publisher::RenderMapper do
|
|
33
28
|
it "sets base_path" do
|
34
29
|
expect(
|
35
30
|
subject.new(component_id).base_path
|
36
|
-
).to eq(Alephant::Publisher::
|
31
|
+
).to eq(Alephant::Publisher::ViewMapper::DEFAULT_LOCATION)
|
37
32
|
end
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
41
|
-
describe "create_renderer(template_file, data)" do
|
42
|
-
it "Returns a valid renderer" do
|
43
|
-
expect(
|
44
|
-
subject.new(component_id, path)
|
45
|
-
.create_renderer('foo', { :content => 'hello'})
|
46
|
-
).to be_a(Alephant::Renderer::Mustache)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "Returns expected rendered content from a render" do
|
50
|
-
expect(
|
51
|
-
subject.new(component_id, path)
|
52
|
-
.create_renderer('foo', { :content => 'hello'}).render
|
53
|
-
).to eq("hello\n")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
36
|
describe "generate(data)" do
|
58
37
|
it "calls create_renderer for each template found" do
|
59
38
|
expect(
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fixtures/components/foo/models/json'
|
3
|
+
|
4
|
+
describe Alephant::Publisher::Views::Json do
|
5
|
+
let(:data) { {'foo' => 'test', 'bar' => 'white', 'baz' => 'list'} }
|
6
|
+
|
7
|
+
describe "#content_type" do
|
8
|
+
|
9
|
+
it "sets the correct content type" do
|
10
|
+
expect(MyApp::Json.new(data).content_type).to eq('application/json')
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#to_h" do
|
16
|
+
|
17
|
+
it "generates a hash based on the white list" do
|
18
|
+
expected_result = {'item1' => 'test', 'item2' => 'white'}
|
19
|
+
expect(MyApp::Json.new(data).to_h).to eq(expected_result)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#render" do
|
25
|
+
|
26
|
+
it "returns generated json" do
|
27
|
+
expected_result = "{\"item1\":\"test\",\"item2\":\"white\"}"
|
28
|
+
expect(MyApp::Json.new(data).render).to eq(expected_result)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/spec/writer_spec.rb
CHANGED
@@ -17,52 +17,34 @@ describe Alephant::Publisher::Writer do
|
|
17
17
|
before(:each) do
|
18
18
|
AWS.stub!
|
19
19
|
|
20
|
-
Alephant::Publisher::
|
21
|
-
.any_instance
|
22
|
-
.should_receive(:initialize)
|
20
|
+
allow_any_instance_of(Alephant::Publisher::ViewMapper).to receive(:initialize)
|
23
21
|
.with(
|
24
22
|
opts[:renderer_id],
|
25
23
|
opts[:view_path]
|
26
24
|
)
|
27
25
|
|
28
|
-
Alephant::Cache
|
29
|
-
.any_instance
|
30
|
-
.should_receive(:initialize)
|
26
|
+
allow_any_instance_of(Alephant::Cache).to receive(:initialize)
|
31
27
|
.with(
|
32
28
|
opts[:s3_bucket_id],
|
33
29
|
opts[:s3_object_path]
|
34
30
|
)
|
35
31
|
|
36
|
-
Alephant::Sequencer::SequenceTable
|
37
|
-
.any_instance
|
38
|
-
.stub(:create)
|
32
|
+
allow_any_instance_of(Alephant::Sequencer::SequenceTable).to receive(:create)
|
39
33
|
|
40
|
-
Alephant::Sequencer::Sequencer
|
41
|
-
.any_instance
|
42
|
-
.stub(:sequencer_id_from)
|
34
|
+
allow_any_instance_of(Alephant::Sequencer::Sequencer).to receive(:sequencer_id_from)
|
43
35
|
.and_return(1)
|
44
36
|
|
45
|
-
Alephant::Sequencer::Sequencer
|
46
|
-
.any_instance
|
47
|
-
.stub(:set_last_seen)
|
37
|
+
allow_any_instance_of(Alephant::Sequencer::Sequencer).to receive(:set_last_seen)
|
48
38
|
|
49
|
-
Alephant::Sequencer::Sequencer
|
50
|
-
.any_instance
|
51
|
-
.stub(:get_last_seen)
|
39
|
+
allow_any_instance_of(Alephant::Sequencer::Sequencer).to receive(:get_last_seen)
|
52
40
|
|
53
|
-
Alephant::Lookup::LookupTable
|
54
|
-
.any_instance
|
55
|
-
.stub(:create)
|
41
|
+
allow_any_instance_of(Alephant::Lookup::LookupTable).to receive(:create)
|
56
42
|
|
57
|
-
Alephant::Lookup::LookupTable
|
58
|
-
.any_instance
|
59
|
-
.stub(:table_name)
|
43
|
+
allow_any_instance_of(Alephant::Lookup::LookupTable).to receive(:table_name)
|
60
44
|
|
61
|
-
Alephant::Publisher::
|
62
|
-
.any_instance
|
63
|
-
.stub(:generate)
|
45
|
+
allow_any_instance_of(Alephant::Publisher::ViewMapper).to receive(:generate)
|
64
46
|
.and_return({
|
65
|
-
'component_id' => Struct.new(:render).new('content')
|
47
|
+
'component_id' => Struct.new(:render, :content_type).new('content', 'foo/bar')
|
66
48
|
})
|
67
49
|
|
68
50
|
end
|
@@ -85,11 +67,9 @@ describe Alephant::Publisher::Writer do
|
|
85
67
|
end
|
86
68
|
|
87
69
|
it "should write the correct lookup location" do
|
88
|
-
Alephant::Cache.
|
70
|
+
allow_any_instance_of(Alephant::Cache).to receive(:put)
|
89
71
|
|
90
|
-
Alephant::Lookup::LookupHelper
|
91
|
-
.any_instance
|
92
|
-
.should_receive(:write)
|
72
|
+
allow_any_instance_of(Alephant::Lookup::LookupHelper).to receive(:write)
|
93
73
|
.with(
|
94
74
|
"component_id",
|
95
75
|
{:variant=>"foo"},
|
@@ -99,12 +79,10 @@ describe Alephant::Publisher::Writer do
|
|
99
79
|
end
|
100
80
|
|
101
81
|
it "should put the correct location, content to cache" do
|
102
|
-
Alephant::Lookup::LookupHelper.
|
82
|
+
allow_any_instance_of(Alephant::Lookup::LookupHelper).to receive(:write)
|
103
83
|
|
104
|
-
Alephant::Cache
|
105
|
-
.
|
106
|
-
.should_receive(:put)
|
107
|
-
.with(expected_location, "content", :msg_id=>"id")
|
84
|
+
allow_any_instance_of(Alephant::Cache).to receive(:put)
|
85
|
+
.with(expected_location, "content", "foo/bar", :msg_id=>"id")
|
108
86
|
end
|
109
87
|
|
110
88
|
after do
|
metadata
CHANGED
@@ -1,351 +1,365 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alephant-publisher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Integralist
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.5'
|
20
|
-
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
23
|
requirements:
|
22
24
|
- - ~>
|
23
25
|
- !ruby/object:Gem::Version
|
24
26
|
version: '1.5'
|
25
|
-
prerelease: false
|
26
|
-
type: :development
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
29
|
requirement: !ruby/object:Gem::Requirement
|
35
30
|
requirements:
|
36
31
|
- - '>='
|
37
32
|
- !ruby/object:Gem::Version
|
38
33
|
version: '0'
|
39
|
-
prerelease: false
|
40
34
|
type: :development
|
41
|
-
|
42
|
-
name: rspec-nc
|
35
|
+
prerelease: false
|
43
36
|
version_requirements: !ruby/object:Gem::Requirement
|
44
37
|
requirements:
|
45
38
|
- - '>='
|
46
39
|
- !ruby/object:Gem::Version
|
47
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-nc
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
44
|
requirements:
|
50
45
|
- - '>='
|
51
46
|
- !ruby/object:Gem::Version
|
52
47
|
version: '0'
|
53
|
-
prerelease: false
|
54
48
|
type: :development
|
55
|
-
|
56
|
-
name: guard
|
49
|
+
prerelease: false
|
57
50
|
version_requirements: !ruby/object:Gem::Requirement
|
58
51
|
requirements:
|
59
52
|
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
62
57
|
requirement: !ruby/object:Gem::Requirement
|
63
58
|
requirements:
|
64
59
|
- - '>='
|
65
60
|
- !ruby/object:Gem::Version
|
66
61
|
version: '0'
|
67
|
-
prerelease: false
|
68
62
|
type: :development
|
69
|
-
|
70
|
-
name: guard-rspec
|
63
|
+
prerelease: false
|
71
64
|
version_requirements: !ruby/object:Gem::Requirement
|
72
65
|
requirements:
|
73
66
|
- - '>='
|
74
67
|
- !ruby/object:Gem::Version
|
75
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
76
71
|
requirement: !ruby/object:Gem::Requirement
|
77
72
|
requirements:
|
78
73
|
- - '>='
|
79
74
|
- !ruby/object:Gem::Version
|
80
75
|
version: '0'
|
81
|
-
prerelease: false
|
82
76
|
type: :development
|
83
|
-
|
84
|
-
name: pry
|
77
|
+
prerelease: false
|
85
78
|
version_requirements: !ruby/object:Gem::Requirement
|
86
79
|
requirements:
|
87
80
|
- - '>='
|
88
81
|
- !ruby/object:Gem::Version
|
89
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
90
85
|
requirement: !ruby/object:Gem::Requirement
|
91
86
|
requirements:
|
92
87
|
- - '>='
|
93
88
|
- !ruby/object:Gem::Version
|
94
89
|
version: '0'
|
95
|
-
prerelease: false
|
96
90
|
type: :development
|
97
|
-
|
98
|
-
name: pry-remote
|
91
|
+
prerelease: false
|
99
92
|
version_requirements: !ruby/object:Gem::Requirement
|
100
93
|
requirements:
|
101
94
|
- - '>='
|
102
95
|
- !ruby/object:Gem::Version
|
103
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-remote
|
104
99
|
requirement: !ruby/object:Gem::Requirement
|
105
100
|
requirements:
|
106
101
|
- - '>='
|
107
102
|
- !ruby/object:Gem::Version
|
108
103
|
version: '0'
|
109
|
-
prerelease: false
|
110
104
|
type: :development
|
111
|
-
|
112
|
-
name: pry-nav
|
105
|
+
prerelease: false
|
113
106
|
version_requirements: !ruby/object:Gem::Requirement
|
114
107
|
requirements:
|
115
108
|
- - '>='
|
116
109
|
- !ruby/object:Gem::Version
|
117
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry-nav
|
118
113
|
requirement: !ruby/object:Gem::Requirement
|
119
114
|
requirements:
|
120
115
|
- - '>='
|
121
116
|
- !ruby/object:Gem::Version
|
122
117
|
version: '0'
|
123
|
-
prerelease: false
|
124
118
|
type: :development
|
125
|
-
|
126
|
-
name: sinatra
|
119
|
+
prerelease: false
|
127
120
|
version_requirements: !ruby/object:Gem::Requirement
|
128
121
|
requirements:
|
129
122
|
- - '>='
|
130
123
|
- !ruby/object:Gem::Version
|
131
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sinatra
|
132
127
|
requirement: !ruby/object:Gem::Requirement
|
133
128
|
requirements:
|
134
129
|
- - '>='
|
135
130
|
- !ruby/object:Gem::Version
|
136
131
|
version: '0'
|
137
|
-
prerelease: false
|
138
132
|
type: :runtime
|
139
|
-
|
140
|
-
name: faraday
|
133
|
+
prerelease: false
|
141
134
|
version_requirements: !ruby/object:Gem::Requirement
|
142
135
|
requirements:
|
143
136
|
- - '>='
|
144
137
|
- !ruby/object:Gem::Version
|
145
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: faraday
|
146
141
|
requirement: !ruby/object:Gem::Requirement
|
147
142
|
requirements:
|
148
143
|
- - '>='
|
149
144
|
- !ruby/object:Gem::Version
|
150
145
|
version: '0'
|
151
|
-
prerelease: false
|
152
146
|
type: :runtime
|
153
|
-
|
154
|
-
name: trollop
|
147
|
+
prerelease: false
|
155
148
|
version_requirements: !ruby/object:Gem::Requirement
|
156
149
|
requirements:
|
157
150
|
- - '>='
|
158
151
|
- !ruby/object:Gem::Version
|
159
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: trollop
|
160
155
|
requirement: !ruby/object:Gem::Requirement
|
161
156
|
requirements:
|
162
157
|
- - '>='
|
163
158
|
- !ruby/object:Gem::Version
|
164
159
|
version: '0'
|
165
|
-
prerelease: false
|
166
160
|
type: :runtime
|
167
|
-
|
168
|
-
name: rake
|
161
|
+
prerelease: false
|
169
162
|
version_requirements: !ruby/object:Gem::Requirement
|
170
163
|
requirements:
|
171
164
|
- - '>='
|
172
165
|
- !ruby/object:Gem::Version
|
173
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rake
|
174
169
|
requirement: !ruby/object:Gem::Requirement
|
175
170
|
requirements:
|
176
171
|
- - '>='
|
177
172
|
- !ruby/object:Gem::Version
|
178
173
|
version: '0'
|
179
|
-
prerelease: false
|
180
174
|
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: aws-sdk
|
183
|
-
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - ~>
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '1.0'
|
188
|
-
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
189
191
|
requirements:
|
190
192
|
- - ~>
|
191
193
|
- !ruby/object:Gem::Version
|
192
194
|
version: '1.0'
|
193
|
-
prerelease: false
|
194
|
-
type: :runtime
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: mustache
|
197
|
-
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
199
|
- - '>='
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: 0.99.5
|
202
|
-
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
205
|
requirements:
|
204
206
|
- - '>='
|
205
207
|
- !ruby/object:Gem::Version
|
206
208
|
version: 0.99.5
|
207
|
-
prerelease: false
|
208
|
-
type: :runtime
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: jsonpath
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
211
218
|
version_requirements: !ruby/object:Gem::Requirement
|
212
219
|
requirements:
|
213
220
|
- - '>='
|
214
221
|
- !ruby/object:Gem::Version
|
215
222
|
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: crimp
|
216
225
|
requirement: !ruby/object:Gem::Requirement
|
217
226
|
requirements:
|
218
227
|
- - '>='
|
219
228
|
- !ruby/object:Gem::Version
|
220
229
|
version: '0'
|
221
|
-
prerelease: false
|
222
230
|
type: :runtime
|
223
|
-
|
224
|
-
name: crimp
|
231
|
+
prerelease: false
|
225
232
|
version_requirements: !ruby/object:Gem::Requirement
|
226
233
|
requirements:
|
227
234
|
- - '>='
|
228
235
|
- !ruby/object:Gem::Version
|
229
236
|
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: peach
|
230
239
|
requirement: !ruby/object:Gem::Requirement
|
231
240
|
requirements:
|
232
241
|
- - '>='
|
233
242
|
- !ruby/object:Gem::Version
|
234
243
|
version: '0'
|
235
|
-
prerelease: false
|
236
244
|
type: :runtime
|
237
|
-
|
238
|
-
name: peach
|
245
|
+
prerelease: false
|
239
246
|
version_requirements: !ruby/object:Gem::Requirement
|
240
247
|
requirements:
|
241
248
|
- - '>='
|
242
249
|
- !ruby/object:Gem::Version
|
243
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: i18n
|
244
253
|
requirement: !ruby/object:Gem::Requirement
|
245
254
|
requirements:
|
246
255
|
- - '>='
|
247
256
|
- !ruby/object:Gem::Version
|
248
257
|
version: '0'
|
249
|
-
prerelease: false
|
250
258
|
type: :runtime
|
251
|
-
|
252
|
-
name: alephant-support
|
259
|
+
prerelease: false
|
253
260
|
version_requirements: !ruby/object:Gem::Requirement
|
254
261
|
requirements:
|
255
262
|
- - '>='
|
256
263
|
- !ruby/object:Gem::Version
|
257
264
|
version: '0'
|
265
|
+
- !ruby/object:Gem::Dependency
|
266
|
+
name: hashie
|
258
267
|
requirement: !ruby/object:Gem::Requirement
|
259
268
|
requirements:
|
260
269
|
- - '>='
|
261
270
|
- !ruby/object:Gem::Version
|
262
271
|
version: '0'
|
263
|
-
prerelease: false
|
264
272
|
type: :runtime
|
265
|
-
|
266
|
-
name: alephant-sequencer
|
273
|
+
prerelease: false
|
267
274
|
version_requirements: !ruby/object:Gem::Requirement
|
268
275
|
requirements:
|
269
276
|
- - '>='
|
270
277
|
- !ruby/object:Gem::Version
|
271
278
|
version: '0'
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: alephant-support
|
272
281
|
requirement: !ruby/object:Gem::Requirement
|
273
282
|
requirements:
|
274
283
|
- - '>='
|
275
284
|
- !ruby/object:Gem::Version
|
276
285
|
version: '0'
|
277
|
-
prerelease: false
|
278
286
|
type: :runtime
|
279
|
-
|
280
|
-
name: alephant-cache
|
287
|
+
prerelease: false
|
281
288
|
version_requirements: !ruby/object:Gem::Requirement
|
282
289
|
requirements:
|
283
290
|
- - '>='
|
284
291
|
- !ruby/object:Gem::Version
|
285
292
|
version: '0'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: alephant-sequencer
|
286
295
|
requirement: !ruby/object:Gem::Requirement
|
287
296
|
requirements:
|
288
297
|
- - '>='
|
289
298
|
- !ruby/object:Gem::Version
|
290
299
|
version: '0'
|
291
|
-
prerelease: false
|
292
300
|
type: :runtime
|
293
|
-
|
294
|
-
name: alephant-logger
|
301
|
+
prerelease: false
|
295
302
|
version_requirements: !ruby/object:Gem::Requirement
|
296
303
|
requirements:
|
297
304
|
- - '>='
|
298
305
|
- !ruby/object:Gem::Version
|
299
306
|
version: '0'
|
307
|
+
- !ruby/object:Gem::Dependency
|
308
|
+
name: alephant-cache
|
300
309
|
requirement: !ruby/object:Gem::Requirement
|
301
310
|
requirements:
|
302
311
|
- - '>='
|
303
312
|
- !ruby/object:Gem::Version
|
304
313
|
version: '0'
|
305
|
-
prerelease: false
|
306
314
|
type: :runtime
|
307
|
-
|
308
|
-
name: alephant-renderer
|
315
|
+
prerelease: false
|
309
316
|
version_requirements: !ruby/object:Gem::Requirement
|
310
317
|
requirements:
|
311
318
|
- - '>='
|
312
319
|
- !ruby/object:Gem::Version
|
313
320
|
version: '0'
|
321
|
+
- !ruby/object:Gem::Dependency
|
322
|
+
name: alephant-logger
|
314
323
|
requirement: !ruby/object:Gem::Requirement
|
315
324
|
requirements:
|
316
325
|
- - '>='
|
317
326
|
- !ruby/object:Gem::Version
|
318
327
|
version: '0'
|
319
|
-
prerelease: false
|
320
328
|
type: :runtime
|
321
|
-
|
322
|
-
name: alephant-lookup
|
329
|
+
prerelease: false
|
323
330
|
version_requirements: !ruby/object:Gem::Requirement
|
324
331
|
requirements:
|
325
332
|
- - '>='
|
326
333
|
- !ruby/object:Gem::Version
|
327
334
|
version: '0'
|
335
|
+
- !ruby/object:Gem::Dependency
|
336
|
+
name: alephant-lookup
|
328
337
|
requirement: !ruby/object:Gem::Requirement
|
329
338
|
requirements:
|
330
339
|
- - '>='
|
331
340
|
- !ruby/object:Gem::Version
|
332
341
|
version: '0'
|
333
|
-
prerelease: false
|
334
342
|
type: :runtime
|
335
|
-
|
336
|
-
name: alephant-preview
|
343
|
+
prerelease: false
|
337
344
|
version_requirements: !ruby/object:Gem::Requirement
|
338
345
|
requirements:
|
339
346
|
- - '>='
|
340
347
|
- !ruby/object:Gem::Version
|
341
348
|
version: '0'
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: alephant-preview
|
342
351
|
requirement: !ruby/object:Gem::Requirement
|
343
352
|
requirements:
|
344
353
|
- - '>='
|
345
354
|
- !ruby/object:Gem::Version
|
346
355
|
version: '0'
|
347
|
-
prerelease: false
|
348
356
|
type: :runtime
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - '>='
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '0'
|
349
363
|
description: Static publishing to S3 based on SQS messages
|
350
364
|
email:
|
351
365
|
- mark.mcdx@gmail.com
|
@@ -366,27 +380,33 @@ files:
|
|
366
380
|
- lib/alephant/publisher/options.rb
|
367
381
|
- lib/alephant/publisher/processor.rb
|
368
382
|
- lib/alephant/publisher/processor/base.rb
|
369
|
-
- lib/alephant/publisher/render_mapper.rb
|
370
383
|
- lib/alephant/publisher/sqs_helper/archiver.rb
|
371
384
|
- lib/alephant/publisher/sqs_helper/queue.rb
|
372
385
|
- lib/alephant/publisher/version.rb
|
386
|
+
- lib/alephant/publisher/view_mapper.rb
|
387
|
+
- lib/alephant/publisher/views.rb
|
388
|
+
- lib/alephant/publisher/views/base.rb
|
389
|
+
- lib/alephant/publisher/views/html.rb
|
390
|
+
- lib/alephant/publisher/views/json.rb
|
373
391
|
- lib/alephant/publisher/writer.rb
|
374
392
|
- spec/archiver_spec.rb
|
375
393
|
- spec/fixtures/components/foo/models/bar.rb
|
376
394
|
- spec/fixtures/components/foo/models/foo.rb
|
395
|
+
- spec/fixtures/components/foo/models/json.rb
|
377
396
|
- spec/fixtures/components/foo/templates/bar.mustache
|
378
397
|
- spec/fixtures/components/foo/templates/foo.mustache
|
379
398
|
- spec/processor_spec.rb
|
380
399
|
- spec/publisher_spec.rb
|
381
400
|
- spec/queue_spec.rb
|
382
|
-
- spec/render_mapper_spec.rb
|
383
401
|
- spec/spec_helper.rb
|
402
|
+
- spec/view_mapper_spec.rb
|
403
|
+
- spec/views_json_spec.rb
|
384
404
|
- spec/writer_spec.rb
|
385
405
|
homepage: https://github.com/BBC-News/alephant-publisher
|
386
406
|
licenses:
|
387
407
|
- MIT
|
388
408
|
metadata: {}
|
389
|
-
post_install_message:
|
409
|
+
post_install_message:
|
390
410
|
rdoc_options: []
|
391
411
|
require_paths:
|
392
412
|
- lib
|
@@ -401,20 +421,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
401
421
|
- !ruby/object:Gem::Version
|
402
422
|
version: '0'
|
403
423
|
requirements: []
|
404
|
-
rubyforge_project:
|
405
|
-
rubygems_version: 2.
|
406
|
-
signing_key:
|
424
|
+
rubyforge_project:
|
425
|
+
rubygems_version: 2.2.2
|
426
|
+
signing_key:
|
407
427
|
specification_version: 4
|
408
428
|
summary: Static publishing to S3 based on SQS messages
|
409
429
|
test_files:
|
410
430
|
- spec/archiver_spec.rb
|
411
431
|
- spec/fixtures/components/foo/models/bar.rb
|
412
432
|
- spec/fixtures/components/foo/models/foo.rb
|
433
|
+
- spec/fixtures/components/foo/models/json.rb
|
413
434
|
- spec/fixtures/components/foo/templates/bar.mustache
|
414
435
|
- spec/fixtures/components/foo/templates/foo.mustache
|
415
436
|
- spec/processor_spec.rb
|
416
437
|
- spec/publisher_spec.rb
|
417
438
|
- spec/queue_spec.rb
|
418
|
-
- spec/render_mapper_spec.rb
|
419
439
|
- spec/spec_helper.rb
|
440
|
+
- spec/view_mapper_spec.rb
|
441
|
+
- spec/views_json_spec.rb
|
420
442
|
- spec/writer_spec.rb
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'alephant/logger'
|
2
|
-
|
3
|
-
module Alephant
|
4
|
-
module Publisher
|
5
|
-
class RenderMapper
|
6
|
-
include ::Alephant::Logger
|
7
|
-
DEFAULT_LOCATION = 'components'
|
8
|
-
|
9
|
-
def initialize(component_id, view_base_path=nil)
|
10
|
-
self.base_path = "#{view_base_path}/#{component_id}" unless view_base_path.nil?
|
11
|
-
@component_id = component_id
|
12
|
-
end
|
13
|
-
|
14
|
-
def base_path
|
15
|
-
@base_path || DEFAULT_LOCATION
|
16
|
-
end
|
17
|
-
|
18
|
-
def base_path=(path)
|
19
|
-
@base_path = File.directory?(path) ? path : (raise "Invalid path: '#{path}'")
|
20
|
-
end
|
21
|
-
|
22
|
-
def generate(data)
|
23
|
-
template_locations.reduce({}) do |obj, file|
|
24
|
-
template_id = template_id_for file
|
25
|
-
obj.tap { |o| o[template_id] = create_renderer(template_id, data) }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def create_renderer(template_file, data)
|
30
|
-
model = instantiate_model(template_file, data)
|
31
|
-
Renderer.create(template_file, base_path, model)
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def instantiate_model(view_id, data)
|
37
|
-
require model_location_for view_id
|
38
|
-
Views.get_registered_class(view_id).new(data)
|
39
|
-
end
|
40
|
-
|
41
|
-
def model_location_for(template_file)
|
42
|
-
File.join(base_path, 'models', "#{template_file}.rb")
|
43
|
-
end
|
44
|
-
|
45
|
-
def template_locations
|
46
|
-
Dir[template_base_path]
|
47
|
-
end
|
48
|
-
|
49
|
-
def template_base_path
|
50
|
-
"#{base_path}/templates/*"
|
51
|
-
end
|
52
|
-
|
53
|
-
def template_id_for(template_location)
|
54
|
-
template_location.split('/').last.sub(/\.mustache/, '')
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|