boutique 0.0.10 → 0.0.11

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.
Files changed (4) hide show
  1. data/README.md +1 -1
  2. data/boutique +10 -0
  3. data/lib/boutique.rb +16 -7
  4. metadata +3 -3
data/README.md CHANGED
@@ -123,7 +123,7 @@ To start the server for local development:
123
123
  TODO
124
124
  ====
125
125
 
126
- * implement UI opening on subscribe_url
126
+ * add UI for error handling and invalid emails
127
127
  * switch to Stripe
128
128
  * add customizable? email integration for purchase receipts + recover
129
129
  * add re-usable UI for purchasing, downloading, recover
data/boutique CHANGED
@@ -29,6 +29,15 @@ module Boutique
29
29
  end
30
30
  end
31
31
 
32
+ def self.render(file)
33
+ emailer = Boutique::Emailer.new(nil, File.dirname(file))
34
+ puts emailer.render(
35
+ File.basename(file),
36
+ subscribe_url: 'http://example.com/?boutique=subscribe/example',
37
+ confirm_url: 'http://example.com/?boutique=confirm/example/0/0',
38
+ unsubscribe_url: 'http://example.com/?boutique=unsubscribe/example/0/0')
39
+ end
40
+
32
41
  def self.migrate
33
42
  load_config
34
43
  DataMapper.auto_upgrade!
@@ -51,6 +60,7 @@ ARGV.options do |o|
51
60
  o.on('-a', '--assets', 'create css/js assets') { Boutique::Command.assets; exit }
52
61
  o.on('-d', '--drip', 'drip out emails') { Boutique::Command.drip; exit }
53
62
  o.on('-m', '--migrate', 'initial migration') { Boutique::Command.migrate; exit }
63
+ o.on('-r', '--render file', 'render an email') { |f| Boutique::Command.render(f); exit }
54
64
  o.on('-h', '--help', 'show this help message') { puts o; exit }
55
65
  o.parse!
56
66
  puts o
@@ -19,7 +19,7 @@ require 'cgi'
19
19
  DataMapper::Model.raise_on_save_failure = true
20
20
 
21
21
  module Boutique
22
- VERSION = '0.0.10'
22
+ VERSION = '0.0.11'
23
23
 
24
24
  class << self
25
25
  def configure(setup_db=true)
@@ -87,15 +87,18 @@ module Boutique
87
87
  end
88
88
 
89
89
  class Emailer
90
- def initialize(list)
90
+ def initialize(list, directory = nil)
91
91
  @list = list
92
+ @directory = directory
92
93
  end
93
94
 
94
95
  def render(path, locals = {}, preamble = false)
95
- path = full_path(path)
96
+ path = @directory ?
97
+ File.join(@directory, path) :
98
+ full_path(path)
96
99
  raise "File not found: #{path}" if !File.exist?(path)
97
100
 
98
- yaml, body = Preamble.load(path)
101
+ yaml, body = preamble(path)
99
102
  templates_for(path).each do |template|
100
103
  blk = proc { body }
101
104
  body = template.new(path, &blk).render(self, locals)
@@ -132,7 +135,7 @@ module Boutique
132
135
  end
133
136
 
134
137
  def blast(path, locals = {})
135
- yaml, body = Preamble.load(full_path(path))
138
+ yaml, body = preamble(full_path(path))
136
139
  email_key = yaml['key']
137
140
  @list.subscribers.all(confirmed: true).each do |subscriber|
138
141
  # TODO: speed up by moving filter outside of loop
@@ -174,8 +177,8 @@ module Boutique
174
177
  emails = {}
175
178
  Dir.entries(@list.emails).each do |filename|
176
179
  next if File.directory?(filename)
177
- # TODO: stop duplicating calls to Preamble, store in memory
178
- yaml, body = Preamble.load(full_path(filename))
180
+ # TODO: stop duplicating calls to preamble, store in memory
181
+ yaml, body = preamble(full_path(filename))
179
182
  if yaml && yaml['day'] && yaml['key']
180
183
  emails[yaml['day']] = filename
181
184
  end
@@ -183,6 +186,12 @@ module Boutique
183
186
  emails
184
187
  end
185
188
  end
189
+
190
+ def preamble(path)
191
+ Preamble.load(path)
192
+ rescue
193
+ [{}, File.read(path)]
194
+ end
186
195
  end
187
196
 
188
197
  class Config
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boutique
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: .
11
11
  cert_chain: []
12
- date: 2013-09-10 00:00:00.000000000 Z
12
+ date: 2013-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -205,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
205
  version: '0'
206
206
  segments:
207
207
  - 0
208
- hash: -412580643
208
+ hash: -1016337613
209
209
  required_rubygems_version: !ruby/object:Gem::Requirement
210
210
  none: false
211
211
  requirements: