radiant-reader_mailman-extension 0.1.0

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.
data/README.markdown ADDED
@@ -0,0 +1,47 @@
1
+ # reader_mailman extension
2
+
3
+ This is a very simple radiant extension that lets your readership populate a mailman mailing lists, opt in and out and set their message-receipt preferences. It will soon include the ability to assign a different list to each reader-group but right now it's just a single global list.
4
+
5
+ ## Requirements
6
+
7
+ * The [reader extension](https://github.com/spanner/radiant-reader-extension) to provide for your user-management and access-control needs.
8
+
9
+ * A Mailman installation [configured to use MySQL for membership data](http://loeki.tv/log/archives/81-Setting-up-Mailman-to-store-members-in-a-MySQL-database.html), at least for the lists you want to populate. Note that the database must be set up in the 'wide' configuration, ie. one table per list.
10
+
11
+ ## Configuration
12
+
13
+ We access the mailman table through activerecord using a separate database connection called `mailman_#{RAILS_ENV}`. Add definitions like these to your database.yml:
14
+
15
+ mailman_development:
16
+ adapter: mysql2
17
+ database: mailman
18
+ username: somebody
19
+ password: whatever
20
+ host: 127.0.0.1
21
+
22
+ mailman_production:
23
+ adapter: mysql2
24
+ database: mailman
25
+ username: somebody
26
+ password: whatever
27
+ host: mail.server.com
28
+
29
+ You store the name of the mailing list (which is also the name of the data table) in:
30
+
31
+ reader.mailman.list_name
32
+
33
+ You can do that through the usual reader-settings interface.
34
+
35
+ ## Status
36
+
37
+ New but reasonably simple. The legacy interface involves some subversion of ActiveRecord so bugs are possible there.
38
+
39
+ ## Bugs and comments
40
+
41
+ Issues in github, please, or for little things an email or github message is fine.
42
+
43
+ ## Author and copyright
44
+
45
+ * Copyright Spanner Ltd 2011.
46
+ * Released under the same terms as Rails and/or Radiant.
47
+ * Contact will at spanner.org
data/Rakefile ADDED
@@ -0,0 +1,137 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gem|
4
+ gem.name = "radiant-downloads-extension"
5
+ gem.summary = %Q{Controlled, secure file access for Radiant CMS with group-based access control.}
6
+ gem.description = %Q{Controlled, secure file access with group-based access control.}
7
+ gem.email = "will@spanner.org"
8
+ gem.homepage = "http://github.com/spanner/radiant-downloads-extension"
9
+ gem.authors = ["spanner"]
10
+ gem.add_dependency "radiant", ">= 0.9.0"
11
+ gem.add_dependency 'radiant-reader_group-extension'
12
+ end
13
+ rescue LoadError
14
+ puts "Jeweler (or a dependency) not available. This is only required if you plan to package downloads as a gem."
15
+ end
16
+
17
+ # In rails 1.2, plugins aren't available in the path until they're loaded.
18
+ # Check to see if the rspec plugin is installed first and require
19
+ # it if it is. If not, use the gem version.
20
+
21
+ # Determine where the RSpec plugin is by loading the boot
22
+ unless defined? RADIANT_ROOT
23
+ ENV["RAILS_ENV"] = "test"
24
+ case
25
+ when ENV["RADIANT_ENV_FILE"]
26
+ require File.dirname(ENV["RADIANT_ENV_FILE"]) + "/boot"
27
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
28
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}/config/boot"
29
+ else
30
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}/config/boot"
31
+ end
32
+ end
33
+
34
+ require 'rake'
35
+ require 'rake/rdoctask'
36
+ require 'rake/testtask'
37
+
38
+ rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib')
39
+ $LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
40
+ require 'spec/rake/spectask'
41
+ require 'cucumber'
42
+ require 'cucumber/rake/task'
43
+
44
+ # Cleanup the RADIANT_ROOT constant so specs will load the environment
45
+ Object.send(:remove_const, :RADIANT_ROOT)
46
+
47
+ extension_root = File.expand_path(File.dirname(__FILE__))
48
+
49
+ task :default => :spec
50
+ task :stats => "spec:statsetup"
51
+
52
+ desc "Run all specs in spec directory"
53
+ Spec::Rake::SpecTask.new(:spec) do |t|
54
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
55
+ t.spec_files = FileList['spec/**/*_spec.rb']
56
+ end
57
+
58
+ task :features => 'spec:integration'
59
+
60
+ namespace :spec do
61
+ desc "Run all specs in spec directory with RCov"
62
+ Spec::Rake::SpecTask.new(:rcov) do |t|
63
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
64
+ t.spec_files = FileList['spec/**/*_spec.rb']
65
+ t.rcov = true
66
+ t.rcov_opts = ['--exclude', 'spec', '--rails']
67
+ end
68
+
69
+ desc "Print Specdoc for all specs"
70
+ Spec::Rake::SpecTask.new(:doc) do |t|
71
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
72
+ t.spec_files = FileList['spec/**/*_spec.rb']
73
+ end
74
+
75
+ [:models, :controllers, :views, :helpers].each do |sub|
76
+ desc "Run the specs under spec/#{sub}"
77
+ Spec::Rake::SpecTask.new(sub) do |t|
78
+ t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
79
+ t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
80
+ end
81
+ end
82
+
83
+ desc "Run the Cucumber features"
84
+ Cucumber::Rake::Task.new(:integration) do |t|
85
+ t.fork = true
86
+ t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'pretty')]
87
+ # t.feature_pattern = "#{extension_root}/features/**/*.feature"
88
+ t.profile = "default"
89
+ end
90
+
91
+ # Setup specs for stats
92
+ task :statsetup do
93
+ require 'code_statistics'
94
+ ::STATS_DIRECTORIES << %w(Model\ specs spec/models)
95
+ ::STATS_DIRECTORIES << %w(View\ specs spec/views)
96
+ ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
97
+ ::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
98
+ ::CodeStatistics::TEST_TYPES << "Model specs"
99
+ ::CodeStatistics::TEST_TYPES << "View specs"
100
+ ::CodeStatistics::TEST_TYPES << "Controller specs"
101
+ ::CodeStatistics::TEST_TYPES << "Helper specs"
102
+ ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
103
+ end
104
+
105
+ namespace :db do
106
+ namespace :fixtures do
107
+ desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
108
+ task :load => :environment do
109
+ require 'active_record/fixtures'
110
+ ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
111
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
112
+ Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ desc 'Generate documentation for the downloads extension.'
120
+ Rake::RDocTask.new(:rdoc) do |rdoc|
121
+ rdoc.rdoc_dir = 'rdoc'
122
+ rdoc.title = 'DownloadsExtension'
123
+ rdoc.options << '--line-numbers' << '--inline-source'
124
+ rdoc.rdoc_files.include('README')
125
+ rdoc.rdoc_files.include('lib/**/*.rb')
126
+ end
127
+
128
+ # For extensions that are in transition
129
+ desc 'Test the downloads extension.'
130
+ Rake::TestTask.new(:test) do |t|
131
+ t.libs << 'lib'
132
+ t.pattern = 'test/**/*_test.rb'
133
+ t.verbose = true
134
+ end
135
+
136
+ # Load any custom rakefiles for extension
137
+ Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.5.2
@@ -0,0 +1,31 @@
1
+ class MailingListMembership < ActiveRecord::Base
2
+ establish_connection "mailman_#{RAILS_ENV}"
3
+ set_table_name Radiant.config['reader.mailman.list_name']
4
+ set_primary_key "address"
5
+
6
+ def self.of_list(listname)
7
+ old_table_name = self.table_name
8
+ set_table_name listname
9
+ reset_column_information
10
+ self
11
+ end
12
+
13
+ [:digest, :not_metoo, :nomail, :plain].each do |col|
14
+ define_method(col) do
15
+ read_attribute(col) == 'Y'
16
+ end
17
+ define_method("#{col}=") do |value|
18
+ write_attribute(col, to_yesno(value))
19
+ end
20
+ define_method("#{col}_before_type_cast") do
21
+ read_attribute(col) == 'Y' ? 1 : 0
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def to_yesno(value)
28
+ (value && value.to_i != 0) ? 'Y' : 'N'
29
+ end
30
+
31
+ end
@@ -0,0 +1,24 @@
1
+ - fields_for @reader do |rf|
2
+ - @reader.build_mailing_list_membership unless @reader.mailing_list_membership
3
+ - rf.fields_for :mailing_list_membership do |mf|
4
+ #mailing_list
5
+ %h3
6
+ = t('mailing_list_preferences')
7
+ %p
8
+ = t('control_your_subscription', :list_name => "#{Radiant.config['reader.mailman.list_name']}@")
9
+ %br
10
+ = mf.check_box :nomail
11
+ = mf.label :nomail
12
+ %br
13
+ %span#more_mailing_list_options.hidden
14
+ = mf.check_box :digest
15
+ = mf.label :digest
16
+ %br
17
+ = mf.check_box :plain
18
+ = mf.label :plain
19
+ %br
20
+ = mf.check_box :not_metoo
21
+ = mf.label :not_metoo
22
+ %br
23
+ %a.toggle.small{:href => '#', :rel => '#more_mailing_list_options'}
24
+ =t('more_options')
@@ -0,0 +1,5 @@
1
+ #mailing_list_settings
2
+ %h3
3
+ =t("mailing_list_configuration")
4
+ %p
5
+ = edit_config 'reader.mailman.list_name'
@@ -0,0 +1,7 @@
1
+ #mailing_list_settings.box
2
+ %h3
3
+ .actions
4
+ = button_to t("edit"), edit_admin_reader_settings_url, :method => :get
5
+ =t("mailing_list_configuration")
6
+ %p.ruled
7
+ = show_config 'reader.mailman.list_name'
@@ -0,0 +1,21 @@
1
+ - fields_for @reader do |rf|
2
+ #mailing_list
3
+ %h3
4
+ = t('mailing_list_preferences')
5
+ %p
6
+ = rf.check_box :opt_out_of_mailing_list
7
+ = rf.label :opt_out_of_mailing_list
8
+ %br
9
+ - @reader.build_mailing_list_membership
10
+ - rf.fields_for :mailing_list_membership do |mf|
11
+ = mf.check_box :nomail
12
+ = mf.label :nomail
13
+ %br
14
+ = mf.check_box :digest
15
+ = mf.label :digest
16
+ %br
17
+ = mf.check_box :plain
18
+ = mf.label :plain
19
+ %br
20
+ = mf.check_box :not_metoo
21
+ = mf.label :not_metoo
@@ -0,0 +1,5 @@
1
+ Radiant.config do |config|
2
+ config.namespace('reader.mailman') do |mm|
3
+ mm.define 'list_name', :default => 'all'
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ en:
2
+ activerecord:
3
+ attributes:
4
+ mailing_list_membership:
5
+ nomail: "Tick this box if you <strong>do not</strong> want to receive mailing list messages"
6
+ digest: "Get the mailing list as a daily digest instead of individual messages"
7
+ plain: "Get digest messages in plain text rather than HTML"
8
+ not_metoo: "Don't receive an echo of your own messages to the mailing list"
9
+ errors:
10
+ models:
11
+ download:
12
+ attributes:
13
+ config:
14
+ reader:
15
+ mailman:
16
+ list_name: mailing list name
17
+ host: database host
18
+ port: database port
19
+ username: db username
20
+ password: db password
21
+ control_your_subscription: "You can also control your membership of the %{list_name} mailing list from here."
22
+ mailing_list: "Mailing list"
23
+ mailing_list_configuration: "Mailing list configuration"
24
+ mailing_list_preferences: "Mailing list preferences"
25
+ more_options: "Show more options"
@@ -0,0 +1,15 @@
1
+ class MailingListPreferences < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :readers, :opt_out_of_mailing_list, :boolean
4
+ add_column :readers, :mailing_list_digested, :boolean
5
+ add_column :readers, :mailing_list_notmetoo, :boolean
6
+ add_column :readers, :mailing_list_nomail, :boolean
7
+ end
8
+
9
+ def self.down
10
+ remove_column :readers, :opt_out_of_mailing_list
11
+ remove_column :readers, :mailing_list_digested
12
+ remove_column :readers, :mailing_list_notmetoo
13
+ remove_column :readers, :mailing_list_nomail
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ module MailingListReader # for inclusion into Reader
2
+ def self.included(base)
3
+ base.class_eval do
4
+ has_one :mailing_list_membership, :primary_key => 'email', :foreign_key => 'address', :dependent => :destroy
5
+ accepts_nested_attributes_for :mailing_list_membership
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module RadiantReaderMailmanExtension
2
+ VERSION = '0.1.0'
3
+ SUMMARY = %q{Basic integration of reader groups with mailman mailing lists}
4
+ DESCRIPTION = %q{Allows you to specify and configure a mailman mailing list for your readers. Group lists will follow.}
5
+ URL = "http://radiant.spanner.org/reader_mailman"
6
+ AUTHORS = ["William Ross"]
7
+ EMAIL = ["radiant@spanner.org"]
8
+ end
@@ -0,0 +1,28 @@
1
+ namespace :radiant do
2
+ namespace :extensions do
3
+ namespace :downloads do
4
+
5
+ desc "Runs the migration of the Downloads extension"
6
+ task :migrate => :environment do
7
+ require 'radiant/extension_migrator'
8
+ if ENV["VERSION"]
9
+ DownloadsExtension.migrator.migrate(ENV["VERSION"].to_i)
10
+ else
11
+ DownloadsExtension.migrator.migrate
12
+ end
13
+ end
14
+
15
+ desc "Copies public assets of the Downloads to the instance public/ directory."
16
+ task :update => :environment do
17
+ is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
18
+ puts "Copying assets from DownloadsExtension"
19
+ Dir[DownloadsExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
20
+ path = file.sub(DownloadsExtension.root, '')
21
+ directory = File.dirname(path)
22
+ mkdir_p RAILS_ROOT + directory
23
+ cp file, RAILS_ROOT + path
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "radiant-reader_mailman-extension"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "radiant-reader_mailman-extension"
7
+ s.version = RadiantReaderMailmanExtension::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = RadiantReaderMailmanExtension::AUTHORS
10
+ s.email = RadiantReaderMailmanExtension::EMAIL
11
+ s.homepage = RadiantReaderMailmanExtension::URL
12
+ s.summary = RadiantReaderMailmanExtension::SUMMARY
13
+ s.description = RadiantReaderMailmanExtension::DESCRIPTION
14
+
15
+ ignores = if File.exist?('.gitignore')
16
+ File.read('.gitignore').split("\n").inject([]) {|a,p| a + Dir[p] }
17
+ else
18
+ []
19
+ end
20
+ s.files = Dir['**/*'] - ignores
21
+ s.test_files = Dir['test/**/*','spec/**/*','features/**/*'] - ignores
22
+ # s.executables = Dir['bin/*'] - ignores
23
+ s.require_paths = ["lib"]
24
+
25
+ s.post_install_message = %{
26
+ Add this to your radiant project with a line in your Gemfile:
27
+
28
+ gem 'radiant-reader_mailman-extension', '~> #{RadiantReaderMailmanExtension::VERSION}'
29
+
30
+ }
31
+
32
+ end
@@ -0,0 +1,15 @@
1
+ class ReaderMailmanExtension < Radiant::Extension
2
+ version RadiantReaderMailmanExtension::VERSION
3
+ description RadiantReaderMailmanExtension::DESCRIPTION
4
+ url RadiantReaderMailmanExtension::URL
5
+
6
+ def activate
7
+ Reader.send :include, MailingListReader
8
+
9
+ admin.account.edit.add :form, "accounts/mailing_list", :after => 'edit_password'
10
+ admin.reader.edit.add :form, "admin/readers/mailing_list", :after => 'edit_group'
11
+ admin.reader_configuration.show.add :settings, "admin/reader_configuration/mailing_list", :after => "administration"
12
+ admin.reader_configuration.edit.add :form, "admin/reader_configuration/edit_mailing_list", :after => "administration"
13
+ end
14
+
15
+ end
@@ -0,0 +1,42 @@
1
+ require 'digest/sha1'
2
+ class DownloadGroupsDataset < Dataset::Base
3
+ datasets = [:downloads, :download_readers]
4
+ datasets << :download_sites if defined? Site
5
+ uses *datasets
6
+
7
+ def load
8
+ create_group "Normal"
9
+ create_group "Busy"
10
+ create_group "Idle"
11
+ add_downloads_to_group :normal, [:grouped]
12
+ add_downloads_to_group :busy, [:grouped, :alsogrouped]
13
+ add_readers_to_group :busy, [:normal, :another]
14
+ end
15
+
16
+ helpers do
17
+ def create_group(name, att={})
18
+ group = create_record Group, name.symbolize, group_attributes(att.update(:name => name))
19
+ end
20
+
21
+ def group_attributes(att={})
22
+ name = att[:name] || "A group"
23
+ attributes = {
24
+ :name => name,
25
+ :description => "Test group"
26
+ }.merge(att)
27
+ attributes[:site_id] ||= site_id(:test) if defined? Site
28
+ attributes
29
+ end
30
+ end
31
+
32
+ def add_readers_to_group(g, rr)
33
+ g = g.is_a?(Group) ? g : groups(g)
34
+ g.readers << rr.map{|r| readers(r)}
35
+ end
36
+
37
+ def add_downloads_to_group(g, dd)
38
+ g = g.is_a?(Group) ? g : groups(g)
39
+ g.downloads << dd.map{|d| downloads(d)}
40
+ end
41
+
42
+ end
@@ -0,0 +1,49 @@
1
+ require "authlogic/test_case"
2
+
3
+ class DownloadReadersDataset < Dataset::Base
4
+ uses :download_sites if defined? Site
5
+
6
+ def load
7
+ create_reader "Normal"
8
+ create_reader "Another"
9
+ create_reader "Ungrouped"
10
+ end
11
+
12
+ helpers do
13
+ def create_reader(name, attributes={})
14
+ attributes = reader_attributes(attributes.update(:name => name))
15
+ reader = create_model Reader, name.symbolize, attributes
16
+ end
17
+
18
+ def reader_attributes(attributes={})
19
+ name = attributes[:name] || "John Doe"
20
+ symbol = name.symbolize
21
+ attributes = {
22
+ :name => name,
23
+ :email => "#{symbol}@spanner.org",
24
+ :login => "#{symbol}@spanner.org",
25
+ :activated_at => Time.now - 1.week,
26
+ :password_salt => "golly",
27
+ :password => 'password',
28
+ :password_confirmation => 'password'
29
+ }.merge(attributes)
30
+ attributes[:site] = sites(:test) if defined? Site
31
+ attributes
32
+ end
33
+
34
+ def login_as_reader(reader)
35
+ activate_authlogic
36
+ login_reader = reader.is_a?(Reader) ? reader : readers(reader)
37
+ ReaderSession.create(login_reader)
38
+ login_reader
39
+ end
40
+
41
+ def logout_reader
42
+ activate_authlogic
43
+ if session = ReaderSession.find
44
+ session.destroy
45
+ end
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,9 @@
1
+ class DownloadSitesDataset < Dataset::Base
2
+ uses :pages
3
+
4
+ def load
5
+ create_record Site, :test, :name => 'Test Site', :domain => 'test', :base_domain => 'test.host', :position => 1, :mail_from_name => 'test sender', :mail_from_address => 'sender@spanner.org', :homepage_id => page_id(:home)
6
+ Page.current_site = sites(:test)
7
+ end
8
+
9
+ end
@@ -0,0 +1,28 @@
1
+ class DownloadsDataset < Dataset::Base
2
+ uses :download_sites if defined? Site
3
+
4
+ def load
5
+ create_download "grouped"
6
+ create_download "alsogrouped"
7
+ create_download "ungrouped"
8
+ end
9
+
10
+ helpers do
11
+ def create_download(name, attributes={})
12
+ attributes[:site] ||= sites(:test) if defined? Site
13
+ create_model :download, name.symbolize, download_attributes(attributes.update(:name => name))
14
+ end
15
+
16
+ def download_attributes(att={})
17
+ name = att[:name] || "A download"
18
+ attributes = {
19
+ :name => name,
20
+ :description => "Test download"
21
+ }.merge(att)
22
+ attributes[:site_id] ||= site_id(:test) if defined? Site
23
+ attributes[:document] ||= File.new(File.dirname(__FILE__) + "/../files/test.pdf")
24
+ attributes
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Group do
4
+ dataset :download_groups
5
+
6
+ before do
7
+ @site = Page.current_site = sites(:test) if defined? Site
8
+ end
9
+
10
+ it "should have a downloads association" do
11
+ Group.reflect_on_association(:downloads).should_not be_nil
12
+ end
13
+
14
+ it "should have a group of downloads" do
15
+ group = groups(:busy)
16
+ group.downloads.any?.should be_true
17
+ group.downloads.size.should == 2
18
+ end
19
+
20
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,36 @@
1
+ unless defined? RADIANT_ROOT
2
+ ENV["RAILS_ENV"] = "test"
3
+ case
4
+ when ENV["RADIANT_ENV_FILE"]
5
+ require ENV["RADIANT_ENV_FILE"]
6
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
7
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
8
+ else
9
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
10
+ end
11
+ end
12
+ require "#{RADIANT_ROOT}/spec/spec_helper"
13
+
14
+ Dataset::Resolver.default << (File.dirname(__FILE__) + "/datasets")
15
+
16
+ if File.directory?(File.dirname(__FILE__) + "/matchers")
17
+ Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
18
+ end
19
+
20
+ Spec::Runner.configure do |config|
21
+ # config.use_transactional_fixtures = true
22
+ # config.use_instantiated_fixtures = false
23
+ # config.fixture_path = RAILS_ROOT + '/spec/fixtures'
24
+
25
+ # You can declare fixtures for each behaviour like this:
26
+ # describe "...." do
27
+ # fixtures :table_a, :table_b
28
+ #
29
+ # Alternatively, if you prefer to declare them only once, you can
30
+ # do so here, like so ...
31
+ #
32
+ # config.global_fixtures = :table_a, :table_b
33
+ #
34
+ # If you declare global fixtures, be aware that they will be declared
35
+ # for all of your examples, even those that don't use them.
36
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiant-reader_mailman-extension
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - William Ross
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-11-22 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: Allows you to specify and configure a mailman mailing list for your readers. Group lists will follow.
22
+ email:
23
+ - radiant@spanner.org
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - app/models/mailing_list_membership.rb
32
+ - app/views/accounts/_mailing_list.html.haml
33
+ - app/views/admin/reader_configuration/_edit_mailing_list.html.haml
34
+ - app/views/admin/reader_configuration/_mailing_list.html.haml
35
+ - app/views/admin/readers/_mailing_list.html.haml
36
+ - config/initializers/radiant_config.rb
37
+ - config/locales/en.yml
38
+ - db/migrate/20111121160131_mailing_list_preferences.rb
39
+ - lib/mailing_list_reader.rb
40
+ - lib/radiant-reader_mailman-extension.rb
41
+ - lib/tasks/reader_mailman_extension_tasks.rake
42
+ - radiant-reader_mailman-extension.gemspec
43
+ - Rakefile
44
+ - reader_mailman_extension.rb
45
+ - README.markdown
46
+ - spec/datasets/download_groups_dataset.rb
47
+ - spec/datasets/download_readers_dataset.rb
48
+ - spec/datasets/download_sites_dataset.rb
49
+ - spec/datasets/downloads_dataset.rb
50
+ - spec/models/group_spec.rb
51
+ - spec/spec.opts
52
+ - spec/spec_helper.rb
53
+ - VERSION
54
+ homepage: http://radiant.spanner.org/reader_mailman
55
+ licenses: []
56
+
57
+ post_install_message: "\n Add this to your radiant project with a line in your Gemfile:\n\n gem 'radiant-reader_mailman-extension', '~> 0.1.0'\n\n "
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.8.10
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Basic integration of reader groups with mailman mailing lists
87
+ test_files:
88
+ - spec/datasets/download_groups_dataset.rb
89
+ - spec/datasets/download_readers_dataset.rb
90
+ - spec/datasets/download_sites_dataset.rb
91
+ - spec/datasets/downloads_dataset.rb
92
+ - spec/models/group_spec.rb
93
+ - spec/spec.opts
94
+ - spec/spec_helper.rb