mail_engine 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/README.mkd +13 -1
- data/VERSION +1 -1
- data/app/controllers/mail_engine/application_controller.rb +8 -3
- data/app/models/mail_engine/mail_schedule.rb +2 -1
- data/app/models/mail_engine/mail_template.rb +2 -2
- data/app/views/mail_engine/mail_templates/index.html.erb +1 -1
- data/lib/mail_engine/base.rb +5 -3
- data/lib/mail_engine/engine.rb +5 -4
- data/lib/mail_engine/generators/templates/mail_engine_config.yml +18 -12
- data/lib/mail_engine/liquid_view_patch/liquid_view.rb +52 -0
- data/lib/mail_engine/sendgrid/rest_api.rb +1 -1
- data/lib/mail_engine.rb +2 -1
- data/mail_engine.gemspec +3 -3
- data/test/unit/mail_engine/mail_template_test.rb +2 -1
- metadata +5 -5
- data/Gemfile.lock +0 -180
data/Gemfile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
|
+
# gemspec
|
2
3
|
|
3
4
|
gem "activesupport", '>= 3.0.0'
|
4
5
|
gem "httparty"
|
@@ -6,7 +7,7 @@ gem "nokogiri"
|
|
6
7
|
gem "deep_cloneable"
|
7
8
|
gem "sqlite3-ruby", :require => "sqlite3"
|
8
9
|
gem 'rack', :git => 'git://github.com/rack/rack.git'
|
9
|
-
gem "liquid"
|
10
|
+
gem "liquid"
|
10
11
|
gem 'kaminari', :git => 'https://github.com/amatsuda/kaminari.git'
|
11
12
|
gem "carrierwave", :git => "git://github.com/jnicklas/carrierwave.git"
|
12
13
|
|
data/README.mkd
CHANGED
@@ -42,9 +42,21 @@ Add management page needed javascript lib and css files, migration files and mai
|
|
42
42
|
Run migration.
|
43
43
|
|
44
44
|
rake db:migrate
|
45
|
-
|
45
|
+
|
46
46
|
** Step 4: **
|
47
47
|
|
48
|
+
Add acts_as_mail_receiver definition to "Your User" model.
|
49
|
+
|
50
|
+
class User < AR
|
51
|
+
acts_as_mail_receiver :payload_columns => %w{firstname lastname},
|
52
|
+
:groups => %w{all english_users chinese_users}
|
53
|
+
end
|
54
|
+
|
55
|
+
1. User model must have 'email' and payload specified columns, or else you can delegate to other model.
|
56
|
+
2. "acts_as_mail_receiver" statement has to place below the scope statements.
|
57
|
+
|
58
|
+
** Step 5: **
|
59
|
+
|
48
60
|
Add below line to the crontab list of your sever:
|
49
61
|
|
50
62
|
### check mail schedule for every 15 minutes ###
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
@@ -1,10 +1,15 @@
|
|
1
|
-
class MailEngine::ApplicationController <
|
1
|
+
class MailEngine::ApplicationController < ApplicationController
|
2
2
|
prepend_view_path MailEngine::MailTemplate::Resolver.instance
|
3
|
-
|
4
3
|
layout 'mail_engine/mail_engine'
|
4
|
+
|
5
|
+
# set the access check method.
|
6
|
+
if MailEngine::Base.current_config["access_check_method"].present?
|
7
|
+
before_filter MailEngine::Base.current_config["access_check_method"]
|
8
|
+
end
|
9
|
+
|
5
10
|
include MailEngine
|
6
11
|
helper MailEngine::MailEngineHelper
|
7
|
-
|
12
|
+
|
8
13
|
def close_modal_and_refresh
|
9
14
|
render :text => "<script>parent.$.fancybox.close();parent.window.location.reload();</script>"
|
10
15
|
end
|
@@ -7,7 +7,7 @@ class MailEngine::MailSchedule < ActiveRecord::Base
|
|
7
7
|
def logs(count = 10)
|
8
8
|
MailEngine::MailLog.where(:mail_template_path => self.mail_template.actual_path).order("id desc").limit(count)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
# load user info into payload hash used at mail template.
|
12
12
|
def load_payload user
|
13
13
|
payload_hash = {}
|
@@ -62,6 +62,7 @@ class MailEngine::MailSchedule < ActiveRecord::Base
|
|
62
62
|
|
63
63
|
MailEngine::USER_MODEL.send(self.user_group.to_sym).each do |user|
|
64
64
|
puts "-> sending mail to #{user.email}"
|
65
|
+
### FIXME user.email, what if user don't have email column.
|
65
66
|
MailEngine::MailDispatcher.send(mail_template.template_name.to_sym, :to => user.email, :values => self.load_payload(user) ).deliver
|
66
67
|
end
|
67
68
|
|
@@ -57,8 +57,8 @@ class MailEngine::MailTemplate < ActiveRecord::Base
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# list the templates with same path, but different locale and format
|
60
|
-
def variations
|
61
|
-
existed_variations = self.class.where(:path => self.path, :partial =>
|
60
|
+
def variations(for_partial = false)
|
61
|
+
existed_variations = self.class.where(:path => self.path, :partial => for_partial).order("locale, format")
|
62
62
|
|
63
63
|
all_variation_codes = I18n.available_locales.product([:html, :text])
|
64
64
|
existed_variation_codes = existed_variations.map do |template|
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<% end %>
|
26
26
|
<td style="width: 200px;">
|
27
27
|
<table style="margin-bottom: 0px;">
|
28
|
-
<% mail_template.variations.group_by(&:locale).each do |locale, templates| %>
|
28
|
+
<% mail_template.variations(params[:type] == 'partial').group_by(&:locale).each do |locale, templates| %>
|
29
29
|
<tr>
|
30
30
|
<td colspan="2" style="background-color: grey; font-weight: bold; color: white; padding: 2px 5px"><%= locale.humanize %></td>
|
31
31
|
</tr>
|
data/lib/mail_engine/base.rb
CHANGED
@@ -8,11 +8,13 @@ module MailEngine
|
|
8
8
|
# === example
|
9
9
|
#
|
10
10
|
# log_mail: true
|
11
|
-
# sendgrid_user: "xxx@theplant.jp"
|
12
|
-
# sendgrid_key: "xxx"
|
13
|
-
# sendgrid_category: "development"
|
14
11
|
# user_class_name: "User"
|
15
12
|
# mount_at: "/admin"
|
13
|
+
# access_check_method: "logged_in?"
|
14
|
+
# sendgrid:
|
15
|
+
# sendgrid_user: "xxx@theplant.jp"
|
16
|
+
# sendgrid_key: "xxx"
|
17
|
+
# sendgrid_category: "development"
|
16
18
|
#
|
17
19
|
def current_config
|
18
20
|
MailEngine::Base.configurations[Rails.env] || {}
|
data/lib/mail_engine/engine.rb
CHANGED
@@ -3,15 +3,16 @@ module MailEngine
|
|
3
3
|
require 'mail_engine'
|
4
4
|
require 'carrierwave'
|
5
5
|
require 'kaminari'
|
6
|
-
|
6
|
+
require 'deep_cloneable'
|
7
|
+
require 'liquid'
|
8
|
+
require 'mail_engine/liquid_view_patch/liquid_view'
|
9
|
+
|
7
10
|
initializer "mail_engine" do
|
8
11
|
ActionMailer::Base.send(:include, MailEngine::Sendgrid::Base)
|
9
12
|
require 'mail_engine/action_mailer_patch'
|
10
13
|
end
|
11
14
|
|
12
15
|
initializer "mail_engine.register_liquid_template" do
|
13
|
-
require 'liquid'
|
14
|
-
require 'extras/liquid_view'
|
15
16
|
ActionView::Template.register_template_handler(:liquid, LiquidView)
|
16
17
|
end
|
17
18
|
|
@@ -19,7 +20,7 @@ module MailEngine
|
|
19
20
|
ActionMailer::Base.layout "layouts/mail_engine/mail_template_layouts/none"
|
20
21
|
ActionMailer::Base.send(:prepend_view_path, MailEngine::MailTemplate::Resolver.instance)
|
21
22
|
end
|
22
|
-
|
23
|
+
|
23
24
|
initializer "mail_engine.add_acts_as_mail_receiver" do
|
24
25
|
ActiveRecord::Base.send(:include, MailEngine::ActsAsMailReceiver)
|
25
26
|
end
|
@@ -1,23 +1,29 @@
|
|
1
1
|
development:
|
2
2
|
log_mail: false
|
3
|
-
sendgrid_user: "you send grid username"
|
4
|
-
sendgrid_key: "password"
|
5
|
-
sendgrid_category: "my sendgrid category"
|
6
3
|
user_class_name: "User"
|
7
|
-
mount_at: "/admin"
|
4
|
+
mount_at: "/admin/mail_engine"
|
5
|
+
access_check_method: "logged_in?"
|
6
|
+
sendgrid:
|
7
|
+
sendgrid_user: "you send grid username"
|
8
|
+
sendgrid_key: "password"
|
9
|
+
sendgrid_category: "my sendgrid category"
|
8
10
|
|
9
11
|
test:
|
10
12
|
log_mail: false
|
11
|
-
sendgrid_user: "you send grid username"
|
12
|
-
sendgrid_key: "password"
|
13
|
-
sendgrid_category: "my sendgrid category"
|
14
13
|
user_class_name: "User"
|
15
|
-
mount_at: "/admin"
|
14
|
+
mount_at: "/admin/mail_engine"
|
15
|
+
access_check_method: "logged_in?"
|
16
|
+
sendgrid:
|
17
|
+
sendgrid_user: "you send grid username"
|
18
|
+
sendgrid_key: "password"
|
19
|
+
sendgrid_category: "my sendgrid category"
|
16
20
|
|
17
21
|
production:
|
18
22
|
log_mail: false
|
19
|
-
sendgrid_user: "you send grid username"
|
20
|
-
sendgrid_key: "password"
|
21
|
-
sendgrid_category: "my sendgrid category"
|
22
23
|
user_class_name: "User"
|
23
|
-
mount_at: "/admin"
|
24
|
+
mount_at: "/admin/mail_engine"
|
25
|
+
access_check_method: "logged_in?"
|
26
|
+
sendgrid:
|
27
|
+
sendgrid_user: "you send grid username"
|
28
|
+
sendgrid_key: "password"
|
29
|
+
sendgrid_category: "my sendgrid category"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# LiquidView is a action view extension class. You can register it with rails
|
2
|
+
# and use liquid as an template system for .liquid files
|
3
|
+
#
|
4
|
+
# Example
|
5
|
+
#
|
6
|
+
# ActionView::Base::register_template_handler :liquid, LiquidView
|
7
|
+
class LiquidView
|
8
|
+
PROTECTED_ASSIGNS = %w( template_root response _session template_class action_name request_origin session template
|
9
|
+
_response url _request _cookies variables_added _flash params _headers request cookies
|
10
|
+
ignore_missing_templates flash _params logger before_filter_chain_aborted headers )
|
11
|
+
PROTECTED_INSTANCE_VARIABLES = %w( @_request @controller @_first_render @_memoized__pick_template @view_paths
|
12
|
+
@helpers @assigns_added @template @_render_stack @template_format @assigns )
|
13
|
+
|
14
|
+
def self.call(template)
|
15
|
+
"LiquidView.new(self).render('#{template.source.gsub(/\'/, '"')}', local_assigns)"
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(view)
|
19
|
+
@view = view
|
20
|
+
end
|
21
|
+
|
22
|
+
def render(template, local_assigns = nil)
|
23
|
+
### when I render text layout, it still set me html content type. so remove it.
|
24
|
+
# @view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8'
|
25
|
+
|
26
|
+
# Rails 2.2 Template has source, but not locals
|
27
|
+
if template.respond_to?(:source) && !template.respond_to?(:locals)
|
28
|
+
assigns = (@view.instance_variables - PROTECTED_INSTANCE_VARIABLES).inject({}) do |hash, ivar|
|
29
|
+
hash[ivar[1..-1]] = @view.instance_variable_get(ivar)
|
30
|
+
hash
|
31
|
+
end
|
32
|
+
else
|
33
|
+
assigns = @view.assigns.reject{ |k,v| PROTECTED_ASSIGNS.include?(k) }
|
34
|
+
end
|
35
|
+
|
36
|
+
source = template.respond_to?(:source) ? template.source : template
|
37
|
+
local_assigns = (template.respond_to?(:locals) ? template.locals : local_assigns) || {}
|
38
|
+
|
39
|
+
if content_for_layout = @view.instance_variable_get("@content_for_layout")
|
40
|
+
assigns['content_for_layout'] = content_for_layout
|
41
|
+
end
|
42
|
+
assigns.merge!(local_assigns.stringify_keys)
|
43
|
+
|
44
|
+
liquid = Liquid::Template.parse(source)
|
45
|
+
liquid.render(assigns, :filters => [@view.helpers], :registers => {:action_view => @view, :controller => @view.controller})
|
46
|
+
end
|
47
|
+
|
48
|
+
def compilable?
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -9,7 +9,7 @@ module MailEngine
|
|
9
9
|
class RestApi
|
10
10
|
include HTTParty
|
11
11
|
base_uri "https://sendgrid.com/api"
|
12
|
-
default_params :api_key => MailEngine::Base.current_config["sendgrid_key"], :api_user => MailEngine::Base.current_config["sendgrid_user"]
|
12
|
+
default_params :api_key => MailEngine::Base.current_config["sendgrid"]["sendgrid_key"], :api_user => MailEngine::Base.current_config["sendgrid"]["sendgrid_user"]
|
13
13
|
|
14
14
|
class << self
|
15
15
|
# <stats>
|
data/lib/mail_engine.rb
CHANGED
data/mail_engine.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mail_engine}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["michael he"]
|
12
|
-
s.date = %q{2011-03-
|
12
|
+
s.date = %q{2011-03-05}
|
13
13
|
s.description = %q{Rails system mail management solution.}
|
14
14
|
s.email = %q{hlxwell@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -88,7 +88,6 @@ Gem::Specification.new do |s|
|
|
88
88
|
".yardoc/objects/root.dat",
|
89
89
|
".yardoc/proxy_types",
|
90
90
|
"Gemfile",
|
91
|
-
"Gemfile.lock",
|
92
91
|
"MIT-LICENSE",
|
93
92
|
"README.mkd",
|
94
93
|
"Rakefile",
|
@@ -202,6 +201,7 @@ Gem::Specification.new do |s|
|
|
202
201
|
"lib/mail_engine/generators/install.rb",
|
203
202
|
"lib/mail_engine/generators/templates/mail_engine_config.yml",
|
204
203
|
"lib/mail_engine/html_document_assets_replacer.rb",
|
204
|
+
"lib/mail_engine/liquid_view_patch/liquid_view.rb",
|
205
205
|
"lib/mail_engine/mail_log_subscriber.rb",
|
206
206
|
"lib/mail_engine/sendgrid.rb",
|
207
207
|
"lib/mail_engine/sendgrid/base.rb",
|
@@ -55,7 +55,8 @@ class MailEngine::MailTemplateTest < ActiveSupport::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
should "be able to get missing variations" do
|
58
|
-
assert_equal 4, @template.variations.count
|
58
|
+
assert_equal 4, @template.variations.count # all normal templates
|
59
|
+
assert_equal 4, @template.variations(true).count # all partials
|
59
60
|
assert_equal 3, @template.variations.delete_if {|v| v.persisted? }.size
|
60
61
|
|
61
62
|
variations = @template.variations.map { |v|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- michael he
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-05 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -311,7 +311,6 @@ files:
|
|
311
311
|
- .yardoc/objects/root.dat
|
312
312
|
- .yardoc/proxy_types
|
313
313
|
- Gemfile
|
314
|
-
- Gemfile.lock
|
315
314
|
- MIT-LICENSE
|
316
315
|
- README.mkd
|
317
316
|
- Rakefile
|
@@ -425,6 +424,7 @@ files:
|
|
425
424
|
- lib/mail_engine/generators/install.rb
|
426
425
|
- lib/mail_engine/generators/templates/mail_engine_config.yml
|
427
426
|
- lib/mail_engine/html_document_assets_replacer.rb
|
427
|
+
- lib/mail_engine/liquid_view_patch/liquid_view.rb
|
428
428
|
- lib/mail_engine/mail_log_subscriber.rb
|
429
429
|
- lib/mail_engine/sendgrid.rb
|
430
430
|
- lib/mail_engine/sendgrid/base.rb
|
data/Gemfile.lock
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/hlxwell/liquid.git
|
3
|
-
revision: d70ed7582215507a579fee8b5e5b3269600f3fb3
|
4
|
-
specs:
|
5
|
-
liquid (2.2.2)
|
6
|
-
|
7
|
-
GIT
|
8
|
-
remote: git://github.com/jnicklas/carrierwave.git
|
9
|
-
revision: d85841ca51fa2c546bd73d9d7ba871c7c0d9455b
|
10
|
-
specs:
|
11
|
-
carrierwave (0.5.2)
|
12
|
-
activesupport (~> 3.0)
|
13
|
-
|
14
|
-
GIT
|
15
|
-
remote: git://github.com/rack/rack.git
|
16
|
-
revision: e3ffeac0dc04bb8d5994b7923bf12e55d549a279
|
17
|
-
specs:
|
18
|
-
rack (1.2.1)
|
19
|
-
|
20
|
-
GIT
|
21
|
-
remote: git://github.com/thoughtbot/factory_girl.git
|
22
|
-
revision: a7f7e85187e9178f4da2db1b87fa38aec6a96178
|
23
|
-
specs:
|
24
|
-
factory_girl (2.0.0.beta1)
|
25
|
-
|
26
|
-
GIT
|
27
|
-
remote: https://github.com/amatsuda/kaminari.git
|
28
|
-
revision: 91e9137096e2e5aedfe91f9ebab35b4af8de2408
|
29
|
-
specs:
|
30
|
-
kaminari (0.10.4)
|
31
|
-
rails (>= 3.0.0)
|
32
|
-
|
33
|
-
GEM
|
34
|
-
remote: http://rubygems.org/
|
35
|
-
specs:
|
36
|
-
abstract (1.0.0)
|
37
|
-
actionmailer (3.0.4)
|
38
|
-
actionpack (= 3.0.4)
|
39
|
-
mail (~> 2.2.15)
|
40
|
-
actionpack (3.0.4)
|
41
|
-
activemodel (= 3.0.4)
|
42
|
-
activesupport (= 3.0.4)
|
43
|
-
builder (~> 2.1.2)
|
44
|
-
erubis (~> 2.6.6)
|
45
|
-
i18n (~> 0.4)
|
46
|
-
rack (~> 1.2.1)
|
47
|
-
rack-mount (~> 0.6.13)
|
48
|
-
rack-test (~> 0.5.7)
|
49
|
-
tzinfo (~> 0.3.23)
|
50
|
-
activemodel (3.0.4)
|
51
|
-
activesupport (= 3.0.4)
|
52
|
-
builder (~> 2.1.2)
|
53
|
-
i18n (~> 0.4)
|
54
|
-
activerecord (3.0.4)
|
55
|
-
activemodel (= 3.0.4)
|
56
|
-
activesupport (= 3.0.4)
|
57
|
-
arel (~> 2.0.2)
|
58
|
-
tzinfo (~> 0.3.23)
|
59
|
-
activeresource (3.0.4)
|
60
|
-
activemodel (= 3.0.4)
|
61
|
-
activesupport (= 3.0.4)
|
62
|
-
activesupport (3.0.4)
|
63
|
-
arel (2.0.9)
|
64
|
-
bluecloth (2.0.11)
|
65
|
-
builder (2.1.2)
|
66
|
-
capybara (0.4.1.2)
|
67
|
-
celerity (>= 0.7.9)
|
68
|
-
culerity (>= 0.2.4)
|
69
|
-
mime-types (>= 1.16)
|
70
|
-
nokogiri (>= 1.3.3)
|
71
|
-
rack (>= 1.0.0)
|
72
|
-
rack-test (>= 0.5.4)
|
73
|
-
selenium-webdriver (>= 0.0.27)
|
74
|
-
xpath (~> 0.1.3)
|
75
|
-
celerity (0.8.8)
|
76
|
-
childprocess (0.1.7)
|
77
|
-
ffi (~> 0.6.3)
|
78
|
-
crack (0.1.8)
|
79
|
-
culerity (0.2.15)
|
80
|
-
deep_cloneable (1.2.1)
|
81
|
-
erubis (2.6.6)
|
82
|
-
abstract (>= 1.0.0)
|
83
|
-
fakeweb (1.3.0)
|
84
|
-
ffi (0.6.3)
|
85
|
-
rake (>= 0.8.7)
|
86
|
-
git (1.2.5)
|
87
|
-
httparty (0.6.1)
|
88
|
-
crack (= 0.1.8)
|
89
|
-
i18n (0.5.0)
|
90
|
-
jeweler (1.5.2)
|
91
|
-
bundler (~> 1.0.0)
|
92
|
-
git (>= 1.2.5)
|
93
|
-
rake
|
94
|
-
json_pure (1.5.1)
|
95
|
-
mail (2.2.15)
|
96
|
-
activesupport (>= 2.3.6)
|
97
|
-
i18n (>= 0.4.0)
|
98
|
-
mime-types (~> 1.16)
|
99
|
-
treetop (~> 1.4.8)
|
100
|
-
mime-types (1.16)
|
101
|
-
mocha (0.9.10)
|
102
|
-
rake
|
103
|
-
nokogiri (1.4.4)
|
104
|
-
polyglot (0.3.1)
|
105
|
-
rack-mount (0.6.13)
|
106
|
-
rack (>= 1.0.0)
|
107
|
-
rack-test (0.5.7)
|
108
|
-
rack (>= 1.0)
|
109
|
-
rails (3.0.4)
|
110
|
-
actionmailer (= 3.0.4)
|
111
|
-
actionpack (= 3.0.4)
|
112
|
-
activerecord (= 3.0.4)
|
113
|
-
activeresource (= 3.0.4)
|
114
|
-
activesupport (= 3.0.4)
|
115
|
-
bundler (~> 1.0)
|
116
|
-
railties (= 3.0.4)
|
117
|
-
railties (3.0.4)
|
118
|
-
actionpack (= 3.0.4)
|
119
|
-
activesupport (= 3.0.4)
|
120
|
-
rake (>= 0.8.7)
|
121
|
-
thor (~> 0.14.4)
|
122
|
-
rake (0.8.7)
|
123
|
-
rcov (0.9.9)
|
124
|
-
reek (1.2.8)
|
125
|
-
ruby2ruby (~> 1.2)
|
126
|
-
ruby_parser (~> 2.0)
|
127
|
-
sexp_processor (~> 3.0)
|
128
|
-
ruby2ruby (1.2.5)
|
129
|
-
ruby_parser (~> 2.0)
|
130
|
-
sexp_processor (~> 3.0)
|
131
|
-
ruby_parser (2.0.6)
|
132
|
-
sexp_processor (~> 3.0)
|
133
|
-
rubyzip (0.9.4)
|
134
|
-
selenium-webdriver (0.1.3)
|
135
|
-
childprocess (~> 0.1.5)
|
136
|
-
ffi (~> 0.6.3)
|
137
|
-
json_pure
|
138
|
-
rubyzip
|
139
|
-
sexp_processor (3.0.5)
|
140
|
-
shoulda (2.11.3)
|
141
|
-
sqlite3 (1.3.3)
|
142
|
-
sqlite3-ruby (1.3.3)
|
143
|
-
sqlite3 (>= 1.3.3)
|
144
|
-
test_benchmarker (1.2.1)
|
145
|
-
thor (0.14.6)
|
146
|
-
timecop (0.3.5)
|
147
|
-
treetop (1.4.9)
|
148
|
-
polyglot (>= 0.3.1)
|
149
|
-
tzinfo (0.3.24)
|
150
|
-
xpath (0.1.3)
|
151
|
-
nokogiri (~> 1.3)
|
152
|
-
yard (0.6.4)
|
153
|
-
|
154
|
-
PLATFORMS
|
155
|
-
ruby
|
156
|
-
|
157
|
-
DEPENDENCIES
|
158
|
-
activesupport (>= 3.0.0)
|
159
|
-
bluecloth
|
160
|
-
bundler
|
161
|
-
capybara (>= 0.4.0)
|
162
|
-
carrierwave!
|
163
|
-
deep_cloneable
|
164
|
-
factory_girl!
|
165
|
-
fakeweb
|
166
|
-
httparty
|
167
|
-
jeweler
|
168
|
-
kaminari!
|
169
|
-
liquid!
|
170
|
-
mocha
|
171
|
-
nokogiri
|
172
|
-
rack!
|
173
|
-
rack-test
|
174
|
-
rcov
|
175
|
-
reek
|
176
|
-
shoulda
|
177
|
-
sqlite3-ruby
|
178
|
-
test_benchmarker
|
179
|
-
timecop
|
180
|
-
yard
|