mailcannon 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed02553bd2e0e9c8c7c850434866577507e91522
4
- data.tar.gz: 57f9e9c70919325eb209b62141b0b78a4049e678
3
+ metadata.gz: 36ee9ad3e66d2643ea8c836320032d2c4bbcf9e1
4
+ data.tar.gz: ab5103437e1bfa9d43eec27014dfcc43590af0c4
5
5
  SHA512:
6
- metadata.gz: b66a1b90da2197b74aa310ee9cd56385b265e13f7c2f36047e138a60870936a6d902f19aa4ab723fec68cd501fdfd6ef8a4ab7f0f615bc17735d928c3d2d253a
7
- data.tar.gz: e4cfd2f83a992363d32b260d273d123711f2c2ead1470f47c10d9adc051291dd30ded78a2d925f2bf18460b1f03485a455bd3d2832e94e39fcc419863f4e122f
6
+ metadata.gz: 05c4f51be1809c2ce8c0960216c4392a3214d4dc0c8de368db77ec36482ca13f8ce91ac4779e6233d15eaf3181792a4bd8a77e659353a3584b177f1e5ac09b3b
7
+ data.tar.gz: ee3bc50462bcf0e27a8fabe9ee2c63f500f30b4063dcf997ac3551d5883a43140027945386e8a225b11531c0c342935460099d027ec1582fb4eb9cd39564df72
data/.gitignore CHANGED
@@ -1,4 +1,7 @@
1
- .DS_Store
2
- pkg
3
- tmp
4
- env.sh
1
+ spec/fixtures/cassettes
2
+ tmp/mongod
3
+ env.sh
4
+ doc/
5
+ .yardoc/
6
+ coverage/
7
+ .coveralls.yml
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- rbx-2.2.1
1
+ 2.0.0-p353
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  rvm:
2
2
  - rbx-2.1.1
3
3
  - 2.0.0-p353
4
- - 1.9.3-p448
4
+ # - 1.9.3-p448
5
5
  - jruby-19mode
6
6
  before_install:
7
7
  - gem install bundler
data/.yardopts ADDED
@@ -0,0 +1,3 @@
1
+ --no-private
2
+ --title "MailCannon"
3
+ --exclude version --exclude config_generator
data/Gemfile CHANGED
@@ -4,14 +4,19 @@ gem 'redis'
4
4
  gem 'mongoid'
5
5
  gem 'sidekiq'
6
6
  gem 'sendgrid_webapi'
7
+ #gem 'sendgrid_toolkit'
7
8
  gem 'librato-metrics'
8
9
  gem 'rubysl', platform: :rbx
9
10
  gem 'jruby-openssl', platform: :jruby
11
+ #for SendgridWeb adapter
12
+ gem "yajl-ruby", :platforms=>[:rbx,:ruby]
13
+ gem "json-schema"
10
14
 
11
15
  group :development do
12
16
  gem 'rake'
13
17
  gem 'pry'
14
18
  gem 'pry-nav'
19
+ gem 'yard'
15
20
  end
16
21
 
17
22
  group :test do
@@ -22,4 +27,5 @@ group :test do
22
27
  gem 'factory_girl'
23
28
  gem 'vcr'
24
29
  gem 'webmock', '>= 1.8.0', '< 1.16'
30
+ gem 'coveralls', platform: :ruby, require: false
25
31
  end
data/Gemfile.lock CHANGED
@@ -13,7 +13,14 @@ GEM
13
13
  celluloid (0.15.2)
14
14
  timers (~> 1.1.0)
15
15
  coderay (1.0.9)
16
+ colorize (0.5.8)
16
17
  connection_pool (1.2.0)
18
+ coveralls (0.6.7)
19
+ colorize
20
+ multi_json (~> 1.3)
21
+ rest-client
22
+ simplecov (>= 0.7)
23
+ thor
17
24
  crack (0.4.1)
18
25
  safe_yaml (~> 0.9.0)
19
26
  database_cleaner (1.2.0)
@@ -25,11 +32,13 @@ GEM
25
32
  ffi2-generators (0.1.1)
26
33
  i18n (0.6.9)
27
34
  json (1.8.1)
35
+ json-schema (2.1.8)
28
36
  librato-metrics (1.3.0)
29
37
  aggregate (~> 0.2.2)
30
38
  faraday (~> 0.7)
31
39
  multi_json
32
40
  method_source (0.8.1)
41
+ mime-types (1.23)
33
42
  mongoid (3.1.6)
34
43
  activemodel (~> 3.2)
35
44
  moped (~> 1.4)
@@ -49,6 +58,8 @@ GEM
49
58
  redis (3.0.6)
50
59
  redis-namespace (1.4.1)
51
60
  redis (~> 3.0.4)
61
+ rest-client (1.6.7)
62
+ mime-types (>= 1.16)
52
63
  rspec (2.13.0)
53
64
  rspec-core (~> 2.13.0)
54
65
  rspec-expectations (~> 2.13.0)
@@ -269,21 +280,30 @@ GEM
269
280
  json
270
281
  redis (>= 3.0.4)
271
282
  redis-namespace (>= 1.3.1)
283
+ simplecov (0.7.1)
284
+ multi_json (~> 1.0)
285
+ simplecov-html (~> 0.7.1)
286
+ simplecov-html (0.7.1)
272
287
  slop (3.4.5)
288
+ thor (0.18.1)
273
289
  timers (1.1.0)
274
290
  tzinfo (0.3.38)
275
291
  vcr (2.8.0)
276
292
  webmock (1.15.2)
277
293
  addressable (>= 2.2.7)
278
294
  crack (>= 0.3.2)
295
+ yajl-ruby (1.2.0)
296
+ yard (0.8.6.2)
279
297
 
280
298
  PLATFORMS
281
299
  ruby
282
300
 
283
301
  DEPENDENCIES
302
+ coveralls
284
303
  database_cleaner
285
304
  factory_girl
286
305
  jruby-openssl
306
+ json-schema
287
307
  librato-metrics
288
308
  mongoid
289
309
  pry
@@ -298,3 +318,5 @@ DEPENDENCIES
298
318
  sidekiq
299
319
  vcr
300
320
  webmock (>= 1.8.0, < 1.16)
321
+ yajl-ruby
322
+ yard
data/Rakefile CHANGED
@@ -6,6 +6,16 @@ RSpec::Core::RakeTask.new
6
6
 
7
7
  task :default => :travis
8
8
 
9
+ task :environment do
10
+ require './spec/spec_helper'
11
+ end
12
+
13
+ desc 'Opens a Pry/IRB session with the environment loaded'
14
+ task :console => :environment do
15
+ #gotcha!
16
+ binding.pry
17
+ end
18
+
9
19
  task :travis do
10
20
  ["rake spec", "rake build"].each do |cmd|
11
21
  puts "Starting to run #{cmd}..."
data/Readme.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Gem version](https://badge.fury.io/rb/mailcannon.png)](http://rubygems.org/gems/mailcannon) [![Code Climate](https://codeclimate.com/github/lucasmartins/mailcannon.png)](https://codeclimate.com/github/lucasmartins/mailcannon) [![Build Status](https://travis-ci.org/lucasmartins/mailcannon.png?branch=master)](https://travis-ci.org/lucasmartins/mailcannon) [![Dependency Status](https://gemnasium.com/lucasmartins/mailcannon.png)](https://gemnasium.com/lucasmartins/mailcannon)
1
+ [![Gem version](https://badge.fury.io/rb/mailcannon.png)](http://rubygems.org/gems/mailcannon) [![Code Climate](https://codeclimate.com/github/lucasmartins/mailcannon.png)](https://codeclimate.com/github/lucasmartins/mailcannon) [![Build Status](https://travis-ci.org/lucasmartins/mailcannon.png?branch=master)](https://travis-ci.org/lucasmartins/mailcannon) [![Coverage Status](https://coveralls.io/repos/lucasmartins/mailcannon/badge.png)](https://coveralls.io/r/lucasmartins/mailcannon) [![Dependency Status](https://gemnasium.com/lucasmartins/mailcannon.png)](https://gemnasium.com/lucasmartins/mailcannon) [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/lucasmartins/mailcannon/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
2
2
 
3
3
  MailCannon
4
4
  ==========
@@ -43,6 +43,10 @@ Edit the file to meet your environemnt needs.
43
43
 
44
44
  Check the [specs](https://github.com/lucasmartins/mailcannon/tree/master/spec) to see the testing example, it will surely make it clearer.
45
45
 
46
+ Docs
47
+ ====
48
+ You should check the [factories](https://github.com/lucasmartins/mailcannon/tree/master/spec/factories) to learn what you need to build your objects, and the [tests](https://github.com/lucasmartins/mailcannon/tree/master/spec/mailcannon) to learn how to use them. But hey, we have docs [right here](http://rdoc.info/github/lucasmartins/mailcannon/master/frames).
49
+
46
50
  Contribute
47
51
  ==========
48
52
 
@@ -58,4 +62,4 @@ This is an opensource project so don't expect premium support, but don't be shy,
58
62
  License
59
63
  =======
60
64
 
61
- MailCannon is free software under the [MIT license](http://lucasmartins.mit-license.org).
65
+ MailCannon is free software under the [FreeBSD license](http://www.freebsd.org/copyright/freebsd-license.html).
@@ -0,0 +1,20 @@
1
+ # Instructions for contributors
2
+
3
+ Prepare your dev env by setting the environment variables:
4
+
5
+ ```
6
+ $ cp env.sample.sh env.sample
7
+ $ vim env.sh # change it to your needs
8
+ $ . ./env.sh # will load your dev env vars.
9
+ ```
10
+
11
+ I miss Pry when I'm on [Rubinius](http://rubini.us/), so I do write the code on MRI and test on Rubinius once in a while. You will find that [Travis](https://travis-ci.org/) is your friend.
12
+
13
+ # Roadmap
14
+
15
+ - Rake task for creating all the indexes;
16
+ - Routing core;
17
+ - MapReduce for campaign deliverability statistics;
18
+ - Sidekiq recurrent job to run updates on MapReduce;
19
+ - Load testing;
20
+ - Stats Reports - (readonly) JSON HTTP API;
@@ -1,9 +1,12 @@
1
+ # Provides an Interface for implementing an Adapter. Adapters are supposed to handle communication with the email service (ie: Sendgrid) and to be included by MailCannon::Envelope. MailCannon::Envelope attributes should be accessed to figure out what to send to the email service.
1
2
  module MailCannon::Adapter
2
-
3
3
  module InstanceMethods
4
+ # Sends an Envelope with 1 recipient.
4
5
  def send!
5
6
  raise 'Not available for this adapter!'
6
7
  end
8
+
9
+ # Sends an Envelope with multiple recipients.
7
10
  def send_bulk!
8
11
  raise 'Not available for this adapter!'
9
12
  end
@@ -0,0 +1,111 @@
1
+ require 'json-schema'
2
+ # Provides the Sendgrid Web API Adapter, refer to http://sendgrid.com/docs/API_Reference/Web_API/mail.html
3
+ module MailCannon::Adapter::SendgridWeb
4
+ include MailCannon::Adapter
5
+ module InstanceMethods
6
+ def send!
7
+ validate_envelope!
8
+ if self.to.size>1
9
+ response = send_multiple_emails
10
+ else
11
+ response = send_single_email
12
+ end
13
+ self.after_sent(successfully_sent?(response))
14
+ return response
15
+ end
16
+
17
+ def send_bulk!
18
+ self.send! # send! does bulk too!
19
+ end
20
+ end
21
+
22
+ def self.included(receiver)
23
+ receiver.send :include, InstanceMethods
24
+ end
25
+
26
+ private
27
+ def api_client
28
+ client = SendGridWebApi::Client.new(ENV['SENDGRID_USERNAME'], ENV['SENDGRID_PASSWORD'])
29
+ end
30
+
31
+ def validate_envelope!
32
+ raise "Invalid Document! #{self.errors.messages}" unless self.valid?
33
+ end
34
+
35
+ def prepare_xsmtpapi!
36
+ validate_envelope!
37
+ self.xsmtpapi = build_xsmtpapi({'to'=>self.to},{'sub'=>self.substitutions})
38
+ validate_xsmtpapi!
39
+ end
40
+
41
+ def build_xsmtpapi(recipients,subs)
42
+ xsmtpapi = {}
43
+ to = []
44
+ recipients['to'].each do |h|
45
+ to.push h[:email]
46
+ end
47
+ xsmtpapi.merge!({'to' => to})
48
+ xsmtpapi.merge!(subs) if subs!=nil && subs.is_a?(Hash)
49
+ return xsmtpapi
50
+ end
51
+
52
+ def validate_xsmtpapi!
53
+ return true
54
+ if self.to.size>1
55
+ if xsmtpapi['sub']
56
+ xsmtpapi['sub'].each do |sub|
57
+ raise 'sub[Array] must match to[Array] size!' unless sub.size==xsmtpapi['to'].size
58
+ end
59
+ end
60
+ end
61
+ =begin
62
+ schema = {
63
+ "type" => "object",
64
+ "required" => ["to"],
65
+ "properties" => {
66
+ "to" => {"type" => "array", "default" => [self.to.first]}
67
+ }
68
+ }
69
+ JSON::Validator.validate!(schema, self.xsmtpapi)
70
+ =end
71
+ end
72
+
73
+ def send_single_email
74
+ api_client.mail.send(
75
+ :to => self.to.first[:email],
76
+ :toname => self.to.first[:name],
77
+ :subject => self.subject,
78
+ :text => self.mail.text,
79
+ :html => self.mail.html,
80
+ :from => self.from,
81
+ :fromname => self.from_name,
82
+ :bcc => self.bcc,
83
+ :replyto => self.reply_to
84
+ )
85
+ end
86
+
87
+ def send_multiple_emails
88
+ prepare_xsmtpapi!
89
+
90
+ api_client.mail.send(
91
+ :to => self.from,
92
+ #:toname => self.to.first[:name],
93
+ :subject => self.subject,
94
+ :text => self.mail.text,
95
+ :html => self.mail.html,
96
+ :from => self.from,
97
+ :fromname => self.from_name,
98
+ :bcc => self.bcc,
99
+ :replyto => self.reply_to,
100
+ :"x-smtpapi" => self.xsmtpapi.to_json
101
+ )
102
+ end
103
+
104
+ def successfully_sent?(response)
105
+ if response['message']=='success'
106
+ true
107
+ else
108
+ false
109
+ end
110
+ end
111
+ end
@@ -1,34 +1,47 @@
1
+ # Where the magic happens, the Envelope is responsible for keeping the information necessary to send the email(s) and holding the Stamps related to mailing Events.
1
2
  class MailCannon::Envelope
2
3
  include Mongoid::Document
3
4
  include Mongoid::Timestamps
4
- include MailCannon::Adapter::Sendgrid
5
+ include MailCannon::Adapter::SendgridWeb
5
6
 
6
- has_one :mail
7
- has_many :stamps
7
+ embeds_one :mail
8
+ embeds_many :stamps
8
9
 
10
+ field :group_id, type: Bignum # create sparse Index for this field, put this in RDoc
9
11
  field :from, type: String
10
12
  field :from_name, type: String
11
- field :to, type: String
12
- field :to_name, type: String
13
+ field :to, type: Array # of hashes
14
+ field :to_name, type: Array # strings
15
+ field :substitutions, type: Hash # of hashes
13
16
  field :subject, type: String
14
17
  field :bcc, type: String
15
18
  field :reply_to, type: String
16
19
  field :date, type: Date
17
- field :xsmtpapi, type: Hash
20
+ field :xsmtpapi, type: Hash # this will mostly be used by MailCannon itself. http://sendgrid.com/docs/API_Reference/SMTP_API/index.html
18
21
 
19
22
  validates :from, :to, :subject, :mail, presence: true
20
23
  validates_associated :mail
21
24
 
22
- after_create do |envelope|
23
- envelope.stamp! MailCannon::Event::New.stamp
24
- MailCannon::SingleBarrel.perform_async(envelope.id)
25
+ after_create :post_envelope!
26
+
27
+ # Post this Envelope!
28
+ def post_envelope!
29
+ self.save if self.changed?
30
+ self.stamp! MailCannon::Event::New.stamp
31
+ if validate_xsmtpapi(self.xsmtpapi)
32
+ MailCannon::Barrel.perform_async(self.id)
33
+ else
34
+ raise 'Invalid xsmtpapi hash!'
35
+ end
25
36
  end
26
-
37
+
38
+ # Stamp this Envelope with code.
27
39
  def stamp!(code)
28
40
  self.class.valid_code_kind?(code)
29
41
  self.stamps << MailCannon::Stamp.from_code(code)
30
42
  end
31
43
 
44
+ # Callback to be run after the Envelope has been processed.
32
45
  def after_sent(response)
33
46
  if response
34
47
  stamp!(MailCannon::Event::Processed.stamp)
@@ -43,5 +56,14 @@ class MailCannon::Envelope
43
56
  raise 'code must be an Integer, MailCannon::Event::*, or MailCannon::Stamp !'
44
57
  end
45
58
  end
59
+
60
+ def validate_xsmtpapi(xsmtpapi)
61
+ return true # TODO write tests for this method
62
+ if xsmtpapi['to'].is_a? Array
63
+ true
64
+ else
65
+ false
66
+ end
67
+ end
46
68
 
47
- end
69
+ end
@@ -1,3 +1,4 @@
1
+ # Manages the mailing Events, very tricky.
1
2
  class MailCannon::Event
2
3
 
3
4
  EVENTS = [
@@ -1,8 +1,9 @@
1
+ # Holds the content of the email, this will be destroyed once the Envelope has been processed.
1
2
  class MailCannon::Mail
2
3
  include Mongoid::Document
3
4
  include Mongoid::Timestamps
4
5
 
5
- belongs_to :envelope, index: true
6
+ embedded_in :envelope#, index: true
6
7
 
7
8
  field :text, type: String
8
9
  field :html, type: String
@@ -1,3 +1,4 @@
1
+ # Holds information about a recipient's email event, like deliveries and bounces.
1
2
  class MailCannon::Stamp
2
3
  include Mongoid::Document
3
4
  include Mongoid::Timestamps
@@ -5,13 +6,16 @@ class MailCannon::Stamp
5
6
  belongs_to :envelope, index: true
6
7
 
7
8
  field :code, type: Integer, default: 0
9
+ field :recipient # email address for this "notification"
10
+ validates :code, :envelope, presence: true
8
11
 
9
- validate :code, :envelope, presence: true
10
-
12
+ # Returns the Event for this Stamp.
11
13
  def event
12
14
  MailCannon::Event.from_code(self.code)
13
15
  end
14
16
 
17
+ # Creates a Stamp from an Event code.
18
+ # @param code Can be either an Integer, a MailCannon::Event or the MailCannon::Stamp itself.
15
19
  def self.from_code(code)
16
20
  if code.is_a? Fixnum
17
21
  return MailCannon::Stamp.new({code: code})
@@ -1,8 +1,9 @@
1
+ # Keeps the versioning clean and simple.
1
2
  module MailCannon
2
3
  module Version
3
4
  MAJOR = 0
4
5
  MINOR = 0
5
- PATCH = 3
6
+ PATCH = 4
6
7
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
8
  end
8
9
  end
@@ -1,9 +1,10 @@
1
- class MailCannon::SingleBarrel
1
+ # This worker handles Envelopes dispatch
2
+ class MailCannon::Barrel
2
3
  include Sidekiq::Worker
3
4
 
4
5
  def perform(envelope_id)
5
6
  aggregator = Librato::Metrics::Aggregator.new
6
- aggregator.time 'mailcannon.shooter.perform' do
7
+ aggregator.time 'mailcannon.barrel.perform' do
7
8
  envelope_id = envelope_id['$oid'] if envelope_id['$oid']
8
9
  puts "sending MailCannon::Envelope.find('#{envelope_id}')"
9
10
 
data/lib/mailcannon.rb CHANGED
@@ -14,25 +14,19 @@ end
14
14
  Encoding.default_internal = "utf-8"
15
15
  Encoding.default_external = "utf-8"
16
16
 
17
- #Adds a way to retrieve Submodules of a Module, used for CustomContentParsers
18
- class Module
19
- def submodules
20
- constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == Module}
21
- end
22
- end
23
-
24
17
  module MailCannon
25
18
  require_relative 'mailcannon/adapter'
26
- require_relative 'mailcannon/adapters/sendgrid'
19
+ require_relative 'mailcannon/adapters/sendgrid_web'
27
20
  require_relative 'mailcannon/envelope'
28
21
  require_relative 'mailcannon/mail'
29
22
  require_relative 'mailcannon/stamp'
30
23
  require_relative 'mailcannon/event'
31
- require_relative 'mailcannon/workers/single_barrel'
24
+ require_relative 'mailcannon/workers/barrel'
32
25
  require_relative 'mailcannon/version'
33
26
 
34
27
  self.warmode if ENV['MAILCANNON_MODE']=='war'
35
28
 
29
+ # To be used with caution
36
30
  def self.warmode
37
31
  Bundler.require(:default)
38
32
  Mongoid.load!("config/mongoid.yml", ENV['RACK_ENV']) # change to env URL
@@ -41,10 +35,12 @@ module MailCannon
41
35
  $redis = Redis.new(host: redis_uri.host, port: redis_uri.port)
42
36
  end
43
37
 
38
+ # Returns the config Hash
44
39
  def self.config(root_dir=nil)
45
40
  @config ||= load_config(root_dir)
46
41
  end
47
42
 
43
+ # Loads the config Hash from the YAML
48
44
  def self.load_config(root_dir=nil)
49
45
  root_dir ||= Pathname.new(Dir.pwd)
50
46
 
data/mailcannon.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["Lucas Martins"]
11
11
  s.email = ["lucasmartins@railsnapraia.com"]
12
12
  s.homepage = "http://rubygems.org/gems/mailcannon"
13
- s.summary = "Parking Gem name"
13
+ s.summary = "A mass mailing tool for real threads aficionados"
14
14
  s.description = s.summary
15
15
  s.license = "MIT"
16
16
 
@@ -29,5 +29,6 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency "rake"
30
30
  s.add_development_dependency "pry"
31
31
  s.add_development_dependency "pry-nav"
32
+ s.add_development_dependency "yard"
32
33
  end
33
34
 
@@ -1,8 +1,45 @@
1
1
  FactoryGirl.define do
2
2
  factory :envelope, class: MailCannon::Envelope do
3
- from 'test@mailcannon.com'
4
- to 'lucasmartins@railsnapraia.com'
3
+ from 'mailcannon@railsonthebeach.com'
4
+ to [{email: 'mailcannon@railsnapraia.com', name: 'Mail Cannon'}]
5
5
  subject 'Test'
6
- mail factory: :mail
6
+ mail MailCannon::Mail.new(text: "Hello %name%, If you can't read the HTML content, you're screwed!", html: "<html><body><p>%name%,<br/><br/>You should see what happens when your email client can't read HTML content.</p></body></html>")
7
+
8
+ factory :envelope_multi, class: MailCannon::Envelope do
9
+ from 'mailcannon@railsonthebeach.com'
10
+ to [
11
+ {email: 'mailcannon@railsnapraia.com', name: 'Mail Cannon'},
12
+ {email: 'lucasmartins@railsnapraia.com', name: 'Lucas Martins'},
13
+ {email: 'contact@railsonthebeach.com', name: 'Contact'}
14
+ ]
15
+ hash = {"%name%"=>['Mail Cannon','Lucas Martins','Contact']}
16
+ substitutions hash
17
+ subject 'Test'
18
+ end
19
+
20
+ factory :envelope_multi_1k, class: MailCannon::Envelope do
21
+ mails = []
22
+ source = 'lucasmartins+#@railsnapraia.com'
23
+ 1000.times.each do |i|
24
+ mails.push source.gsub('#',i.to_s)
25
+ end
26
+
27
+ names = []
28
+ source = 'Lucas Martins #'
29
+ 1000.times.each do |i|
30
+ names.push source.gsub('#',i.to_s)
31
+ end
32
+
33
+ to_array = []
34
+ 1000.times.each do |i|
35
+ to_array.push({name: names[i], email: mails[i]})
36
+ end
37
+
38
+ from 'mailcannon@railsonthebeach.com'
39
+ to to_array
40
+ hash = {"%name%"=>names}
41
+ substitutions hash
42
+ subject 'Test'
43
+ end
7
44
  end
8
45
  end
@@ -1,6 +1,5 @@
1
1
  FactoryGirl.define do
2
2
  factory :stamp, class: MailCannon::Stamp do
3
3
  code 0
4
- envelope factory: :envelope
5
4
  end
6
5
  end
@@ -5,7 +5,7 @@ http_interactions:
5
5
  uri: https://sendgrid.com/api/mail.send.json
6
6
  body:
7
7
  encoding: US-ASCII
8
- string: to=lucasmartins%40railsnapraia.com&toname&subject=Test&text=If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=test%40mailcannon.com&fromname&bcc&replyto&api_user=app5967346%40heroku.com&api_key=i1att6wi
8
+ string: to=lucasmartins%40railsnapraia.com&toname&subject=Test&text=If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=test%40mailcannon.com&fromname&bcc&replyto
9
9
  headers:
10
10
  User-Agent:
11
11
  - Faraday v0.8.8
@@ -5,7 +5,7 @@ http_interactions:
5
5
  uri: https://sendgrid.com/api/mail.send.json
6
6
  body:
7
7
  encoding: US-ASCII
8
- string: to=lucasmartins%40railsnapraia.com&toname&subject=Test&text=If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=test%40mailcannon.com&fromname&bcc&replyto&api_user=app5967346%40heroku.com&api_key=i1att6wi
8
+ string: to=lucasmartins%40railsnapraia.com&toname&subject=Test&text=If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=test%40mailcannon.com&fromname&bcc&replyto
9
9
  headers:
10
10
  User-Agent:
11
11
  - Faraday v0.8.8
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://sendgrid.com/api/mail.send.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: to=mailcannon%40railsonthebeach.com&subject=Test&text=Hello+%25name%25%2C+If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3E%25name%25%2C%3Cbr%2F%3E%3Cbr%2F%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=mailcannon%40railsonthebeach.com&fromname&bcc&replyto&x-smtpapi=%7B%22to%22%3A%5B%22mailcannon%40railsnapraia.com%22%2C%22lucasmartins%40railsnapraia.com%22%2C%22contact%40railsonthebeach.com%22%5D%2C%22sub%22%3A%7B%22%25name%25%22%3A%5B%22Mail+Cannon%22%2C%22Lucas+Martins%22%2C%22Contact%22%5D%7D%7D
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.8
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - nginx/1.4.2
23
+ Date:
24
+ - Sat, 04 Jan 2014 17:10:46 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: UTF-8
33
+ string: '{"message":"success"}'
34
+ http_version:
35
+ recorded_at: Sat, 04 Jan 2014 17:10:41 GMT
36
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://sendgrid.com/api/mail.send.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: to=mailcannon%40railsonthebeach.com&subject=Test&text=Hello+%25name%25%2C+If+you+can%27t+read+the+HTML+content%2C+you%27re+screwed%21&html=%3Chtml%3E%3Cbody%3E%3Cp%3E%25name%25%2C%3Cbr%2F%3E%3Cbr%2F%3EYou+should+see+what+happens+when+your+email+client+can%27t+read+HTML+content.%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=mailcannon%40railsonthebeach.com&fromname&bcc&replyto&x-smtpapi=%7B%22to%22%3A%5B%22lucasmartins%2B0%40railsnapraia.com%22%2C%22lucasmartins%2B1%40railsnapraia.com%22%2C%22lucasmartins%2B2%40railsnapraia.com%22%2C%22lucasmartins%2B3%40railsnapraia.com%22%2C%22lucasmartins%2B4%40railsnapraia.com%22%2C%22lucasmartins%2B5%40railsnapraia.com%22%2C%22lucasmartins%2B6%40railsnapraia.com%22%2C%22lucasmartins%2B7%40railsnapraia.com%22%2C%22lucasmartins%2B8%40railsnapraia.com%22%2C%22lucasmartins%2B9%40railsnapraia.com%22%2C%22lucasmartins%2B10%40railsnapraia.com%22%2C%22lucasmartins%2B11%40railsnapraia.com%22%2C%22lucasmartins%2B12%40railsnapraia.com%22%2C%22lucasmartins%2B13%40railsnapraia.com%22%2C%22lucasmartins%2B14%40railsnapraia.com%22%2C%22lucasmartins%2B15%40railsnapraia.com%22%2C%22lucasmartins%2B16%40railsnapraia.com%22%2C%22lucasmartins%2B17%40railsnapraia.com%22%2C%22lucasmartins%2B18%40railsnapraia.com%22%2C%22lucasmartins%2B19%40railsnapraia.com%22%2C%22lucasmartins%2B20%40railsnapraia.com%22%2C%22lucasmartins%2B21%40railsnapraia.com%22%2C%22lucasmartins%2B22%40railsnapraia.com%22%2C%22lucasmartins%2B23%40railsnapraia.com%22%2C%22lucasmartins%2B24%40railsnapraia.com%22%2C%22lucasmartins%2B25%40railsnapraia.com%22%2C%22lucasmartins%2B26%40railsnapraia.com%22%2C%22lucasmartins%2B27%40railsnapraia.com%22%2C%22lucasmartins%2B28%40railsnapraia.com%22%2C%22lucasmartins%2B29%40railsnapraia.com%22%2C%22lucasmartins%2B30%40railsnapraia.com%22%2C%22lucasmartins%2B31%40railsnapraia.com%22%2C%22lucasmartins%2B32%40railsnapraia.com%22%2C%22lucasmartins%2B33%40railsnapraia.com%22%2C%22lucasmartins%2B34%40railsnapraia.com%22%2C%22lucasmartins%2B35%40railsnapraia.com%22%2C%22lucasmartins%2B36%40railsnapraia.com%22%2C%22lucasmartins%2B37%40railsnapraia.com%22%2C%22lucasmartins%2B38%40railsnapraia.com%22%2C%22lucasmartins%2B39%40railsnapraia.com%22%2C%22lucasmartins%2B40%40railsnapraia.com%22%2C%22lucasmartins%2B41%40railsnapraia.com%22%2C%22lucasmartins%2B42%40railsnapraia.com%22%2C%22lucasmartins%2B43%40railsnapraia.com%22%2C%22lucasmartins%2B44%40railsnapraia.com%22%2C%22lucasmartins%2B45%40railsnapraia.com%22%2C%22lucasmartins%2B46%40railsnapraia.com%22%2C%22lucasmartins%2B47%40railsnapraia.com%22%2C%22lucasmartins%2B48%40railsnapraia.com%22%2C%22lucasmartins%2B49%40railsnapraia.com%22%2C%22lucasmartins%2B50%40railsnapraia.com%22%2C%22lucasmartins%2B51%40railsnapraia.com%22%2C%22lucasmartins%2B52%40railsnapraia.com%22%2C%22lucasmartins%2B53%40railsnapraia.com%22%2C%22lucasmartins%2B54%40railsnapraia.com%22%2C%22lucasmartins%2B55%40railsnapraia.com%22%2C%22lucasmartins%2B56%40railsnapraia.com%22%2C%22lucasmartins%2B57%40railsnapraia.com%22%2C%22lucasmartins%2B58%40railsnapraia.com%22%2C%22lucasmartins%2B59%40railsnapraia.com%22%2C%22lucasmartins%2B60%40railsnapraia.com%22%2C%22lucasmartins%2B61%40railsnapraia.com%22%2C%22lucasmartins%2B62%40railsnapraia.com%22%2C%22lucasmartins%2B63%40railsnapraia.com%22%2C%22lucasmartins%2B64%40railsnapraia.com%22%2C%22lucasmartins%2B65%40railsnapraia.com%22%2C%22lucasmartins%2B66%40railsnapraia.com%22%2C%22lucasmartins%2B67%40railsnapraia.com%22%2C%22lucasmartins%2B68%40railsnapraia.com%22%2C%22lucasmartins%2B69%40railsnapraia.com%22%2C%22lucasmartins%2B70%40railsnapraia.com%22%2C%22lucasmartins%2B71%40railsnapraia.com%22%2C%22lucasmartins%2B72%40railsnapraia.com%22%2C%22lucasmartins%2B73%40railsnapraia.com%22%2C%22lucasmartins%2B74%40railsnapraia.com%22%2C%22lucasmartins%2B75%40railsnapraia.com%22%2C%22lucasmartins%2B76%40railsnapraia.com%22%2C%22lucasmartins%2B77%40railsnapraia.com%22%2C%22lucasmartins%2B78%40railsnapraia.com%22%2C%22lucasmartins%2B79%40railsnapraia.com%22%2C%22lucasmartins%2B80%40railsnapraia.com%22%2C%22lucasmartins%2B81%40railsnapraia.com%22%2C%22lucasmartins%2B82%40railsnapraia.com%22%2C%22lucasmartins%2B83%40railsnapraia.com%22%2C%22lucasmartins%2B84%40railsnapraia.com%22%2C%22lucasmartins%2B85%40railsnapraia.com%22%2C%22lucasmartins%2B86%40railsnapraia.com%22%2C%22lucasmartins%2B87%40railsnapraia.com%22%2C%22lucasmartins%2B88%40railsnapraia.com%22%2C%22lucasmartins%2B89%40railsnapraia.com%22%2C%22lucasmartins%2B90%40railsnapraia.com%22%2C%22lucasmartins%2B91%40railsnapraia.com%22%2C%22lucasmartins%2B92%40railsnapraia.com%22%2C%22lucasmartins%2B93%40railsnapraia.com%22%2C%22lucasmartins%2B94%40railsnapraia.com%22%2C%22lucasmartins%2B95%40railsnapraia.com%22%2C%22lucasmartins%2B96%40railsnapraia.com%22%2C%22lucasmartins%2B97%40railsnapraia.com%22%2C%22lucasmartins%2B98%40railsnapraia.com%22%2C%22lucasmartins%2B99%40railsnapraia.com%22%2C%22lucasmartins%2B100%40railsnapraia.com%22%2C%22lucasmartins%2B101%40railsnapraia.com%22%2C%22lucasmartins%2B102%40railsnapraia.com%22%2C%22lucasmartins%2B103%40railsnapraia.com%22%2C%22lucasmartins%2B104%40railsnapraia.com%22%2C%22lucasmartins%2B105%40railsnapraia.com%22%2C%22lucasmartins%2B106%40railsnapraia.com%22%2C%22lucasmartins%2B107%40railsnapraia.com%22%2C%22lucasmartins%2B108%40railsnapraia.com%22%2C%22lucasmartins%2B109%40railsnapraia.com%22%2C%22lucasmartins%2B110%40railsnapraia.com%22%2C%22lucasmartins%2B111%40railsnapraia.com%22%2C%22lucasmartins%2B112%40railsnapraia.com%22%2C%22lucasmartins%2B113%40railsnapraia.com%22%2C%22lucasmartins%2B114%40railsnapraia.com%22%2C%22lucasmartins%2B115%40railsnapraia.com%22%2C%22lucasmartins%2B116%40railsnapraia.com%22%2C%22lucasmartins%2B117%40railsnapraia.com%22%2C%22lucasmartins%2B118%40railsnapraia.com%22%2C%22lucasmartins%2B119%40railsnapraia.com%22%2C%22lucasmartins%2B120%40railsnapraia.com%22%2C%22lucasmartins%2B121%40railsnapraia.com%22%2C%22lucasmartins%2B122%40railsnapraia.com%22%2C%22lucasmartins%2B123%40railsnapraia.com%22%2C%22lucasmartins%2B124%40railsnapraia.com%22%2C%22lucasmartins%2B125%40railsnapraia.com%22%2C%22lucasmartins%2B126%40railsnapraia.com%22%2C%22lucasmartins%2B127%40railsnapraia.com%22%2C%22lucasmartins%2B128%40railsnapraia.com%22%2C%22lucasmartins%2B129%40railsnapraia.com%22%2C%22lucasmartins%2B130%40railsnapraia.com%22%2C%22lucasmartins%2B131%40railsnapraia.com%22%2C%22lucasmartins%2B132%40railsnapraia.com%22%2C%22lucasmartins%2B133%40railsnapraia.com%22%2C%22lucasmartins%2B134%40railsnapraia.com%22%2C%22lucasmartins%2B135%40railsnapraia.com%22%2C%22lucasmartins%2B136%40railsnapraia.com%22%2C%22lucasmartins%2B137%40railsnapraia.com%22%2C%22lucasmartins%2B138%40railsnapraia.com%22%2C%22lucasmartins%2B139%40railsnapraia.com%22%2C%22lucasmartins%2B140%40railsnapraia.com%22%2C%22lucasmartins%2B141%40railsnapraia.com%22%2C%22lucasmartins%2B142%40railsnapraia.com%22%2C%22lucasmartins%2B143%40railsnapraia.com%22%2C%22lucasmartins%2B144%40railsnapraia.com%22%2C%22lucasmartins%2B145%40railsnapraia.com%22%2C%22lucasmartins%2B146%40railsnapraia.com%22%2C%22lucasmartins%2B147%40railsnapraia.com%22%2C%22lucasmartins%2B148%40railsnapraia.com%22%2C%22lucasmartins%2B149%40railsnapraia.com%22%2C%22lucasmartins%2B150%40railsnapraia.com%22%2C%22lucasmartins%2B151%40railsnapraia.com%22%2C%22lucasmartins%2B152%40railsnapraia.com%22%2C%22lucasmartins%2B153%40railsnapraia.com%22%2C%22lucasmartins%2B154%40railsnapraia.com%22%2C%22lucasmartins%2B155%40railsnapraia.com%22%2C%22lucasmartins%2B156%40railsnapraia.com%22%2C%22lucasmartins%2B157%40railsnapraia.com%22%2C%22lucasmartins%2B158%40railsnapraia.com%22%2C%22lucasmartins%2B159%40railsnapraia.com%22%2C%22lucasmartins%2B160%40railsnapraia.com%22%2C%22lucasmartins%2B161%40railsnapraia.com%22%2C%22lucasmartins%2B162%40railsnapraia.com%22%2C%22lucasmartins%2B163%40railsnapraia.com%22%2C%22lucasmartins%2B164%40railsnapraia.com%22%2C%22lucasmartins%2B165%40railsnapraia.com%22%2C%22lucasmartins%2B166%40railsnapraia.com%22%2C%22lucasmartins%2B167%40railsnapraia.com%22%2C%22lucasmartins%2B168%40railsnapraia.com%22%2C%22lucasmartins%2B169%40railsnapraia.com%22%2C%22lucasmartins%2B170%40railsnapraia.com%22%2C%22lucasmartins%2B171%40railsnapraia.com%22%2C%22lucasmartins%2B172%40railsnapraia.com%22%2C%22lucasmartins%2B173%40railsnapraia.com%22%2C%22lucasmartins%2B174%40railsnapraia.com%22%2C%22lucasmartins%2B175%40railsnapraia.com%22%2C%22lucasmartins%2B176%40railsnapraia.com%22%2C%22lucasmartins%2B177%40railsnapraia.com%22%2C%22lucasmartins%2B178%40railsnapraia.com%22%2C%22lucasmartins%2B179%40railsnapraia.com%22%2C%22lucasmartins%2B180%40railsnapraia.com%22%2C%22lucasmartins%2B181%40railsnapraia.com%22%2C%22lucasmartins%2B182%40railsnapraia.com%22%2C%22lucasmartins%2B183%40railsnapraia.com%22%2C%22lucasmartins%2B184%40railsnapraia.com%22%2C%22lucasmartins%2B185%40railsnapraia.com%22%2C%22lucasmartins%2B186%40railsnapraia.com%22%2C%22lucasmartins%2B187%40railsnapraia.com%22%2C%22lucasmartins%2B188%40railsnapraia.com%22%2C%22lucasmartins%2B189%40railsnapraia.com%22%2C%22lucasmartins%2B190%40railsnapraia.com%22%2C%22lucasmartins%2B191%40railsnapraia.com%22%2C%22lucasmartins%2B192%40railsnapraia.com%22%2C%22lucasmartins%2B193%40railsnapraia.com%22%2C%22lucasmartins%2B194%40railsnapraia.com%22%2C%22lucasmartins%2B195%40railsnapraia.com%22%2C%22lucasmartins%2B196%40railsnapraia.com%22%2C%22lucasmartins%2B197%40railsnapraia.com%22%2C%22lucasmartins%2B198%40railsnapraia.com%22%2C%22lucasmartins%2B199%40railsnapraia.com%22%2C%22lucasmartins%2B200%40railsnapraia.com%22%2C%22lucasmartins%2B201%40railsnapraia.com%22%2C%22lucasmartins%2B202%40railsnapraia.com%22%2C%22lucasmartins%2B203%40railsnapraia.com%22%2C%22lucasmartins%2B204%40railsnapraia.com%22%2C%22lucasmartins%2B205%40railsnapraia.com%22%2C%22lucasmartins%2B206%40railsnapraia.com%22%2C%22lucasmartins%2B207%40railsnapraia.com%22%2C%22lucasmartins%2B208%40railsnapraia.com%22%2C%22lucasmartins%2B209%40railsnapraia.com%22%2C%22lucasmartins%2B210%40railsnapraia.com%22%2C%22lucasmartins%2B211%40railsnapraia.com%22%2C%22lucasmartins%2B212%40railsnapraia.com%22%2C%22lucasmartins%2B213%40railsnapraia.com%22%2C%22lucasmartins%2B214%40railsnapraia.com%22%2C%22lucasmartins%2B215%40railsnapraia.com%22%2C%22lucasmartins%2B216%40railsnapraia.com%22%2C%22lucasmartins%2B217%40railsnapraia.com%22%2C%22lucasmartins%2B218%40railsnapraia.com%22%2C%22lucasmartins%2B219%40railsnapraia.com%22%2C%22lucasmartins%2B220%40railsnapraia.com%22%2C%22lucasmartins%2B221%40railsnapraia.com%22%2C%22lucasmartins%2B222%40railsnapraia.com%22%2C%22lucasmartins%2B223%40railsnapraia.com%22%2C%22lucasmartins%2B224%40railsnapraia.com%22%2C%22lucasmartins%2B225%40railsnapraia.com%22%2C%22lucasmartins%2B226%40railsnapraia.com%22%2C%22lucasmartins%2B227%40railsnapraia.com%22%2C%22lucasmartins%2B228%40railsnapraia.com%22%2C%22lucasmartins%2B229%40railsnapraia.com%22%2C%22lucasmartins%2B230%40railsnapraia.com%22%2C%22lucasmartins%2B231%40railsnapraia.com%22%2C%22lucasmartins%2B232%40railsnapraia.com%22%2C%22lucasmartins%2B233%40railsnapraia.com%22%2C%22lucasmartins%2B234%40railsnapraia.com%22%2C%22lucasmartins%2B235%40railsnapraia.com%22%2C%22lucasmartins%2B236%40railsnapraia.com%22%2C%22lucasmartins%2B237%40railsnapraia.com%22%2C%22lucasmartins%2B238%40railsnapraia.com%22%2C%22lucasmartins%2B239%40railsnapraia.com%22%2C%22lucasmartins%2B240%40railsnapraia.com%22%2C%22lucasmartins%2B241%40railsnapraia.com%22%2C%22lucasmartins%2B242%40railsnapraia.com%22%2C%22lucasmartins%2B243%40railsnapraia.com%22%2C%22lucasmartins%2B244%40railsnapraia.com%22%2C%22lucasmartins%2B245%40railsnapraia.com%22%2C%22lucasmartins%2B246%40railsnapraia.com%22%2C%22lucasmartins%2B247%40railsnapraia.com%22%2C%22lucasmartins%2B248%40railsnapraia.com%22%2C%22lucasmartins%2B249%40railsnapraia.com%22%2C%22lucasmartins%2B250%40railsnapraia.com%22%2C%22lucasmartins%2B251%40railsnapraia.com%22%2C%22lucasmartins%2B252%40railsnapraia.com%22%2C%22lucasmartins%2B253%40railsnapraia.com%22%2C%22lucasmartins%2B254%40railsnapraia.com%22%2C%22lucasmartins%2B255%40railsnapraia.com%22%2C%22lucasmartins%2B256%40railsnapraia.com%22%2C%22lucasmartins%2B257%40railsnapraia.com%22%2C%22lucasmartins%2B258%40railsnapraia.com%22%2C%22lucasmartins%2B259%40railsnapraia.com%22%2C%22lucasmartins%2B260%40railsnapraia.com%22%2C%22lucasmartins%2B261%40railsnapraia.com%22%2C%22lucasmartins%2B262%40railsnapraia.com%22%2C%22lucasmartins%2B263%40railsnapraia.com%22%2C%22lucasmartins%2B264%40railsnapraia.com%22%2C%22lucasmartins%2B265%40railsnapraia.com%22%2C%22lucasmartins%2B266%40railsnapraia.com%22%2C%22lucasmartins%2B267%40railsnapraia.com%22%2C%22lucasmartins%2B268%40railsnapraia.com%22%2C%22lucasmartins%2B269%40railsnapraia.com%22%2C%22lucasmartins%2B270%40railsnapraia.com%22%2C%22lucasmartins%2B271%40railsnapraia.com%22%2C%22lucasmartins%2B272%40railsnapraia.com%22%2C%22lucasmartins%2B273%40railsnapraia.com%22%2C%22lucasmartins%2B274%40railsnapraia.com%22%2C%22lucasmartins%2B275%40railsnapraia.com%22%2C%22lucasmartins%2B276%40railsnapraia.com%22%2C%22lucasmartins%2B277%40railsnapraia.com%22%2C%22lucasmartins%2B278%40railsnapraia.com%22%2C%22lucasmartins%2B279%40railsnapraia.com%22%2C%22lucasmartins%2B280%40railsnapraia.com%22%2C%22lucasmartins%2B281%40railsnapraia.com%22%2C%22lucasmartins%2B282%40railsnapraia.com%22%2C%22lucasmartins%2B283%40railsnapraia.com%22%2C%22lucasmartins%2B284%40railsnapraia.com%22%2C%22lucasmartins%2B285%40railsnapraia.com%22%2C%22lucasmartins%2B286%40railsnapraia.com%22%2C%22lucasmartins%2B287%40railsnapraia.com%22%2C%22lucasmartins%2B288%40railsnapraia.com%22%2C%22lucasmartins%2B289%40railsnapraia.com%22%2C%22lucasmartins%2B290%40railsnapraia.com%22%2C%22lucasmartins%2B291%40railsnapraia.com%22%2C%22lucasmartins%2B292%40railsnapraia.com%22%2C%22lucasmartins%2B293%40railsnapraia.com%22%2C%22lucasmartins%2B294%40railsnapraia.com%22%2C%22lucasmartins%2B295%40railsnapraia.com%22%2C%22lucasmartins%2B296%40railsnapraia.com%22%2C%22lucasmartins%2B297%40railsnapraia.com%22%2C%22lucasmartins%2B298%40railsnapraia.com%22%2C%22lucasmartins%2B299%40railsnapraia.com%22%2C%22lucasmartins%2B300%40railsnapraia.com%22%2C%22lucasmartins%2B301%40railsnapraia.com%22%2C%22lucasmartins%2B302%40railsnapraia.com%22%2C%22lucasmartins%2B303%40railsnapraia.com%22%2C%22lucasmartins%2B304%40railsnapraia.com%22%2C%22lucasmartins%2B305%40railsnapraia.com%22%2C%22lucasmartins%2B306%40railsnapraia.com%22%2C%22lucasmartins%2B307%40railsnapraia.com%22%2C%22lucasmartins%2B308%40railsnapraia.com%22%2C%22lucasmartins%2B309%40railsnapraia.com%22%2C%22lucasmartins%2B310%40railsnapraia.com%22%2C%22lucasmartins%2B311%40railsnapraia.com%22%2C%22lucasmartins%2B312%40railsnapraia.com%22%2C%22lucasmartins%2B313%40railsnapraia.com%22%2C%22lucasmartins%2B314%40railsnapraia.com%22%2C%22lucasmartins%2B315%40railsnapraia.com%22%2C%22lucasmartins%2B316%40railsnapraia.com%22%2C%22lucasmartins%2B317%40railsnapraia.com%22%2C%22lucasmartins%2B318%40railsnapraia.com%22%2C%22lucasmartins%2B319%40railsnapraia.com%22%2C%22lucasmartins%2B320%40railsnapraia.com%22%2C%22lucasmartins%2B321%40railsnapraia.com%22%2C%22lucasmartins%2B322%40railsnapraia.com%22%2C%22lucasmartins%2B323%40railsnapraia.com%22%2C%22lucasmartins%2B324%40railsnapraia.com%22%2C%22lucasmartins%2B325%40railsnapraia.com%22%2C%22lucasmartins%2B326%40railsnapraia.com%22%2C%22lucasmartins%2B327%40railsnapraia.com%22%2C%22lucasmartins%2B328%40railsnapraia.com%22%2C%22lucasmartins%2B329%40railsnapraia.com%22%2C%22lucasmartins%2B330%40railsnapraia.com%22%2C%22lucasmartins%2B331%40railsnapraia.com%22%2C%22lucasmartins%2B332%40railsnapraia.com%22%2C%22lucasmartins%2B333%40railsnapraia.com%22%2C%22lucasmartins%2B334%40railsnapraia.com%22%2C%22lucasmartins%2B335%40railsnapraia.com%22%2C%22lucasmartins%2B336%40railsnapraia.com%22%2C%22lucasmartins%2B337%40railsnapraia.com%22%2C%22lucasmartins%2B338%40railsnapraia.com%22%2C%22lucasmartins%2B339%40railsnapraia.com%22%2C%22lucasmartins%2B340%40railsnapraia.com%22%2C%22lucasmartins%2B341%40railsnapraia.com%22%2C%22lucasmartins%2B342%40railsnapraia.com%22%2C%22lucasmartins%2B343%40railsnapraia.com%22%2C%22lucasmartins%2B344%40railsnapraia.com%22%2C%22lucasmartins%2B345%40railsnapraia.com%22%2C%22lucasmartins%2B346%40railsnapraia.com%22%2C%22lucasmartins%2B347%40railsnapraia.com%22%2C%22lucasmartins%2B348%40railsnapraia.com%22%2C%22lucasmartins%2B349%40railsnapraia.com%22%2C%22lucasmartins%2B350%40railsnapraia.com%22%2C%22lucasmartins%2B351%40railsnapraia.com%22%2C%22lucasmartins%2B352%40railsnapraia.com%22%2C%22lucasmartins%2B353%40railsnapraia.com%22%2C%22lucasmartins%2B354%40railsnapraia.com%22%2C%22lucasmartins%2B355%40railsnapraia.com%22%2C%22lucasmartins%2B356%40railsnapraia.com%22%2C%22lucasmartins%2B357%40railsnapraia.com%22%2C%22lucasmartins%2B358%40railsnapraia.com%22%2C%22lucasmartins%2B359%40railsnapraia.com%22%2C%22lucasmartins%2B360%40railsnapraia.com%22%2C%22lucasmartins%2B361%40railsnapraia.com%22%2C%22lucasmartins%2B362%40railsnapraia.com%22%2C%22lucasmartins%2B363%40railsnapraia.com%22%2C%22lucasmartins%2B364%40railsnapraia.com%22%2C%22lucasmartins%2B365%40railsnapraia.com%22%2C%22lucasmartins%2B366%40railsnapraia.com%22%2C%22lucasmartins%2B367%40railsnapraia.com%22%2C%22lucasmartins%2B368%40railsnapraia.com%22%2C%22lucasmartins%2B369%40railsnapraia.com%22%2C%22lucasmartins%2B370%40railsnapraia.com%22%2C%22lucasmartins%2B371%40railsnapraia.com%22%2C%22lucasmartins%2B372%40railsnapraia.com%22%2C%22lucasmartins%2B373%40railsnapraia.com%22%2C%22lucasmartins%2B374%40railsnapraia.com%22%2C%22lucasmartins%2B375%40railsnapraia.com%22%2C%22lucasmartins%2B376%40railsnapraia.com%22%2C%22lucasmartins%2B377%40railsnapraia.com%22%2C%22lucasmartins%2B378%40railsnapraia.com%22%2C%22lucasmartins%2B379%40railsnapraia.com%22%2C%22lucasmartins%2B380%40railsnapraia.com%22%2C%22lucasmartins%2B381%40railsnapraia.com%22%2C%22lucasmartins%2B382%40railsnapraia.com%22%2C%22lucasmartins%2B383%40railsnapraia.com%22%2C%22lucasmartins%2B384%40railsnapraia.com%22%2C%22lucasmartins%2B385%40railsnapraia.com%22%2C%22lucasmartins%2B386%40railsnapraia.com%22%2C%22lucasmartins%2B387%40railsnapraia.com%22%2C%22lucasmartins%2B388%40railsnapraia.com%22%2C%22lucasmartins%2B389%40railsnapraia.com%22%2C%22lucasmartins%2B390%40railsnapraia.com%22%2C%22lucasmartins%2B391%40railsnapraia.com%22%2C%22lucasmartins%2B392%40railsnapraia.com%22%2C%22lucasmartins%2B393%40railsnapraia.com%22%2C%22lucasmartins%2B394%40railsnapraia.com%22%2C%22lucasmartins%2B395%40railsnapraia.com%22%2C%22lucasmartins%2B396%40railsnapraia.com%22%2C%22lucasmartins%2B397%40railsnapraia.com%22%2C%22lucasmartins%2B398%40railsnapraia.com%22%2C%22lucasmartins%2B399%40railsnapraia.com%22%2C%22lucasmartins%2B400%40railsnapraia.com%22%2C%22lucasmartins%2B401%40railsnapraia.com%22%2C%22lucasmartins%2B402%40railsnapraia.com%22%2C%22lucasmartins%2B403%40railsnapraia.com%22%2C%22lucasmartins%2B404%40railsnapraia.com%22%2C%22lucasmartins%2B405%40railsnapraia.com%22%2C%22lucasmartins%2B406%40railsnapraia.com%22%2C%22lucasmartins%2B407%40railsnapraia.com%22%2C%22lucasmartins%2B408%40railsnapraia.com%22%2C%22lucasmartins%2B409%40railsnapraia.com%22%2C%22lucasmartins%2B410%40railsnapraia.com%22%2C%22lucasmartins%2B411%40railsnapraia.com%22%2C%22lucasmartins%2B412%40railsnapraia.com%22%2C%22lucasmartins%2B413%40railsnapraia.com%22%2C%22lucasmartins%2B414%40railsnapraia.com%22%2C%22lucasmartins%2B415%40railsnapraia.com%22%2C%22lucasmartins%2B416%40railsnapraia.com%22%2C%22lucasmartins%2B417%40railsnapraia.com%22%2C%22lucasmartins%2B418%40railsnapraia.com%22%2C%22lucasmartins%2B419%40railsnapraia.com%22%2C%22lucasmartins%2B420%40railsnapraia.com%22%2C%22lucasmartins%2B421%40railsnapraia.com%22%2C%22lucasmartins%2B422%40railsnapraia.com%22%2C%22lucasmartins%2B423%40railsnapraia.com%22%2C%22lucasmartins%2B424%40railsnapraia.com%22%2C%22lucasmartins%2B425%40railsnapraia.com%22%2C%22lucasmartins%2B426%40railsnapraia.com%22%2C%22lucasmartins%2B427%40railsnapraia.com%22%2C%22lucasmartins%2B428%40railsnapraia.com%22%2C%22lucasmartins%2B429%40railsnapraia.com%22%2C%22lucasmartins%2B430%40railsnapraia.com%22%2C%22lucasmartins%2B431%40railsnapraia.com%22%2C%22lucasmartins%2B432%40railsnapraia.com%22%2C%22lucasmartins%2B433%40railsnapraia.com%22%2C%22lucasmartins%2B434%40railsnapraia.com%22%2C%22lucasmartins%2B435%40railsnapraia.com%22%2C%22lucasmartins%2B436%40railsnapraia.com%22%2C%22lucasmartins%2B437%40railsnapraia.com%22%2C%22lucasmartins%2B438%40railsnapraia.com%22%2C%22lucasmartins%2B439%40railsnapraia.com%22%2C%22lucasmartins%2B440%40railsnapraia.com%22%2C%22lucasmartins%2B441%40railsnapraia.com%22%2C%22lucasmartins%2B442%40railsnapraia.com%22%2C%22lucasmartins%2B443%40railsnapraia.com%22%2C%22lucasmartins%2B444%40railsnapraia.com%22%2C%22lucasmartins%2B445%40railsnapraia.com%22%2C%22lucasmartins%2B446%40railsnapraia.com%22%2C%22lucasmartins%2B447%40railsnapraia.com%22%2C%22lucasmartins%2B448%40railsnapraia.com%22%2C%22lucasmartins%2B449%40railsnapraia.com%22%2C%22lucasmartins%2B450%40railsnapraia.com%22%2C%22lucasmartins%2B451%40railsnapraia.com%22%2C%22lucasmartins%2B452%40railsnapraia.com%22%2C%22lucasmartins%2B453%40railsnapraia.com%22%2C%22lucasmartins%2B454%40railsnapraia.com%22%2C%22lucasmartins%2B455%40railsnapraia.com%22%2C%22lucasmartins%2B456%40railsnapraia.com%22%2C%22lucasmartins%2B457%40railsnapraia.com%22%2C%22lucasmartins%2B458%40railsnapraia.com%22%2C%22lucasmartins%2B459%40railsnapraia.com%22%2C%22lucasmartins%2B460%40railsnapraia.com%22%2C%22lucasmartins%2B461%40railsnapraia.com%22%2C%22lucasmartins%2B462%40railsnapraia.com%22%2C%22lucasmartins%2B463%40railsnapraia.com%22%2C%22lucasmartins%2B464%40railsnapraia.com%22%2C%22lucasmartins%2B465%40railsnapraia.com%22%2C%22lucasmartins%2B466%40railsnapraia.com%22%2C%22lucasmartins%2B467%40railsnapraia.com%22%2C%22lucasmartins%2B468%40railsnapraia.com%22%2C%22lucasmartins%2B469%40railsnapraia.com%22%2C%22lucasmartins%2B470%40railsnapraia.com%22%2C%22lucasmartins%2B471%40railsnapraia.com%22%2C%22lucasmartins%2B472%40railsnapraia.com%22%2C%22lucasmartins%2B473%40railsnapraia.com%22%2C%22lucasmartins%2B474%40railsnapraia.com%22%2C%22lucasmartins%2B475%40railsnapraia.com%22%2C%22lucasmartins%2B476%40railsnapraia.com%22%2C%22lucasmartins%2B477%40railsnapraia.com%22%2C%22lucasmartins%2B478%40railsnapraia.com%22%2C%22lucasmartins%2B479%40railsnapraia.com%22%2C%22lucasmartins%2B480%40railsnapraia.com%22%2C%22lucasmartins%2B481%40railsnapraia.com%22%2C%22lucasmartins%2B482%40railsnapraia.com%22%2C%22lucasmartins%2B483%40railsnapraia.com%22%2C%22lucasmartins%2B484%40railsnapraia.com%22%2C%22lucasmartins%2B485%40railsnapraia.com%22%2C%22lucasmartins%2B486%40railsnapraia.com%22%2C%22lucasmartins%2B487%40railsnapraia.com%22%2C%22lucasmartins%2B488%40railsnapraia.com%22%2C%22lucasmartins%2B489%40railsnapraia.com%22%2C%22lucasmartins%2B490%40railsnapraia.com%22%2C%22lucasmartins%2B491%40railsnapraia.com%22%2C%22lucasmartins%2B492%40railsnapraia.com%22%2C%22lucasmartins%2B493%40railsnapraia.com%22%2C%22lucasmartins%2B494%40railsnapraia.com%22%2C%22lucasmartins%2B495%40railsnapraia.com%22%2C%22lucasmartins%2B496%40railsnapraia.com%22%2C%22lucasmartins%2B497%40railsnapraia.com%22%2C%22lucasmartins%2B498%40railsnapraia.com%22%2C%22lucasmartins%2B499%40railsnapraia.com%22%2C%22lucasmartins%2B500%40railsnapraia.com%22%2C%22lucasmartins%2B501%40railsnapraia.com%22%2C%22lucasmartins%2B502%40railsnapraia.com%22%2C%22lucasmartins%2B503%40railsnapraia.com%22%2C%22lucasmartins%2B504%40railsnapraia.com%22%2C%22lucasmartins%2B505%40railsnapraia.com%22%2C%22lucasmartins%2B506%40railsnapraia.com%22%2C%22lucasmartins%2B507%40railsnapraia.com%22%2C%22lucasmartins%2B508%40railsnapraia.com%22%2C%22lucasmartins%2B509%40railsnapraia.com%22%2C%22lucasmartins%2B510%40railsnapraia.com%22%2C%22lucasmartins%2B511%40railsnapraia.com%22%2C%22lucasmartins%2B512%40railsnapraia.com%22%2C%22lucasmartins%2B513%40railsnapraia.com%22%2C%22lucasmartins%2B514%40railsnapraia.com%22%2C%22lucasmartins%2B515%40railsnapraia.com%22%2C%22lucasmartins%2B516%40railsnapraia.com%22%2C%22lucasmartins%2B517%40railsnapraia.com%22%2C%22lucasmartins%2B518%40railsnapraia.com%22%2C%22lucasmartins%2B519%40railsnapraia.com%22%2C%22lucasmartins%2B520%40railsnapraia.com%22%2C%22lucasmartins%2B521%40railsnapraia.com%22%2C%22lucasmartins%2B522%40railsnapraia.com%22%2C%22lucasmartins%2B523%40railsnapraia.com%22%2C%22lucasmartins%2B524%40railsnapraia.com%22%2C%22lucasmartins%2B525%40railsnapraia.com%22%2C%22lucasmartins%2B526%40railsnapraia.com%22%2C%22lucasmartins%2B527%40railsnapraia.com%22%2C%22lucasmartins%2B528%40railsnapraia.com%22%2C%22lucasmartins%2B529%40railsnapraia.com%22%2C%22lucasmartins%2B530%40railsnapraia.com%22%2C%22lucasmartins%2B531%40railsnapraia.com%22%2C%22lucasmartins%2B532%40railsnapraia.com%22%2C%22lucasmartins%2B533%40railsnapraia.com%22%2C%22lucasmartins%2B534%40railsnapraia.com%22%2C%22lucasmartins%2B535%40railsnapraia.com%22%2C%22lucasmartins%2B536%40railsnapraia.com%22%2C%22lucasmartins%2B537%40railsnapraia.com%22%2C%22lucasmartins%2B538%40railsnapraia.com%22%2C%22lucasmartins%2B539%40railsnapraia.com%22%2C%22lucasmartins%2B540%40railsnapraia.com%22%2C%22lucasmartins%2B541%40railsnapraia.com%22%2C%22lucasmartins%2B542%40railsnapraia.com%22%2C%22lucasmartins%2B543%40railsnapraia.com%22%2C%22lucasmartins%2B544%40railsnapraia.com%22%2C%22lucasmartins%2B545%40railsnapraia.com%22%2C%22lucasmartins%2B546%40railsnapraia.com%22%2C%22lucasmartins%2B547%40railsnapraia.com%22%2C%22lucasmartins%2B548%40railsnapraia.com%22%2C%22lucasmartins%2B549%40railsnapraia.com%22%2C%22lucasmartins%2B550%40railsnapraia.com%22%2C%22lucasmartins%2B551%40railsnapraia.com%22%2C%22lucasmartins%2B552%40railsnapraia.com%22%2C%22lucasmartins%2B553%40railsnapraia.com%22%2C%22lucasmartins%2B554%40railsnapraia.com%22%2C%22lucasmartins%2B555%40railsnapraia.com%22%2C%22lucasmartins%2B556%40railsnapraia.com%22%2C%22lucasmartins%2B557%40railsnapraia.com%22%2C%22lucasmartins%2B558%40railsnapraia.com%22%2C%22lucasmartins%2B559%40railsnapraia.com%22%2C%22lucasmartins%2B560%40railsnapraia.com%22%2C%22lucasmartins%2B561%40railsnapraia.com%22%2C%22lucasmartins%2B562%40railsnapraia.com%22%2C%22lucasmartins%2B563%40railsnapraia.com%22%2C%22lucasmartins%2B564%40railsnapraia.com%22%2C%22lucasmartins%2B565%40railsnapraia.com%22%2C%22lucasmartins%2B566%40railsnapraia.com%22%2C%22lucasmartins%2B567%40railsnapraia.com%22%2C%22lucasmartins%2B568%40railsnapraia.com%22%2C%22lucasmartins%2B569%40railsnapraia.com%22%2C%22lucasmartins%2B570%40railsnapraia.com%22%2C%22lucasmartins%2B571%40railsnapraia.com%22%2C%22lucasmartins%2B572%40railsnapraia.com%22%2C%22lucasmartins%2B573%40railsnapraia.com%22%2C%22lucasmartins%2B574%40railsnapraia.com%22%2C%22lucasmartins%2B575%40railsnapraia.com%22%2C%22lucasmartins%2B576%40railsnapraia.com%22%2C%22lucasmartins%2B577%40railsnapraia.com%22%2C%22lucasmartins%2B578%40railsnapraia.com%22%2C%22lucasmartins%2B579%40railsnapraia.com%22%2C%22lucasmartins%2B580%40railsnapraia.com%22%2C%22lucasmartins%2B581%40railsnapraia.com%22%2C%22lucasmartins%2B582%40railsnapraia.com%22%2C%22lucasmartins%2B583%40railsnapraia.com%22%2C%22lucasmartins%2B584%40railsnapraia.com%22%2C%22lucasmartins%2B585%40railsnapraia.com%22%2C%22lucasmartins%2B586%40railsnapraia.com%22%2C%22lucasmartins%2B587%40railsnapraia.com%22%2C%22lucasmartins%2B588%40railsnapraia.com%22%2C%22lucasmartins%2B589%40railsnapraia.com%22%2C%22lucasmartins%2B590%40railsnapraia.com%22%2C%22lucasmartins%2B591%40railsnapraia.com%22%2C%22lucasmartins%2B592%40railsnapraia.com%22%2C%22lucasmartins%2B593%40railsnapraia.com%22%2C%22lucasmartins%2B594%40railsnapraia.com%22%2C%22lucasmartins%2B595%40railsnapraia.com%22%2C%22lucasmartins%2B596%40railsnapraia.com%22%2C%22lucasmartins%2B597%40railsnapraia.com%22%2C%22lucasmartins%2B598%40railsnapraia.com%22%2C%22lucasmartins%2B599%40railsnapraia.com%22%2C%22lucasmartins%2B600%40railsnapraia.com%22%2C%22lucasmartins%2B601%40railsnapraia.com%22%2C%22lucasmartins%2B602%40railsnapraia.com%22%2C%22lucasmartins%2B603%40railsnapraia.com%22%2C%22lucasmartins%2B604%40railsnapraia.com%22%2C%22lucasmartins%2B605%40railsnapraia.com%22%2C%22lucasmartins%2B606%40railsnapraia.com%22%2C%22lucasmartins%2B607%40railsnapraia.com%22%2C%22lucasmartins%2B608%40railsnapraia.com%22%2C%22lucasmartins%2B609%40railsnapraia.com%22%2C%22lucasmartins%2B610%40railsnapraia.com%22%2C%22lucasmartins%2B611%40railsnapraia.com%22%2C%22lucasmartins%2B612%40railsnapraia.com%22%2C%22lucasmartins%2B613%40railsnapraia.com%22%2C%22lucasmartins%2B614%40railsnapraia.com%22%2C%22lucasmartins%2B615%40railsnapraia.com%22%2C%22lucasmartins%2B616%40railsnapraia.com%22%2C%22lucasmartins%2B617%40railsnapraia.com%22%2C%22lucasmartins%2B618%40railsnapraia.com%22%2C%22lucasmartins%2B619%40railsnapraia.com%22%2C%22lucasmartins%2B620%40railsnapraia.com%22%2C%22lucasmartins%2B621%40railsnapraia.com%22%2C%22lucasmartins%2B622%40railsnapraia.com%22%2C%22lucasmartins%2B623%40railsnapraia.com%22%2C%22lucasmartins%2B624%40railsnapraia.com%22%2C%22lucasmartins%2B625%40railsnapraia.com%22%2C%22lucasmartins%2B626%40railsnapraia.com%22%2C%22lucasmartins%2B627%40railsnapraia.com%22%2C%22lucasmartins%2B628%40railsnapraia.com%22%2C%22lucasmartins%2B629%40railsnapraia.com%22%2C%22lucasmartins%2B630%40railsnapraia.com%22%2C%22lucasmartins%2B631%40railsnapraia.com%22%2C%22lucasmartins%2B632%40railsnapraia.com%22%2C%22lucasmartins%2B633%40railsnapraia.com%22%2C%22lucasmartins%2B634%40railsnapraia.com%22%2C%22lucasmartins%2B635%40railsnapraia.com%22%2C%22lucasmartins%2B636%40railsnapraia.com%22%2C%22lucasmartins%2B637%40railsnapraia.com%22%2C%22lucasmartins%2B638%40railsnapraia.com%22%2C%22lucasmartins%2B639%40railsnapraia.com%22%2C%22lucasmartins%2B640%40railsnapraia.com%22%2C%22lucasmartins%2B641%40railsnapraia.com%22%2C%22lucasmartins%2B642%40railsnapraia.com%22%2C%22lucasmartins%2B643%40railsnapraia.com%22%2C%22lucasmartins%2B644%40railsnapraia.com%22%2C%22lucasmartins%2B645%40railsnapraia.com%22%2C%22lucasmartins%2B646%40railsnapraia.com%22%2C%22lucasmartins%2B647%40railsnapraia.com%22%2C%22lucasmartins%2B648%40railsnapraia.com%22%2C%22lucasmartins%2B649%40railsnapraia.com%22%2C%22lucasmartins%2B650%40railsnapraia.com%22%2C%22lucasmartins%2B651%40railsnapraia.com%22%2C%22lucasmartins%2B652%40railsnapraia.com%22%2C%22lucasmartins%2B653%40railsnapraia.com%22%2C%22lucasmartins%2B654%40railsnapraia.com%22%2C%22lucasmartins%2B655%40railsnapraia.com%22%2C%22lucasmartins%2B656%40railsnapraia.com%22%2C%22lucasmartins%2B657%40railsnapraia.com%22%2C%22lucasmartins%2B658%40railsnapraia.com%22%2C%22lucasmartins%2B659%40railsnapraia.com%22%2C%22lucasmartins%2B660%40railsnapraia.com%22%2C%22lucasmartins%2B661%40railsnapraia.com%22%2C%22lucasmartins%2B662%40railsnapraia.com%22%2C%22lucasmartins%2B663%40railsnapraia.com%22%2C%22lucasmartins%2B664%40railsnapraia.com%22%2C%22lucasmartins%2B665%40railsnapraia.com%22%2C%22lucasmartins%2B666%40railsnapraia.com%22%2C%22lucasmartins%2B667%40railsnapraia.com%22%2C%22lucasmartins%2B668%40railsnapraia.com%22%2C%22lucasmartins%2B669%40railsnapraia.com%22%2C%22lucasmartins%2B670%40railsnapraia.com%22%2C%22lucasmartins%2B671%40railsnapraia.com%22%2C%22lucasmartins%2B672%40railsnapraia.com%22%2C%22lucasmartins%2B673%40railsnapraia.com%22%2C%22lucasmartins%2B674%40railsnapraia.com%22%2C%22lucasmartins%2B675%40railsnapraia.com%22%2C%22lucasmartins%2B676%40railsnapraia.com%22%2C%22lucasmartins%2B677%40railsnapraia.com%22%2C%22lucasmartins%2B678%40railsnapraia.com%22%2C%22lucasmartins%2B679%40railsnapraia.com%22%2C%22lucasmartins%2B680%40railsnapraia.com%22%2C%22lucasmartins%2B681%40railsnapraia.com%22%2C%22lucasmartins%2B682%40railsnapraia.com%22%2C%22lucasmartins%2B683%40railsnapraia.com%22%2C%22lucasmartins%2B684%40railsnapraia.com%22%2C%22lucasmartins%2B685%40railsnapraia.com%22%2C%22lucasmartins%2B686%40railsnapraia.com%22%2C%22lucasmartins%2B687%40railsnapraia.com%22%2C%22lucasmartins%2B688%40railsnapraia.com%22%2C%22lucasmartins%2B689%40railsnapraia.com%22%2C%22lucasmartins%2B690%40railsnapraia.com%22%2C%22lucasmartins%2B691%40railsnapraia.com%22%2C%22lucasmartins%2B692%40railsnapraia.com%22%2C%22lucasmartins%2B693%40railsnapraia.com%22%2C%22lucasmartins%2B694%40railsnapraia.com%22%2C%22lucasmartins%2B695%40railsnapraia.com%22%2C%22lucasmartins%2B696%40railsnapraia.com%22%2C%22lucasmartins%2B697%40railsnapraia.com%22%2C%22lucasmartins%2B698%40railsnapraia.com%22%2C%22lucasmartins%2B699%40railsnapraia.com%22%2C%22lucasmartins%2B700%40railsnapraia.com%22%2C%22lucasmartins%2B701%40railsnapraia.com%22%2C%22lucasmartins%2B702%40railsnapraia.com%22%2C%22lucasmartins%2B703%40railsnapraia.com%22%2C%22lucasmartins%2B704%40railsnapraia.com%22%2C%22lucasmartins%2B705%40railsnapraia.com%22%2C%22lucasmartins%2B706%40railsnapraia.com%22%2C%22lucasmartins%2B707%40railsnapraia.com%22%2C%22lucasmartins%2B708%40railsnapraia.com%22%2C%22lucasmartins%2B709%40railsnapraia.com%22%2C%22lucasmartins%2B710%40railsnapraia.com%22%2C%22lucasmartins%2B711%40railsnapraia.com%22%2C%22lucasmartins%2B712%40railsnapraia.com%22%2C%22lucasmartins%2B713%40railsnapraia.com%22%2C%22lucasmartins%2B714%40railsnapraia.com%22%2C%22lucasmartins%2B715%40railsnapraia.com%22%2C%22lucasmartins%2B716%40railsnapraia.com%22%2C%22lucasmartins%2B717%40railsnapraia.com%22%2C%22lucasmartins%2B718%40railsnapraia.com%22%2C%22lucasmartins%2B719%40railsnapraia.com%22%2C%22lucasmartins%2B720%40railsnapraia.com%22%2C%22lucasmartins%2B721%40railsnapraia.com%22%2C%22lucasmartins%2B722%40railsnapraia.com%22%2C%22lucasmartins%2B723%40railsnapraia.com%22%2C%22lucasmartins%2B724%40railsnapraia.com%22%2C%22lucasmartins%2B725%40railsnapraia.com%22%2C%22lucasmartins%2B726%40railsnapraia.com%22%2C%22lucasmartins%2B727%40railsnapraia.com%22%2C%22lucasmartins%2B728%40railsnapraia.com%22%2C%22lucasmartins%2B729%40railsnapraia.com%22%2C%22lucasmartins%2B730%40railsnapraia.com%22%2C%22lucasmartins%2B731%40railsnapraia.com%22%2C%22lucasmartins%2B732%40railsnapraia.com%22%2C%22lucasmartins%2B733%40railsnapraia.com%22%2C%22lucasmartins%2B734%40railsnapraia.com%22%2C%22lucasmartins%2B735%40railsnapraia.com%22%2C%22lucasmartins%2B736%40railsnapraia.com%22%2C%22lucasmartins%2B737%40railsnapraia.com%22%2C%22lucasmartins%2B738%40railsnapraia.com%22%2C%22lucasmartins%2B739%40railsnapraia.com%22%2C%22lucasmartins%2B740%40railsnapraia.com%22%2C%22lucasmartins%2B741%40railsnapraia.com%22%2C%22lucasmartins%2B742%40railsnapraia.com%22%2C%22lucasmartins%2B743%40railsnapraia.com%22%2C%22lucasmartins%2B744%40railsnapraia.com%22%2C%22lucasmartins%2B745%40railsnapraia.com%22%2C%22lucasmartins%2B746%40railsnapraia.com%22%2C%22lucasmartins%2B747%40railsnapraia.com%22%2C%22lucasmartins%2B748%40railsnapraia.com%22%2C%22lucasmartins%2B749%40railsnapraia.com%22%2C%22lucasmartins%2B750%40railsnapraia.com%22%2C%22lucasmartins%2B751%40railsnapraia.com%22%2C%22lucasmartins%2B752%40railsnapraia.com%22%2C%22lucasmartins%2B753%40railsnapraia.com%22%2C%22lucasmartins%2B754%40railsnapraia.com%22%2C%22lucasmartins%2B755%40railsnapraia.com%22%2C%22lucasmartins%2B756%40railsnapraia.com%22%2C%22lucasmartins%2B757%40railsnapraia.com%22%2C%22lucasmartins%2B758%40railsnapraia.com%22%2C%22lucasmartins%2B759%40railsnapraia.com%22%2C%22lucasmartins%2B760%40railsnapraia.com%22%2C%22lucasmartins%2B761%40railsnapraia.com%22%2C%22lucasmartins%2B762%40railsnapraia.com%22%2C%22lucasmartins%2B763%40railsnapraia.com%22%2C%22lucasmartins%2B764%40railsnapraia.com%22%2C%22lucasmartins%2B765%40railsnapraia.com%22%2C%22lucasmartins%2B766%40railsnapraia.com%22%2C%22lucasmartins%2B767%40railsnapraia.com%22%2C%22lucasmartins%2B768%40railsnapraia.com%22%2C%22lucasmartins%2B769%40railsnapraia.com%22%2C%22lucasmartins%2B770%40railsnapraia.com%22%2C%22lucasmartins%2B771%40railsnapraia.com%22%2C%22lucasmartins%2B772%40railsnapraia.com%22%2C%22lucasmartins%2B773%40railsnapraia.com%22%2C%22lucasmartins%2B774%40railsnapraia.com%22%2C%22lucasmartins%2B775%40railsnapraia.com%22%2C%22lucasmartins%2B776%40railsnapraia.com%22%2C%22lucasmartins%2B777%40railsnapraia.com%22%2C%22lucasmartins%2B778%40railsnapraia.com%22%2C%22lucasmartins%2B779%40railsnapraia.com%22%2C%22lucasmartins%2B780%40railsnapraia.com%22%2C%22lucasmartins%2B781%40railsnapraia.com%22%2C%22lucasmartins%2B782%40railsnapraia.com%22%2C%22lucasmartins%2B783%40railsnapraia.com%22%2C%22lucasmartins%2B784%40railsnapraia.com%22%2C%22lucasmartins%2B785%40railsnapraia.com%22%2C%22lucasmartins%2B786%40railsnapraia.com%22%2C%22lucasmartins%2B787%40railsnapraia.com%22%2C%22lucasmartins%2B788%40railsnapraia.com%22%2C%22lucasmartins%2B789%40railsnapraia.com%22%2C%22lucasmartins%2B790%40railsnapraia.com%22%2C%22lucasmartins%2B791%40railsnapraia.com%22%2C%22lucasmartins%2B792%40railsnapraia.com%22%2C%22lucasmartins%2B793%40railsnapraia.com%22%2C%22lucasmartins%2B794%40railsnapraia.com%22%2C%22lucasmartins%2B795%40railsnapraia.com%22%2C%22lucasmartins%2B796%40railsnapraia.com%22%2C%22lucasmartins%2B797%40railsnapraia.com%22%2C%22lucasmartins%2B798%40railsnapraia.com%22%2C%22lucasmartins%2B799%40railsnapraia.com%22%2C%22lucasmartins%2B800%40railsnapraia.com%22%2C%22lucasmartins%2B801%40railsnapraia.com%22%2C%22lucasmartins%2B802%40railsnapraia.com%22%2C%22lucasmartins%2B803%40railsnapraia.com%22%2C%22lucasmartins%2B804%40railsnapraia.com%22%2C%22lucasmartins%2B805%40railsnapraia.com%22%2C%22lucasmartins%2B806%40railsnapraia.com%22%2C%22lucasmartins%2B807%40railsnapraia.com%22%2C%22lucasmartins%2B808%40railsnapraia.com%22%2C%22lucasmartins%2B809%40railsnapraia.com%22%2C%22lucasmartins%2B810%40railsnapraia.com%22%2C%22lucasmartins%2B811%40railsnapraia.com%22%2C%22lucasmartins%2B812%40railsnapraia.com%22%2C%22lucasmartins%2B813%40railsnapraia.com%22%2C%22lucasmartins%2B814%40railsnapraia.com%22%2C%22lucasmartins%2B815%40railsnapraia.com%22%2C%22lucasmartins%2B816%40railsnapraia.com%22%2C%22lucasmartins%2B817%40railsnapraia.com%22%2C%22lucasmartins%2B818%40railsnapraia.com%22%2C%22lucasmartins%2B819%40railsnapraia.com%22%2C%22lucasmartins%2B820%40railsnapraia.com%22%2C%22lucasmartins%2B821%40railsnapraia.com%22%2C%22lucasmartins%2B822%40railsnapraia.com%22%2C%22lucasmartins%2B823%40railsnapraia.com%22%2C%22lucasmartins%2B824%40railsnapraia.com%22%2C%22lucasmartins%2B825%40railsnapraia.com%22%2C%22lucasmartins%2B826%40railsnapraia.com%22%2C%22lucasmartins%2B827%40railsnapraia.com%22%2C%22lucasmartins%2B828%40railsnapraia.com%22%2C%22lucasmartins%2B829%40railsnapraia.com%22%2C%22lucasmartins%2B830%40railsnapraia.com%22%2C%22lucasmartins%2B831%40railsnapraia.com%22%2C%22lucasmartins%2B832%40railsnapraia.com%22%2C%22lucasmartins%2B833%40railsnapraia.com%22%2C%22lucasmartins%2B834%40railsnapraia.com%22%2C%22lucasmartins%2B835%40railsnapraia.com%22%2C%22lucasmartins%2B836%40railsnapraia.com%22%2C%22lucasmartins%2B837%40railsnapraia.com%22%2C%22lucasmartins%2B838%40railsnapraia.com%22%2C%22lucasmartins%2B839%40railsnapraia.com%22%2C%22lucasmartins%2B840%40railsnapraia.com%22%2C%22lucasmartins%2B841%40railsnapraia.com%22%2C%22lucasmartins%2B842%40railsnapraia.com%22%2C%22lucasmartins%2B843%40railsnapraia.com%22%2C%22lucasmartins%2B844%40railsnapraia.com%22%2C%22lucasmartins%2B845%40railsnapraia.com%22%2C%22lucasmartins%2B846%40railsnapraia.com%22%2C%22lucasmartins%2B847%40railsnapraia.com%22%2C%22lucasmartins%2B848%40railsnapraia.com%22%2C%22lucasmartins%2B849%40railsnapraia.com%22%2C%22lucasmartins%2B850%40railsnapraia.com%22%2C%22lucasmartins%2B851%40railsnapraia.com%22%2C%22lucasmartins%2B852%40railsnapraia.com%22%2C%22lucasmartins%2B853%40railsnapraia.com%22%2C%22lucasmartins%2B854%40railsnapraia.com%22%2C%22lucasmartins%2B855%40railsnapraia.com%22%2C%22lucasmartins%2B856%40railsnapraia.com%22%2C%22lucasmartins%2B857%40railsnapraia.com%22%2C%22lucasmartins%2B858%40railsnapraia.com%22%2C%22lucasmartins%2B859%40railsnapraia.com%22%2C%22lucasmartins%2B860%40railsnapraia.com%22%2C%22lucasmartins%2B861%40railsnapraia.com%22%2C%22lucasmartins%2B862%40railsnapraia.com%22%2C%22lucasmartins%2B863%40railsnapraia.com%22%2C%22lucasmartins%2B864%40railsnapraia.com%22%2C%22lucasmartins%2B865%40railsnapraia.com%22%2C%22lucasmartins%2B866%40railsnapraia.com%22%2C%22lucasmartins%2B867%40railsnapraia.com%22%2C%22lucasmartins%2B868%40railsnapraia.com%22%2C%22lucasmartins%2B869%40railsnapraia.com%22%2C%22lucasmartins%2B870%40railsnapraia.com%22%2C%22lucasmartins%2B871%40railsnapraia.com%22%2C%22lucasmartins%2B872%40railsnapraia.com%22%2C%22lucasmartins%2B873%40railsnapraia.com%22%2C%22lucasmartins%2B874%40railsnapraia.com%22%2C%22lucasmartins%2B875%40railsnapraia.com%22%2C%22lucasmartins%2B876%40railsnapraia.com%22%2C%22lucasmartins%2B877%40railsnapraia.com%22%2C%22lucasmartins%2B878%40railsnapraia.com%22%2C%22lucasmartins%2B879%40railsnapraia.com%22%2C%22lucasmartins%2B880%40railsnapraia.com%22%2C%22lucasmartins%2B881%40railsnapraia.com%22%2C%22lucasmartins%2B882%40railsnapraia.com%22%2C%22lucasmartins%2B883%40railsnapraia.com%22%2C%22lucasmartins%2B884%40railsnapraia.com%22%2C%22lucasmartins%2B885%40railsnapraia.com%22%2C%22lucasmartins%2B886%40railsnapraia.com%22%2C%22lucasmartins%2B887%40railsnapraia.com%22%2C%22lucasmartins%2B888%40railsnapraia.com%22%2C%22lucasmartins%2B889%40railsnapraia.com%22%2C%22lucasmartins%2B890%40railsnapraia.com%22%2C%22lucasmartins%2B891%40railsnapraia.com%22%2C%22lucasmartins%2B892%40railsnapraia.com%22%2C%22lucasmartins%2B893%40railsnapraia.com%22%2C%22lucasmartins%2B894%40railsnapraia.com%22%2C%22lucasmartins%2B895%40railsnapraia.com%22%2C%22lucasmartins%2B896%40railsnapraia.com%22%2C%22lucasmartins%2B897%40railsnapraia.com%22%2C%22lucasmartins%2B898%40railsnapraia.com%22%2C%22lucasmartins%2B899%40railsnapraia.com%22%2C%22lucasmartins%2B900%40railsnapraia.com%22%2C%22lucasmartins%2B901%40railsnapraia.com%22%2C%22lucasmartins%2B902%40railsnapraia.com%22%2C%22lucasmartins%2B903%40railsnapraia.com%22%2C%22lucasmartins%2B904%40railsnapraia.com%22%2C%22lucasmartins%2B905%40railsnapraia.com%22%2C%22lucasmartins%2B906%40railsnapraia.com%22%2C%22lucasmartins%2B907%40railsnapraia.com%22%2C%22lucasmartins%2B908%40railsnapraia.com%22%2C%22lucasmartins%2B909%40railsnapraia.com%22%2C%22lucasmartins%2B910%40railsnapraia.com%22%2C%22lucasmartins%2B911%40railsnapraia.com%22%2C%22lucasmartins%2B912%40railsnapraia.com%22%2C%22lucasmartins%2B913%40railsnapraia.com%22%2C%22lucasmartins%2B914%40railsnapraia.com%22%2C%22lucasmartins%2B915%40railsnapraia.com%22%2C%22lucasmartins%2B916%40railsnapraia.com%22%2C%22lucasmartins%2B917%40railsnapraia.com%22%2C%22lucasmartins%2B918%40railsnapraia.com%22%2C%22lucasmartins%2B919%40railsnapraia.com%22%2C%22lucasmartins%2B920%40railsnapraia.com%22%2C%22lucasmartins%2B921%40railsnapraia.com%22%2C%22lucasmartins%2B922%40railsnapraia.com%22%2C%22lucasmartins%2B923%40railsnapraia.com%22%2C%22lucasmartins%2B924%40railsnapraia.com%22%2C%22lucasmartins%2B925%40railsnapraia.com%22%2C%22lucasmartins%2B926%40railsnapraia.com%22%2C%22lucasmartins%2B927%40railsnapraia.com%22%2C%22lucasmartins%2B928%40railsnapraia.com%22%2C%22lucasmartins%2B929%40railsnapraia.com%22%2C%22lucasmartins%2B930%40railsnapraia.com%22%2C%22lucasmartins%2B931%40railsnapraia.com%22%2C%22lucasmartins%2B932%40railsnapraia.com%22%2C%22lucasmartins%2B933%40railsnapraia.com%22%2C%22lucasmartins%2B934%40railsnapraia.com%22%2C%22lucasmartins%2B935%40railsnapraia.com%22%2C%22lucasmartins%2B936%40railsnapraia.com%22%2C%22lucasmartins%2B937%40railsnapraia.com%22%2C%22lucasmartins%2B938%40railsnapraia.com%22%2C%22lucasmartins%2B939%40railsnapraia.com%22%2C%22lucasmartins%2B940%40railsnapraia.com%22%2C%22lucasmartins%2B941%40railsnapraia.com%22%2C%22lucasmartins%2B942%40railsnapraia.com%22%2C%22lucasmartins%2B943%40railsnapraia.com%22%2C%22lucasmartins%2B944%40railsnapraia.com%22%2C%22lucasmartins%2B945%40railsnapraia.com%22%2C%22lucasmartins%2B946%40railsnapraia.com%22%2C%22lucasmartins%2B947%40railsnapraia.com%22%2C%22lucasmartins%2B948%40railsnapraia.com%22%2C%22lucasmartins%2B949%40railsnapraia.com%22%2C%22lucasmartins%2B950%40railsnapraia.com%22%2C%22lucasmartins%2B951%40railsnapraia.com%22%2C%22lucasmartins%2B952%40railsnapraia.com%22%2C%22lucasmartins%2B953%40railsnapraia.com%22%2C%22lucasmartins%2B954%40railsnapraia.com%22%2C%22lucasmartins%2B955%40railsnapraia.com%22%2C%22lucasmartins%2B956%40railsnapraia.com%22%2C%22lucasmartins%2B957%40railsnapraia.com%22%2C%22lucasmartins%2B958%40railsnapraia.com%22%2C%22lucasmartins%2B959%40railsnapraia.com%22%2C%22lucasmartins%2B960%40railsnapraia.com%22%2C%22lucasmartins%2B961%40railsnapraia.com%22%2C%22lucasmartins%2B962%40railsnapraia.com%22%2C%22lucasmartins%2B963%40railsnapraia.com%22%2C%22lucasmartins%2B964%40railsnapraia.com%22%2C%22lucasmartins%2B965%40railsnapraia.com%22%2C%22lucasmartins%2B966%40railsnapraia.com%22%2C%22lucasmartins%2B967%40railsnapraia.com%22%2C%22lucasmartins%2B968%40railsnapraia.com%22%2C%22lucasmartins%2B969%40railsnapraia.com%22%2C%22lucasmartins%2B970%40railsnapraia.com%22%2C%22lucasmartins%2B971%40railsnapraia.com%22%2C%22lucasmartins%2B972%40railsnapraia.com%22%2C%22lucasmartins%2B973%40railsnapraia.com%22%2C%22lucasmartins%2B974%40railsnapraia.com%22%2C%22lucasmartins%2B975%40railsnapraia.com%22%2C%22lucasmartins%2B976%40railsnapraia.com%22%2C%22lucasmartins%2B977%40railsnapraia.com%22%2C%22lucasmartins%2B978%40railsnapraia.com%22%2C%22lucasmartins%2B979%40railsnapraia.com%22%2C%22lucasmartins%2B980%40railsnapraia.com%22%2C%22lucasmartins%2B981%40railsnapraia.com%22%2C%22lucasmartins%2B982%40railsnapraia.com%22%2C%22lucasmartins%2B983%40railsnapraia.com%22%2C%22lucasmartins%2B984%40railsnapraia.com%22%2C%22lucasmartins%2B985%40railsnapraia.com%22%2C%22lucasmartins%2B986%40railsnapraia.com%22%2C%22lucasmartins%2B987%40railsnapraia.com%22%2C%22lucasmartins%2B988%40railsnapraia.com%22%2C%22lucasmartins%2B989%40railsnapraia.com%22%2C%22lucasmartins%2B990%40railsnapraia.com%22%2C%22lucasmartins%2B991%40railsnapraia.com%22%2C%22lucasmartins%2B992%40railsnapraia.com%22%2C%22lucasmartins%2B993%40railsnapraia.com%22%2C%22lucasmartins%2B994%40railsnapraia.com%22%2C%22lucasmartins%2B995%40railsnapraia.com%22%2C%22lucasmartins%2B996%40railsnapraia.com%22%2C%22lucasmartins%2B997%40railsnapraia.com%22%2C%22lucasmartins%2B998%40railsnapraia.com%22%2C%22lucasmartins%2B999%40railsnapraia.com%22%5D%2C%22sub%22%3A%7B%22%25name%25%22%3A%5B%22Lucas+Martins+0%22%2C%22Lucas+Martins+1%22%2C%22Lucas+Martins+2%22%2C%22Lucas+Martins+3%22%2C%22Lucas+Martins+4%22%2C%22Lucas+Martins+5%22%2C%22Lucas+Martins+6%22%2C%22Lucas+Martins+7%22%2C%22Lucas+Martins+8%22%2C%22Lucas+Martins+9%22%2C%22Lucas+Martins+10%22%2C%22Lucas+Martins+11%22%2C%22Lucas+Martins+12%22%2C%22Lucas+Martins+13%22%2C%22Lucas+Martins+14%22%2C%22Lucas+Martins+15%22%2C%22Lucas+Martins+16%22%2C%22Lucas+Martins+17%22%2C%22Lucas+Martins+18%22%2C%22Lucas+Martins+19%22%2C%22Lucas+Martins+20%22%2C%22Lucas+Martins+21%22%2C%22Lucas+Martins+22%22%2C%22Lucas+Martins+23%22%2C%22Lucas+Martins+24%22%2C%22Lucas+Martins+25%22%2C%22Lucas+Martins+26%22%2C%22Lucas+Martins+27%22%2C%22Lucas+Martins+28%22%2C%22Lucas+Martins+29%22%2C%22Lucas+Martins+30%22%2C%22Lucas+Martins+31%22%2C%22Lucas+Martins+32%22%2C%22Lucas+Martins+33%22%2C%22Lucas+Martins+34%22%2C%22Lucas+Martins+35%22%2C%22Lucas+Martins+36%22%2C%22Lucas+Martins+37%22%2C%22Lucas+Martins+38%22%2C%22Lucas+Martins+39%22%2C%22Lucas+Martins+40%22%2C%22Lucas+Martins+41%22%2C%22Lucas+Martins+42%22%2C%22Lucas+Martins+43%22%2C%22Lucas+Martins+44%22%2C%22Lucas+Martins+45%22%2C%22Lucas+Martins+46%22%2C%22Lucas+Martins+47%22%2C%22Lucas+Martins+48%22%2C%22Lucas+Martins+49%22%2C%22Lucas+Martins+50%22%2C%22Lucas+Martins+51%22%2C%22Lucas+Martins+52%22%2C%22Lucas+Martins+53%22%2C%22Lucas+Martins+54%22%2C%22Lucas+Martins+55%22%2C%22Lucas+Martins+56%22%2C%22Lucas+Martins+57%22%2C%22Lucas+Martins+58%22%2C%22Lucas+Martins+59%22%2C%22Lucas+Martins+60%22%2C%22Lucas+Martins+61%22%2C%22Lucas+Martins+62%22%2C%22Lucas+Martins+63%22%2C%22Lucas+Martins+64%22%2C%22Lucas+Martins+65%22%2C%22Lucas+Martins+66%22%2C%22Lucas+Martins+67%22%2C%22Lucas+Martins+68%22%2C%22Lucas+Martins+69%22%2C%22Lucas+Martins+70%22%2C%22Lucas+Martins+71%22%2C%22Lucas+Martins+72%22%2C%22Lucas+Martins+73%22%2C%22Lucas+Martins+74%22%2C%22Lucas+Martins+75%22%2C%22Lucas+Martins+76%22%2C%22Lucas+Martins+77%22%2C%22Lucas+Martins+78%22%2C%22Lucas+Martins+79%22%2C%22Lucas+Martins+80%22%2C%22Lucas+Martins+81%22%2C%22Lucas+Martins+82%22%2C%22Lucas+Martins+83%22%2C%22Lucas+Martins+84%22%2C%22Lucas+Martins+85%22%2C%22Lucas+Martins+86%22%2C%22Lucas+Martins+87%22%2C%22Lucas+Martins+88%22%2C%22Lucas+Martins+89%22%2C%22Lucas+Martins+90%22%2C%22Lucas+Martins+91%22%2C%22Lucas+Martins+92%22%2C%22Lucas+Martins+93%22%2C%22Lucas+Martins+94%22%2C%22Lucas+Martins+95%22%2C%22Lucas+Martins+96%22%2C%22Lucas+Martins+97%22%2C%22Lucas+Martins+98%22%2C%22Lucas+Martins+99%22%2C%22Lucas+Martins+100%22%2C%22Lucas+Martins+101%22%2C%22Lucas+Martins+102%22%2C%22Lucas+Martins+103%22%2C%22Lucas+Martins+104%22%2C%22Lucas+Martins+105%22%2C%22Lucas+Martins+106%22%2C%22Lucas+Martins+107%22%2C%22Lucas+Martins+108%22%2C%22Lucas+Martins+109%22%2C%22Lucas+Martins+110%22%2C%22Lucas+Martins+111%22%2C%22Lucas+Martins+112%22%2C%22Lucas+Martins+113%22%2C%22Lucas+Martins+114%22%2C%22Lucas+Martins+115%22%2C%22Lucas+Martins+116%22%2C%22Lucas+Martins+117%22%2C%22Lucas+Martins+118%22%2C%22Lucas+Martins+119%22%2C%22Lucas+Martins+120%22%2C%22Lucas+Martins+121%22%2C%22Lucas+Martins+122%22%2C%22Lucas+Martins+123%22%2C%22Lucas+Martins+124%22%2C%22Lucas+Martins+125%22%2C%22Lucas+Martins+126%22%2C%22Lucas+Martins+127%22%2C%22Lucas+Martins+128%22%2C%22Lucas+Martins+129%22%2C%22Lucas+Martins+130%22%2C%22Lucas+Martins+131%22%2C%22Lucas+Martins+132%22%2C%22Lucas+Martins+133%22%2C%22Lucas+Martins+134%22%2C%22Lucas+Martins+135%22%2C%22Lucas+Martins+136%22%2C%22Lucas+Martins+137%22%2C%22Lucas+Martins+138%22%2C%22Lucas+Martins+139%22%2C%22Lucas+Martins+140%22%2C%22Lucas+Martins+141%22%2C%22Lucas+Martins+142%22%2C%22Lucas+Martins+143%22%2C%22Lucas+Martins+144%22%2C%22Lucas+Martins+145%22%2C%22Lucas+Martins+146%22%2C%22Lucas+Martins+147%22%2C%22Lucas+Martins+148%22%2C%22Lucas+Martins+149%22%2C%22Lucas+Martins+150%22%2C%22Lucas+Martins+151%22%2C%22Lucas+Martins+152%22%2C%22Lucas+Martins+153%22%2C%22Lucas+Martins+154%22%2C%22Lucas+Martins+155%22%2C%22Lucas+Martins+156%22%2C%22Lucas+Martins+157%22%2C%22Lucas+Martins+158%22%2C%22Lucas+Martins+159%22%2C%22Lucas+Martins+160%22%2C%22Lucas+Martins+161%22%2C%22Lucas+Martins+162%22%2C%22Lucas+Martins+163%22%2C%22Lucas+Martins+164%22%2C%22Lucas+Martins+165%22%2C%22Lucas+Martins+166%22%2C%22Lucas+Martins+167%22%2C%22Lucas+Martins+168%22%2C%22Lucas+Martins+169%22%2C%22Lucas+Martins+170%22%2C%22Lucas+Martins+171%22%2C%22Lucas+Martins+172%22%2C%22Lucas+Martins+173%22%2C%22Lucas+Martins+174%22%2C%22Lucas+Martins+175%22%2C%22Lucas+Martins+176%22%2C%22Lucas+Martins+177%22%2C%22Lucas+Martins+178%22%2C%22Lucas+Martins+179%22%2C%22Lucas+Martins+180%22%2C%22Lucas+Martins+181%22%2C%22Lucas+Martins+182%22%2C%22Lucas+Martins+183%22%2C%22Lucas+Martins+184%22%2C%22Lucas+Martins+185%22%2C%22Lucas+Martins+186%22%2C%22Lucas+Martins+187%22%2C%22Lucas+Martins+188%22%2C%22Lucas+Martins+189%22%2C%22Lucas+Martins+190%22%2C%22Lucas+Martins+191%22%2C%22Lucas+Martins+192%22%2C%22Lucas+Martins+193%22%2C%22Lucas+Martins+194%22%2C%22Lucas+Martins+195%22%2C%22Lucas+Martins+196%22%2C%22Lucas+Martins+197%22%2C%22Lucas+Martins+198%22%2C%22Lucas+Martins+199%22%2C%22Lucas+Martins+200%22%2C%22Lucas+Martins+201%22%2C%22Lucas+Martins+202%22%2C%22Lucas+Martins+203%22%2C%22Lucas+Martins+204%22%2C%22Lucas+Martins+205%22%2C%22Lucas+Martins+206%22%2C%22Lucas+Martins+207%22%2C%22Lucas+Martins+208%22%2C%22Lucas+Martins+209%22%2C%22Lucas+Martins+210%22%2C%22Lucas+Martins+211%22%2C%22Lucas+Martins+212%22%2C%22Lucas+Martins+213%22%2C%22Lucas+Martins+214%22%2C%22Lucas+Martins+215%22%2C%22Lucas+Martins+216%22%2C%22Lucas+Martins+217%22%2C%22Lucas+Martins+218%22%2C%22Lucas+Martins+219%22%2C%22Lucas+Martins+220%22%2C%22Lucas+Martins+221%22%2C%22Lucas+Martins+222%22%2C%22Lucas+Martins+223%22%2C%22Lucas+Martins+224%22%2C%22Lucas+Martins+225%22%2C%22Lucas+Martins+226%22%2C%22Lucas+Martins+227%22%2C%22Lucas+Martins+228%22%2C%22Lucas+Martins+229%22%2C%22Lucas+Martins+230%22%2C%22Lucas+Martins+231%22%2C%22Lucas+Martins+232%22%2C%22Lucas+Martins+233%22%2C%22Lucas+Martins+234%22%2C%22Lucas+Martins+235%22%2C%22Lucas+Martins+236%22%2C%22Lucas+Martins+237%22%2C%22Lucas+Martins+238%22%2C%22Lucas+Martins+239%22%2C%22Lucas+Martins+240%22%2C%22Lucas+Martins+241%22%2C%22Lucas+Martins+242%22%2C%22Lucas+Martins+243%22%2C%22Lucas+Martins+244%22%2C%22Lucas+Martins+245%22%2C%22Lucas+Martins+246%22%2C%22Lucas+Martins+247%22%2C%22Lucas+Martins+248%22%2C%22Lucas+Martins+249%22%2C%22Lucas+Martins+250%22%2C%22Lucas+Martins+251%22%2C%22Lucas+Martins+252%22%2C%22Lucas+Martins+253%22%2C%22Lucas+Martins+254%22%2C%22Lucas+Martins+255%22%2C%22Lucas+Martins+256%22%2C%22Lucas+Martins+257%22%2C%22Lucas+Martins+258%22%2C%22Lucas+Martins+259%22%2C%22Lucas+Martins+260%22%2C%22Lucas+Martins+261%22%2C%22Lucas+Martins+262%22%2C%22Lucas+Martins+263%22%2C%22Lucas+Martins+264%22%2C%22Lucas+Martins+265%22%2C%22Lucas+Martins+266%22%2C%22Lucas+Martins+267%22%2C%22Lucas+Martins+268%22%2C%22Lucas+Martins+269%22%2C%22Lucas+Martins+270%22%2C%22Lucas+Martins+271%22%2C%22Lucas+Martins+272%22%2C%22Lucas+Martins+273%22%2C%22Lucas+Martins+274%22%2C%22Lucas+Martins+275%22%2C%22Lucas+Martins+276%22%2C%22Lucas+Martins+277%22%2C%22Lucas+Martins+278%22%2C%22Lucas+Martins+279%22%2C%22Lucas+Martins+280%22%2C%22Lucas+Martins+281%22%2C%22Lucas+Martins+282%22%2C%22Lucas+Martins+283%22%2C%22Lucas+Martins+284%22%2C%22Lucas+Martins+285%22%2C%22Lucas+Martins+286%22%2C%22Lucas+Martins+287%22%2C%22Lucas+Martins+288%22%2C%22Lucas+Martins+289%22%2C%22Lucas+Martins+290%22%2C%22Lucas+Martins+291%22%2C%22Lucas+Martins+292%22%2C%22Lucas+Martins+293%22%2C%22Lucas+Martins+294%22%2C%22Lucas+Martins+295%22%2C%22Lucas+Martins+296%22%2C%22Lucas+Martins+297%22%2C%22Lucas+Martins+298%22%2C%22Lucas+Martins+299%22%2C%22Lucas+Martins+300%22%2C%22Lucas+Martins+301%22%2C%22Lucas+Martins+302%22%2C%22Lucas+Martins+303%22%2C%22Lucas+Martins+304%22%2C%22Lucas+Martins+305%22%2C%22Lucas+Martins+306%22%2C%22Lucas+Martins+307%22%2C%22Lucas+Martins+308%22%2C%22Lucas+Martins+309%22%2C%22Lucas+Martins+310%22%2C%22Lucas+Martins+311%22%2C%22Lucas+Martins+312%22%2C%22Lucas+Martins+313%22%2C%22Lucas+Martins+314%22%2C%22Lucas+Martins+315%22%2C%22Lucas+Martins+316%22%2C%22Lucas+Martins+317%22%2C%22Lucas+Martins+318%22%2C%22Lucas+Martins+319%22%2C%22Lucas+Martins+320%22%2C%22Lucas+Martins+321%22%2C%22Lucas+Martins+322%22%2C%22Lucas+Martins+323%22%2C%22Lucas+Martins+324%22%2C%22Lucas+Martins+325%22%2C%22Lucas+Martins+326%22%2C%22Lucas+Martins+327%22%2C%22Lucas+Martins+328%22%2C%22Lucas+Martins+329%22%2C%22Lucas+Martins+330%22%2C%22Lucas+Martins+331%22%2C%22Lucas+Martins+332%22%2C%22Lucas+Martins+333%22%2C%22Lucas+Martins+334%22%2C%22Lucas+Martins+335%22%2C%22Lucas+Martins+336%22%2C%22Lucas+Martins+337%22%2C%22Lucas+Martins+338%22%2C%22Lucas+Martins+339%22%2C%22Lucas+Martins+340%22%2C%22Lucas+Martins+341%22%2C%22Lucas+Martins+342%22%2C%22Lucas+Martins+343%22%2C%22Lucas+Martins+344%22%2C%22Lucas+Martins+345%22%2C%22Lucas+Martins+346%22%2C%22Lucas+Martins+347%22%2C%22Lucas+Martins+348%22%2C%22Lucas+Martins+349%22%2C%22Lucas+Martins+350%22%2C%22Lucas+Martins+351%22%2C%22Lucas+Martins+352%22%2C%22Lucas+Martins+353%22%2C%22Lucas+Martins+354%22%2C%22Lucas+Martins+355%22%2C%22Lucas+Martins+356%22%2C%22Lucas+Martins+357%22%2C%22Lucas+Martins+358%22%2C%22Lucas+Martins+359%22%2C%22Lucas+Martins+360%22%2C%22Lucas+Martins+361%22%2C%22Lucas+Martins+362%22%2C%22Lucas+Martins+363%22%2C%22Lucas+Martins+364%22%2C%22Lucas+Martins+365%22%2C%22Lucas+Martins+366%22%2C%22Lucas+Martins+367%22%2C%22Lucas+Martins+368%22%2C%22Lucas+Martins+369%22%2C%22Lucas+Martins+370%22%2C%22Lucas+Martins+371%22%2C%22Lucas+Martins+372%22%2C%22Lucas+Martins+373%22%2C%22Lucas+Martins+374%22%2C%22Lucas+Martins+375%22%2C%22Lucas+Martins+376%22%2C%22Lucas+Martins+377%22%2C%22Lucas+Martins+378%22%2C%22Lucas+Martins+379%22%2C%22Lucas+Martins+380%22%2C%22Lucas+Martins+381%22%2C%22Lucas+Martins+382%22%2C%22Lucas+Martins+383%22%2C%22Lucas+Martins+384%22%2C%22Lucas+Martins+385%22%2C%22Lucas+Martins+386%22%2C%22Lucas+Martins+387%22%2C%22Lucas+Martins+388%22%2C%22Lucas+Martins+389%22%2C%22Lucas+Martins+390%22%2C%22Lucas+Martins+391%22%2C%22Lucas+Martins+392%22%2C%22Lucas+Martins+393%22%2C%22Lucas+Martins+394%22%2C%22Lucas+Martins+395%22%2C%22Lucas+Martins+396%22%2C%22Lucas+Martins+397%22%2C%22Lucas+Martins+398%22%2C%22Lucas+Martins+399%22%2C%22Lucas+Martins+400%22%2C%22Lucas+Martins+401%22%2C%22Lucas+Martins+402%22%2C%22Lucas+Martins+403%22%2C%22Lucas+Martins+404%22%2C%22Lucas+Martins+405%22%2C%22Lucas+Martins+406%22%2C%22Lucas+Martins+407%22%2C%22Lucas+Martins+408%22%2C%22Lucas+Martins+409%22%2C%22Lucas+Martins+410%22%2C%22Lucas+Martins+411%22%2C%22Lucas+Martins+412%22%2C%22Lucas+Martins+413%22%2C%22Lucas+Martins+414%22%2C%22Lucas+Martins+415%22%2C%22Lucas+Martins+416%22%2C%22Lucas+Martins+417%22%2C%22Lucas+Martins+418%22%2C%22Lucas+Martins+419%22%2C%22Lucas+Martins+420%22%2C%22Lucas+Martins+421%22%2C%22Lucas+Martins+422%22%2C%22Lucas+Martins+423%22%2C%22Lucas+Martins+424%22%2C%22Lucas+Martins+425%22%2C%22Lucas+Martins+426%22%2C%22Lucas+Martins+427%22%2C%22Lucas+Martins+428%22%2C%22Lucas+Martins+429%22%2C%22Lucas+Martins+430%22%2C%22Lucas+Martins+431%22%2C%22Lucas+Martins+432%22%2C%22Lucas+Martins+433%22%2C%22Lucas+Martins+434%22%2C%22Lucas+Martins+435%22%2C%22Lucas+Martins+436%22%2C%22Lucas+Martins+437%22%2C%22Lucas+Martins+438%22%2C%22Lucas+Martins+439%22%2C%22Lucas+Martins+440%22%2C%22Lucas+Martins+441%22%2C%22Lucas+Martins+442%22%2C%22Lucas+Martins+443%22%2C%22Lucas+Martins+444%22%2C%22Lucas+Martins+445%22%2C%22Lucas+Martins+446%22%2C%22Lucas+Martins+447%22%2C%22Lucas+Martins+448%22%2C%22Lucas+Martins+449%22%2C%22Lucas+Martins+450%22%2C%22Lucas+Martins+451%22%2C%22Lucas+Martins+452%22%2C%22Lucas+Martins+453%22%2C%22Lucas+Martins+454%22%2C%22Lucas+Martins+455%22%2C%22Lucas+Martins+456%22%2C%22Lucas+Martins+457%22%2C%22Lucas+Martins+458%22%2C%22Lucas+Martins+459%22%2C%22Lucas+Martins+460%22%2C%22Lucas+Martins+461%22%2C%22Lucas+Martins+462%22%2C%22Lucas+Martins+463%22%2C%22Lucas+Martins+464%22%2C%22Lucas+Martins+465%22%2C%22Lucas+Martins+466%22%2C%22Lucas+Martins+467%22%2C%22Lucas+Martins+468%22%2C%22Lucas+Martins+469%22%2C%22Lucas+Martins+470%22%2C%22Lucas+Martins+471%22%2C%22Lucas+Martins+472%22%2C%22Lucas+Martins+473%22%2C%22Lucas+Martins+474%22%2C%22Lucas+Martins+475%22%2C%22Lucas+Martins+476%22%2C%22Lucas+Martins+477%22%2C%22Lucas+Martins+478%22%2C%22Lucas+Martins+479%22%2C%22Lucas+Martins+480%22%2C%22Lucas+Martins+481%22%2C%22Lucas+Martins+482%22%2C%22Lucas+Martins+483%22%2C%22Lucas+Martins+484%22%2C%22Lucas+Martins+485%22%2C%22Lucas+Martins+486%22%2C%22Lucas+Martins+487%22%2C%22Lucas+Martins+488%22%2C%22Lucas+Martins+489%22%2C%22Lucas+Martins+490%22%2C%22Lucas+Martins+491%22%2C%22Lucas+Martins+492%22%2C%22Lucas+Martins+493%22%2C%22Lucas+Martins+494%22%2C%22Lucas+Martins+495%22%2C%22Lucas+Martins+496%22%2C%22Lucas+Martins+497%22%2C%22Lucas+Martins+498%22%2C%22Lucas+Martins+499%22%2C%22Lucas+Martins+500%22%2C%22Lucas+Martins+501%22%2C%22Lucas+Martins+502%22%2C%22Lucas+Martins+503%22%2C%22Lucas+Martins+504%22%2C%22Lucas+Martins+505%22%2C%22Lucas+Martins+506%22%2C%22Lucas+Martins+507%22%2C%22Lucas+Martins+508%22%2C%22Lucas+Martins+509%22%2C%22Lucas+Martins+510%22%2C%22Lucas+Martins+511%22%2C%22Lucas+Martins+512%22%2C%22Lucas+Martins+513%22%2C%22Lucas+Martins+514%22%2C%22Lucas+Martins+515%22%2C%22Lucas+Martins+516%22%2C%22Lucas+Martins+517%22%2C%22Lucas+Martins+518%22%2C%22Lucas+Martins+519%22%2C%22Lucas+Martins+520%22%2C%22Lucas+Martins+521%22%2C%22Lucas+Martins+522%22%2C%22Lucas+Martins+523%22%2C%22Lucas+Martins+524%22%2C%22Lucas+Martins+525%22%2C%22Lucas+Martins+526%22%2C%22Lucas+Martins+527%22%2C%22Lucas+Martins+528%22%2C%22Lucas+Martins+529%22%2C%22Lucas+Martins+530%22%2C%22Lucas+Martins+531%22%2C%22Lucas+Martins+532%22%2C%22Lucas+Martins+533%22%2C%22Lucas+Martins+534%22%2C%22Lucas+Martins+535%22%2C%22Lucas+Martins+536%22%2C%22Lucas+Martins+537%22%2C%22Lucas+Martins+538%22%2C%22Lucas+Martins+539%22%2C%22Lucas+Martins+540%22%2C%22Lucas+Martins+541%22%2C%22Lucas+Martins+542%22%2C%22Lucas+Martins+543%22%2C%22Lucas+Martins+544%22%2C%22Lucas+Martins+545%22%2C%22Lucas+Martins+546%22%2C%22Lucas+Martins+547%22%2C%22Lucas+Martins+548%22%2C%22Lucas+Martins+549%22%2C%22Lucas+Martins+550%22%2C%22Lucas+Martins+551%22%2C%22Lucas+Martins+552%22%2C%22Lucas+Martins+553%22%2C%22Lucas+Martins+554%22%2C%22Lucas+Martins+555%22%2C%22Lucas+Martins+556%22%2C%22Lucas+Martins+557%22%2C%22Lucas+Martins+558%22%2C%22Lucas+Martins+559%22%2C%22Lucas+Martins+560%22%2C%22Lucas+Martins+561%22%2C%22Lucas+Martins+562%22%2C%22Lucas+Martins+563%22%2C%22Lucas+Martins+564%22%2C%22Lucas+Martins+565%22%2C%22Lucas+Martins+566%22%2C%22Lucas+Martins+567%22%2C%22Lucas+Martins+568%22%2C%22Lucas+Martins+569%22%2C%22Lucas+Martins+570%22%2C%22Lucas+Martins+571%22%2C%22Lucas+Martins+572%22%2C%22Lucas+Martins+573%22%2C%22Lucas+Martins+574%22%2C%22Lucas+Martins+575%22%2C%22Lucas+Martins+576%22%2C%22Lucas+Martins+577%22%2C%22Lucas+Martins+578%22%2C%22Lucas+Martins+579%22%2C%22Lucas+Martins+580%22%2C%22Lucas+Martins+581%22%2C%22Lucas+Martins+582%22%2C%22Lucas+Martins+583%22%2C%22Lucas+Martins+584%22%2C%22Lucas+Martins+585%22%2C%22Lucas+Martins+586%22%2C%22Lucas+Martins+587%22%2C%22Lucas+Martins+588%22%2C%22Lucas+Martins+589%22%2C%22Lucas+Martins+590%22%2C%22Lucas+Martins+591%22%2C%22Lucas+Martins+592%22%2C%22Lucas+Martins+593%22%2C%22Lucas+Martins+594%22%2C%22Lucas+Martins+595%22%2C%22Lucas+Martins+596%22%2C%22Lucas+Martins+597%22%2C%22Lucas+Martins+598%22%2C%22Lucas+Martins+599%22%2C%22Lucas+Martins+600%22%2C%22Lucas+Martins+601%22%2C%22Lucas+Martins+602%22%2C%22Lucas+Martins+603%22%2C%22Lucas+Martins+604%22%2C%22Lucas+Martins+605%22%2C%22Lucas+Martins+606%22%2C%22Lucas+Martins+607%22%2C%22Lucas+Martins+608%22%2C%22Lucas+Martins+609%22%2C%22Lucas+Martins+610%22%2C%22Lucas+Martins+611%22%2C%22Lucas+Martins+612%22%2C%22Lucas+Martins+613%22%2C%22Lucas+Martins+614%22%2C%22Lucas+Martins+615%22%2C%22Lucas+Martins+616%22%2C%22Lucas+Martins+617%22%2C%22Lucas+Martins+618%22%2C%22Lucas+Martins+619%22%2C%22Lucas+Martins+620%22%2C%22Lucas+Martins+621%22%2C%22Lucas+Martins+622%22%2C%22Lucas+Martins+623%22%2C%22Lucas+Martins+624%22%2C%22Lucas+Martins+625%22%2C%22Lucas+Martins+626%22%2C%22Lucas+Martins+627%22%2C%22Lucas+Martins+628%22%2C%22Lucas+Martins+629%22%2C%22Lucas+Martins+630%22%2C%22Lucas+Martins+631%22%2C%22Lucas+Martins+632%22%2C%22Lucas+Martins+633%22%2C%22Lucas+Martins+634%22%2C%22Lucas+Martins+635%22%2C%22Lucas+Martins+636%22%2C%22Lucas+Martins+637%22%2C%22Lucas+Martins+638%22%2C%22Lucas+Martins+639%22%2C%22Lucas+Martins+640%22%2C%22Lucas+Martins+641%22%2C%22Lucas+Martins+642%22%2C%22Lucas+Martins+643%22%2C%22Lucas+Martins+644%22%2C%22Lucas+Martins+645%22%2C%22Lucas+Martins+646%22%2C%22Lucas+Martins+647%22%2C%22Lucas+Martins+648%22%2C%22Lucas+Martins+649%22%2C%22Lucas+Martins+650%22%2C%22Lucas+Martins+651%22%2C%22Lucas+Martins+652%22%2C%22Lucas+Martins+653%22%2C%22Lucas+Martins+654%22%2C%22Lucas+Martins+655%22%2C%22Lucas+Martins+656%22%2C%22Lucas+Martins+657%22%2C%22Lucas+Martins+658%22%2C%22Lucas+Martins+659%22%2C%22Lucas+Martins+660%22%2C%22Lucas+Martins+661%22%2C%22Lucas+Martins+662%22%2C%22Lucas+Martins+663%22%2C%22Lucas+Martins+664%22%2C%22Lucas+Martins+665%22%2C%22Lucas+Martins+666%22%2C%22Lucas+Martins+667%22%2C%22Lucas+Martins+668%22%2C%22Lucas+Martins+669%22%2C%22Lucas+Martins+670%22%2C%22Lucas+Martins+671%22%2C%22Lucas+Martins+672%22%2C%22Lucas+Martins+673%22%2C%22Lucas+Martins+674%22%2C%22Lucas+Martins+675%22%2C%22Lucas+Martins+676%22%2C%22Lucas+Martins+677%22%2C%22Lucas+Martins+678%22%2C%22Lucas+Martins+679%22%2C%22Lucas+Martins+680%22%2C%22Lucas+Martins+681%22%2C%22Lucas+Martins+682%22%2C%22Lucas+Martins+683%22%2C%22Lucas+Martins+684%22%2C%22Lucas+Martins+685%22%2C%22Lucas+Martins+686%22%2C%22Lucas+Martins+687%22%2C%22Lucas+Martins+688%22%2C%22Lucas+Martins+689%22%2C%22Lucas+Martins+690%22%2C%22Lucas+Martins+691%22%2C%22Lucas+Martins+692%22%2C%22Lucas+Martins+693%22%2C%22Lucas+Martins+694%22%2C%22Lucas+Martins+695%22%2C%22Lucas+Martins+696%22%2C%22Lucas+Martins+697%22%2C%22Lucas+Martins+698%22%2C%22Lucas+Martins+699%22%2C%22Lucas+Martins+700%22%2C%22Lucas+Martins+701%22%2C%22Lucas+Martins+702%22%2C%22Lucas+Martins+703%22%2C%22Lucas+Martins+704%22%2C%22Lucas+Martins+705%22%2C%22Lucas+Martins+706%22%2C%22Lucas+Martins+707%22%2C%22Lucas+Martins+708%22%2C%22Lucas+Martins+709%22%2C%22Lucas+Martins+710%22%2C%22Lucas+Martins+711%22%2C%22Lucas+Martins+712%22%2C%22Lucas+Martins+713%22%2C%22Lucas+Martins+714%22%2C%22Lucas+Martins+715%22%2C%22Lucas+Martins+716%22%2C%22Lucas+Martins+717%22%2C%22Lucas+Martins+718%22%2C%22Lucas+Martins+719%22%2C%22Lucas+Martins+720%22%2C%22Lucas+Martins+721%22%2C%22Lucas+Martins+722%22%2C%22Lucas+Martins+723%22%2C%22Lucas+Martins+724%22%2C%22Lucas+Martins+725%22%2C%22Lucas+Martins+726%22%2C%22Lucas+Martins+727%22%2C%22Lucas+Martins+728%22%2C%22Lucas+Martins+729%22%2C%22Lucas+Martins+730%22%2C%22Lucas+Martins+731%22%2C%22Lucas+Martins+732%22%2C%22Lucas+Martins+733%22%2C%22Lucas+Martins+734%22%2C%22Lucas+Martins+735%22%2C%22Lucas+Martins+736%22%2C%22Lucas+Martins+737%22%2C%22Lucas+Martins+738%22%2C%22Lucas+Martins+739%22%2C%22Lucas+Martins+740%22%2C%22Lucas+Martins+741%22%2C%22Lucas+Martins+742%22%2C%22Lucas+Martins+743%22%2C%22Lucas+Martins+744%22%2C%22Lucas+Martins+745%22%2C%22Lucas+Martins+746%22%2C%22Lucas+Martins+747%22%2C%22Lucas+Martins+748%22%2C%22Lucas+Martins+749%22%2C%22Lucas+Martins+750%22%2C%22Lucas+Martins+751%22%2C%22Lucas+Martins+752%22%2C%22Lucas+Martins+753%22%2C%22Lucas+Martins+754%22%2C%22Lucas+Martins+755%22%2C%22Lucas+Martins+756%22%2C%22Lucas+Martins+757%22%2C%22Lucas+Martins+758%22%2C%22Lucas+Martins+759%22%2C%22Lucas+Martins+760%22%2C%22Lucas+Martins+761%22%2C%22Lucas+Martins+762%22%2C%22Lucas+Martins+763%22%2C%22Lucas+Martins+764%22%2C%22Lucas+Martins+765%22%2C%22Lucas+Martins+766%22%2C%22Lucas+Martins+767%22%2C%22Lucas+Martins+768%22%2C%22Lucas+Martins+769%22%2C%22Lucas+Martins+770%22%2C%22Lucas+Martins+771%22%2C%22Lucas+Martins+772%22%2C%22Lucas+Martins+773%22%2C%22Lucas+Martins+774%22%2C%22Lucas+Martins+775%22%2C%22Lucas+Martins+776%22%2C%22Lucas+Martins+777%22%2C%22Lucas+Martins+778%22%2C%22Lucas+Martins+779%22%2C%22Lucas+Martins+780%22%2C%22Lucas+Martins+781%22%2C%22Lucas+Martins+782%22%2C%22Lucas+Martins+783%22%2C%22Lucas+Martins+784%22%2C%22Lucas+Martins+785%22%2C%22Lucas+Martins+786%22%2C%22Lucas+Martins+787%22%2C%22Lucas+Martins+788%22%2C%22Lucas+Martins+789%22%2C%22Lucas+Martins+790%22%2C%22Lucas+Martins+791%22%2C%22Lucas+Martins+792%22%2C%22Lucas+Martins+793%22%2C%22Lucas+Martins+794%22%2C%22Lucas+Martins+795%22%2C%22Lucas+Martins+796%22%2C%22Lucas+Martins+797%22%2C%22Lucas+Martins+798%22%2C%22Lucas+Martins+799%22%2C%22Lucas+Martins+800%22%2C%22Lucas+Martins+801%22%2C%22Lucas+Martins+802%22%2C%22Lucas+Martins+803%22%2C%22Lucas+Martins+804%22%2C%22Lucas+Martins+805%22%2C%22Lucas+Martins+806%22%2C%22Lucas+Martins+807%22%2C%22Lucas+Martins+808%22%2C%22Lucas+Martins+809%22%2C%22Lucas+Martins+810%22%2C%22Lucas+Martins+811%22%2C%22Lucas+Martins+812%22%2C%22Lucas+Martins+813%22%2C%22Lucas+Martins+814%22%2C%22Lucas+Martins+815%22%2C%22Lucas+Martins+816%22%2C%22Lucas+Martins+817%22%2C%22Lucas+Martins+818%22%2C%22Lucas+Martins+819%22%2C%22Lucas+Martins+820%22%2C%22Lucas+Martins+821%22%2C%22Lucas+Martins+822%22%2C%22Lucas+Martins+823%22%2C%22Lucas+Martins+824%22%2C%22Lucas+Martins+825%22%2C%22Lucas+Martins+826%22%2C%22Lucas+Martins+827%22%2C%22Lucas+Martins+828%22%2C%22Lucas+Martins+829%22%2C%22Lucas+Martins+830%22%2C%22Lucas+Martins+831%22%2C%22Lucas+Martins+832%22%2C%22Lucas+Martins+833%22%2C%22Lucas+Martins+834%22%2C%22Lucas+Martins+835%22%2C%22Lucas+Martins+836%22%2C%22Lucas+Martins+837%22%2C%22Lucas+Martins+838%22%2C%22Lucas+Martins+839%22%2C%22Lucas+Martins+840%22%2C%22Lucas+Martins+841%22%2C%22Lucas+Martins+842%22%2C%22Lucas+Martins+843%22%2C%22Lucas+Martins+844%22%2C%22Lucas+Martins+845%22%2C%22Lucas+Martins+846%22%2C%22Lucas+Martins+847%22%2C%22Lucas+Martins+848%22%2C%22Lucas+Martins+849%22%2C%22Lucas+Martins+850%22%2C%22Lucas+Martins+851%22%2C%22Lucas+Martins+852%22%2C%22Lucas+Martins+853%22%2C%22Lucas+Martins+854%22%2C%22Lucas+Martins+855%22%2C%22Lucas+Martins+856%22%2C%22Lucas+Martins+857%22%2C%22Lucas+Martins+858%22%2C%22Lucas+Martins+859%22%2C%22Lucas+Martins+860%22%2C%22Lucas+Martins+861%22%2C%22Lucas+Martins+862%22%2C%22Lucas+Martins+863%22%2C%22Lucas+Martins+864%22%2C%22Lucas+Martins+865%22%2C%22Lucas+Martins+866%22%2C%22Lucas+Martins+867%22%2C%22Lucas+Martins+868%22%2C%22Lucas+Martins+869%22%2C%22Lucas+Martins+870%22%2C%22Lucas+Martins+871%22%2C%22Lucas+Martins+872%22%2C%22Lucas+Martins+873%22%2C%22Lucas+Martins+874%22%2C%22Lucas+Martins+875%22%2C%22Lucas+Martins+876%22%2C%22Lucas+Martins+877%22%2C%22Lucas+Martins+878%22%2C%22Lucas+Martins+879%22%2C%22Lucas+Martins+880%22%2C%22Lucas+Martins+881%22%2C%22Lucas+Martins+882%22%2C%22Lucas+Martins+883%22%2C%22Lucas+Martins+884%22%2C%22Lucas+Martins+885%22%2C%22Lucas+Martins+886%22%2C%22Lucas+Martins+887%22%2C%22Lucas+Martins+888%22%2C%22Lucas+Martins+889%22%2C%22Lucas+Martins+890%22%2C%22Lucas+Martins+891%22%2C%22Lucas+Martins+892%22%2C%22Lucas+Martins+893%22%2C%22Lucas+Martins+894%22%2C%22Lucas+Martins+895%22%2C%22Lucas+Martins+896%22%2C%22Lucas+Martins+897%22%2C%22Lucas+Martins+898%22%2C%22Lucas+Martins+899%22%2C%22Lucas+Martins+900%22%2C%22Lucas+Martins+901%22%2C%22Lucas+Martins+902%22%2C%22Lucas+Martins+903%22%2C%22Lucas+Martins+904%22%2C%22Lucas+Martins+905%22%2C%22Lucas+Martins+906%22%2C%22Lucas+Martins+907%22%2C%22Lucas+Martins+908%22%2C%22Lucas+Martins+909%22%2C%22Lucas+Martins+910%22%2C%22Lucas+Martins+911%22%2C%22Lucas+Martins+912%22%2C%22Lucas+Martins+913%22%2C%22Lucas+Martins+914%22%2C%22Lucas+Martins+915%22%2C%22Lucas+Martins+916%22%2C%22Lucas+Martins+917%22%2C%22Lucas+Martins+918%22%2C%22Lucas+Martins+919%22%2C%22Lucas+Martins+920%22%2C%22Lucas+Martins+921%22%2C%22Lucas+Martins+922%22%2C%22Lucas+Martins+923%22%2C%22Lucas+Martins+924%22%2C%22Lucas+Martins+925%22%2C%22Lucas+Martins+926%22%2C%22Lucas+Martins+927%22%2C%22Lucas+Martins+928%22%2C%22Lucas+Martins+929%22%2C%22Lucas+Martins+930%22%2C%22Lucas+Martins+931%22%2C%22Lucas+Martins+932%22%2C%22Lucas+Martins+933%22%2C%22Lucas+Martins+934%22%2C%22Lucas+Martins+935%22%2C%22Lucas+Martins+936%22%2C%22Lucas+Martins+937%22%2C%22Lucas+Martins+938%22%2C%22Lucas+Martins+939%22%2C%22Lucas+Martins+940%22%2C%22Lucas+Martins+941%22%2C%22Lucas+Martins+942%22%2C%22Lucas+Martins+943%22%2C%22Lucas+Martins+944%22%2C%22Lucas+Martins+945%22%2C%22Lucas+Martins+946%22%2C%22Lucas+Martins+947%22%2C%22Lucas+Martins+948%22%2C%22Lucas+Martins+949%22%2C%22Lucas+Martins+950%22%2C%22Lucas+Martins+951%22%2C%22Lucas+Martins+952%22%2C%22Lucas+Martins+953%22%2C%22Lucas+Martins+954%22%2C%22Lucas+Martins+955%22%2C%22Lucas+Martins+956%22%2C%22Lucas+Martins+957%22%2C%22Lucas+Martins+958%22%2C%22Lucas+Martins+959%22%2C%22Lucas+Martins+960%22%2C%22Lucas+Martins+961%22%2C%22Lucas+Martins+962%22%2C%22Lucas+Martins+963%22%2C%22Lucas+Martins+964%22%2C%22Lucas+Martins+965%22%2C%22Lucas+Martins+966%22%2C%22Lucas+Martins+967%22%2C%22Lucas+Martins+968%22%2C%22Lucas+Martins+969%22%2C%22Lucas+Martins+970%22%2C%22Lucas+Martins+971%22%2C%22Lucas+Martins+972%22%2C%22Lucas+Martins+973%22%2C%22Lucas+Martins+974%22%2C%22Lucas+Martins+975%22%2C%22Lucas+Martins+976%22%2C%22Lucas+Martins+977%22%2C%22Lucas+Martins+978%22%2C%22Lucas+Martins+979%22%2C%22Lucas+Martins+980%22%2C%22Lucas+Martins+981%22%2C%22Lucas+Martins+982%22%2C%22Lucas+Martins+983%22%2C%22Lucas+Martins+984%22%2C%22Lucas+Martins+985%22%2C%22Lucas+Martins+986%22%2C%22Lucas+Martins+987%22%2C%22Lucas+Martins+988%22%2C%22Lucas+Martins+989%22%2C%22Lucas+Martins+990%22%2C%22Lucas+Martins+991%22%2C%22Lucas+Martins+992%22%2C%22Lucas+Martins+993%22%2C%22Lucas+Martins+994%22%2C%22Lucas+Martins+995%22%2C%22Lucas+Martins+996%22%2C%22Lucas+Martins+997%22%2C%22Lucas+Martins+998%22%2C%22Lucas+Martins+999%22%5D%7D%7D
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.8
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - nginx/1.4.2
23
+ Date:
24
+ - Tue, 07 Jan 2014 16:17:43 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: UTF-8
33
+ string: '{"message":"success"}'
34
+ http_version:
35
+ recorded_at: Tue, 07 Jan 2014 16:17:18 GMT
36
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,10 @@
1
+ require "spec_helper"
2
+
3
+ describe "shoot 1k emails!" do
4
+ let(:envelope) { build(:envelope_multi_1k) }
5
+ it "sends http request for Sendgrid web API" do
6
+ VCR.use_cassette('mailcannon_integration_1k') do
7
+ expect(envelope.send_bulk!).to eq({"message"=>"success"})
8
+ end
9
+ end
10
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe MailCannon::Adapter::Sendgrid do
3
+ describe MailCannon::Adapter::SendgridWeb do
4
4
  describe "#send!" do
5
5
  let(:envelope) { build(:envelope) }
6
6
  it "sends http request for Sendgrid web API" do
@@ -15,5 +15,13 @@ describe MailCannon::Adapter::Sendgrid do
15
15
  end
16
16
  end
17
17
  end
18
- end
19
18
 
19
+ describe "#send_bulk!" do
20
+ let(:envelope) { build(:envelope_multi) }
21
+ it "sends http request for Sendgrid web API" do
22
+ VCR.use_cassette('mailcannon_adapter_sendgrid_send_bulk') do
23
+ expect(envelope.send_bulk!).to eq({"message"=>"success"})
24
+ end
25
+ end
26
+ end
27
+ end
@@ -4,7 +4,7 @@ describe MailCannon::Envelope do
4
4
  describe "initialize" do
5
5
  let(:envelope) { build(:envelope) }
6
6
  it "creates a new Stamp" do
7
- expect{ envelope.save }.to change{MailCannon::Stamp.count}.by(1)
7
+ expect{ envelope.save }.to change{envelope.stamps.size}.by(1)
8
8
  end
9
9
  context "check for expected adapter behavior" do
10
10
  it "implements send! behavior" do
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,15 @@ require 'vcr'
11
11
  require 'webmock'
12
12
  require 'webmock/rspec'
13
13
 
14
+ if ENV['TRAVIS']==true
15
+ begin
16
+ require 'coveralls'
17
+ Coveralls.wear!
18
+ rescue Exception => e
19
+ puts "Coveralls not available!"
20
+ end
21
+ end
22
+
14
23
  SPECDIR = Pathname.new(File.dirname(__FILE__))
15
24
  TMPDIR = SPECDIR.join("tmp")
16
25
 
@@ -42,7 +51,7 @@ end
42
51
  VCR.configure do |c|
43
52
  c.cassette_library_dir = 'spec/fixtures/cassettes'
44
53
  c.hook_into :webmock
45
- c.allow_http_connections_when_no_cassette = false
54
+ c.allow_http_connections_when_no_cassette = true
46
55
  end
47
56
 
48
- Mongoid.load!("spec/support/mongoid.yml", ENV['RACK_ENV'])
57
+ Mongoid.load!("spec/support/mongoid.yml", 'test')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailcannon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Martins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-15 00:00:00.000000000 Z
11
+ date: 2014-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vcr
@@ -156,7 +156,21 @@ dependencies:
156
156
  - - '>='
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
- description: Parking Gem name
159
+ - !ruby/object:Gem::Dependency
160
+ name: yard
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ description: A mass mailing tool for real threads aficionados
160
174
  email:
161
175
  - lucasmartins@railsnapraia.com
162
176
  executables: []
@@ -167,10 +181,12 @@ files:
167
181
  - .rspec
168
182
  - .ruby-version
169
183
  - .travis.yml
184
+ - .yardopts
170
185
  - Gemfile
171
186
  - Gemfile.lock
172
187
  - Rakefile
173
188
  - Readme.md
189
+ - ReadmeContributors.md
174
190
  - config/locales/en.yml
175
191
  - config/locales/pt-BR.yml
176
192
  - env.sample.sh
@@ -178,20 +194,21 @@ files:
178
194
  - lib/generators/highrise_mapper/config_generator.rb
179
195
  - lib/mailcannon.rb
180
196
  - lib/mailcannon/adapter.rb
181
- - lib/mailcannon/adapters/sendgrid.rb
197
+ - lib/mailcannon/adapters/sendgrid_web.rb
182
198
  - lib/mailcannon/envelope.rb
183
199
  - lib/mailcannon/event.rb
184
200
  - lib/mailcannon/mail.rb
185
201
  - lib/mailcannon/stamp.rb
186
202
  - lib/mailcannon/version.rb
187
- - lib/mailcannon/workers/multi_barrel.rb
188
- - lib/mailcannon/workers/single_barrel.rb
203
+ - lib/mailcannon/workers/barrel.rb
189
204
  - mailcannon.gemspec
190
205
  - spec/factories/envelope.rb
191
- - spec/factories/mail.rb
192
206
  - spec/factories/stamp.rb
193
207
  - spec/fixtures/cassettes/mailcannon_adapter_sendgrid.send.yml
194
208
  - spec/fixtures/cassettes/mailcannon_adapter_sendgrid_send.yml
209
+ - spec/fixtures/cassettes/mailcannon_adapter_sendgrid_send_bulk.yml
210
+ - spec/fixtures/cassettes/mailcannon_integration_1k.yml
211
+ - spec/integration/1k_spec.rb
195
212
  - spec/mailcannon/adapters/sendgrid_spec.rb
196
213
  - spec/mailcannon/envelope_spec.rb
197
214
  - spec/mailcannon/stamp_spec.rb
@@ -223,16 +240,19 @@ rubyforge_project:
223
240
  rubygems_version: 2.0.14
224
241
  signing_key:
225
242
  specification_version: 4
226
- summary: Parking Gem name
243
+ summary: A mass mailing tool for real threads aficionados
227
244
  test_files:
228
245
  - spec/factories/envelope.rb
229
- - spec/factories/mail.rb
230
246
  - spec/factories/stamp.rb
231
247
  - spec/fixtures/cassettes/mailcannon_adapter_sendgrid.send.yml
232
248
  - spec/fixtures/cassettes/mailcannon_adapter_sendgrid_send.yml
249
+ - spec/fixtures/cassettes/mailcannon_adapter_sendgrid_send_bulk.yml
250
+ - spec/fixtures/cassettes/mailcannon_integration_1k.yml
251
+ - spec/integration/1k_spec.rb
233
252
  - spec/mailcannon/adapters/sendgrid_spec.rb
234
253
  - spec/mailcannon/envelope_spec.rb
235
254
  - spec/mailcannon/stamp_spec.rb
236
255
  - spec/mailcannon_spec.rb
237
256
  - spec/spec_helper.rb
238
257
  - spec/support/mongoid.yml
258
+ has_rdoc:
@@ -1,44 +0,0 @@
1
- module MailCannon::Adapter
2
- module Sendgrid
3
- include MailCannon::Adapter
4
- module InstanceMethods
5
- def send!
6
- raise 'Invalid Document!' unless self.valid?
7
- response = send_single_email
8
- self.after_sent(successfully_sent?(response))
9
- return response
10
- end
11
- end
12
-
13
- def self.included(receiver)
14
- receiver.send :include, InstanceMethods
15
- end
16
-
17
- private
18
- def api_client
19
- client = SendGridWebApi::Client.new(ENV['SENDGRID_USERNAME'], ENV['SENDGRID_PASSWORD'])
20
- end
21
-
22
- def send_single_email
23
- api_client.mail.send(
24
- :to => self.to,
25
- :toname => self.to_name,
26
- :subject => self.subject,
27
- :text => self.mail.text,
28
- :html => self.mail.html,
29
- :from => self.from,
30
- :fromname => self.from_name,
31
- :bcc => self.bcc,
32
- :replyto => self.reply_to
33
- )
34
- end
35
-
36
- def successfully_sent?(response)
37
- if response['message']=='success'
38
- true
39
- else
40
- false
41
- end
42
- end
43
- end
44
- end
@@ -1,11 +0,0 @@
1
- class MailCannon::MultiBarrel
2
- include Sidekiq::Worker
3
-
4
- def perform
5
- raise 'Worker unavailable!'
6
- # search pending emails in the db
7
- # build the xsmtpapi Hash
8
- # bulk_send!
9
- # callbacks
10
- end
11
- end
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :mail, class: MailCannon::Mail do
3
- text "If you can't read the HTML content, you're screwed!"
4
- html "<html><body><p>You should see what happens when your email client can't read HTML content.</p></body></html>"
5
- end
6
- end