artfully_ose 1.3.0.pre1 → 1.3.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a91236e58df6a58752ee849ab10fdc434042889
4
- data.tar.gz: a23a35e3e9a3509d51aab0b2649d89b144fb57e9
3
+ metadata.gz: 2227e62aa7b96bf9b47c53b10e6f7be5e505b8d2
4
+ data.tar.gz: 2730b7c985317b350a7375e3d323ce1625652f77
5
5
  SHA512:
6
- metadata.gz: dd3aa2d49a76d635a0da70475c5f6ae428eec357c42ce38e49cfbf9105423749122c9f20cbee3a1301e0c83c88ce9732fc09b8f53344d79a46605c449a1b0af0
7
- data.tar.gz: 33d68fe5b36584e757a141047835fe03fa0becb90efed842ae601ac206ed57fd98e9ddfd264ebdd5b7a15c50b7d25d6e365718d626c64b0a11fec1ef0572f377
6
+ metadata.gz: a1d9292c210b7f9eb3a73b4ab50be727c9a2963b494475ce7b2638d7f3ca8f1d5958972af8fb1f14c146b054be255d74c6dde8c7148933caa07a395061a94988
7
+ data.tar.gz: e94e5cda62a1e681e59f7dfffe0621018b3ea8c9c84c414e8ed4d51aac6bf7d58bc0ad6b0d8410d306e4f1379d3241a57a73d0283fbefb7a18f4dcba8d4feb33
@@ -0,0 +1,71 @@
1
+ class MailchimpKitsController < ApplicationController
2
+ rescue_from CanCan::AccessDenied do |exception|
3
+ flash[:alert] = exception.message
4
+ redirect_to root_path, :alert => exception.message
5
+ end
6
+
7
+ rescue_from Gibbon::GibbonError do |exception|
8
+ if exception.message =~ /api_key/
9
+ redirect_to edit_mailchimp_kit_path(params[:id])
10
+ end
11
+ redirect_to root_path, :alert => "There was a problem with mailchimp, please try again"
12
+ end
13
+
14
+ before_filter do
15
+ authorize! :edit, current_user.current_organization
16
+ end
17
+
18
+ def edit
19
+ @kit = Kit.find(params[:id])
20
+ authorize! :edit, @kit
21
+ end
22
+
23
+ def update
24
+ @kit = Kit.find(params[:id])
25
+ authorize! :edit, @kit
26
+
27
+ unless params[:mailchimp_kit][:api_key].nil?
28
+ params[:mailchimp_kit][:api_key] = params[:mailchimp_kit][:api_key].strip
29
+ end
30
+
31
+ @kit.old_api_key = @kit.api_key
32
+ if @kit.update_attributes(params[:mailchimp_kit])
33
+ redirect_to lists_mailchimp_kit_url(@kit)
34
+ else
35
+ params[:new_api_key] = true
36
+ flash[:error] = "We could not validate your api key. Please make sure it is correct and try again."
37
+ render :edit
38
+ end
39
+ end
40
+
41
+ def lists
42
+ @kit = Kit.find(params[:id])
43
+ authorize! :edit, @kit
44
+ end
45
+
46
+ def default_list
47
+ @kit = Kit.find(params[:id])
48
+ end
49
+
50
+ def manage
51
+ kit = Kit.find(params[:id])
52
+ authorize! :edit, kit
53
+
54
+ kit.change_lists(params[:lists] || [])
55
+ kit.update_attributes(mailchimp_kit_params)
56
+ redirect_to current_user.current_organization, :notice => "Great! We're syncing your MailChimp lists with Artful.ly and will email when we're done."
57
+ end
58
+
59
+ def hide_alert
60
+ kit = Kit.find(params[:id])
61
+ kit.hide_default_list_alert = true
62
+ kit.save
63
+ head :ok
64
+ end
65
+
66
+ private
67
+
68
+ def mailchimp_kit_params
69
+ params.fetch(:mailchimp_kit).slice(:default_list_id, :fan_subscribe_question)
70
+ end
71
+ end
@@ -0,0 +1,25 @@
1
+ class MailchimpWebhooksController < ApplicationController
2
+ skip_before_filter :authenticate_user!
3
+ skip_before_filter :metric_logged_in
4
+
5
+ def show
6
+ MailchimpKit.find(params[:id])
7
+ head :ok
8
+ end
9
+
10
+ def update
11
+ mailchimp_kit = MailchimpKit.find(params[:id])
12
+
13
+ if mailchimp_kit.attached_lists.none? { |list| list[:list_id] == params[:list_id] }
14
+ head 422
15
+ return
16
+ end
17
+
18
+ if !mailchimp_kit.cancelled?
19
+ job = MailchimpSyncJob.new(mailchimp_kit, :type => "webhook_#{params[:type]}", :data => params[:data], :list_id => params[:list_id])
20
+ Delayed::Job.enqueue(job, :queue => "mailchimp")
21
+ end
22
+
23
+ head :ok
24
+ end
25
+ end
@@ -3,6 +3,12 @@ class MembershipCompsController < ArtfullyOseController
3
3
 
4
4
  def new
5
5
  @membership_types = current_organization.membership_types.all
6
+
7
+ if @membership_types.empty?
8
+ flash[:notice] = "To comp a memberhsip to a patron you'll need to create a memebership type first."
9
+ redirect_to new_membership_type_path and return
10
+ end
11
+
6
12
  @membership_types_hash = {}
7
13
  @membership_types.each {|mt| @membership_types_hash[mt.id] = {:allow_multiple_memberships => mt.allow_multiple_memberships?,:formatted_ends_at => I18n.l(mt.ends_at, :format => :date_for_input)}}
8
14
 
@@ -75,7 +75,7 @@ class PeopleController < ArtfullyOseController
75
75
  single_optin = params.fetch("single_optin", false) == "true"
76
76
  @person.update_and_note_subscriptions!(current_user, subscribed_lists, groupings, single_optin)
77
77
  flash[:notice] << "Your changes have been saved." +
78
- (have_duplicate_addresses ? " We didnt save some addresses because they were duplicates." : "")
78
+ (have_duplicate_addresses ? " We didn't save some addresses because they were duplicates." : "")
79
79
  else
80
80
  errs = [@person.errors.delete(:"relationships.base")].flatten + [@person.errors.full_messages.to_sentence].flatten
81
81
  flash[:alert] = errs.blank? ? "Sorry, we couldn't save your changes. Make sure you entered a first name, last name or email address." : errs.compact
@@ -0,0 +1,14 @@
1
+ module MailchimpHelper
2
+ def default_list_options(kit)
3
+ lists = kit.attached_lists.map { |list| [list[:list_name], list[:list_id]] }
4
+ options_for_select(lists, kit.default_list_id)
5
+ end
6
+
7
+ def default_list_prompt(kit)
8
+ if kit.attached_lists.empty?
9
+ "Please select lists above"
10
+ else
11
+ "Select a list"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,126 @@
1
+ class ActionFeed
2
+ attr_accessor :organization_id, :redis
3
+ include ActionView::Helpers::SanitizeHelper
4
+ cattr_accessor :redis
5
+
6
+ def self.for(organization_id)
7
+ af = ActionFeed.new
8
+ af.organization_id = organization_id
9
+ @@redis ||= RedisManager.connection
10
+ af
11
+ end
12
+
13
+ def key
14
+ "feed:#{organization_id}"
15
+ end
16
+
17
+ def burst_key
18
+ "burst:#{organization_id}"
19
+ end
20
+
21
+ #
22
+ # If the action is ON TOP, add it to the top of the feed
23
+ # If the action is *in* the top, rebuild the feed
24
+ # Otherwise do nothing
25
+ #
26
+ def add(action)
27
+ Rails.logger.debug("ACTION_FEED [#{self.key}] checking action [#{action.id}]")
28
+
29
+ if(is_top? action.id)
30
+ Rails.logger.debug("ACTION_FEED [#{self.key}] adding action [#{action.id}]")
31
+ # lpush!
32
+ @@redis.lpush(self.key, for_dashboard(action))
33
+ @@redis.ltrim(self.key, 0, 24)
34
+ else
35
+ delay_time = action.can_wait? ? 300 : 10
36
+ self.rebuild_later(delay_time)
37
+ end
38
+ end
39
+
40
+ def feed
41
+ begin
42
+ @@redis.lrange(self.key, 0, 24)
43
+ rescue Exception => e
44
+ Airbrake.notify(e, :parameters => {:error_message => "Redis error getting action feed"})
45
+ []
46
+ end
47
+ end
48
+
49
+ def is_top?(action_id)
50
+ id = Action.recent(self.organization_id).limit(1).pluck(:id).first
51
+ Rails.logger.debug("ACTION_FEED [#{self.key}] top action is [#{id}]")
52
+ action_in_top = (action_id == id)
53
+
54
+ if (action_in_top)
55
+ Rails.logger.debug("ACTION_FEED [#{self.key}] action [#{action_id}] is on top")
56
+ end
57
+
58
+ action_in_top
59
+ end
60
+
61
+ def in_top?(action_id)
62
+ ids = Action.recent(self.organization_id).limit(25).pluck(:id)
63
+ Rails.logger.debug("ACTION_FEED [#{self.key}] top actions #{ids}")
64
+ action_in_top = ids.include?(action_id)
65
+ Rails.logger.debug("ACTION_FEED [#{self.key}] action [#{action_id}] is in top [#{action_in_top}]")
66
+ action_in_top
67
+ end
68
+
69
+ def rebuild_if_necessary(action, and_delay=false)
70
+ if ((action.deleted_at.present?) || (self.in_top? action.id))
71
+ Rails.logger.debug("ACTION_FEED [#{self.key}] rebuild_if_necessary")
72
+ and_delay ? self.rebuild_later : self.rebuild
73
+ end
74
+ end
75
+
76
+ def rebuild_later(delay_time = 10)
77
+ Rails.logger.debug("ACTION_FEED [#{self.key}] rebuild_later")
78
+
79
+ RedisManager.burst_job(burst_key, delay_time) do
80
+ Rails.logger.debug("ACTION_FEED [#{self.key}] scheduling rebuild")
81
+ job = ActionFeed::RebuildJob.new(self.organization_id)
82
+ Delayed::Job.enqueue(job, {:queue => "feed", :run_at => delay_time.seconds.from_now})
83
+ end
84
+ end
85
+
86
+ #
87
+ # To rebuild now. Not terribly slow but still use with caution
88
+ #
89
+ def rebuild
90
+ Rails.logger.debug("ACTION_FEED [#{self.key}] rebuilding")
91
+ actions = Action.recent(self.organization_id).limit(25)
92
+ self.destroy
93
+ actions.each do |action|
94
+ # rpush!
95
+ @@redis.rpush(self.key, for_dashboard(action))
96
+ end
97
+ @@redis.ltrim(self.key, 0, 24)
98
+ actions
99
+ end
100
+
101
+ def destroy
102
+ @@redis.del(key)
103
+ end
104
+
105
+ def for_dashboard(action)
106
+ template = File.read("#{ArtfullyOse::Engine.root}/app/views/index/_action.html.haml")
107
+ haml_engine = Haml::Engine.new(template)
108
+
109
+ base = Class.new do
110
+ include ArtfullyOseHelper
111
+ include ActionView::Helpers::DateHelper
112
+ end.new
113
+
114
+ scope = base
115
+ output = haml_engine.render(scope, {:action => action})
116
+ output.gsub("'","\'") # necessary to escape single '
117
+ output = sanitize(output)
118
+ output
119
+ end
120
+
121
+ class RebuildJob < Struct.new(:organization_id)
122
+ def perform
123
+ ActionFeed.for(self.organization_id).rebuild
124
+ end
125
+ end
126
+ end
@@ -5,5 +5,13 @@
5
5
  %ul
6
6
  %li Paid Ticketing
7
7
  %li People
8
- %li= link_to "Membership", [:edit, @organization.membership_kit], :id => "configure_#{@organization.membership_kit.type.underscore}"
9
- %li= link_to "Passes", [:edit, @organization.passes_kit], :id => "configure_#{@organization.passes_kit.type.underscore}"
8
+ %li Scannable Tickets
9
+ %li Fundraising/Campaigns
10
+ -if @ability.can? :manage, Kit
11
+ %li= link_to "Membership", [:edit, @organization.membership_kit]
12
+ %li= link_to "Passes", [:edit, @organization.passes_kit]
13
+ %li= link_to "Mailchimp", [:edit, @organization.kits.where(:type => "MailchimpKit").first]
14
+ -else
15
+ %li Membership
16
+ %li Passes
17
+ %li Mailchimp
@@ -2,8 +2,6 @@
2
2
  %html{:lang => "en", "ng-app" => "artfully"}
3
3
  %head
4
4
  %title= "#{yield :title} : #{t 'artfully.page_title'}"
5
- = stylesheet_link_tag "#{ENV['CAS_ASSET_HOST'] || ENV['CAS_BASE_URL']}/assets/memberbar.css"
6
- = javascript_include_tag "#{ENV['CAS_ASSET_HOST'] || ENV['CAS_BASE_URL']}/assets/memberbar.js"
7
5
 
8
6
  :plain
9
7
  <link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'>
@@ -0,0 +1,19 @@
1
+ - content_for :header do
2
+ %h1 MailChimp Kit
3
+
4
+ .row
5
+ .span6
6
+ %p
7
+ With your activated MailChimp Kit, you can:
8
+ %ul{:style => "margin:10px;padding:10px;list-style:disc;"}
9
+ %li Push your Artful.ly contacts up to Mailchimp
10
+ %li Import your MailChimp subscribers into Artful.ly
11
+ %li Record MailChimp newsletters on Artful.ly people records
12
+ %li Let fans subscribe to a list when they checkout
13
+
14
+ .span5
15
+ .well
16
+ .center
17
+ Click the Activate button to get started
18
+ .btn-toolbar.form-actions.center
19
+ .btn-group= button_to "Activate Mailchimp", kits_path(:type => @kit.type.underscore), :class => "btn btn-success btn-large"
@@ -0,0 +1,20 @@
1
+ - content_for :header do
2
+ %h1 MailChimp Kit
3
+
4
+ .row
5
+ .span6.offset3
6
+ - if @kit.api_key.nil? || params[:new_api_key]
7
+ = form_for @kit, :html => { :class => 'form-horizontal' } do |f|
8
+ %p
9
+ Artful.ly needs your MailChimp API key to communicate with MailChimp. Get your API key #{link_to "here", "http://admin.mailchimp.com/account/api", :target => "_blank" } and fill in that value below:
10
+
11
+ = f.text_field :api_key, :class => "span4"
12
+
13
+ = f.submit "Set API Key", :class => "btn"
14
+ - else
15
+ %p
16
+ Your MailChimp Kit is all set! If you like, you can:
17
+ %p
18
+ = link_to "Change this API key", edit_mailchimp_kit_path(@kit, :new_api_key => true)
19
+ %p
20
+ = link_to "Manage my connected lists.", lists_mailchimp_kit_path(@kit)
@@ -0,0 +1,48 @@
1
+ - content_for :header do
2
+ %h1 MailChimp Kit
3
+
4
+ .row
5
+ .span6
6
+ %p
7
+ Select which MailChimp lists you would like Artful.ly to integrate with. Subscribers to each selected list will be imported into Artful.ly.
8
+ %p
9
+ You can come back to this page and edit this list at any time.
10
+ %p
11
+ The following data will be imported from your MailChimp subscribers:
12
+ %table.table.table-bordered.table-striped.docs
13
+ %tr
14
+ %td.field EMAIL
15
+ %td This is an "email" type field. We will push the individual's email address to this field.
16
+ %tr
17
+ %td.field FNAME
18
+ %td This is is a "text" type field. We will push the individual's first name to this field.
19
+ %tr
20
+ %td.field LNAME
21
+ %td This is is a "text" type field. We will push the individual's last name to this field.
22
+ .span5
23
+ - if @kit.lists.count > 0
24
+ = form_for @kit, :url => manage_mailchimp_kit_path(@kit), :method => :post do |f|
25
+ .well
26
+ %p
27
+ Which MailChimp lists would you like to sync?
28
+ - @kit.lists.each do |list|
29
+ .list
30
+ = label_tag "", :class => "checkbox" do
31
+ = check_box_tag "lists[]", list[1], @kit.list_attached?(list[1]), :class => "list", "data-list-name" => list[0]
32
+ %span.name= list[0]
33
+ .well
34
+ = label_tag "mailchimp_kit[default_list_id]" do
35
+ Which list would you like to ask your fans to join when they check out?
36
+ .list-default
37
+ = select_tag "mailchimp_kit[default_list_id]", default_list_options(@kit), :prompt => default_list_prompt(@kit)
38
+
39
+ .well
40
+ = label_tag "mailchimp_kit[fan_subscribe_question]" do
41
+ How would you like to ask fans to subscribe to that list?
42
+ = text_field_tag "mailchimp_kit[fan_subscribe_question]", @kit.fan_subscribe_question, :maxlength => "60"
43
+
44
+ = f.submit "Save", :class => "btn btn-primary"
45
+
46
+ - else
47
+ .notice
48
+ No Mailchimp lists were attached to this account. Please make a list and try again.
@@ -0,0 +1,42 @@
1
+ .row
2
+ .span6
3
+ %ul.kv
4
+ %li.row-fluid
5
+ .key.span3 Organization Name
6
+ .value.span6= @organization.name
7
+ %li.row-fluid
8
+ .key.span3 Email
9
+ .value.span6= @organization.email
10
+ %li.row-fluid
11
+ .key.span3 Time Zone
12
+ .value.span6= @organization.time_zone
13
+
14
+ - if @ability.can? :manage, current_user.current_organization
15
+ = link_to "Edit", edit_organization_path(@organization), {:class => "btn"}
16
+
17
+ .span6
18
+ %ul
19
+ %li.row-fluid
20
+ .span4
21
+ %strong Your Central Storefront
22
+ .span8=link_to store_organization_events_url(@organization.cached_slug), store_organization_events_url(@organization.cached_slug), :target => "blank"
23
+ %p
24
+ ="Patrons can visit this URL to buy tickets to your events and make donations to your organization. You can customize this URL #{link_to "here", edit_organization_path(@organization)}.".html_safe
25
+
26
+ - if @organization.has_any_storefront_kit?
27
+ #storefront-table
28
+ %h5 Storefronts
29
+
30
+ %table.table.table-compact
31
+ - [:regular_donation, :membership, :passes].each do |kit|
32
+ - if(@organization.has_kit? (kit))
33
+ %tr
34
+ %td=@organization.kit(kit).friendly_name
35
+ %td{:id => "badge_#{kit}"}
36
+ .center
37
+ -if @organization.has_active_storefront? kit
38
+ .badge.badge-success{:id => "storefront_badge_#{kit.to_s}"}
39
+ =link_to "On", [:edit, @organization.kit(kit)], :id => "configure_#{kit}", :style => "color: white; cursor: pointer;"
40
+ -else
41
+ .badge
42
+ =link_to "Off", [:edit, @organization.kit(kit)], :id => "configure_#{kit}", :style => "color: white; cursor: pointer;"
@@ -1,21 +0,0 @@
1
- #faForm.modal
2
- = form_for fa_user, :url => connect_organization_path(organization) do |form|
3
- .modal-header
4
- .close{'data-dismiss'=>'modal'} x
5
- .row-fluid
6
- .span2
7
- =image_tag "falogo_50.jpg"
8
- .span10
9
- %h3 Connect to Fractured Atlas
10
- .modal-body
11
- - back ||= false
12
- = hidden_field_tag :back, true if back
13
- %ul
14
- %li
15
- = form.label :username, "Fractured Atlas Username", :class=>'control-label'
16
- = form.text_field :username
17
- %li
18
- =form.label :password, "Password", :class=>'control-label'
19
- =form.password_field :password, autocomplete: 'off'
20
- .modal-footer
21
- = form.submit "Connect", :class => 'btn'
@@ -2,26 +2,28 @@
2
2
  - content_for :header do
3
3
  %h1 Account Administration
4
4
 
5
- .bottom-room.bordered-section
6
- .row
7
- .span3
8
- %h3{:style => "margin-top: 0px"} Details
9
- - if can? :manage, current_user.current_organization
10
- = link_to "Edit", edit_organization_path(@organization), {:class => "btn"}
11
- .span9
12
- %ul.kv
13
- %li.row-fluid
14
- .key.span3 Organization Name
15
- .value.span9= @organization.name
16
- %li.row-fluid
17
- .key.span3 Email
18
- .value.span9= @organization.email
19
- %li.row-fluid
20
- .key.span3 Time Zone
21
- .value.span9= @organization.time_zone
5
+ - @active_tab ||= "basics"
22
6
 
23
- .bottom-room.bordered-section
24
- = render :partial => "kits/list", :locals => { :organization => @organization }
7
+ %ul.nav.nav-tabs
8
+ %li{:class => "#{'active' if @active_tab=='basics'}"}
9
+ %a{:href => "#basics", "data-toggle" => "tab"} Basics
10
+ -if @ability.can? :manage, Kit
11
+ %li{:class => "#{'active' if @active_tab=='kits'}"}
12
+ %a{:href => "#kits", "data-toggle" => "tab"} Kits
25
13
 
26
- .bottom-room.bordered-section
27
- = render :partial => "user_memberships/list", :locals => { :organization => @organization }
14
+ -if @ability.can? :view, User
15
+ %li{:class => "#{'active' if @active_tab=='users'}"}
16
+ %a{:href => "#users", "data-toggle" => "tab"} Users
17
+
18
+ .tab-content
19
+ .tab-pane#basics{:class => "#{'active' if @active_tab=='basics'}"}
20
+ =render :partial => "basics"
21
+ -if @ability.can? :manage, Kit
22
+ .tab-pane#kits{:class => "#{'active' if @active_tab=='kits'}"}
23
+ = render :partial => "kits/list", :locals => { :kits => @kits }
24
+ -if @ability.can? :view, User
25
+ .tab-pane#users{:class => "#{'active' if @active_tab=='users'}"}
26
+ = render :partial => "user_memberships/list", :locals => { :organization => @organization }
27
+
28
+ -if @ability.can? :manage, @organization
29
+ = render :partial => 'connection_form', :locals => { :organization => @organization }
data/config/routes.rb CHANGED
@@ -113,7 +113,16 @@ Rails.application.routes.draw do
113
113
  get :alternatives, :on => :collection
114
114
  post :requirements, :on => :collection
115
115
  get :requirements, :on => :collection
116
+ end
117
+ resources :mailchimp_kits, :only => [ :edit, :update ] do
118
+ member do
119
+ get :lists
120
+ post :manage
121
+ post :hide_alert
122
+ end
116
123
  end
124
+ resources :mailchimp_webhooks, :only => [ :show ]
125
+ post "/mailchimp_webhooks/:id" => "mailchimp_webhooks#update"
117
126
 
118
127
  resources :membership_kits, :only => [ :edit, :update ]
119
128
  resources :passes_kits, :only => [ :edit, :update ]
@@ -0,0 +1,5 @@
1
+ class AddDonatedToSearches < ActiveRecord::Migration
2
+ def change
3
+ add_column :searches, :has_donated, :boolean, :default => true
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module ArtfullyOse
2
- VERSION = "1.3.0.pre1"
2
+ VERSION = "1.3.0.pre2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artfully_ose
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.pre1
4
+ version: 1.3.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artful.ly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-13 00:00:00.000000000 Z
11
+ date: 2015-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -570,6 +570,20 @@ dependencies:
570
570
  - - '='
571
571
  - !ruby/object:Gem::Version
572
572
  version: 0.4.0
573
+ - !ruby/object:Gem::Dependency
574
+ name: redis
575
+ requirement: !ruby/object:Gem::Requirement
576
+ requirements:
577
+ - - '='
578
+ - !ruby/object:Gem::Version
579
+ version: 3.2.0
580
+ type: :runtime
581
+ prerelease: false
582
+ version_requirements: !ruby/object:Gem::Requirement
583
+ requirements:
584
+ - - '='
585
+ - !ruby/object:Gem::Version
586
+ version: 3.2.0
573
587
  description: A Ruby on Rails engine for running ticketing, CRM, and order management. See
574
588
  http://fracturedatlas.github.com/artfully_app/ for the reference implementation
575
589
  email:
@@ -1975,6 +1989,8 @@ files:
1975
1989
  - app/controllers/imports_controller.rb
1976
1990
  - app/controllers/index_controller.rb
1977
1991
  - app/controllers/job_monitors_controller.rb
1992
+ - app/controllers/mailchimp_kits_controller.rb
1993
+ - app/controllers/mailchimp_webhooks_controller.rb
1978
1994
  - app/controllers/member_cards_controller.rb
1979
1995
  - app/controllers/members/index_controller.rb
1980
1996
  - app/controllers/members/invitations_controller.rb
@@ -2043,6 +2059,7 @@ files:
2043
2059
  - app/helpers/households_helper.rb
2044
2060
  - app/helpers/imports_helper.rb
2045
2061
  - app/helpers/link_helper.rb
2062
+ - app/helpers/mailchimp_helper.rb
2046
2063
  - app/helpers/mailchimp_lists_for_search_helper.rb
2047
2064
  - app/helpers/members_helper.rb
2048
2065
  - app/helpers/membership_types_helper.rb
@@ -2059,6 +2076,7 @@ files:
2059
2076
  - app/mailers/reports_mailer.rb
2060
2077
  - app/models/ability.rb
2061
2078
  - app/models/action.rb
2079
+ - app/models/action_feed.rb
2062
2080
  - app/models/actions/change_action.rb
2063
2081
  - app/models/actions/comp_action.rb
2064
2082
  - app/models/actions/convert_action.rb
@@ -2470,6 +2488,9 @@ files:
2470
2488
  - app/views/layouts/mail.html.haml
2471
2489
  - app/views/layouts/members.html.haml
2472
2490
  - app/views/layouts/storefront.html.haml
2491
+ - app/views/mailchimp_kits/activate.html.haml
2492
+ - app/views/mailchimp_kits/edit.html.haml
2493
+ - app/views/mailchimp_kits/lists.html.haml
2473
2494
  - app/views/members/index/index.html.haml
2474
2495
  - app/views/members/invitations/edit.html.haml
2475
2496
  - app/views/members/invitations/new.html.erb
@@ -2527,6 +2548,7 @@ files:
2527
2548
  - app/views/orders/passes.html.haml
2528
2549
  - app/views/orders/sales.html.haml
2529
2550
  - app/views/orders/show.html.haml
2551
+ - app/views/organizations/_basics.html.haml
2530
2552
  - app/views/organizations/_connection_form.html.haml
2531
2553
  - app/views/organizations/_form.html.haml
2532
2554
  - app/views/organizations/_website_form.html.haml
@@ -2878,6 +2900,7 @@ files:
2878
2900
  - db/migrate/20140905080503_create_scheduled_pledge_payments.rb
2879
2901
  - db/migrate/20140909150251_add_org_to_suggested_household.rb
2880
2902
  - db/migrate/20141007114614_add_order_id_to_donations.rb
2903
+ - db/migrate/20141009191355_add_donated_to_searches.artfully_ose_engine.rb
2881
2904
  - db/migrate/20141021134013_add_lifetime_pledges_to_people.rb
2882
2905
  - db/migrate/20141027191307_default_overwrite_member_addresses_to_false.rb
2883
2906
  - db/migrate/20141031193839_update_relations.rb