├── .env.example
├── spec
├── .ruby_version
├── dummy
│ ├── log
│ │ └── .keep
│ ├── app
│ │ ├── mailers
│ │ │ └── .keep
│ │ ├── models
│ │ │ ├── .keep
│ │ │ └── concerns
│ │ │ │ └── .keep
│ │ ├── assets
│ │ │ ├── images
│ │ │ │ └── .keep
│ │ │ ├── javascripts
│ │ │ │ └── application.js
│ │ │ └── stylesheets
│ │ │ │ └── application.css
│ │ ├── controllers
│ │ │ ├── concerns
│ │ │ │ └── .keep
│ │ │ └── application_controller.rb
│ │ ├── helpers
│ │ │ └── application_helper.rb
│ │ └── views
│ │ │ └── layouts
│ │ │ └── application.html.erb
│ ├── lib
│ │ └── assets
│ │ │ └── .keep
│ ├── public
│ │ └── favicon.ico
│ ├── .env.example
│ ├── Procfile
│ ├── bin
│ │ ├── rake
│ │ ├── bundle
│ │ ├── rails
│ │ └── setup
│ ├── config
│ │ ├── routes.rb
│ │ ├── initializers
│ │ │ ├── cookies_serializer.rb
│ │ │ ├── session_store.rb
│ │ │ ├── mime_types.rb
│ │ │ ├── filter_parameter_logging.rb
│ │ │ ├── chaskiq.rb
│ │ │ ├── backtrace_silencers.rb
│ │ │ ├── assets.rb
│ │ │ ├── wrap_parameters.rb
│ │ │ └── inflections.rb
│ │ ├── environment.rb
│ │ ├── boot.rb
│ │ ├── rainbows.rb
│ │ ├── locales
│ │ │ └── en.yml
│ │ ├── secrets.yml
│ │ ├── application.rb
│ │ └── database.yml
│ ├── config.ru
│ ├── Rakefile
│ └── README.rdoc
├── rails_helper.rb
├── fixtures
│ └── csv_example.csv
├── models
│ └── chaskiq
│ │ ├── metric_spec.rb
│ │ ├── template_spec.rb
│ │ ├── attachment_spec.rb
│ │ ├── setting_spec.rb
│ │ ├── list_spec.rb
│ │ ├── subscriber_spec.rb
│ │ └── subscription_spec.rb
├── controllers
│ └── chaskiq
│ │ ├── dashboard_controller_spec.rb
│ │ ├── manage
│ │ ├── lists_controller_spec.rb
│ │ ├── metrics_controller_spec.rb
│ │ ├── templates_controller_spec.rb
│ │ ├── attachments_controller_spec.rb
│ │ ├── campaign_wizard_controller_spec.rb
│ │ └── campaigns_controller_spec.rb
│ │ ├── campaigns_controller_spec.rb
│ │ └── tracks_controller_spec.rb
├── mailers
│ └── previews
│ │ └── chaskiq
│ │ └── campaign_mailer_preview.rb
├── factories
│ ├── chaskiq_metrics.rb
│ ├── chaskiq_settings.rb
│ ├── chaskiq_templates.rb
│ ├── chaskiq_subscriptions.rb
│ ├── chaskiq_lists.rb
│ ├── chaskiq_attachments.rb
│ ├── chaskiq_subscribers.rb
│ └── chaskiq_campaigns.rb
├── helpers
│ └── chaskiq
│ │ ├── hooks_helper_spec.rb
│ │ ├── tracks_helper_spec.rb
│ │ ├── campaigns_helper_spec.rb
│ │ ├── dashboard_helper_spec.rb
│ │ ├── subscribers_helper_spec.rb
│ │ └── manage
│ │ ├── lists_helper_spec.rb
│ │ ├── metrics_helper_spec.rb
│ │ ├── campaigns_helper_spec.rb
│ │ ├── templates_helper_spec.rb
│ │ ├── attachments_helper_spec.rb
│ │ └── campain_wizard_helper_spec.rb
└── lib
│ ├── csv_importer_spec.rb
│ ├── config_spec.rb
│ └── link_renamer_spec.rb
├── app
├── assets
│ ├── images
│ │ └── chaskiq
│ │ │ ├── .keep
│ │ │ ├── track.gif
│ │ │ └── blocks_sprite.png
│ ├── stylesheets
│ │ └── chaskiq
│ │ │ ├── dashboard.css
│ │ │ ├── manage
│ │ │ ├── campaigns.css
│ │ │ ├── lists.css
│ │ │ ├── metrics.css
│ │ │ ├── attachments.css
│ │ │ └── templates.css
│ │ │ ├── style.css.scss
│ │ │ ├── base
│ │ │ ├── typography.scss
│ │ │ └── variables.scss
│ │ │ └── application.css
│ └── javascripts
│ │ └── chaskiq
│ │ ├── manage
│ │ ├── lists.js
│ │ ├── metrics.js
│ │ ├── attachments.js
│ │ ├── campaigns.js
│ │ ├── templates.js
│ │ └── helpers.js.coffee
│ │ └── iframe.js
├── views
│ ├── chaskiq
│ │ ├── campaigns
│ │ │ ├── forward.html.haml
│ │ │ ├── unsubscribe.html.haml
│ │ │ ├── show.haml
│ │ │ └── subscribe.html.haml
│ │ ├── campaign_mailer
│ │ │ ├── newsletter.haml
│ │ │ └── _subscription_links.haml
│ │ ├── manage
│ │ │ ├── attachments
│ │ │ │ ├── create.json.haml
│ │ │ │ └── _menu.haml
│ │ │ ├── templates
│ │ │ │ ├── show.haml
│ │ │ │ ├── edit.haml
│ │ │ │ ├── new.haml
│ │ │ │ ├── _menu.haml
│ │ │ │ ├── _form.haml
│ │ │ │ └── index.haml
│ │ │ ├── metrics
│ │ │ │ ├── index.js.haml
│ │ │ │ └── _metric.haml
│ │ │ ├── campaigns
│ │ │ │ ├── preview.haml
│ │ │ │ ├── premailer_preview.haml
│ │ │ │ ├── iframe.haml
│ │ │ │ ├── new.haml
│ │ │ │ ├── _config_actions.haml
│ │ │ │ └── _actions.haml
│ │ │ ├── lists
│ │ │ │ ├── _menu.haml
│ │ │ │ ├── _subscriber_fields.haml
│ │ │ │ ├── new.haml
│ │ │ │ ├── edit.haml
│ │ │ │ └── _form.haml
│ │ │ └── campaign_wizard
│ │ │ │ ├── _wizard_nav.haml
│ │ │ │ ├── _menu.haml
│ │ │ │ ├── _wizard_steps.haml
│ │ │ │ ├── list.haml
│ │ │ │ └── template.haml
│ │ └── subscribers
│ │ │ ├── _form.haml
│ │ │ ├── delete.haml
│ │ │ ├── edit.haml
│ │ │ └── new.html.haml
│ ├── layouts
│ │ ├── mailer.html.erb
│ │ ├── mailer.text.erb
│ │ └── chaskiq
│ │ │ ├── _footer.haml
│ │ │ ├── _topnavbar.html.haml
│ │ │ └── empty.html.haml
│ ├── shared
│ │ ├── _flashes.haml
│ │ ├── _main_nav.haml
│ │ ├── _account_stats.haml
│ │ ├── _modal.haml
│ │ └── _menu.haml
│ └── kaminari
│ │ └── twitter-bootstrap-3
│ │ ├── _gap.html.erb
│ │ ├── _first_page.html.erb
│ │ ├── _next_page.html.erb
│ │ ├── _prev_page.html.erb
│ │ ├── _page.html.erb
│ │ ├── _last_page.html.erb
│ │ └── _paginator.html.erb
├── helpers
│ └── chaskiq
│ │ ├── hooks_helper.rb
│ │ ├── tracks_helper.rb
│ │ ├── dashboard_helper.rb
│ │ ├── campaigns_helper.rb
│ │ ├── manage
│ │ ├── lists_helper.rb
│ │ ├── metrics_helper.rb
│ │ ├── templates_helper.rb
│ │ ├── attachments_helper.rb
│ │ ├── campain_wizard_helper.rb
│ │ └── campaigns_helper.rb
│ │ ├── subscribers_helper.rb
│ │ └── application_helper.rb
├── models
│ └── chaskiq
│ │ ├── setting.rb
│ │ ├── attachment.rb
│ │ ├── template.rb
│ │ ├── metric.rb
│ │ ├── subscriber.rb
│ │ └── subscription.rb
├── controllers
│ └── chaskiq
│ │ ├── lists_controller.rb
│ │ ├── campaigns_controller.rb
│ │ ├── application_controller.rb
│ │ ├── dashboard_controller.rb
│ │ ├── manage
│ │ ├── metrics_controller.rb
│ │ ├── campaign_wizard_controller.rb
│ │ ├── templates_controller.rb
│ │ └── attachments_controller.rb
│ │ └── tracks_controller.rb
├── jobs
│ └── chaskiq
│ │ ├── list_importer_job.rb
│ │ ├── mail_sender_job.rb
│ │ ├── ses_sender_job.rb
│ │ └── sns_receiver_job.rb
├── mailers
│ ├── application_mailer.rb
│ └── chaskiq
│ │ └── campaign_mailer.rb
└── inputs
│ └── date_time_picker_input.rb
├── vendor
└── assets
│ ├── javascripts
│ ├── .keep
│ ├── jquery-ui
│ │ ├── images
│ │ │ ├── animated-overlay.gif
│ │ │ ├── ui-icons_222222_256x240.png
│ │ │ ├── ui-icons_2e83ff_256x240.png
│ │ │ ├── ui-icons_454545_256x240.png
│ │ │ ├── ui-icons_888888_256x240.png
│ │ │ ├── ui-icons_cd0a0a_256x240.png
│ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png
│ │ │ ├── ui-bg_flat_75_ffffff_40x100.png
│ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png
│ │ │ ├── ui-bg_glass_65_ffffff_1x400.png
│ │ │ ├── ui-bg_glass_75_dadada_1x400.png
│ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png
│ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png
│ │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png
│ │ └── i18n
│ │ │ ├── jquery.ui.datepicker-ko.min.js
│ │ │ ├── jquery.ui.datepicker-ja.min.js
│ │ │ ├── jquery.ui.datepicker-zh-CN.min.js
│ │ │ ├── jquery.ui.datepicker-zh-HK.min.js
│ │ │ ├── jquery.ui.datepicker-zh-TW.min.js
│ │ │ ├── jquery.ui.datepicker-fa.min.js
│ │ │ ├── jquery.ui.datepicker-he.min.js
│ │ │ ├── jquery.ui.datepicker-tr.min.js
│ │ │ ├── jquery.ui.datepicker-tj.min.js
│ │ │ ├── jquery.ui.datepicker-az.min.js
│ │ │ ├── jquery.ui.datepicker-ca.min.js
│ │ │ ├── jquery.ui.datepicker-cs.min.js
│ │ │ ├── jquery.ui.datepicker-es.min.js
│ │ │ ├── jquery.ui.datepicker-sr.min.js
│ │ │ ├── jquery.ui.datepicker-bs.min.js
│ │ │ ├── jquery.ui.datepicker-da.min.js
│ │ │ ├── jquery.ui.datepicker-gl.min.js
│ │ │ ├── jquery.ui.datepicker-hi.min.js
│ │ │ ├── jquery.ui.datepicker-id.min.js
│ │ │ ├── jquery.ui.datepicker-km.min.js
│ │ │ ├── jquery.ui.datepicker-ky.min.js
│ │ │ ├── jquery.ui.datepicker-mk.min.js
│ │ │ ├── jquery.ui.datepicker-ms.min.js
│ │ │ ├── jquery.ui.datepicker-nl.min.js
│ │ │ ├── jquery.ui.datepicker-nn.min.js
│ │ │ ├── jquery.ui.datepicker-sq.min.js
│ │ │ ├── jquery.ui.datepicker-sv.min.js
│ │ │ ├── jquery.ui.datepicker-de.min.js
│ │ │ ├── jquery.ui.datepicker-eo.min.js
│ │ │ ├── jquery.ui.datepicker-hu.min.js
│ │ │ ├── jquery.ui.datepicker-nb.min.js
│ │ │ ├── jquery.ui.datepicker-no.min.js
│ │ │ ├── jquery.ui.datepicker-ar.min.js
│ │ │ ├── jquery.ui.datepicker-en-AU.min.js
│ │ │ ├── jquery.ui.datepicker-en-GB.min.js
│ │ │ ├── jquery.ui.datepicker-en-NZ.min.js
│ │ │ ├── jquery.ui.datepicker-kk.min.js
│ │ │ ├── jquery.ui.datepicker-lb.min.js
│ │ │ ├── jquery.ui.datepicker-ru.min.js
│ │ │ ├── jquery.ui.datepicker-sr-SR.min.js
│ │ │ ├── jquery.ui.datepicker-af.min.js
│ │ │ ├── jquery.ui.datepicker-hr.min.js
│ │ │ ├── jquery.ui.datepicker-it.min.js
│ │ │ ├── jquery.ui.datepicker-nl-BE.min.js
│ │ │ ├── jquery.ui.datepicker-uk.min.js
│ │ │ ├── jquery.ui.datepicker-sk.min.js
│ │ │ ├── jquery.ui.datepicker-sl.min.js
│ │ │ ├── jquery.ui.datepicker-fo.min.js
│ │ │ ├── jquery.ui.datepicker-fr.min.js
│ │ │ ├── jquery.ui.datepicker-pl.min.js
│ │ │ ├── jquery.ui.datepicker-be.min.js
│ │ │ ├── jquery.ui.datepicker-cy-GB.min.js
│ │ │ ├── jquery.ui.datepicker-lv.min.js
│ │ │ ├── jquery.ui.datepicker-ml.min.js
│ │ │ ├── jquery.ui.datepicker-rm.min.js
│ │ │ ├── jquery.ui.datepicker-bg.min.js
│ │ │ ├── jquery.ui.datepicker-et.min.js
│ │ │ ├── jquery.ui.datepicker-eu.min.js
│ │ │ ├── jquery.ui.datepicker-fr-CH.min.js
│ │ │ ├── jquery.ui.datepicker-is.min.js
│ │ │ ├── jquery.ui.datepicker-pt.min.js
│ │ │ ├── jquery.ui.datepicker-ro.min.js
│ │ │ ├── jquery.ui.datepicker-th.min.js
│ │ │ ├── jquery.ui.datepicker-fr-CA.min.js
│ │ │ ├── jquery.ui.datepicker-hy.min.js
│ │ │ ├── jquery.ui.datepicker-ka.min.js
│ │ │ ├── jquery.ui.datepicker-ar-DZ.min.js
│ │ │ ├── jquery.ui.datepicker-el.min.js
│ │ │ ├── jquery.ui.datepicker-fi.min.js
│ │ │ ├── jquery.ui.datepicker-lt.min.js
│ │ │ ├── jquery.ui.datepicker-pt-BR.min.js
│ │ │ ├── jquery.ui.datepicker-ta.min.js
│ │ │ └── jquery.ui.datepicker-vi.min.js
│ └── codemirror
│ │ └── mode
│ │ ├── tiddlywiki
│ │ └── tiddlywiki.css
│ │ ├── ruby
│ │ └── test.js
│ │ ├── tiki
│ │ └── tiki.css
│ │ └── diff
│ │ └── diff.js
│ ├── images
│ ├── sort.png
│ ├── green.png
│ ├── green@2x.png
│ ├── sort_asc.png
│ ├── sort_desc.png
│ ├── spritemap.png
│ ├── chosen-sprite.png
│ ├── spritemap@2x.png
│ ├── animated-overlay.gif
│ ├── chosen-sprite@2x.png
│ ├── sprite-skin-flat.png
│ ├── sprite-skin-nice.png
│ ├── blueimp
│ │ └── img
│ │ │ ├── error.png
│ │ │ ├── loading.gif
│ │ │ ├── play-pause.png
│ │ │ ├── video-play.png
│ │ │ ├── video-play.svg
│ │ │ ├── error.svg
│ │ │ └── play-pause.svg
│ ├── sprite-skin-flat2.png
│ ├── sprite-skin-simple.png
│ ├── images
│ │ ├── animated-overlay.gif
│ │ ├── ui-icons_222222_256x240.png
│ │ ├── ui-icons_2e83ff_256x240.png
│ │ ├── ui-icons_454545_256x240.png
│ │ ├── ui-icons_888888_256x240.png
│ │ ├── ui-icons_cd0a0a_256x240.png
│ │ ├── ui-bg_flat_0_aaaaaa_40x100.png
│ │ ├── ui-bg_flat_75_ffffff_40x100.png
│ │ ├── ui-bg_glass_55_fbf9ee_1x400.png
│ │ ├── ui-bg_glass_65_ffffff_1x400.png
│ │ ├── ui-bg_glass_75_dadada_1x400.png
│ │ ├── ui-bg_glass_75_e6e6e6_1x400.png
│ │ ├── ui-bg_glass_95_fef1ec_1x400.png
│ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png
│ └── bootstrap-colorpicker
│ │ ├── hue.png
│ │ ├── alpha.png
│ │ ├── saturation.png
│ │ ├── hue-horizontal.png
│ │ └── alpha-horizontal.png
│ └── stylesheets
│ └── codemirror
│ └── elegant.css
├── .rspec
├── lib
├── chaskiq
│ ├── version.rb
│ ├── csv_importer.rb
│ ├── engine.rb
│ └── link_renamer.rb
├── generators
│ └── chaskiq
│ │ ├── templates
│ │ └── chaskiq.rb.erb
│ │ └── install_generator.rb
├── tasks
│ └── chaskiq_tasks.rake
└── chaskiq.rb
├── chaskiq-admin.png
├── .travis.yml
├── db
└── migrate
│ ├── 20150331022602_add_css_to_campaign.rb
│ ├── 20150331025829_add_css_to_chaskiq_template.rb
│ ├── 20150318021239_create_chaskiq_templates.rb
│ ├── 20150321205815_create_chaskiq_settings.rb
│ ├── 20150318021424_create_chaskiq_lists.rb
│ ├── 20150318022506_create_chaskiq_subscribers.rb
│ ├── 20150318023136_create_chaskiq_attachments.rb
│ ├── 20150320031404_create_chaskiq_metrics.rb
│ ├── 20150402201729_create_chaskiq_subscriptions.rb
│ └── 20150318021006_create_chaskiq_campaigns.rb
├── .gitignore
├── config
├── initializers
│ └── kaminari_config.rb
└── routes.rb
├── bin
└── rails
├── TODO.md
├── Gemfile
├── Rakefile
└── MIT-LICENSE
/.env.example:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/.ruby_version:
--------------------------------------------------------------------------------
1 | 2.1.0
--------------------------------------------------------------------------------
/spec/dummy/log/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/app/mailers/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/app/models/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/lib/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/images/chaskiq/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/app/assets/images/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/app/models/concerns/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/dummy/app/controllers/concerns/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.rspec:
--------------------------------------------------------------------------------
1 | --color
2 | --require spec_helper
3 |
--------------------------------------------------------------------------------
/app/views/chaskiq/campaigns/forward.html.haml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/spec/rails_helper.rb:
--------------------------------------------------------------------------------
1 | require "spec_helper.rb"
--------------------------------------------------------------------------------
/app/views/chaskiq/campaigns/unsubscribe.html.haml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.html.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
2 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.text.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
2 |
--------------------------------------------------------------------------------
/app/views/chaskiq/campaign_mailer/newsletter.haml:
--------------------------------------------------------------------------------
1 | = @body
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/attachments/create.json.haml:
--------------------------------------------------------------------------------
1 | = @campaign.to_json
--------------------------------------------------------------------------------
/lib/chaskiq/version.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | VERSION = "0.0.6"
3 | end
4 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/show.haml:
--------------------------------------------------------------------------------
1 |
2 | = render "menu"
3 |
4 |
--------------------------------------------------------------------------------
/spec/dummy/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/hooks_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module HooksHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/edit.haml:
--------------------------------------------------------------------------------
1 | = render "menu"
2 |
3 | = render partial: "form"
4 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/new.haml:
--------------------------------------------------------------------------------
1 |
2 | = render "menu"
3 |
4 | = render partial: "form"
--------------------------------------------------------------------------------
/app/helpers/chaskiq/tracks_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module TracksHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/chaskiq-admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/chaskiq-admin.png
--------------------------------------------------------------------------------
/spec/dummy/.env.example:
--------------------------------------------------------------------------------
1 | FOG_ACCESS_KEY_ID="xxxx"
2 | FOG_SECRET_ACCESS_KEY="xxx"
3 | FOG_BUCKET="xxx"
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: ruby
2 |
3 | script: bundle exec rspec
4 |
5 | rvm:
6 | - 1.9.3
7 | - 2.0.0
8 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/dashboard_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module DashboardHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/campaigns_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module CampaignsHelper
3 |
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/lists_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::ListsHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/subscribers_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module SubscribersHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/metrics_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::MetricsHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/templates_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::TemplatesHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/vendor/assets/images/sort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sort.png
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/attachments_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::AttachmentsHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/spec/dummy/Procfile:
--------------------------------------------------------------------------------
1 | worker: bundle exec sidekiq -q default -q mailers
2 | web: bundle exec rainbows -c config/rainbows.rb -p 3000
--------------------------------------------------------------------------------
/spec/dummy/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require_relative '../config/boot'
3 | require 'rake'
4 | Rake.application.run
5 |
--------------------------------------------------------------------------------
/vendor/assets/images/green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/green.png
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/campain_wizard_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::CampainWizardHelper
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/vendor/assets/images/green@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/green@2x.png
--------------------------------------------------------------------------------
/vendor/assets/images/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sort_asc.png
--------------------------------------------------------------------------------
/vendor/assets/images/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sort_desc.png
--------------------------------------------------------------------------------
/vendor/assets/images/spritemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/spritemap.png
--------------------------------------------------------------------------------
/app/assets/images/chaskiq/track.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/app/assets/images/chaskiq/track.gif
--------------------------------------------------------------------------------
/app/models/chaskiq/setting.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class Setting < ActiveRecord::Base
3 | belongs_to :campaign
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/vendor/assets/images/chosen-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/chosen-sprite.png
--------------------------------------------------------------------------------
/vendor/assets/images/spritemap@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/spritemap@2x.png
--------------------------------------------------------------------------------
/vendor/assets/images/animated-overlay.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/animated-overlay.gif
--------------------------------------------------------------------------------
/vendor/assets/images/chosen-sprite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/chosen-sprite@2x.png
--------------------------------------------------------------------------------
/vendor/assets/images/sprite-skin-flat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sprite-skin-flat.png
--------------------------------------------------------------------------------
/vendor/assets/images/sprite-skin-nice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sprite-skin-nice.png
--------------------------------------------------------------------------------
/app/assets/images/chaskiq/blocks_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/app/assets/images/chaskiq/blocks_sprite.png
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/blueimp/img/error.png
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/blueimp/img/loading.gif
--------------------------------------------------------------------------------
/vendor/assets/images/sprite-skin-flat2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sprite-skin-flat2.png
--------------------------------------------------------------------------------
/vendor/assets/images/sprite-skin-simple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/sprite-skin-simple.png
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/metrics/index.js.haml:
--------------------------------------------------------------------------------
1 | = escape_javascript("#{render partial: "chaskiq/manage/metrics/metric", collection: @metrics , as: :metric}")
--------------------------------------------------------------------------------
/app/views/layouts/chaskiq/_footer.haml:
--------------------------------------------------------------------------------
1 | .footer
2 | .pull-right
3 | Chaskiq
4 | %div
5 | %strong Chaskiq
6 | © #{Time.now.year}
7 |
--------------------------------------------------------------------------------
/spec/dummy/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/play-pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/blueimp/img/play-pause.png
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/video-play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/blueimp/img/video-play.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/animated-overlay.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/animated-overlay.gif
--------------------------------------------------------------------------------
/spec/fixtures/csv_example.csv:
--------------------------------------------------------------------------------
1 | miguelmichelson@gmail.com,Miguel,Michelson Martinez
2 | jorge@numcero.cl,Jorge,Sepúlveda Tapia
3 | taoanarkripta@yahoo.com.ar,alvaro,prieto
--------------------------------------------------------------------------------
/vendor/assets/images/bootstrap-colorpicker/hue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/bootstrap-colorpicker/hue.png
--------------------------------------------------------------------------------
/vendor/assets/images/bootstrap-colorpicker/alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/bootstrap-colorpicker/alpha.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-icons_2e83ff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-icons_2e83ff_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-icons_454545_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-icons_454545_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-icons_888888_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-icons_888888_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-icons_cd0a0a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-icons_cd0a0a_256x240.png
--------------------------------------------------------------------------------
/spec/dummy/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_PATH = File.expand_path('../../config/application', __FILE__)
3 | require_relative '../config/boot'
4 | require 'rails/commands'
5 |
--------------------------------------------------------------------------------
/spec/dummy/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 |
3 | mount Chaskiq::Engine => '/'
4 | require 'sidekiq/web'
5 | mount Sidekiq::Web => '/sidekiq'
6 | end
7 |
--------------------------------------------------------------------------------
/vendor/assets/images/bootstrap-colorpicker/saturation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/bootstrap-colorpicker/saturation.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_flat_75_ffffff_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_flat_75_ffffff_40x100.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_glass_75_dadada_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_glass_75_dadada_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/dashboard.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
5 |
--------------------------------------------------------------------------------
/db/migrate/20150331022602_add_css_to_campaign.rb:
--------------------------------------------------------------------------------
1 | class AddCssToCampaign < ActiveRecord::Migration
2 | def change
3 | add_column :chaskiq_campaigns, :css, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/spec/models/chaskiq/metric_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Metric, type: :model do
5 | it{should belong_to :trackable}
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/vendor/assets/images/bootstrap-colorpicker/hue-horizontal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/bootstrap-colorpicker/hue-horizontal.png
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/manage/campaigns.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/manage/lists.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
5 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/manage/metrics.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
5 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/dashboard_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe DashboardController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/dummy/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require ::File.expand_path('../config/environment', __FILE__)
4 | run Rails.application
5 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/cookies_serializer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | Rails.application.config.action_dispatch.cookies_serializer = :json
4 |
--------------------------------------------------------------------------------
/vendor/assets/images/bootstrap-colorpicker/alpha-horizontal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/bootstrap-colorpicker/alpha-horizontal.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/animated-overlay.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/animated-overlay.gif
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/manage/attachments.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
5 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/manage/templates.css:
--------------------------------------------------------------------------------
1 | /*
2 | Place all the styles related to the matching controller here.
3 | They will automatically be included in application.css.
4 | */
5 |
--------------------------------------------------------------------------------
/app/models/chaskiq/attachment.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class Attachment < ActiveRecord::Base
3 | belongs_to :campaign
4 |
5 | mount_uploader :image, ImageUploader
6 |
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/lists_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::ListsController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/session_store.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | Rails.application.config.session_store :cookie_store, key: '_dummy_session'
4 |
--------------------------------------------------------------------------------
/spec/models/chaskiq/template_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Template, type: :model do
5 | it{ should have_many(:campaigns) }
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/lists.js:
--------------------------------------------------------------------------------
1 | // Place all the behaviors and hooks related to the matching controller here.
2 | // All this logic will automatically be available in application.js.
3 |
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/metrics.js:
--------------------------------------------------------------------------------
1 | // Place all the behaviors and hooks related to the matching controller here.
2 | // All this logic will automatically be available in application.js.
3 |
--------------------------------------------------------------------------------
/db/migrate/20150331025829_add_css_to_chaskiq_template.rb:
--------------------------------------------------------------------------------
1 | class AddCssToChaskiqTemplate < ActiveRecord::Migration
2 | def change
3 | add_column :chaskiq_templates, :css, :text
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/metrics_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::MetricsController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/dummy/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require File.expand_path('../application', __FILE__)
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/spec/models/chaskiq/attachment_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Attachment, type: :model do
5 | it{ should belong_to :campaign }
6 |
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/vendor/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/attachments.js:
--------------------------------------------------------------------------------
1 | // Place all the behaviors and hooks related to the matching controller here.
2 | // All this logic will automatically be available in application.js.
3 |
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/campaigns.js:
--------------------------------------------------------------------------------
1 | // Place all the behaviors and hooks related to the matching controller here.
2 | // All this logic will automatically be available in application.js.
3 |
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/templates.js:
--------------------------------------------------------------------------------
1 | // Place all the behaviors and hooks related to the matching controller here.
2 | // All this logic will automatically be available in application.js.
3 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/templates_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::TemplatesController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-icons_2e83ff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-icons_2e83ff_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-icons_454545_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-icons_454545_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-icons_888888_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-icons_888888_256x240.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-icons_cd0a0a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-icons_cd0a0a_256x240.png
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/iframe.js:
--------------------------------------------------------------------------------
1 | //= require jquery/jquery-2.1.1.js
2 |
3 | //= require backbone/underscore.min.js
4 | //= require backbone/backbone.min.js
5 |
6 | //= require chaskiq/manage/iframe
7 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/attachments_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::AttachmentsController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/models/chaskiq/setting_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Setting, type: :model do
5 | pending "add some examples to (or delete) #{__FILE__}"
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png
--------------------------------------------------------------------------------
/app/models/chaskiq/template.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class Template < ActiveRecord::Base
3 | has_many :campaigns
4 | validates :body, presence: true
5 | validates :name, presence: true
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/campaign_wizard_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::CampaignWizardController, type: :controller do
5 |
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/lists_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class ListsController < ApplicationController
5 |
6 | protected
7 |
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/views/shared/_flashes.haml:
--------------------------------------------------------------------------------
1 | - flash.each do |type, message|
2 | %div.alert.alert-fixed.fade.in{ :class => "alert-#{type}" }
3 | %button.close{"data-dismiss" => "alert", :type => "button"} ×
4 | = message
5 | - flash.clear
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michelson/chaskiq-newsletters/HEAD/vendor/assets/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .bundle/
2 | log/*.log
3 | pkg/
4 | spec/dummy/db/*.sqlite3
5 | spec/dummy/db/*.sqlite3-journal
6 | spec/dummy/log/*.log
7 | spec/dummy/tmp/
8 | spec/dummy/.sass-cache
9 | spec/dummy/.env
10 | .env
11 |
12 |
13 |
--------------------------------------------------------------------------------
/spec/mailers/previews/chaskiq/campaign_mailer_preview.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | # Preview all emails at http://localhost:3000/rails/mailers/campaign_mailer
3 | class CampaignMailerPreview < ActionMailer::Preview
4 |
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_metrics.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_metric, :class => 'Chaskiq::Metric' do
5 | trackable nil
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/lib/chaskiq/csv_importer.rb:
--------------------------------------------------------------------------------
1 | require "csv"
2 |
3 | module Chaskiq
4 | class CsvImporter
5 |
6 | def import(file_path)
7 | file = File.open(file_path)
8 | CSV.parse(file.read)
9 | end
10 |
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/views/chaskiq/campaign_mailer/_subscription_links.haml:
--------------------------------------------------------------------------------
1 | = link_to "Edit subscription", campaign_subscriber_url(@campaign, @subscriber.encoded_id)
2 |
3 | = link_to "Unsubscribe", delete_campaign_subscriber_url(@campaign, @subscriber.encoded_id)
4 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_settings.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_setting, :class => 'Setting' do
5 | config "MyText"
6 | campaign nil
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/preview.haml:
--------------------------------------------------------------------------------
1 |
2 | = h @campaign.compiled_template_for(@campaign.subscribers.first).html_safe
3 |
4 | -#%img{src: open_campaign_track_url(@campaign, @campaign.subscribers.first.encoded_id, format: :gif), width:"1", height: "1" }
5 |
--------------------------------------------------------------------------------
/app/views/shared/_main_nav.haml:
--------------------------------------------------------------------------------
1 | .col-sm-3.col-md-2.sidebar
2 | %ul.nav.nav-sidebar
3 | %li.active
4 | %a{:href => campaigns_path} Campaings
5 | %li
6 | %a{:href => lists_path} Lists
7 | %li
8 | %a{:href => templates_path} Templates
9 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure sensitive parameters which will be filtered from the log file.
4 | Rails.application.config.filter_parameters += [:password]
5 |
--------------------------------------------------------------------------------
/spec/dummy/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::Base
2 | # Prevent CSRF attacks by raising an exception.
3 | # For APIs, you may want to use :null_session instead.
4 | protect_from_forgery with: :exception
5 | end
6 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/lists/_menu.haml:
--------------------------------------------------------------------------------
1 | .row.page-heading
2 | .col-sm-4
3 | %h2 Manage Lists
4 | %ol.breadcrumb
5 | %li
6 | %a{:href => manage_lists_path}
7 | Lists
8 | - if @list.present?
9 | %li
10 | = @list.name
--------------------------------------------------------------------------------
/app/helpers/chaskiq/application_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module ApplicationHelper
3 |
4 | def paginate objects, options = {}
5 | options.reverse_merge!( theme: 'twitter-bootstrap-3' )
6 | super( objects, options )
7 | end
8 | end
9 |
10 | end
11 |
--------------------------------------------------------------------------------
/spec/dummy/config/boot.rb:
--------------------------------------------------------------------------------
1 | # Set up gems listed in the Gemfile.
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
3 |
4 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5 | $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
6 |
--------------------------------------------------------------------------------
/spec/dummy/Rakefile:
--------------------------------------------------------------------------------
1 | # Add your own tasks in files placed in lib/tasks ending in .rake,
2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3 |
4 | require File.expand_path('../config/application', __FILE__)
5 |
6 | Rails.application.load_tasks
7 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_templates.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_template, :class => 'Chaskiq::Template' do
5 | name "MyString"
6 | body "
this is the template
"
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/app/jobs/chaskiq/list_importer_job.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class ListImporterJob < ActiveJob::Base
3 |
4 | queue_as :default
5 |
6 | #send to all list with state passive & subscribed
7 | def perform(list, file)
8 | list.import_csv(file)
9 | end
10 |
11 | end
12 | end
--------------------------------------------------------------------------------
/spec/factories/chaskiq_subscriptions.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_subscription, :class => 'Subscription' do
5 | state "MyString"
6 | campaign nil
7 | subscriber nil
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/_menu.haml:
--------------------------------------------------------------------------------
1 | .row.wrapper.page-heading
2 | .col-sm-4
3 | %h2 New Templates
4 | %ol.breadcrumb
5 | %li
6 | %a{:href => manage_templates_path} Templates
7 |
8 | - if @template.present?
9 | %li.active
10 | %strong= @template.name
11 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaign_wizard/_wizard_nav.haml:
--------------------------------------------------------------------------------
1 | %nav
2 | %ul.pager
3 | %li.previous
4 | %a{:href => previous_wizard_path}
5 | %span{"aria-hidden" => "true"} ←
6 | Prev
7 | %li.next
8 | %a{:href => next_wizard_path}
9 | Next
10 | %span{"aria-hidden" => "true"} →
11 |
--------------------------------------------------------------------------------
/spec/dummy/config/rainbows.rb:
--------------------------------------------------------------------------------
1 | worker_processes 3
2 | timeout 30
3 | preload_app true
4 |
5 | Rainbows! do
6 | use :EventMachine
7 | end
8 |
9 | before_fork do |server, worker|
10 | # Replace with MongoDB or whatever
11 | if defined?(ActiveRecord::Base)
12 | ActiveRecord::Base.connection.disconnect!
13 | end
14 | end
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/video-play.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/config/initializers/kaminari_config.rb:
--------------------------------------------------------------------------------
1 | Kaminari.configure do |config|
2 | # config.default_per_page = 25
3 | # config.max_per_page = nil
4 | # config.window = 4
5 | # config.outer_window = 0
6 | # config.left = 0
7 | # config.right = 0
8 | # config.page_method_name = :page
9 | # config.param_name = :page
10 | end
11 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_lists.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_list, :class => 'Chaskiq::List' do
5 | name "MyString"
6 | #state "MyString"
7 | #unsubscribe_count 1
8 | #bounced 1
9 | #active_count 1
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaign_wizard/_menu.haml:
--------------------------------------------------------------------------------
1 |
2 | .row.wrapper.white-bg.page-heading
3 | .col-sm-4
4 | %h2 Campaign Wizard
5 | %ol.breadcrumb
6 | %li
7 | %a{:href => "/"} Home
8 | - if @campaign.present?
9 | %li.active
10 | %strong= link_to @campaign.name , manage_campaign_path(@campaign)
--------------------------------------------------------------------------------
/spec/factories/chaskiq_attachments.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_attachment, :class => 'Chaskiq::Attachment' do
5 | image "MyString"
6 | content_type "MyString"
7 | size 1
8 | name "MyString"
9 | campaign nil
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/codemirror/mode/tiddlywiki/tiddlywiki.css:
--------------------------------------------------------------------------------
1 | span.cm-underlined {
2 | text-decoration: underline;
3 | }
4 | span.cm-strikethrough {
5 | text-decoration: line-through;
6 | }
7 | span.cm-brace {
8 | color: #170;
9 | font-weight: bold;
10 | }
11 | span.cm-table {
12 | color: blue;
13 | font-weight: bold;
14 | }
15 |
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/error.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/db/migrate/20150318021239_create_chaskiq_templates.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqTemplates < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_templates do |t|
4 | t.string :name
5 | t.text :body
6 | t.text :html_content
7 | t.string :screenshot
8 |
9 | t.timestamps null: false
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/chaskiq.rb:
--------------------------------------------------------------------------------
1 | require "chaskiq"
2 |
3 | Chaskiq::Config.setup do |config|
4 | #config.authentication_method = :authenticate_user!
5 | config.ses_access_key = ENV['FOG_ACCESS_KEY_ID']
6 | config.ses_access_secret_key = ENV['FOG_SECRET_ACCESS_KEY']
7 | config.s3_bucket = ENV['FOG_BUCKET']
8 | config.chaskiq_secret_key = "chaskiq123"
9 | end
--------------------------------------------------------------------------------
/db/migrate/20150321205815_create_chaskiq_settings.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqSettings < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_settings do |t|
4 | t.text :config
5 | t.references :campaign, index: true
6 |
7 | t.timestamps null: false
8 | end
9 | #add_foreign_key :chaskiq_settings, :campaign
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/lib/generators/chaskiq/templates/chaskiq.rb.erb:
--------------------------------------------------------------------------------
1 | require "chaskiq"
2 |
3 | Chaskiq::Config.setup do |config|
4 | #config.authentication_method = :authenticate_user!
5 | config.ses_access_key = ENV['FOG_ACCESS_KEY_ID']
6 | config.ses_access_secret_key = ENV['FOG_SECRET_ACCESS_KEY']
7 | config.s3_bucket = ENV['FOG_BUCKET']
8 | config.chaskiq_secret_key = "chaskiq123"
9 | end
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/style.css.scss:
--------------------------------------------------------------------------------
1 |
2 | // Google Fonts
3 | @import url("//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&lang=en");
4 |
5 | // Bootstra
6 | @import "bootstrap-sprockets";
7 | @import "bootstrap";
8 |
9 | // Variables, Mixins
10 | @import "base/variables";
11 | //@import "base/mixins";
12 |
13 | @import "new";
14 |
15 | @import "base/typography";
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/lists/_subscriber_fields.haml:
--------------------------------------------------------------------------------
1 | - return unless f.object.new_record?
2 | .nested-fields.row
3 |
4 | .col-lg-6
5 | .col-lg-3= f.input :email
6 | .col-lg-3= f.input :name
7 | .col-lg-3= f.input :last_name
8 |
9 | .col-lg-3
10 | = link_to_remove_association f, class: "btn btn-xs btn-danger" do
11 | %i.fa.fa-times
12 | Delete
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/lists/new.haml:
--------------------------------------------------------------------------------
1 | = render "menu"
2 |
3 | .wrapper.wrapper-content
4 | .row
5 | .col-lg-12
6 | .ibox
7 | .ibox-title
8 | %h5
9 | Create new list
10 | -#%small Simple login form example
11 | .ibox-tools
12 |
13 |
14 | .ibox-content
15 | .row
16 | = render partial: "form"
--------------------------------------------------------------------------------
/db/migrate/20150318021424_create_chaskiq_lists.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqLists < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_lists do |t|
4 | t.string :name
5 | t.string :state
6 | t.integer :unsubscribe_count
7 | t.integer :bounced
8 | t.integer :active_count
9 |
10 | t.timestamps null: false
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/spec/dummy/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Dummy
5 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6 | <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7 | <%= csrf_meta_tags %>
8 |
9 |
10 |
11 | <%= yield %>
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/jobs/chaskiq/mail_sender_job.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class MailSenderJob < ActiveJob::Base
3 |
4 | queue_as :default
5 |
6 | #send to all list with state passive & subscribed
7 | def perform(campaign)
8 | campaign.apply_premailer
9 | campaign.list.subscriptions.availables.each do |s|
10 | campaign.push_notification(s)
11 | end
12 | end
13 |
14 | end
15 | end
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaign_wizard/_wizard_steps.haml:
--------------------------------------------------------------------------------
1 |
2 | .btn-group.btn-group-justified{"aria-label" => "...", :role => "group"}
3 | - wizard_steps.each_with_index do |wizard_step, index|
4 | .btn-group{ class: "#{ step == wizard_step ? 'active' : '' }"}
5 | = link_to wizard_path(wizard_step), class: "btn btn-#{ step == wizard_step ? 'info' : 'white' }" do
6 | = t(".#{wizard_step}")
7 |
8 | %hr
--------------------------------------------------------------------------------
/app/controllers/chaskiq/campaigns_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class CampaignsController < ApplicationController
5 |
6 | layout "chaskiq/empty"
7 |
8 | before_filter :find_campaign
9 |
10 | def show
11 | end
12 |
13 | def find_campaign
14 | @campaign = Chaskiq::Campaign.find(params[:id])
15 | end
16 |
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/lists/edit.haml:
--------------------------------------------------------------------------------
1 | = render "menu"
2 |
3 | .wrapper.wrapper-content
4 | .row
5 | .col-lg-12
6 | .ibox.float-e-margins
7 | .ibox-title
8 | %h5
9 | Edit
10 | %small
11 | = @list.name
12 | list
13 | .ibox-tools
14 |
15 |
16 | .ibox-content
17 | .row
18 | = render partial: "form"
19 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/attachments/_menu.haml:
--------------------------------------------------------------------------------
1 | .row.page-heading
2 | .col-sm-4
3 | %h2 Manage Attachments
4 | %ol.breadcrumb
5 | %li
6 | %a{:href => manage_campaign_path(@campaign)}
7 | = @campaign.name
8 | %li
9 | %a{:href => manage_campaign_attachments_path(@campaign)}
10 | Attachments
11 | - if @attachment.present?
12 | %li
13 | = @attachment.image
--------------------------------------------------------------------------------
/vendor/assets/images/blueimp/img/play-pause.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/premailer_preview.haml:
--------------------------------------------------------------------------------
1 | !!!
2 | %html
3 | %head
4 | %meta{:charset => "utf-8"}/
5 | %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/
6 | %title Chaskiq
7 |
8 | %style
9 | = @campaign.css
10 |
11 | %body
12 | = h @campaign.html_content.html_safe
13 |
14 | - unless params[:exclude_gif]
15 |
16 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_gap.html.erb:
--------------------------------------------------------------------------------
1 | <%# Non-link tag that stands for skipped pages...
2 | - available local variables
3 | current_page: a page object for the currently displayed page
4 | num_pages: total number of pages
5 | per_page: number of items to fetch per page
6 | remote: data-remote
7 | -%>
8 | <%= raw(t 'views.pagination.truncate') %>
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/base/typography.scss:
--------------------------------------------------------------------------------
1 | h1, h2, h3, h4, h5, h6 {
2 | font-weight: 100;
3 | }
4 |
5 | h1 {
6 | font-size: 30px;
7 | }
8 |
9 | h2 {
10 | font-size: 24px;
11 | }
12 |
13 | h3 {
14 | font-size: 16px;
15 | }
16 |
17 | h4 {
18 | font-size: 14px;
19 | }
20 |
21 | h5 {
22 | font-size: 12px;
23 | }
24 |
25 | h6 {
26 | font-size: 10px;
27 | }
28 |
29 | h3, h4, h5 {
30 | margin-top: 5px;
31 | font-weight: 600;
32 | }
33 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_subscribers.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_subscriber, :class => 'Chaskiq::Subscriber' do
5 |
6 | sequence :email do |n|
7 | "person#{n}@example.com"
8 | end
9 |
10 | sequence :name do |n|
11 | "person #{n}"
12 | end
13 |
14 | sequence :last_name do |n|
15 | "#{n}son"
16 | end
17 |
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/db/migrate/20150318022506_create_chaskiq_subscribers.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqSubscribers < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_subscribers do |t|
4 | t.string :name
5 | t.string :email
6 | t.string :state
7 | t.string :last_name
8 |
9 | t.references :list, index: true
10 |
11 | t.timestamps null: false
12 | end
13 | #add_foreign_key :chaskiq_subscribers, :chaskiq_lists
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7 | # Rails.backtrace_cleaner.remove_silencers!
8 |
--------------------------------------------------------------------------------
/db/migrate/20150318023136_create_chaskiq_attachments.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqAttachments < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_attachments do |t|
4 | t.string :image
5 | t.string :content_type
6 | t.integer :size
7 | t.string :name
8 | t.references :campaign, index: true
9 |
10 | t.timestamps null: false
11 | end
12 | #add_foreign_key :chaskiq_attachments, :chaskiq_campaigns
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/application_controller.rb:
--------------------------------------------------------------------------------
1 | require "wicked"
2 |
3 | module Chaskiq
4 | class ApplicationController < ActionController::Base
5 |
6 | def get_referrer
7 | ip = request.ip
8 | ip = env['HTTP_X_FORWARDED_FOR'].split(",").first if Rails.env.production?
9 | end
10 |
11 | def authentication_method
12 | if meth = Chaskiq::Config.authentication_method
13 | self.send meth
14 | end
15 | end
16 |
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/db/migrate/20150320031404_create_chaskiq_metrics.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqMetrics < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_metrics do |t|
4 | t.references :trackable, polymorphic: true, index: true, null: false
5 | t.references :campaign, index: true
6 | t.string :action
7 | t.string :host
8 | t.string :data
9 | t.timestamps null: false
10 | end
11 | #add_foreign_key :chaskiq_metrics, :trackable
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/views/chaskiq/campaigns/show.haml:
--------------------------------------------------------------------------------
1 | .middle-box.text-center.loginscreen
2 | %div
3 | %div
4 | .logo-name
5 | = image_tag @campaign.logo, with: 200
6 |
7 | %h3= @campaign.name
8 | %p
9 | = @campaign.try(:tagline)
10 |
11 | %p Suscribete a nuestro newsletter
12 |
13 | = @campaign.description
14 | %p
15 | = render "shared/flashes"
16 |
17 | %p.m-t
18 | %small
19 | = link_to "subscribe", new_campaign_subscriber_path(@campaign)
20 |
21 |
--------------------------------------------------------------------------------
/app/mailers/application_mailer.rb:
--------------------------------------------------------------------------------
1 | require 'mustache'
2 |
3 | class ApplicationMailer < ActionMailer::Base
4 |
5 | def tryme
6 | campaign = Chaskiq::Campaign.first
7 | mail( from: "#{campaign.from_name}<#{campaign.from_email}>",
8 | to: "miguelmichelson@gmail.com",
9 | subject: "campaign.subject",
10 | body: "campaign.reply_email",
11 | content_type: "text/plain" ) do |format|
12 | format.html { render text:'newsletter' }
13 | end
14 | end
15 |
16 | end
17 |
--------------------------------------------------------------------------------
/app/views/shared/_account_stats.haml:
--------------------------------------------------------------------------------
1 | .line.section
2 | .lastUnit.size1of1.below18
3 | %h3.nomargin
4 | Hello:
5 | %span User
6 | .unit.size1of2.below18
7 | .count.alignr
8 | %strong.float-left Subscribers
9 | %a{:href => "/lists/", :title => "View All Subscribers"} 0
10 | of #{Chaskiq::Subscriber.count}
11 | .meter.mar-b0
12 | %span{:style => "width:0%"}
13 | .lastUnit.size1of2
14 | .count.alignr
15 | %strong.float-left Sends
16 | 1 of 12,000
17 |
--------------------------------------------------------------------------------
/db/migrate/20150402201729_create_chaskiq_subscriptions.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqSubscriptions < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_subscriptions do |t|
4 | t.string :state
5 | t.references :campaign, index: true
6 | t.references :subscriber, index: true
7 | t.references :list, index: true
8 | t.timestamps null: false
9 | end
10 | #add_foreign_key :chaskiq_subscriptions, :campaigns
11 | #add_foreign_key :chaskiq_subscriptions, :subscribers
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/app/views/shared/_modal.haml:
--------------------------------------------------------------------------------
1 | #myModal.modal.fade
2 | .modal-dialog
3 | .modal-content
4 | .modal-header
5 | %button.close{"data-dismiss" => "modal", :type => "button"}
6 | %span{"aria-hidden" => "true"} ×
7 | %span.sr-only Close
8 | %h4.modal-title Modal title
9 | .modal-body
10 | %p One fine body…
11 | .modal-footer
12 | %button.btn.btn-default{"data-dismiss" => "modal", :type => "button"} Close
13 | %button.btn.btn-primary{:type => "button"} Save changes
14 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3 |
4 | ENGINE_ROOT = File.expand_path('../..', __FILE__)
5 | ENGINE_PATH = File.expand_path('../../lib/chaskiq/engine', __FILE__)
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
10 |
11 | require 'rails/all'
12 | require 'rails/engine/commands'
13 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/lists/_form.haml:
--------------------------------------------------------------------------------
1 | = form_for ["manage", @list] do |f|
2 |
3 | .col-lg-12
4 | %h3 Sign in
5 |
6 | = f.text_field :name, placeholder: "Introduce de List name"
7 |
8 | %hr
9 |
10 | .col-lg-12
11 | = link_to_add_association f, :subscribers, class: "btn btn-mini btn-default" do
12 | %i.fa.fa-plus
13 | Add Subscriber
14 |
15 | = f.simple_fields_for :subscribers, [] do |u|
16 | = render "subscriber_fields", :f => u
17 |
18 | .col-lg-12
19 | = f.submit "crear", class: "btn btn-primary"
20 |
21 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_first_page.html.erb:
--------------------------------------------------------------------------------
1 | <%# Link to the "First" page
2 | - available local variables
3 | url: url to the first page
4 | current_page: a page object for the currently displayed page
5 | num_pages: total number of pages
6 | per_page: number of items to fetch per page
7 | remote: data-remote
8 | -%>
9 | <% unless current_page.first? %>
10 |
11 | <%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote %>
12 |
13 | <% end %>
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Version of your assets, change this if you want to expire all your assets.
4 | Rails.application.config.assets.version = '1.0'
5 |
6 | # Add additional assets to the asset load path
7 | # Rails.application.config.assets.paths << Emoji.images_path
8 |
9 | # Precompile additional assets.
10 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
11 | # Rails.application.config.assets.precompile += %w( search.js )
12 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/hooks_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the HooksHelper. For example:
5 | #
6 | # describe HooksHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe HooksHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/dashboard_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class DashboardController < Chaskiq::ApplicationController
5 | before_filter :authentication_method
6 |
7 | def show
8 | @campaigns_count = Chaskiq::Campaign.count
9 | @sends_count = Chaskiq::Metric.deliveries.size
10 | @daily_metrics = Chaskiq::Metric.group_by_day(:created_at, range: 2.weeks.ago.midnight..Time.now).count
11 | @pie_metrics = Chaskiq::Metric.group(:action)
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/tracks_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the TracksHelper. For example:
5 | #
6 | # describe TracksHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe TracksHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/spec/lib/csv_importer_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe CsvImporter, type: :model do
5 |
6 |
7 | let(:importer){ Chaskiq::CsvImporter.new }
8 |
9 | it "will initialize" do
10 | expect(importer).to be_an_instance_of Chaskiq::CsvImporter
11 | end
12 |
13 | it "will import data" do
14 | data = importer.import("spec/fixtures/csv_example.csv")
15 | expect(data.class).to be == Array
16 | expect(data.size).to be 3
17 | expect(data.first.size).to be 3
18 | end
19 |
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/campaigns_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the CampaignsHelper. For example:
5 | #
6 | # describe CampaignsHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe CampaignsHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/dashboard_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the DashboardHelper. For example:
5 | #
6 | # describe DashboardHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe DashboardHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/codemirror/mode/ruby/test.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: http://codemirror.net/LICENSE
3 |
4 | (function() {
5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby");
6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
7 |
8 | MT("divide_equal_operator",
9 | "[variable bar] [operator /=] [variable foo]");
10 |
11 | MT("divide_equal_operator_no_spacing",
12 | "[variable foo][operator /=][number 42]");
13 |
14 | })();
15 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_next_page.html.erb:
--------------------------------------------------------------------------------
1 | <%# Link to the "Next" page
2 | - available local variables
3 | url: url to the next page
4 | current_page: a page object for the currently displayed page
5 | num_pages: total number of pages
6 | per_page: number of items to fetch per page
7 | remote: data-remote
8 | -%>
9 | <% unless current_page.last? %>
10 |
11 | <%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %>
12 |
13 | <% end %>
14 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaign_wizard/list.haml:
--------------------------------------------------------------------------------
1 | = render "menu"
2 |
3 |
4 | .row
5 | .col-lg-12
6 | .wrapper.wrapper-content.animated.fadeInUp
7 | .ibox
8 | .ibox-title
9 | %h5 List
10 |
11 | .ibox-content
12 |
13 | = render partial: "wizard_steps"
14 |
15 | = simple_form_for @campaign, url: wizard_path do |f|
16 |
17 | = f.input :name
18 |
19 | = f.input :list_id, as: :select, collection: Chaskiq::List.all
20 |
21 | = f.submit
22 |
23 |
24 | = render partial: "wizard_nav"
25 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/subscribers_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the SubscribersHelper. For example:
5 | #
6 | # describe SubscribersHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe SubscribersHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_prev_page.html.erb:
--------------------------------------------------------------------------------
1 | <%# Link to the "Previous" page
2 | - available local variables
3 | url: url to the previous page
4 | current_page: a page object for the currently displayed page
5 | num_pages: total number of pages
6 | per_page: number of items to fetch per page
7 | remote: data-remote
8 | -%>
9 | <% unless current_page.first? %>
10 |
11 | <%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote %>
12 |
13 | <% end %>
14 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/lists_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::ListsHelper. For example:
5 | #
6 | # describe Manage::ListsHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::ListsHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_page.html.erb:
--------------------------------------------------------------------------------
1 | <%# Link showing page number
2 | - available local variables
3 | page: a page object for "this" page
4 | url: url to this page
5 | current_page: a page object for the currently displayed page
6 | num_pages: total number of pages
7 | per_page: number of items to fetch per page
8 | remote: data-remote
9 | -%>
10 |
11 | <%= link_to page, url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
12 |
13 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/metrics_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::MetricsHelper. For example:
5 | #
6 | # describe Manage::MetricsHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::MetricsHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/codemirror/mode/tiki/tiki.css:
--------------------------------------------------------------------------------
1 | .cm-tw-syntaxerror {
2 | color: #FFF;
3 | background-color: #900;
4 | }
5 |
6 | .cm-tw-deleted {
7 | text-decoration: line-through;
8 | }
9 |
10 | .cm-tw-header5 {
11 | font-weight: bold;
12 | }
13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/
14 | padding-left: 10px;
15 | }
16 |
17 | .cm-tw-box {
18 | border-top-width: 0px ! important;
19 | border-style: solid;
20 | border-width: 1px;
21 | border-color: inherit;
22 | }
23 |
24 | .cm-tw-underline {
25 | text-decoration: underline;
26 | }
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaign_wizard/template.haml:
--------------------------------------------------------------------------------
1 | = render "menu"
2 |
3 |
4 | .row
5 | .col-lg-12
6 | .wrapper.wrapper-content.animated.fadeInUp
7 | .ibox
8 | .ibox-title
9 | %h5 Choose template
10 | .ibox-tools
11 |
12 | .ibox-content
13 |
14 |
15 | = render partial: "wizard_steps"
16 |
17 |
18 | = simple_form_for @campaign, url: wizard_path do |f|
19 |
20 | = f.input :template_id , as: :select, collection: Chaskiq::Template.all
21 |
22 | = f.submit
23 |
24 | = render partial: "wizard_nav"
25 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/metrics/_metric.haml:
--------------------------------------------------------------------------------
1 | %tr
2 | %td
3 | %span.label{class: "label-#{metric_action_class(metric)}"}
4 | %i.fa{class: "fa-#{metric_icon_action_class(metric)}"}
5 | = metric.action
6 | %td
7 | = metric.trackable.try(:name)
8 | = metric.trackable.try(:last_name)
9 | .small
10 | = metric.trackable.try(:email)
11 | %td
12 | = l metric.created_at, format: :long
13 | %td
14 | %p.small
15 | = metric.host
16 | %td
17 | %abbr.small{title: metric.data}
18 | = truncate metric.data, :length => 30,:separator => /\w/, :omission => "..."
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/campaigns_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::CampaignsHelper. For example:
5 | #
6 | # describe Manage::CampaignsHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::CampaignsHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/templates_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::TemplatesHelper. For example:
5 | #
6 | # describe Manage::TemplatesHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::TemplatesHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/wrap_parameters.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # This file contains settings for ActionController::ParamsWrapper which
4 | # is enabled by default.
5 |
6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7 | ActiveSupport.on_load(:action_controller) do
8 | wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
9 | end
10 |
11 | # To enable root element in JSON for ActiveRecord objects.
12 | # ActiveSupport.on_load(:active_record) do
13 | # self.include_root_in_json = true
14 | # end
15 |
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/attachments_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::AttachmentsHelper. For example:
5 | #
6 | # describe Manage::AttachmentsHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::AttachmentsHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/spec/dummy/README.rdoc:
--------------------------------------------------------------------------------
1 | == README
2 |
3 | This README would normally document whatever steps are necessary to get the
4 | application up and running.
5 |
6 | Things you may want to cover:
7 |
8 | * Ruby version
9 |
10 | * System dependencies
11 |
12 | * Configuration
13 |
14 | * Database creation
15 |
16 | * Database initialization
17 |
18 | * How to run the test suite
19 |
20 | * Services (job queues, cache servers, search engines, etc.)
21 |
22 | * Deployment instructions
23 |
24 | * ...
25 |
26 |
27 | Please feel free to use a different markup language if you do not plan to run
28 | rake doc:app .
29 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/iframe.haml:
--------------------------------------------------------------------------------
1 | !!!
2 | %html
3 | %head
4 | %title Dummy
5 |
6 | = stylesheet_link_tag 'chaskiq/manage/campaign_wizard', media: 'all'
7 | = stylesheet_link_tag 'font-awesome', media: 'all'
8 |
9 | = javascript_include_tag 'chaskiq/iframe'
10 |
11 | %style{:type => "text/css", id: "custom_style"}
12 | = @campaign.css
13 |
14 | %body
15 | #chaskiq-mail-editor
16 | #mail-editor{contenteditable: "false", style:{ height: '227px'}}
17 | = raw @campaign.html_content
18 |
19 | :javascript
20 | iframe = new window.Iframe
21 | iframe.render()
--------------------------------------------------------------------------------
/spec/helpers/chaskiq/manage/campain_wizard_helper_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | # Specs in this file have access to a helper object that includes
4 | # the Manage::CampainWizardHelper. For example:
5 | #
6 | # describe Manage::CampainWizardHelper do
7 | # describe "string concat" do
8 | # it "concats two strings with spaces" do
9 | # expect(helper.concat_strings("this","that")).to eq("this that")
10 | # end
11 | # end
12 | # end
13 | module Chaskiq
14 | RSpec.describe Manage::CampainWizardHelper, type: :helper do
15 | pending "add some examples to (or delete) #{__FILE__}"
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_last_page.html.erb:
--------------------------------------------------------------------------------
1 | <%# Link to the "Last" page
2 | - available local variables
3 | url: url to the last page
4 | current_page: a page object for the currently displayed page
5 | num_pages: total number of pages
6 | per_page: number of items to fetch per page
7 | remote: data-remote
8 | -%>
9 | <% unless current_page.last? %>
10 | <%# "next" class present for border styling in twitter bootstrap %>
11 | <%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote} %>
12 |
13 | <% end %>
14 |
--------------------------------------------------------------------------------
/app/jobs/chaskiq/ses_sender_job.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class SesSenderJob < ActiveJob::Base
3 |
4 | queue_as :mailers
5 |
6 | #send to ses
7 | def perform(campaign, subscription)
8 | subscriber = subscription.subscriber
9 |
10 | return if subscriber.blank?
11 |
12 | mailer = campaign.prepare_mail_to(subscription)
13 | response = mailer.deliver
14 |
15 | message_id = response.message_id.gsub("@email.amazonses.com", "")
16 |
17 | campaign.metrics.create(
18 | trackable: subscription,
19 | action: "deliver",
20 | data: message_id)
21 |
22 | end
23 |
24 | end
25 | end
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/new.haml:
--------------------------------------------------------------------------------
1 |
2 | .row.wrapper.white-bg.page-heading
3 | .col-sm-4
4 | %h2 New Campaigns
5 | %ol.breadcrumb
6 | %li
7 | %a{:href => ""} Home
8 | %li.active
9 | %strong Campaigns list
10 |
11 | .row
12 | .col-lg-12
13 | .wrapper.wrapper-content.animated.fadeInUp
14 | .ibox
15 | .ibox-title
16 | %h5 New Campaign
17 |
18 | .ibox-content
19 |
20 | = simple_form_for ["manage", @campaign] do |f|
21 |
22 | = f.input :list_id, as: :select , collection: Chaskiq::List.all, label: "Choose a mail list"
23 | = f.submit "Create Campaign"
24 |
--------------------------------------------------------------------------------
/TODO.md:
--------------------------------------------------------------------------------
1 | TODO: roadmap for 0.0.1
2 |
3 | + remove unused state on subscriber (we use subscription state now)
4 | + mailer connection config
5 | + uuid for subscribers & campaigns
6 | + api
7 | + track opens
8 | + track clicks (implement link rewrite in body view)
9 | + track bounces
10 | + public views
11 | + suscribe
12 | + unsuscribe
13 |
14 |
15 | + changes for model
16 |
17 | mover asociacion de metricas de subscriptor a subscripcion
18 | detectar campaña en el hook receiver (como está ahora puede generar errores cuando hay varios reply-message)
19 |
20 | custom header,
21 | test , send try my
22 | put a binding.pry in hooks and check custom header
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/_config_actions.haml:
--------------------------------------------------------------------------------
1 | .btn-group
2 | %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "data-toggle" => "dropdown"}
3 | %i.fa.fa-cog
4 | Configuration
5 | %span.caret
6 | %ul.dropdown-menu
7 | %li
8 | = link_to manage_campaign_wizard_path(campaign, "setup") do
9 | %i.fa.fa-edit
10 | Setup
11 |
12 | %li
13 | = link_to manage_campaign_attachments_path(campaign) do
14 | %i.fa.fa-paperclip
15 | Attachments
16 |
17 | %li
18 | = link_to manage_campaign_path(campaign), method: :delete, data: { confirm: "Are you sure?" } do
19 | %i.fa.fa-times
20 | Remove
--------------------------------------------------------------------------------
/spec/dummy/app/assets/javascripts/application.js:
--------------------------------------------------------------------------------
1 | // This is a manifest file that'll be compiled into application.js, which will include all the files
2 | // listed below.
3 | //
4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5 | // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6 | //
7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8 | // compiled file.
9 | //
10 | // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11 | // about supported directives.
12 | //
13 | //= require_tree .
14 |
--------------------------------------------------------------------------------
/app/views/chaskiq/subscribers/_form.haml:
--------------------------------------------------------------------------------
1 | = simple_form_for(@subscriber, :url => campaign_subscribers_path(@campaign), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f|
2 |
3 | .form-group
4 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email"
5 |
6 | .form-group
7 | = f.input :name, :required => false, label: false, placeholder: "first name"
8 |
9 | .form-group
10 | = f.input :last_name, :required => false, label: false, placeholder: "last name"
11 |
12 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading"
13 |
--------------------------------------------------------------------------------
/spec/factories/chaskiq_campaigns.rb:
--------------------------------------------------------------------------------
1 | # Read about factories at https://github.com/thoughtbot/factory_girl
2 |
3 | FactoryGirl.define do
4 | factory :chaskiq_campaign, :class => 'Chaskiq::Campaign' do
5 | name "some Campaign"
6 | subject "Hello"
7 | from_name "Me"
8 | from_email "me@me.com"
9 | reply_email "reply-me@me.com"
10 | #plain_content "hi this is the plain content"
11 | #html_content "hi this is htmlcontent "
12 | #query_string "opt=1&out=2"
13 | #scheduled_at "2015-03-17 23:10:06"
14 | #timezone "utc-4"
15 | #recipients_count 1
16 | #sent false
17 | #opens_count 1
18 | #clicks_count 1
19 | #parent nil
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | # Declare your gem's dependencies in chaskiq.gemspec.
4 | # Bundler will treat runtime dependencies like base dependencies, and
5 | # development dependencies will be added by default to the :development group.
6 | gemspec
7 |
8 | # Declare any dependencies that are still in development here instead of in
9 | # your gemspec. These might include edge Rails or gems from your path or
10 | # Git. Remember to move these dependencies to your gemspec before releasing
11 | # your gem to rubygems.org.
12 |
13 | gem "pry"
14 | gem 'eventmachine'
15 | gem "rainbows"
16 | gem 'wicked', require: true
17 | gem 'sinatra', :require => nil
18 | gem "mysql2"
19 | gem "web-console"
--------------------------------------------------------------------------------
/lib/tasks/chaskiq_tasks.rake:
--------------------------------------------------------------------------------
1 | # desc "Explaining what the task does"
2 | # task :chaskiq do
3 | # # Task goes here
4 | # end
5 | namespace :chaskiq do
6 | task update_subs: :environment do
7 | Chaskiq::Subscriber.all.each do |s|
8 | sub = s.subscriptions.new
9 | sub.list_id = s.list_id
10 | sub.state = s.state
11 | sub.save
12 | end
13 | end
14 |
15 | task update_metrics: :environment do
16 | Chaskiq::Metric.all.each do |m|
17 | subscription = m.trackable
18 |
19 | if !subscription.blank? && subscription.kind_of?(Chaskiq::Subscriber)
20 | m.trackable = subscription.subscriptions.first
21 | m.save
22 | puts "yes"
23 | end
24 | end
25 | end
26 | end
--------------------------------------------------------------------------------
/spec/dummy/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, '\1en'
8 | # inflect.singular /^(ox)en/i, '\1'
9 | # inflect.irregular 'person', 'people'
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym 'RESTful'
16 | # end
17 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ko.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)});
--------------------------------------------------------------------------------
/app/views/chaskiq/subscribers/delete.haml:
--------------------------------------------------------------------------------
1 | .middle-box.text-center.loginscreen.animated.fadeInDown
2 | %div
3 | %div
4 | %h1.logo-name
5 | +
6 | %h3= @campaign.name
7 | %p
8 | = @campaign.try(:tagline)
9 |
10 | = simple_form_for(@subscriber, :url => campaign_subscriber_path(@campaign, @subscriber), method: :delete, html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f|
11 |
12 | %h3
13 | = @subscriber.email
14 |
15 | = f.button :submit, "Unsubscribe now", :class => "btn btn-primary block full-width m-b", disable_with: "loading"
16 |
17 |
18 | %p.m-t
19 | %small
20 | = @campaign.name
21 | ©
22 | = Time.now.year
23 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ja.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)});
--------------------------------------------------------------------------------
/spec/dummy/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t 'hello'
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t('hello') %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # To learn more, please read the Rails Internationalization guide
20 | # available at http://guides.rubyonrails.org/i18n.html.
21 |
22 | en:
23 | hello: "Hello world"
24 |
--------------------------------------------------------------------------------
/lib/chaskiq.rb:
--------------------------------------------------------------------------------
1 | require 'chaskiq/engine'
2 | require 'haml'
3 | require 'simple_form'
4 | require 'kaminari'
5 | require 'font-awesome-rails'
6 | require 'bootstrap-sass'
7 | require 'chaskiq/engine'
8 | require 'urlcrypt'
9 | require 'cocoon'
10 | require 'mustache'
11 | require 'dotenv'
12 | require 'carrierwave'
13 | require 'coffee-rails'
14 | require 'premailer'
15 | require 'groupdate'
16 | require 'chartkick'
17 | require 'jquery-rails'
18 | require 'deep_cloneable'
19 | require 'aws/ses'
20 | require 'ransack'
21 |
22 | Dotenv.load
23 |
24 | module Chaskiq
25 | autoload :VERSION, 'chaskiq/version'
26 | autoload :Config, 'chaskiq/config'
27 | autoload :CsvImporter, 'chaskiq/csv_importer'
28 | autoload :LinkRenamer, 'chaskiq/link_renamer'
29 | end
30 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-CN.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-HK.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-TW.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])});
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/manage/campaigns_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Manage::CampaignsController, type: :controller do
5 | routes { Chaskiq::Engine.routes }
6 |
7 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign) }
8 |
9 | before do
10 | campaign
11 | end
12 |
13 | it "will render index" do
14 | response = get :index
15 | expect(response).to render_template(:index)
16 | expect(assigns(:campaigns)).to eq(Chaskiq::Campaign.all)
17 | end
18 |
19 | it "will render show" do
20 | response = get :show , id: campaign.id
21 | expect(response).to render_template(:show)
22 | expect(assigns(:campaign)).to eq(campaign)
23 | end
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/app/models/chaskiq/metric.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class Metric < ActiveRecord::Base
3 | belongs_to :campaign
4 | belongs_to :trackable, polymorphic: true, required: true
5 | #belongs_to :subscription, ->{ where("chaskiq_metrics.trackable_type =?", "Chaskiq::Subscription")}, foreign_key: :trackable_id
6 | belongs_to :subscription, foreign_key: :trackable_id
7 |
8 | #system output
9 | scope :deliveries, ->{where(action: "deliver")}
10 |
11 | #user feedback
12 | scope :bounces, ->{ where(action: "bounce")}
13 | scope :opens, ->{ where(action: "open") }
14 | scope :clicks, ->{ where(action: "click")}
15 | scope :spams, ->{ where(action: "spam") }
16 |
17 | #reportery
18 | scope :uniques, ->{group("host")}
19 |
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/campaigns_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe CampaignsController, type: :controller do
5 |
6 | render_views
7 | routes { Chaskiq::Engine.routes }
8 | let(:list){ FactoryGirl.create(:chaskiq_list) }
9 | let(:subscriber){
10 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber)
11 | }
12 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, list: list) }
13 |
14 |
15 | it "will show campaign!" do
16 | campaign
17 | response = get("show", id: campaign.id)
18 | expect(response.status).to be == 200
19 | expect(response.body).to include "subscribe"
20 | expect(response.body).to include campaign.name
21 | end
22 | end
23 | end
24 |
--------------------------------------------------------------------------------
/spec/dummy/app/assets/stylesheets/application.css:
--------------------------------------------------------------------------------
1 | /*
2 | * This is a manifest file that'll be compiled into application.css, which will include all the files
3 | * listed below.
4 | *
5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6 | * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7 | *
8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9 | * compiled file so the styles you add here take precedence over styles defined in any styles
10 | * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11 | * file per style scope.
12 | *
13 | *= require_tree .
14 | *= require_self
15 | */
16 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fa.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fa)});
--------------------------------------------------------------------------------
/app/helpers/chaskiq/manage/campaigns_helper.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | module Manage::CampaignsHelper
3 |
4 |
5 | def metric_action_class(metric)
6 | case metric.action
7 | when "deliver"
8 | "plain"
9 | when "open"
10 | "info"
11 | when "click"
12 | "primary"
13 | when "bounce"
14 | "warning"
15 | when "spam"
16 | "danger"
17 | end
18 | end
19 |
20 | def metric_icon_action_class(metric)
21 | case metric.action
22 | when "deliver"
23 | "check"
24 | when "open"
25 | "check"
26 | when "click"
27 | "check"
28 | when "bounce"
29 | "exclamation"
30 | when "spam"
31 | "exclamation-triangle"
32 | end
33 | end
34 |
35 |
36 |
37 | end
38 | end
39 |
--------------------------------------------------------------------------------
/lib/chaskiq/engine.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class Engine < ::Rails::Engine
3 | isolate_namespace Chaskiq
4 |
5 | config.generators do |g|
6 | g.test_framework :rspec
7 | g.fixture_replacement :factory_girl, :dir => 'spec/factories'
8 | g.integration_tool :rspec
9 | end
10 |
11 | config.autoload_paths += Dir["#{config.root}/app/jobs"]
12 |
13 | config.action_mailer.delivery_method = :ses
14 |
15 | config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico)
16 | config.assets.precompile += %w(chaskiq/manage/campaign_wizard.css chaskiq/iframe.js )
17 | config.assets.precompile += %w(font-awesome.css)
18 | initializer "chaskiq_setup", :after => :load_config_initializers, :group => :all do
19 | Chaskiq::Config.configure!
20 | end
21 | end
22 | end
23 |
24 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-he.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.he)});
--------------------------------------------------------------------------------
/spec/lib/config_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Config, type: :model do
5 |
6 |
7 | let(:chaskiq_config){ Chaskiq::Config }
8 |
9 | it "will setup" do
10 | chaskiq_config.setup do |config|
11 | config.mail_settings = {
12 | :address => "someuser@gmail.com",
13 | :user_name => "xxx", # Your SMTP user here.
14 | :password => "xxx", # Your SMTP password here.
15 | :authentication => :login,
16 | :enable_starttls_auto => true
17 | }
18 | end
19 | expect(chaskiq_config.mail_settings).to be_an_instance_of Hash
20 | expect(Chaskiq::Config.mail_settings).to be_an_instance_of Hash
21 | end
22 |
23 | end
24 | end
25 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-tr.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)});
--------------------------------------------------------------------------------
/spec/models/chaskiq/list_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe List, type: :model do
5 | it{ should have_many :subscribers }
6 | it{ should have_many :campaigns }
7 |
8 |
9 | describe "creation" do
10 | let(:list){FactoryGirl.create(:chaskiq_list)}
11 |
12 | it "will create a list" do
13 | Chaskiq::Subscriber.delete_all
14 | data = list.import_csv("spec/fixtures/csv_example.csv")
15 | expect(list.subscribers.size).to be 3
16 | end
17 |
18 | it "will not save repeated data" do
19 | Chaskiq::Subscriber.delete_all
20 | list.import_csv("spec/fixtures/csv_example.csv")
21 | list.import_csv("spec/fixtures/csv_example.csv")
22 | expect(list.subscribers.size).to be 3
23 | end
24 |
25 | end
26 |
27 | end
28 | end
29 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-tj.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)});
--------------------------------------------------------------------------------
/vendor/assets/stylesheets/codemirror/elegant.css:
--------------------------------------------------------------------------------
1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}
2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}
3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}
4 | .cm-s-elegant span.cm-variable {color: black;}
5 | .cm-s-elegant span.cm-variable-2 {color: #b11;}
6 | .cm-s-elegant span.cm-qualifier {color: #555;}
7 | .cm-s-elegant span.cm-keyword {color: #730;}
8 | .cm-s-elegant span.cm-builtin {color: #30a;}
9 | .cm-s-elegant span.cm-link {color: #762;}
10 | .cm-s-elegant span.cm-error {background-color: #fdd;}
11 |
12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;}
13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-az.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.az)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ca.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ca)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-cs.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.cs)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-es.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ogo","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","juv","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.es)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sr.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-bs.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bs)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-da.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.da)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-gl.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.gl)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hi.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-id.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-km.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើរួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃនេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ky.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-mk.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ms.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nl.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nn.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sq.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sv.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-de.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.de)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-eo.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eo)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hu.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nb.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-no.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ar.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ar)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-AU.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-AU"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-GB.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-GB"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-NZ.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-NZ"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-kk.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lb.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ru.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sr-SR.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-af.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.af)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hr.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-it.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nl-BE.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-uk.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)});
--------------------------------------------------------------------------------
/app/inputs/date_time_picker_input.rb:
--------------------------------------------------------------------------------
1 | ## app/inputs/date_time_picker_input.rb
2 | class DateTimePickerInput < SimpleForm::Inputs::Base
3 |
4 | def input
5 | template.content_tag(:div, class: 'form-group') do
6 | template.content_tag(:div, class: 'input-group date') do
7 | template.concat span_calendar
8 | template.concat @builder.text_field(attribute_name, input_html_options)
9 | #template.concat span_remove
10 | #template.concat span_table
11 | end
12 | end
13 | end
14 |
15 | def input_html_options
16 | {class: 'form-control', readonly: true}
17 | end
18 |
19 | def span_calendar
20 | template.content_tag(:span, class: 'input-group-addon') do
21 | template.concat icon_calendar
22 | end
23 | end
24 |
25 | def icon_calendar
26 | " ".html_safe
27 | end
28 |
29 | end
--------------------------------------------------------------------------------
/app/views/shared/_menu.haml:
--------------------------------------------------------------------------------
1 | %nav.navbar.navbar-default.navbar-fixed-top
2 | .container-fluid
3 | .navbar-header
4 | %button.navbar-toggle.collapsed{"aria-controls" => "navbar", "aria-expanded" => "false", "data-target" => "#navbar", "data-toggle" => "collapse", :type => "button"}
5 | %span.sr-only Toggle navigation
6 | %span.icon-bar
7 | %span.icon-bar
8 | %span.icon-bar
9 | %a.navbar-brand{:href => "#"} Chaskiq
10 | #navbar.navbar-collapse.collapse
11 | %ul.nav.navbar-nav.navbar-right
12 | %li
13 | %a{:href => "#"} Dashboard
14 | %li
15 | %a{:href => "#"} Settings
16 | %li
17 | %a{:href => "#"} Profile
18 | %li
19 | %a{:href => "#"} Help
20 | %form.navbar-form.navbar-right
21 | %input.form-control{:placeholder => "Search...", :type => "text"}/
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sk.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sl.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fo.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fo)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fr)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pl.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-be.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.be)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-cy-GB.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["cy-GB"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lv.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ml.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്ച്ച്","ഏപ്രില്","മേയ്","ജൂണ്","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്","ഒക്ടോബര്","നവംബര്","ഡിസംബര്"],monthNamesShort:["ജനു","ഫെബ്","മാര്","ഏപ്രി","മേയ്","ജൂണ്","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്","തിങ്കള്","ചൊവ്വ","ബുധന്","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-rm.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-bg.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bg)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-et.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.et)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-eu.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eu)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr-CH.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CH"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-is.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pt.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ro.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-th.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr-CA.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CA"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hy.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ka.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ar-DZ.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["ar-DZ"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-el.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.el)});
--------------------------------------------------------------------------------
/app/jobs/chaskiq/sns_receiver_job.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class SnsReceiverJob < ActiveJob::Base
3 |
4 | queue_as :default
5 |
6 | #Receive hook
7 | def perform(track_type, m, referrer)
8 | data = m["mail"]["messageId"]
9 |
10 | metric = Chaskiq::Metric.find_by(data:parsed_message_id(m))
11 |
12 | return if metric.blank?
13 |
14 | campaign = metric.campaign
15 | #subscriber = metric.trackable
16 | #subscription = campaign.subscriptions.find_by(subscriber: subscriber)
17 | subscription = metric.trackable
18 |
19 | subscription.unsubscribe! if track_type == "spam"
20 | subscription.subscriber.send("track_#{track_type}".to_sym, {
21 | host: referrer,
22 | campaign_id: campaign.id,
23 | data: data
24 | })
25 | end
26 |
27 | def parsed_message_id(m)
28 | m["mail"]["messageId"]
29 | end
30 |
31 | end
32 | end
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fi.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(t){t.datepicker.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fi)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lt.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pt-BR.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])});
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ta.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)});
--------------------------------------------------------------------------------
/app/controllers/chaskiq/manage/metrics_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class Manage::MetricsController < ApplicationController
5 |
6 | before_filter :authentication_method
7 | before_filter :find_campaign
8 |
9 | def index
10 | @q = @campaign.metrics.ransack(params[:q])
11 |
12 | @metrics = @q.result
13 | .includes(:trackable)
14 | .order("chaskiq_metrics.created_at desc")
15 | .page(params[:page])
16 | .per(8)
17 |
18 | respond_to do |format|
19 | format.html{ render "chaskiq/manage/campaigns/show" }
20 | format.xml { render :xml => @people.to_xml }
21 | end
22 |
23 | end
24 |
25 | protected
26 |
27 | def find_campaign
28 | @campaign = Chaskiq::Campaign.find(params[:campaign_id])
29 | end
30 |
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/spec/dummy/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'pathname'
3 |
4 | # path to your application root.
5 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
6 |
7 | Dir.chdir APP_ROOT do
8 | # This script is a starting point to setup your application.
9 | # Add necessary setup steps to this file:
10 |
11 | puts "== Installing dependencies =="
12 | system "gem install bundler --conservative"
13 | system "bundle check || bundle install"
14 |
15 | # puts "\n== Copying sample files =="
16 | # unless File.exist?("config/database.yml")
17 | # system "cp config/database.yml.sample config/database.yml"
18 | # end
19 |
20 | puts "\n== Preparing database =="
21 | system "bin/rake db:setup"
22 |
23 | puts "\n== Removing old logs and tempfiles =="
24 | system "rm -f log/*"
25 | system "rm -rf tmp/cache"
26 |
27 | puts "\n== Restarting application server =="
28 | system "touch tmp/restart.txt"
29 | end
30 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-vi.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.4 - 2014-01-17
2 | * http://jqueryui.com
3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4 | jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)});
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/campaigns/_actions.haml:
--------------------------------------------------------------------------------
1 | .btn-group
2 | %button.btn.btn-primary.dropdown-toggle{"aria-expanded" => "false", "data-toggle" => "dropdown"}
3 | Actions
4 | %span.caret
5 | %ul.dropdown-menu
6 |
7 | %li
8 | = link_to preview_manage_campaign_path(campaign) do
9 | %i.fa.fa-eye
10 | Preview
11 |
12 | %li
13 | = link_to test_manage_campaign_path(campaign) do
14 | %i.fa.fa-heartbeat
15 | Test
16 |
17 | %li
18 | = link_to deliver_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do
19 | %i.fa.fa-paper-plane
20 | Send
21 |
22 | %li
23 | = link_to clone_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do
24 | %i.fa.fa-copy
25 | clone
26 |
27 | %li
28 | = link_to purge_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do
29 | %i.fa.fa-trash
30 | purge metrics
--------------------------------------------------------------------------------
/app/views/kaminari/twitter-bootstrap-3/_paginator.html.erb:
--------------------------------------------------------------------------------
1 | <%# The container tag
2 | - available local variables
3 | current_page: a page object for the currently displayed page
4 | num_pages: total number of pages
5 | per_page: number of items to fetch per page
6 | remote: data-remote
7 | paginator: the paginator that renders the pagination tags inside
8 | -%>
9 | <%- pagination_class ||= '' %>
10 | <%= paginator.render do -%>
11 |
24 | <% end -%>
25 |
--------------------------------------------------------------------------------
/lib/chaskiq/link_renamer.rb:
--------------------------------------------------------------------------------
1 | require "nokogiri"
2 |
3 | module Chaskiq
4 | class LinkRenamer
5 |
6 | def self.convert(html, url_prefix="")
7 | content = Nokogiri::HTML(html)
8 | content.css("a").each do |link|
9 | next if link.attr("class").present? && link.attr("class").include?("tpl-block")
10 | val = link.attributes["href"].value
11 | link.attributes["href"].value = self.rename_link(val, url_prefix)
12 | end
13 |
14 | #content.css("div").each do |node|
15 | # if node.content !~ /\A\s*\Z/
16 | # node.replace(content.create_element('p', node.inner_html.html_safe))
17 | # end
18 | #end
19 |
20 | content.css('div.mojoMcContainerEmptyMessage').remove
21 |
22 | #make sure nokogiri does not rips off my mustaches
23 | content.to_html.gsub("%7B%7B", "{{").gsub("%7D%7D", "}}")
24 | end
25 |
26 | def self.rename_link(value, url_prefix)
27 | "#{url_prefix}" + value
28 | end
29 |
30 | end
31 | end
32 |
--------------------------------------------------------------------------------
/spec/lib/link_renamer_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe LinkRenamer, type: :model do
5 |
6 | let(:html) { "
"}
7 | let(:renamer){ Chaskiq::LinkRenamer }
8 |
9 | it "will rename links" do
10 | data = renamer.convert(html, "AAA")
11 | expect(data).to include("AAA")
12 | end
13 |
14 |
15 | it "test_initialize_no_escape_attributes_option" do
16 | html = "
17 | Google
18 | Link
19 | "
20 |
21 | [:nokogiri].each do |adapter|
22 | pm = Premailer.new(html, :with_html_string => true, :adapter => adapter, :escape_url_attributes => false)
23 | pm.to_inline_css
24 | doc = pm.processed_doc
25 | expect( doc.at('#google')['href']).to be == 'http://google.com'
26 | expect(doc.at('#noescape')['href']).to be == '{{link_url}}'
27 | end
28 | end
29 |
30 | end
31 | end
32 |
--------------------------------------------------------------------------------
/spec/dummy/config/secrets.yml:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Your secret key is used for verifying the integrity of signed cookies.
4 | # If you change this key, all old signed cookies will become invalid!
5 |
6 | # Make sure the secret is at least 30 characters and all random,
7 | # no regular words or you'll be exposed to dictionary attacks.
8 | # You can use `rake secret` to generate a secure secret key.
9 |
10 | # Make sure the secrets in this file are kept private
11 | # if you're sharing your code publicly.
12 |
13 | development:
14 | secret_key_base: 04a8adbe50e879b4a055f16b81f10e3a29eeca9c6ba20e1e64abfd64392ec0ad714c6cfafe672a31738a2c2aca8d7cbc1bfbf36c155b32489beba3e0aec0309e
15 |
16 | test:
17 | secret_key_base: 301166d4fc01bbe749466d1e7576f909e189594db2a806ecdc09a84583617911b05e2eefc89bc1b6f361e97ce9d908366d0c19053a3bb974d61096324eeb756e
18 |
19 | # Do not keep production secrets in the repository,
20 | # instead read values from the environment.
21 | production:
22 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
23 |
--------------------------------------------------------------------------------
/db/migrate/20150318021006_create_chaskiq_campaigns.rb:
--------------------------------------------------------------------------------
1 | class CreateChaskiqCampaigns < ActiveRecord::Migration
2 | def change
3 | create_table :chaskiq_campaigns do |t|
4 | t.string :subject
5 | t.string :from_name
6 | t.string :from_email
7 | t.string :reply_email
8 | t.text :plain_content
9 | t.text :html_content
10 | t.text :premailer
11 | t.text :description
12 | t.string :logo
13 | t.string :name
14 | t.string :query_string
15 | t.datetime :scheduled_at
16 | t.string :timezone
17 | t.string :state
18 | t.integer :recipients_count
19 | t.boolean :sent
20 | t.integer :opens_count
21 | t.integer :clicks_count
22 | t.references :parent, index: true
23 |
24 | t.timestamps null: false
25 | end
26 | add_reference :chaskiq_campaigns, :list, index: true
27 | add_reference :chaskiq_campaigns, :template, index: true
28 | #add_foreign_key :chaskiq_campaigns, :chaskiq_templates
29 | #add_foreign_key :chaskiq_campaigns, :parents
30 | end
31 | end
32 |
--------------------------------------------------------------------------------
/app/views/layouts/chaskiq/_topnavbar.html.haml:
--------------------------------------------------------------------------------
1 |
2 | %header.navbar.navbar-default.navbar-fixed-top{:role => "banner"}
3 | .container
4 | .navbar-header
5 | %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", :type => "button"}
6 | %span.sr-only Toggle navigation
7 | %span.icon-bar
8 | %span.icon-bar
9 | %span.icon-bar
10 | %a.navbar-brand{:href => "/"} CHASKIQ
11 | %nav.collapse.navbar-collapse{:role => "navigation"}
12 | %ul.nav.navbar-nav
13 | %li
14 | = link_to "Campaigns", manage_campaigns_path
15 | %li
16 | = link_to "Lists", manage_lists_path
17 | %li
18 | = link_to "Templates", manage_templates_path
19 |
20 | %ul.nav.navbar-right.navbar-nav
21 | %li.dropdown
22 | %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"}
23 | %i.glyphicon.glyphicon-search
24 | %ul.dropdown-menu
25 | %li
26 | %a{href: ""}
27 | %i.fa.fa-sign-out
28 | Log out
--------------------------------------------------------------------------------
/app/models/chaskiq/subscriber.rb:
--------------------------------------------------------------------------------
1 |
2 | module Chaskiq
3 | class Subscriber < ActiveRecord::Base
4 |
5 | has_many :subscriptions
6 | has_many :lists, through: :subscriptions, class_name: "Chaskiq::List"
7 | has_many :metrics , as: :trackable
8 | has_many :campaigns, through: :lists, class_name: "Chaskiq::Campaign"
9 |
10 | validates :email , presence: true
11 |
12 | #validates :name , presence: true
13 |
14 | %w[click open bounce spam].each do |action|
15 | define_method("track_#{action}") do |opts|
16 | m = self.metrics.new
17 | m.assign_attributes(opts)
18 | m.action = action
19 | m.save
20 | end
21 | end
22 |
23 | def encoded_id
24 | URLcrypt.encode(self.email)
25 | end
26 |
27 | def decoded_id
28 | URLcrypt.decode(self.email)
29 | end
30 |
31 | def style_class
32 | case self.state
33 | when "passive"
34 | "plain"
35 | when "subscribed"
36 | "information"
37 | when "unsusbscribed"
38 | "warning"
39 | end
40 | end
41 |
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/_form.haml:
--------------------------------------------------------------------------------
1 |
2 | .row
3 | .col-lg-12
4 | .wrapper.wrapper-content
5 | .ibox
6 | .ibox-title
7 | %h5 New Template
8 | .ibox-tools
9 | .ibox-content
10 |
11 | = simple_form_for ["manage", @template] do |f|
12 | = f.input :name
13 | = f.input :body, required: false
14 | = f.input :css, required: false
15 | = f.submit "crear"
16 |
17 |
18 | - content_for :javascript do
19 |
20 | :javascript
21 |
22 |
23 | $(function() {
24 |
25 | var editor_one = CodeMirror.fromTextArea(document.getElementById("template_body"), {
26 | lineNumbers: true,
27 | matchBrackets: true,
28 | styleActiveLine: true,
29 | theme: "elegant"
30 | });
31 |
32 | var editor_two = CodeMirror.fromTextArea(document.getElementById("template_css"), {
33 | lineNumbers: true,
34 | matchBrackets: true,
35 | styleActiveLine: true,
36 | theme: "elegant"
37 | });
38 |
39 | });
40 |
41 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | begin
2 | require 'bundler/setup'
3 | rescue LoadError
4 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5 | end
6 |
7 | require 'rdoc/task'
8 |
9 | RDoc::Task.new(:rdoc) do |rdoc|
10 | rdoc.rdoc_dir = 'rdoc'
11 | rdoc.title = 'Chaskiq'
12 | rdoc.options << '--line-numbers'
13 | rdoc.rdoc_files.include('README.rdoc')
14 | rdoc.rdoc_files.include('lib/**/*.rb')
15 | end
16 |
17 | APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18 | load 'rails/tasks/engine.rake'
19 |
20 |
21 | load 'rails/tasks/statistics.rake'
22 |
23 |
24 |
25 | Bundler::GemHelper.install_tasks
26 |
27 | require 'rake/testtask'
28 |
29 | Rake::TestTask.new(:test) do |t|
30 | t.libs << 'lib'
31 | t.libs << 'rspec'
32 | t.pattern = 'spec/**/*_spec.rb'
33 | t.verbose = false
34 | end
35 |
36 |
37 | task default: :test
38 |
39 | task :server do
40 | #system "cd spec/dummy && bundle exec rails s"
41 | system "cd spec/dummy && bundle exec thin --threadpool-size 50"
42 | end
43 |
44 | task :console do
45 | system "cd spec/dummy && bundle exec rails c"
46 | end
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/application.css:
--------------------------------------------------------------------------------
1 | /*
2 | * This is a manifest file that'll be compiled into application.css, which will include all the files
3 | * listed below.
4 | *
5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7 | *
8 | * You're free to add application-wide styles to this file and they'll appear at the top of the
9 | * compiled file, but it's generally better to create a new file per style scope.
10 | *
11 | *= require_self
12 | *= require font-awesome
13 | * require animate/animate.css
14 | *= require summernote/summernote-bs3.css
15 | *= require summernote/summernote.css
16 |
17 |
18 | *= require datapicker/datepicker3.css
19 | *= require toastr/toastr.css
20 | *= require codemirror/elegant.css
21 | *= require codemirror/codemirror.css
22 | *= require colorpicker/css/bootstrap-colorpicker.scss
23 | *= require select2/select2.css
24 |
25 | *= require chaskiq/manage/campaign_wizard.css
26 | *= require chaskiq/style
27 |
28 | */
29 |
--------------------------------------------------------------------------------
/app/views/layouts/chaskiq/empty.html.haml:
--------------------------------------------------------------------------------
1 | !!!
2 | %html
3 | %head
4 | %meta{:charset => "utf-8"}/
5 | %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/
6 | %title Chaskiq
7 | / Include style per-controller - vendor plugins
8 | -#= stylesheet_link_tag params[:controller] if ::Rails.application.assets.find_asset("#{params[:controller]}.css")
9 | / Main css styles
10 | = stylesheet_link_tag 'chaskiq/application', media: 'all', 'data-turbolinks-track' => true
11 | / Main javascript files
12 | = javascript_include_tag 'chaskiq/application', 'data-turbolinks-track' => true
13 | = csrf_meta_tags
14 | %body.gray-bg
15 | / Main view
16 | = yield
17 | / Include javascript per-controller - vendor plugins
18 | -#= javascript_include_tag params[:controller] if ::Rails.application.assets.find_asset("#{params[:controller]}.js")
19 |
20 | / Include javascript per-view
21 | / For demo purpose we include javascript in view but you can easily start SeedProject and organize it with Rails asset pipeline as you want
22 | = yield :javascript
23 |
--------------------------------------------------------------------------------
/MIT-LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2015 miguel michelson
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/app/views/chaskiq/subscribers/edit.haml:
--------------------------------------------------------------------------------
1 | .middle-box.text-center.loginscreen.animated.fadeInDown
2 | %div
3 | %div
4 | %h1.logo-name
5 | +
6 | %h3= @campaign.name
7 | %p
8 | = @campaign.try(:tagline)
9 |
10 | %p Don't miss our next post!
11 |
12 | Update your subscription settings
13 |
14 | = simple_form_for(@subscriber, :url => campaign_subscriber_path(@campaign, @subscriber), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f|
15 |
16 | .form-group
17 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email"
18 |
19 | .form-group
20 | = f.input :name, :required => false, label: false, placeholder: "first name"
21 |
22 | .form-group
23 | = f.input :last_name, :required => false, label: false, placeholder: "last name"
24 |
25 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading"
26 |
27 |
28 | %p.m-t
29 | %small
30 | = @campaign.name
31 | ©
32 | = Time.now.year
33 |
--------------------------------------------------------------------------------
/lib/generators/chaskiq/install_generator.rb:
--------------------------------------------------------------------------------
1 | require 'securerandom'
2 |
3 | module Chaskiq
4 | module Generators
5 | class InstallGenerator < Rails::Generators::Base
6 | source_root File.expand_path("../templates", __FILE__)
7 |
8 | desc "Creates Chaskiq initializer, routes and copy locale files to your application."
9 | class_option :orm
10 |
11 | def copy_initializer
12 | #@underscored_user_name = "user".underscore
13 | template '../templates/chaskiq.rb.erb', 'config/initializers/chaskiq.rb'
14 | end
15 |
16 | def setup_routes
17 | route "mount Chaskiq::Engine => '/'"
18 | end
19 |
20 | #def self.source_root
21 | # File.expand_path("../templates", __FILE__)
22 | #end
23 |
24 | def create_migrations
25 | exec 'bundle exec rake chaskiq:install:migrations'
26 | #Dir["#{self.class.source_root}/migrations/*.rb"].sort.each do |filepath|
27 | # name = File.basename(filepath)
28 | # template "migrations/#{name}", "db/migrate/#{name}"
29 | # sleep 1
30 | #end
31 | end
32 | end
33 | end
34 | end
--------------------------------------------------------------------------------
/app/views/chaskiq/campaigns/subscribe.html.haml:
--------------------------------------------------------------------------------
1 | .middle-box.text-center.loginscreen
2 | %div
3 | %div
4 | %h1.logo-name
5 | +
6 | %h3= @campaign.name
7 | %p
8 | = @campaign.try(:tagline)
9 |
10 | %p Don't miss our next post!
11 |
12 | Subscribe to our newsletter! We include fresh content, articles from our community and events we attend.
13 |
14 | = simple_form_for(@subscriber, :url => "", html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f|
15 |
16 | .form-group
17 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email"
18 |
19 | .form-group
20 | = f.input :name, :required => false, label: false, placeholder: "first name"
21 |
22 | .form-group
23 | = f.input :last_name, :required => false, label: false, placeholder: "last name"
24 |
25 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading"
26 |
27 |
28 | %p.m-t
29 | %small
30 | = @campaign.name
31 | ©
32 | = Time.now.year
33 |
--------------------------------------------------------------------------------
/app/views/chaskiq/subscribers/new.html.haml:
--------------------------------------------------------------------------------
1 | .middle-box.text-center.loginscreen.animated.fadeInDown
2 | %div
3 | %div
4 | .logo-name
5 | = image_tag @campaign.logo, with: 200
6 |
7 | %h3= @campaign.name
8 | %p
9 | = @campaign.try(:tagline)
10 |
11 | %p Suscribete a nuestro newsletter
12 |
13 | = @campaign.description
14 |
15 | = simple_form_for(@subscriber, :url => campaign_subscribers_path(@campaign), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f|
16 |
17 | .form-group
18 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email"
19 |
20 | .form-group
21 | = f.input :name, :required => false, label: false, placeholder: "first name"
22 |
23 | .form-group
24 | = f.input :last_name, :required => false, label: false, placeholder: "last name"
25 |
26 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading"
27 |
28 |
29 | %p.m-t
30 | %small
31 | = @campaign.name
32 | ©
33 | = Time.now.year
34 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/manage/campaign_wizard_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 | require "wicked"
3 |
4 | module Chaskiq
5 | class Manage::CampaignWizardController < ApplicationController
6 |
7 | before_filter :authentication_method
8 | before_filter :find_campaign , except: [:create]
9 |
10 | include Wicked::Wizard
11 |
12 | steps :list, :setup, :template, :design, :confirm
13 |
14 | def show
15 | render_wizard
16 | end
17 |
18 | def design
19 | render_wizard
20 | render :show , layout: false
21 | end
22 |
23 | def update
24 | @campaign.update_attributes(resource_params)
25 | render_wizard @campaign
26 | end
27 |
28 | def create
29 | @campaign = Chaskiq::Campaign.create(resource_params)
30 | redirect_to manage_wizard_path(steps.first, :campaign_id => @campaign.id)
31 | end
32 |
33 | protected
34 |
35 | def find_campaign
36 | @campaign = Chaskiq::Campaign.find(params[:campaign_id])
37 | end
38 |
39 | def resource_params
40 | return [] if request.get?
41 | params.require(:campaign).permit!
42 | end
43 |
44 | end
45 | end
46 |
--------------------------------------------------------------------------------
/spec/dummy/config/application.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('../boot', __FILE__)
2 |
3 | require 'rails/all'
4 |
5 | Bundler.require(*Rails.groups)
6 | require "chaskiq"
7 |
8 | module Dummy
9 | class Application < Rails::Application
10 | # Settings in config/environments/* take precedence over those specified here.
11 | # Application configuration should go into files in config/initializers
12 | # -- all .rb files in that directory are automatically loaded.
13 |
14 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
15 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
16 | # config.time_zone = 'Central Time (US & Canada)'
17 |
18 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
19 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
20 | # config.i18n.default_locale = :de
21 | config.active_job.queue_adapter = :sidekiq
22 | # Do not swallow errors in after_commit/after_rollback callbacks.
23 | config.active_record.raise_in_transactional_callbacks = true
24 |
25 | end
26 | end
27 |
28 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/manage/templates_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class Manage::TemplatesController < ApplicationController
5 |
6 | before_filter :authentication_method
7 |
8 | def index
9 | @templates = Chaskiq::Template.all
10 | end
11 |
12 | def show
13 | @template = Chaskiq::Template.find(params[:id])
14 | end
15 |
16 | def new
17 | @template = Chaskiq::Template.new
18 | end
19 |
20 | def edit
21 | @template = Chaskiq::Template.find(params[:id])
22 | end
23 |
24 | def update
25 | @template = Chaskiq::Template.find(params[:id])
26 | if @template.update_attributes(resource_params)
27 | redirect_to manage_templates_path
28 | else
29 | render "edit"
30 | end
31 | end
32 |
33 | def create
34 | @template = Chaskiq::Template.create(resource_params)
35 | if @template.errors.blank?
36 | redirect_to manage_templates_path
37 | else
38 | render "new"
39 | end
40 | end
41 |
42 | def resource_params
43 | return [] if request.get?
44 | params.require(:template).permit!
45 | end
46 |
47 | end
48 | end
49 |
--------------------------------------------------------------------------------
/spec/controllers/chaskiq/tracks_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe TracksController, type: :controller do
5 |
6 | routes { Chaskiq::Engine.routes }
7 | let(:list){ FactoryGirl.create(:chaskiq_list) }
8 | let(:subscriber){
9 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber)
10 | }
11 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, list: list) }
12 |
13 | %w[open bounce spam].each do |action|
14 | it "will track an #{action}" do
15 | campaign
16 | response = get(action , campaign_id: campaign.id, id: subscriber.encoded_id)
17 | expect(response.status).to be == 200
18 | expect(campaign.metrics.send(action.pluralize).size).to be == 1
19 | expect(response.content_type).to be == "image/gif"
20 | end
21 | end
22 |
23 | it "will track a click and redirect" do
24 | campaign
25 | response = get("click" , campaign_id: campaign.id, id: subscriber.encoded_id, r: "http://google.com")
26 | expect(response.status).to be == 302
27 | expect(campaign.metrics.clicks.size).to be == 1
28 | expect(response).to redirect_to "http://google.com"
29 | end
30 |
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/spec/models/chaskiq/subscriber_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 | require 'urlcrypt'
3 | module Chaskiq
4 | RSpec.describe Subscriber, type: :model do
5 | it{ should have_many :subscriptions }
6 | it{ should have_many(:lists).through(:subscriptions) }
7 | it{ should have_many :metrics }
8 | it{ should have_many(:campaigns).through(:lists) }
9 |
10 |
11 | describe "states" do
12 | let(:subscriber){ FactoryGirl.create(:chaskiq_subscriber)}
13 |
14 | it "will set passive state" do
15 | #expect(subscriber).to be_passive
16 | end
17 |
18 | it "will notify susbscrition" do
19 | #expect(subscriber).to receive(:notify_subscription).once
20 | #subscriber.suscribe
21 | #expect(subscriber).to be_subscribed
22 | end
23 |
24 | it "will notify un susbscrition" do
25 | #expect(subscriber).to receive(:notify_unsubscription).once
26 | #subscriber.unsuscribe
27 | #expect(subscriber).to be_unsubscribed
28 | end
29 |
30 | it "encode decode email" do
31 | expect(subscriber.email).to_not be == subscriber.encoded_id
32 | expect(URLcrypt.encode(subscriber.email)).to be == subscriber.encoded_id
33 | end
34 |
35 | end
36 | end
37 | end
38 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/chaskiq/base/variables.scss:
--------------------------------------------------------------------------------
1 | // Font
2 | $font-stack: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
3 |
4 | // Basic Colors
5 | $navy: #1ab394; // Primary color
6 | $dark-gray: #c2c2c2; // Default color
7 | $blue: #1c84c6; // Success color
8 | $lazur: #23c6c8; // Info color
9 | $yellow: #f8ac59; // Warrning color
10 | $red: #ed5565; // Danger color
11 |
12 | // Various colors
13 | $text-color: #676a6c; // Body text
14 | $gray: #f3f3f4; // Background wrapper color
15 | $light-gray: #d1dade; // Default label, badget
16 | $label-badget-color: #5e5e5e;
17 |
18 | // IBOX colors ( default panel colors)
19 | $border-color: #e3e3e3; // IBox border
20 | $ibox-title-bg: white; // IBox Background header
21 | $ibox-content-bg: white; // IBox Background content
22 |
23 | //Sidebar width
24 | $sidebar-width: 220px;
25 |
26 | // Boxed layout width
27 | $boxed-width: 1200px;
28 | $boxed-backgound: url("patterns/shattered.png");
29 |
30 | //Border radius for buttons
31 | $btn-border-radius: 3px;
32 |
33 | //Navigation
34 | $nav-bg: #fff;
35 | //$nav-profil-pattern: url("patterns/header-profile.png") no-repeat;
36 | $nav-profil-pattern: transparent;
37 | $nav-text-color: #a7b1c2;
38 |
--------------------------------------------------------------------------------
/app/views/chaskiq/manage/templates/index.haml:
--------------------------------------------------------------------------------
1 |
2 | = render "menu"
3 |
4 | .row
5 | .col-lg-12
6 | .wrapper.wrapper-content
7 | .ibox
8 | .ibox-title
9 | %h5 All Templates
10 | .ibox-tools
11 | %a.btn.btn-success.btn-xs{:href => new_manage_template_path }
12 | %i.fa.fa-plus
13 | Create new Template
14 | .ibox-content
15 | - @templates.each do |template|
16 | .col-sm-6.col-md-4
17 | .thumbnail
18 | %img{:alt => "300%x300", "data-holder-rendered" => "true", :src => "http://placehold.it/300x300"}
19 | .caption
20 | %h3#thumbnail-label
21 | = template.name
22 | %a.anchorjs-link{:href => "#thumbnail-label"}
23 | %span.anchorjs-icon
24 | %p
25 | %a.btn.btn-primary{:href => edit_manage_template_path(template), :role => "button"}
26 | %i.fa.fa-edit
27 | Edit
28 | %a.btn.btn-default{:href => manage_template_path(template), :role => "button", method: :delete, data: { confirm: "Are you sure?" }}
29 | %i.fa.fa-times
30 | Remove
31 |
32 | .clearfix
--------------------------------------------------------------------------------
/spec/models/chaskiq/subscription_spec.rb:
--------------------------------------------------------------------------------
1 | require 'rails_helper'
2 |
3 | module Chaskiq
4 | RSpec.describe Subscription, type: :model do
5 | it{ should belong_to :list }
6 | it{ should belong_to :subscriber }
7 | it{ should have_many :campaigns }
8 |
9 | let(:template){ FactoryGirl.create(:chaskiq_template) }
10 | let(:list){ FactoryGirl.create(:chaskiq_list) }
11 | let(:subscriber){
12 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber)
13 | }
14 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, template: template, list: list) }
15 |
16 | it "will set passive state" do
17 | subscriber
18 | expect(campaign.subscriptions.passive.size).to be == 1
19 | end
20 |
21 | it "will notify susbscrition" do
22 | sub = list.subscriptions.first
23 | #expect(sub).to receive(:notify_subscription).once
24 | list.subscribe(subscriber)
25 | expect(list.subscriptions.subscribed.map(&:subscriber)).to include subscriber
26 | end
27 |
28 | it "will notify un susbscrition" do
29 | #expect(subscriber).to receive(:notify_unsubscription).once
30 | list.unsubscribe(subscriber)
31 | expect(list.subscriptions.unsubscribed.map(&:subscriber)).to include subscriber
32 | end
33 |
34 |
35 | end
36 | end
37 |
--------------------------------------------------------------------------------
/spec/dummy/config/database.yml:
--------------------------------------------------------------------------------
1 | # SQLite version 3.x
2 | # gem install sqlite3
3 | #
4 | # Ensure the SQLite 3 gem is defined in your Gemfile
5 | # gem 'sqlite3'
6 | #
7 |
8 |
9 | # SQLite version 3.x
10 | # gem install sqlite3
11 | #
12 | # Ensure the SQLite 3 gem is defined in your Gemfile
13 | # gem 'sqlite3'
14 | development:
15 | adapter: mysql2
16 | database: chasky_dev
17 | username: root
18 | password:
19 | host: 127.0.0.1
20 | pool: 22
21 |
22 | # Warning: The database defined as "test" will be erased and
23 | # re-generated from your development database when you run "rake".
24 | # Do not set this db to the same as development or production.
25 | test:
26 | adapter: mysql2
27 | database: chasky_test
28 | username: root
29 | password:
30 | host: 127.0.0.1
31 | pool: 5
32 |
33 | #
34 | #default: &default
35 | # adapter: sqlite3
36 | # pool: 5
37 | # timeout: 5000
38 |
39 | #development:
40 | # <<: *default
41 | # database: db/development.sqlite3
42 |
43 | # Warning: The database defined as "test" will be erased and
44 | # re-generated from your development database when you run "rake".
45 | # Do not set this db to the same as development or production.
46 | #test:
47 | # <<: *default
48 | # database: db/test.sqlite3
49 |
50 | #production:
51 | # <<: *default
52 | # database: db/production.sqlite3
53 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/manage/attachments_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class Manage::AttachmentsController < ApplicationController
5 |
6 | before_filter :authentication_method
7 | before_filter :find_campaign
8 |
9 | def index
10 | @attachments = @campaign.attachments.page(params[:page]).per(50)
11 | respond_to do |format|
12 | format.html
13 | format.json { render json: @attachments }
14 | end
15 | end
16 |
17 | def show
18 | @attachment = @campaign.attachments.find(params[:id])
19 | end
20 |
21 | def new
22 | @attachment = @campaign.attachments.new
23 | end
24 |
25 | def create
26 | @attachment = @campaign.attachments.create(resource_params)
27 | respond_to do |format|
28 | format.html
29 | format.json { render json: @attachment }
30 | end
31 | end
32 |
33 | protected
34 |
35 | def find_campaign
36 | @campaign = Chaskiq::Campaign.find(params[:campaign_id])
37 | end
38 |
39 | def resource_params
40 | return [] if request.get?
41 | params[:attachment] = {} unless params[:attachment].present?
42 | params[:attachment][:image] = params[:image] if params[:image].present?
43 | params.require(:attachment).permit! #(:name)
44 | end
45 |
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/vendor/assets/javascripts/codemirror/mode/diff/diff.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: http://codemirror.net/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"));
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod);
9 | else // Plain browser env
10 | mod(CodeMirror);
11 | })(function(CodeMirror) {
12 | "use strict";
13 |
14 | CodeMirror.defineMode("diff", function() {
15 |
16 | var TOKEN_NAMES = {
17 | '+': 'positive',
18 | '-': 'negative',
19 | '@': 'meta'
20 | };
21 |
22 | return {
23 | token: function(stream) {
24 | var tw_pos = stream.string.search(/[\t ]+?$/);
25 |
26 | if (!stream.sol() || tw_pos === 0) {
27 | stream.skipToEnd();
28 | return ("error " + (
29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');
30 | }
31 |
32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();
33 |
34 | if (tw_pos === -1) {
35 | stream.skipToEnd();
36 | } else {
37 | stream.pos = tw_pos;
38 | }
39 |
40 | return token_name;
41 | }
42 | };
43 | });
44 |
45 | CodeMirror.defineMIME("text/x-diff", "diff");
46 |
47 | });
48 |
--------------------------------------------------------------------------------
/app/models/chaskiq/subscription.rb:
--------------------------------------------------------------------------------
1 | require "aasm"
2 |
3 | module Chaskiq
4 | class Subscription < ActiveRecord::Base
5 | belongs_to :subscriber
6 | belongs_to :list
7 | has_many :campaigns, through: :list
8 | has_many :metrics , as: :trackable
9 |
10 | delegate :name, :last_name, :email, to: :subscriber
11 |
12 | scope :availables, ->{ where(["chaskiq_subscriptions.state =? or chaskiq_subscriptions.state=?", "passive", "subscribed"]) }
13 |
14 | include AASM
15 |
16 | aasm :column => :state do # default column: aasm_state
17 | state :passive, :initial => true
18 | state :subscribed, :after_enter => :notify_subscription
19 | state :unsubscribed, :after_enter => :notify_unsubscription
20 | #state :bounced, :after_enter => :make_bounced
21 | #state :complained, :after_enter => :make_complained
22 |
23 | event :subscribe do
24 | transitions :from => [:passive, :unsubscribed], :to => :subscribed
25 | end
26 |
27 | event :unsubscribe do
28 | transitions :from => [:subscribed, :passive], :to => :unsubscribed
29 | end
30 | end
31 |
32 | def notify_unsubscription
33 | puts "Pending"
34 | end
35 |
36 | def notify_subscription
37 | #we should only unsubscribe when process is made from interface, not from sns notification
38 | puts "Pending"
39 | end
40 |
41 |
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/app/assets/javascripts/chaskiq/manage/helpers.js.coffee:
--------------------------------------------------------------------------------
1 | Chaskiq.Helpers.showModal = (body, header, opts={}) ->
2 | window.Chaskiq.Helpers.cleanModal()
3 | body ?= ""
4 | header ?= ""
5 | @myModal = $("#myModal")
6 | @modalHeader = $("#myModal .modal-header")
7 | @modalBody = $("#myModal .modal-body")
8 | @modalFooter = $("#myModal .modal-footer")
9 | @myModal.attr("data-modal-name",opts.modal_name) if opts.modal_name
10 | @myModal.find('.modal-dialog').addClass(opts.dialog_class) if opts.dialog_class
11 |
12 | if opts['noheader'] then @modalHeader.addClass('hidden') else @modalHeader.removeClass('hidden')
13 | if opts['nofooter'] then @modalFooter.addClass('hidden') else @modalFooter.removeClass('hidden')
14 |
15 | @modalBody.html body
16 | @myModal.modal("show")
17 |
18 | $("#myModal .modal-footer .btn-primary").on "click", ()->
19 | $("#myModal form").submit()
20 |
21 | this.myModal[0].className = "modal fade in"
22 | @modalHeader.find('h4').html header unless header.length == 0
23 | return @myModal
24 |
25 | Chaskiq.Helpers.cleanModal = () ->
26 | self = $("#modal")
27 | haveModalName = self.attr("data-modal-name")
28 | self.attr("data-modal-name","") if typeof haveModalName isnt "undefined" and haveModalName isnt false # 1
29 | self.find(".modal-dialog").removeClass().addClass("modal-dialog")
30 | self.find(".modal-container, .modal-title").html('')
31 |
32 | Chaskiq.Helpers.hideModal = ()->
33 | $('#myModal').modal('hide');
34 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | Chaskiq::Engine.routes.draw do
2 |
3 | root 'dashboard#show'
4 |
5 | #public
6 | resources :campaigns, only: :show do
7 | member do
8 | get :subscribe
9 | get :unsubscribe
10 | get :forward
11 | end
12 |
13 | resources :subscribers do
14 | member do
15 | get :delete
16 | end
17 | end
18 |
19 | resources :tracks do
20 | member do
21 | get :click
22 | get :open
23 | get :bounce
24 | get :spam
25 | end
26 | end
27 | end
28 |
29 | #private
30 | scope 'manage',as: :manage do
31 | resources :campaigns, controller: 'manage/campaigns' do
32 | resources :wizard, controller: 'manage/campaign_wizard'
33 | member do
34 | get :preview
35 | get :premailer_preview
36 | get :test
37 | get :deliver
38 | get :clone
39 | get :editor
40 | get :purge
41 | get :iframe
42 | end
43 | resources :attachments, controller: 'manage/attachments'
44 | resources :metrics, controller: 'manage/metrics'
45 | end
46 |
47 | resources :lists, controller: 'manage/lists' do
48 | member do
49 | patch :upload
50 | get :clear
51 | end
52 | resources :subscribers, controller: 'manage/subscribers'
53 | end
54 | resources :templates, controller: 'manage/templates'
55 | end
56 |
57 | resources :hooks do
58 | collection do
59 | end
60 | end
61 |
62 | end
63 |
--------------------------------------------------------------------------------
/app/mailers/chaskiq/campaign_mailer.rb:
--------------------------------------------------------------------------------
1 | module Chaskiq
2 | class CampaignMailer < ApplicationMailer
3 |
4 | layout 'mailer'
5 | #default delivery_method: :ses
6 |
7 | def newsletter(campaign, subscription)
8 | subscriber = subscription.subscriber
9 |
10 | return if subscriber.blank?
11 |
12 | content_type = "text/html"
13 |
14 | attrs = subscriber.attributes
15 |
16 | @campaign = campaign
17 |
18 | @subscriber = subscriber
19 |
20 | @body = campaign.compiled_template_for(subscriber).html_safe
21 |
22 | mail( from: "#{campaign.from_name}<#{campaign.from_email}>",
23 | to: subscriber.email,
24 | subject: campaign.subject,
25 | content_type: content_type,
26 | return_path: campaign.reply_email )
27 | end
28 |
29 | def test(campaign)
30 |
31 | content_type = "text/html"
32 |
33 | @campaign = campaign
34 |
35 | @subscriber = {name: "Test Name", last_name: "Test Last Name", email: "test@test.com"}
36 |
37 | @body = campaign.compiled_template_for(@subscriber).html_safe
38 |
39 | content_type = "text/html"
40 |
41 | mail( from: "#{campaign.from_name}<#{campaign.from_email}>",
42 | to: "miguelmichelson@gmail.com",
43 | subject: campaign.subject,
44 | body: campaign.reply_email,
45 | content_type: content_type ) do |format|
46 | format.html { render 'newsletter' }
47 | end
48 | end
49 |
50 | end
51 | end
52 |
--------------------------------------------------------------------------------
/app/controllers/chaskiq/tracks_controller.rb:
--------------------------------------------------------------------------------
1 | require_dependency "chaskiq/application_controller"
2 |
3 | module Chaskiq
4 | class TracksController < ApplicationController
5 |
6 | before_filter :find_campaign
7 |
8 | #http://localhost:3000/chaskiq/campaigns/1/tracks/1/[click|open|bounce|spam].gif
9 | %w[open bounce spam].each do |action|
10 | define_method(action) do
11 | find_subscriber
12 | @subscriber.send("track_#{action}".to_sym, { host: get_referrer, campaign_id: @campaign.id })
13 | #return image
14 | img_path = Chaskiq::Engine.root.join("app/assets/images/chaskiq", "track.gif")
15 | send_data File.read(img_path, :mode => "rb"), :filename => '1x1.gif', :type => 'image/gif'
16 | #send_data File.read(view_context.image_url("chaskiq/track.gif"), :mode => "rb"), :filename => '1x1.gif', :type => 'image/gif'
17 | end
18 | end
19 |
20 | def click
21 | find_subscriber
22 | #TODO: if subscriber has not an open , we will track open too!
23 | #that's probably due to plain email or image not beign displayed
24 | @subscriber.track_click({ host: get_referrer, campaign_id: @campaign.id, data: params[:r] })
25 | redirect_to params[:r]
26 | end
27 |
28 | private
29 |
30 | def find_campaign
31 | @campaign = Chaskiq::Campaign.find(params[:campaign_id])
32 | end
33 |
34 | def find_subscriber
35 | @subscriber = @campaign.subscribers.find_by(email: URLcrypt.decode(params[:id]))
36 | end
37 |
38 | end
39 | end
40 |
--------------------------------------------------------------------------------