activeadmin-xls 1.0.5 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3cefe4337bc929cc027541a8b378764fcee9c29
4
- data.tar.gz: 6ece12827ba7c2e0b85772b357c368a29d973c51
3
+ metadata.gz: a30a7f1fc93455cecb1aac5d28026454061ebdcd
4
+ data.tar.gz: a1342476206f3a3b7ba04c15df545d620af315eb
5
5
  SHA512:
6
- metadata.gz: a505457094d423aad3857be11f8aaf26adafa48957678296019324c15736be6bc89c40be0b41e4e3ea79ed17d9abd205e4463937aca9f40618193bf7eb3e8de4
7
- data.tar.gz: 689a4ae242134e3cc0e7d7729b539eadca9349bbd141431422b7f0a83b10be7b3f72012ec60c92019b036973b9debe6f3e0b9ef947d35f815a51bb2dffb9c4a2
6
+ metadata.gz: acd27c54cbf49c5148d94625f4872b89291513fbea277ff8fb0e96231a40ce8172fb9cae4d91ad4e1adeda135ce45feb704a5396a2c66252a49f97abf3ab9de8
7
+ data.tar.gz: 9baa56bf539d13050c67b6a9e911323a0d5bd04bd43b6182eb32f0de4e6c125aaca61b32adafa86addd387072d751db5497f1b3273320abbd2aa044912b19f0e
data/.gitignore CHANGED
@@ -1,7 +1,7 @@
1
1
  spec/rails
2
2
  *.gem
3
3
  coverage
4
- *.xlsx
4
+ *.xls
5
5
  doc
6
6
  *.un~
7
7
  .yardoc
@@ -1,33 +1,52 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ## 1.1.0
6
+
7
+ ### Added
8
+
9
+ * Add only_columns [#7][]
10
+
11
+ ### Fixed
12
+
13
+ * Fix typo in README.md [#11][] by [@cpunion][]
14
+
15
+ ### Changed
16
+
17
+ * Update tests for ActiveAdmin 1.2
18
+
3
19
  ## 1.0.5
4
20
 
5
- ### Updates
21
+ ### Fixed
6
22
 
7
23
  * Fix #1 - Unnecessary database access
8
24
  * Fix broken tests
9
25
 
10
26
  ## 1.0.4
11
27
 
12
- ### Updates
28
+ ### Fixed
13
29
 
14
30
  * Minor bug fixes / typo corrections
15
31
 
16
32
  ## 1.0.3
17
33
 
18
- ### Updates
34
+ ### Fixed
19
35
 
20
36
  * Move require rake from gemspec to lib/activeadmin-xls.rb [#4][] by [@ejaypcanaria][]
21
37
 
22
38
  ## 1.0.2
23
39
 
24
- ### Bug Fixes
40
+ ### Fixed
25
41
 
26
42
  * Fixes undefined local variable or `method max_per_page` [#3][] by [@rewritten][]
27
43
 
28
44
  <!--- Link List --->
29
45
  [#3]: https://github.com/thambley/activeadmin-xls/issues/3
30
46
  [#4]: https://github.com/thambley/activeadmin-xls/pull/4
47
+ [#7]: https://github.com/thambley/activeadmin-xls/issues/7
48
+ [#11]: https://github.com/thambley/activeadmin-xls/pull/11
31
49
 
32
50
  [@rewritten]: https://github.com/rewritten
33
51
  [@ejaypcanaria]: https://github.com/ejaypcanaria
52
+ [@cpunion]: https://github.com/cpunion
data/README.md CHANGED
@@ -1,16 +1,8 @@
1
- # Active Admin Xls: Excel Spreadsheet Export for Active Admin
1
+ # Active Admin Xls
2
2
 
3
- **Git**: [http://github.com/thambley/activeadmin-xls](http://github.com/thambley/activeadmin-xls)
3
+ Excel Spreadsheet Export for [Active Admin](https://www.activeadmin.info/)
4
4
 
5
- **Author**: Todd Hambley
6
-
7
- **Copyright**: 2014 ~ 2017
8
-
9
- **License**: MIT License
10
-
11
- **Latest Version**: 1.0.4
12
-
13
- **Release Date**: 2017.11.22
5
+ [![Gem Version](https://badge.fury.io/rb/activeadmin-xls.svg)](https://badge.fury.io/rb/activeadmin-xls)
14
6
 
15
7
  ## Synopsis
16
8
 
@@ -25,10 +17,16 @@ All resource index views will now include a link for download directly
25
17
  to xls.
26
18
 
27
19
  ```ruby
28
- gem 'activeadmin-xls'
20
+ gem 'activeadmin-xls', '~>1.1.0'
21
+ ```
22
+
23
+ For Active Admin 1.0, you will also have to update config/initializers/active_admin.rb. Update the download\_links setting to include xls:
24
+
25
+ ```ruby
26
+ config.download_links = %i[csv xml json xls]
29
27
  ```
30
28
 
31
- ## Cool Toys
29
+ ## Examples
32
30
 
33
31
  Here are a few quick examples of things you can easily tweak.
34
32
 
@@ -71,6 +69,15 @@ ActiveAdmin.register Post do
71
69
  end
72
70
  ```
73
71
 
72
+ ### Restrict columns to a list
73
+
74
+ ```ruby
75
+ # app/admin/posts.rb
76
+ ActiveAdmin.register Post do
77
+ config.xls_builder.only_columns :title, :author
78
+ end
79
+ ```
80
+
74
81
  ## Using the DSL
75
82
 
76
83
  Everything that you do with the config's default builder can be done via
@@ -91,10 +98,13 @@ ActiveAdmin.register Post do
91
98
  # Do not serialize the header, only output data.
92
99
  # skip_header
93
100
 
101
+ # restrict columns to a list without customization
102
+ # only_columns :title, :author
103
+
94
104
  # deleting columns from the report
95
105
  delete_columns :id, :created_at, :updated_at
96
106
 
97
- # adding a column to the report
107
+ # adding a column to the report with customization
98
108
  column(:author) { |post| "#{post.author.first_name} #{post.author.last_name}" }
99
109
 
100
110
  # inserting additional data with after_filter
@@ -110,7 +120,7 @@ ActiveAdmin.register Post do
110
120
  end
111
121
  ```
112
122
 
113
- ## Specs
123
+ ## Testing
114
124
 
115
125
  Running specs for this gem requires that you construct a rails application.
116
126
 
@@ -143,9 +153,3 @@ BUNDLE_GEMFILE=gemfiles/rails_42.gemfile bundle exec rake setup
143
153
  ```text
144
154
  BUNDLE_GEMFILE=gemfiles/rails_42.gemfile bundle exec rake
145
155
  ```
146
-
147
- ## Copyright and License
148
-
149
- activeadmin-xls &copy; 2014 by [Todd Hambley](mailto:thambley@travelleaders.com).
150
-
151
- activeadmin-xls is licensed under the MIT license. Please see the LICENSE document for more information.
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env rake
2
+ require File.expand_path('../lib/active_admin/xls/version', __FILE__)
2
3
  require 'rspec/core/rake_task'
3
4
 
4
5
  desc 'Creates a test rails app for the specs to run against'
5
6
  task :setup do
6
7
  require 'rails/version'
7
8
  system('mkdir spec/rails') unless File.exist?('spec/rails')
8
- puts "system \"bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template_with_data.rb\""
9
9
  system "bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template_with_data.rb"
10
10
  end
11
11
 
@@ -17,6 +17,7 @@ desc 'build the gem'
17
17
  task :build do
18
18
  system 'gem build activeadmin-xls.gemspec'
19
19
  end
20
+
20
21
  desc 'build and release the gem'
21
22
  task release: :build do
22
23
  system "gem push activeadmin-xls-#{ActiveAdmin::Xls::VERSION}.gem"
@@ -6,7 +6,7 @@ ruby_minor_version = RUBY_VERSION.split('.')[1].to_i
6
6
 
7
7
  eval_gemfile(File.expand_path(File.join('..', 'Gemfile'), __dir__))
8
8
 
9
- gem 'activeadmin', '1.0.0'
9
+ gem 'activeadmin', '1.2.1'
10
10
  gem 'devise', '~> 4.2'
11
11
  gem 'rails', '4.2.10'
12
12
  gem 'turbolinks', '~> 5.0.0'
@@ -26,7 +26,7 @@ module ActiveAdmin
26
26
  #
27
27
  # }
28
28
  # end
29
- # @see ActiveAdmin::Axlsx::DSL
29
+ # @see ActiveAdmin::xls::DSL
30
30
  def initialize(resource_class, options = {}, &block)
31
31
  @skip_header = false
32
32
  @resource_class = resource_class
@@ -138,6 +138,15 @@ module ActiveAdmin
138
138
  end
139
139
  end
140
140
 
141
+ # remove all columns, and add columns by name
142
+ # each column_name should be a symbol
143
+ def only_columns(*column_names)
144
+ clear_columns
145
+ column_names.each do |column_name|
146
+ column column_name
147
+ end
148
+ end
149
+
141
150
  # Serializes the collection provided
142
151
  # @return [Spreadsheet::Workbook]
143
152
  def serialize(collection, view_context = nil)
@@ -9,6 +9,7 @@ module ActiveAdmin
9
9
  :header_format,
10
10
  :header_style,
11
11
  :i18n_scope,
12
+ :only_columns,
12
13
  :skip_header,
13
14
  :whitelist,
14
15
  to: :xls_builder,
@@ -13,7 +13,10 @@ module ActiveAdmin
13
13
 
14
14
  ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Xls::DSL
15
15
  ActiveAdmin::Resource.send :include, ActiveAdmin::Xls::ResourceExtension
16
- ActiveAdmin::ResourceController.send :include, ActiveAdmin::Xls::ResourceControllerExtension
16
+ ActiveAdmin::ResourceController.send(
17
+ :include,
18
+ ActiveAdmin::Xls::ResourceControllerExtension
19
+ )
17
20
  end
18
21
  end
19
22
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
2
  module Xls
3
- VERSION = '1.0.5'.freeze
3
+ VERSION = '1.1.0'.freeze
4
4
  end
5
5
  end
@@ -10,9 +10,11 @@ gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
10
10
  gsub_file 'config/database.yml',
11
11
  /\z/,
12
12
  "\ncucumber:\n <<: *test\n database: db/cucumber.sqlite3"
13
- gsub_file 'config/database.yml',
14
- /\z/,
15
- "\ncucumber_with_reloading:\n <<: *test\n database: db/cucumber.sqlite3"
13
+ gsub_file(
14
+ 'config/database.yml',
15
+ /\z/,
16
+ "\ncucumber_with_reloading:\n <<: *test\n database: db/cucumber.sqlite3"
17
+ )
16
18
 
17
19
  # Generate some test models
18
20
  generate :model, 'post title:string body:text published_at:datetime author_id:integer category_id:integer'
@@ -20,26 +22,36 @@ inject_into_file 'app/models/post.rb', " belongs_to :author, class_name: 'User'
20
22
  # Rails 3.2.3 model generator declare attr_accessible
21
23
  if Rails::VERSION::MAJOR == 3
22
24
  inject_into_file 'app/models/post.rb',
23
- " attr_accessible :author\n",
24
- before: 'end'
25
+ " attr_accessible :author\n",
26
+ before: 'end'
25
27
  end
26
28
  generate :model, 'user type:string first_name:string last_name:string username:string age:integer'
27
- inject_into_file 'app/models/user.rb', " has_many :posts, foreign_key: 'author_id'\n", after: "class User < ActiveRecord::Base\n"
29
+ inject_into_file 'app/models/user.rb',
30
+ " has_many :posts, foreign_key: 'author_id'\n",
31
+ after: "class User < ActiveRecord::Base\n"
28
32
  generate :model, 'publisher --migration=false --parent=User'
29
33
  generate :model, 'category name:string description:text'
30
- inject_into_file 'app/models/category.rb', " has_many :posts\n accepts_nested_attributes_for :posts\n", after: "class Category < ActiveRecord::Base\n"
34
+ inject_into_file 'app/models/category.rb',
35
+ " has_many :posts\n accepts_nested_attributes_for :posts\n",
36
+ after: "class Category < ActiveRecord::Base\n"
31
37
  generate :model, 'store name:string'
32
38
 
33
39
  # Generate a model with string ids
34
40
  generate :model, 'tag name:string'
35
- gsub_file(Dir['db/migrate/*_create_tags.rb'][0], /\:tags\sdo\s.*/, ":tags, id: false, primary_key: :id do |t|\n\t\t\tt.string :id\n" )
41
+ gsub_file(
42
+ Dir['db/migrate/*_create_tags.rb'][0],
43
+ /\:tags\sdo\s.*/,
44
+ ":tags, id: false, primary_key: :id do |t|\n\t\t\tt.string :id\n"
45
+ )
36
46
  id_model_setup = <<-MODEL
37
47
  self.primary_key = :id
38
48
  before_create :set_id
39
49
 
40
50
  private
41
51
  def set_id
42
- self.id = 8.times.inject('') { |s,e| s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
52
+ self.id = 8.times.inject('') do |s,e|
53
+ s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr
54
+ end
43
55
  end
44
56
  MODEL
45
57
 
@@ -54,14 +66,16 @@ if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 1 # Rails 3.1 Gotcha
54
66
  end
55
67
 
56
68
  # Configure default_url_options in test environment
57
- inject_into_file 'config/environments/test.rb',
58
- " config.action_mailer.default_url_options = { host: 'example.com' }\n",
59
- after: "config.cache_classes = true\n"
69
+ inject_into_file(
70
+ 'config/environments/test.rb',
71
+ " config.action_mailer.default_url_options = { host: 'example.com' }\n",
72
+ after: "config.cache_classes = true\n"
73
+ )
60
74
 
61
- puts File.expand_path('../../../lib/activeadmin-xls', __FILE__)
75
+ lib_path = File.expand_path('../../../lib/activeadmin-xls', __FILE__)
62
76
  # Add our local Active Admin to the load path
63
77
  inject_into_file 'config/environment.rb',
64
- "\nrequire \"#{File.expand_path('../../../lib/activeadmin-xls', __FILE__)}\"\n",
78
+ "\nrequire '#{lib_path}'\n",
65
79
  after: "require File.expand_path('../application', __FILE__)"
66
80
 
67
81
  # Add some translations
@@ -10,35 +10,41 @@ scopes = <<-SCOPES
10
10
  scope :all, default: true
11
11
 
12
12
  scope :drafts do |posts|
13
- posts.where(["published_at IS NULL"])
13
+ posts.where(['published_at IS NULL'])
14
14
  end
15
15
 
16
16
  scope :scheduled do |posts|
17
- posts.where(["posts.published_at IS NOT NULL AND posts.published_at > ?", Time.now.utc])
17
+ posts.where(['posts.published_at IS NOT NULL AND posts.published_at > ?', Time.now.utc])
18
18
  end
19
19
 
20
20
  scope :published do |posts|
21
- posts.where(["posts.published_at IS NOT NULL AND posts.published_at < ?", Time.now.utc])
21
+ posts.where(['posts.published_at IS NOT NULL AND posts.published_at < ?', Time.now.utc])
22
22
  end
23
23
 
24
24
  scope :my_posts do |posts|
25
- posts.where(:author_id => current_admin_user.id)
25
+ posts.where(author_id: current_admin_user.id)
26
26
  end
27
27
  SCOPES
28
28
 
29
- inject_into_file 'app/admin/post.rb',
30
- scopes,
31
- after: "ActiveAdmin.register Post do\n"
29
+ if File.exist?('app/admin/post.rb')
30
+ inject_into_file 'app/admin/post.rb',
31
+ scopes,
32
+ after: "ActiveAdmin.register Post do\n"
33
+ else
34
+ inject_into_file 'app/admin/posts.rb',
35
+ scopes,
36
+ after: "ActiveAdmin.register Post do\n"
37
+ end
32
38
 
33
39
  # Setup some default data
34
40
  append_file 'db/seeds.rb', <<-SEEDS
35
41
 
36
42
  users = ['Jimi Hendrix', 'Jimmy Page', 'Yngwie Malmsteen', 'Eric Clapton', 'Kirk Hammett'].collect do |name|
37
43
  first, last = name.split(" ")
38
- User.create! first_name: first,
39
- last_name: last,
40
- username: [first,last].join('-').downcase,
41
- age: rand(80)
44
+ User.create! first_name: first,
45
+ last_name: last,
46
+ username: [first, last].join('-').downcase,
47
+ age: rand(80)
42
48
  end
43
49
 
44
50
  categories = ['Rock', 'Pop Rock', 'Alt-Country', 'Blues', 'Dub-Step'].collect do |name|
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module ActiveAdmin
4
+ # tests for builder
4
5
  module Xls
5
6
  describe Builder do
6
7
  let(:builder) { Builder.new(Post) }
@@ -24,6 +25,11 @@ module ActiveAdmin
24
25
  expect(builder.columns.size).to eq(content_columns.size - 1)
25
26
  end
26
27
 
28
+ it 'lets us use specific columns in a list' do
29
+ builder.only_columns :title, :author
30
+ expect(builder.columns.size).to eq(2)
31
+ end
32
+
27
33
  it 'lets us say we dont want the header' do
28
34
  builder.skip_header
29
35
  expect(builder.instance_values['skip_header']).to be_truthy
@@ -53,7 +59,9 @@ module ActiveAdmin
53
59
  end
54
60
 
55
61
  it 'evaluates custom column blocks' do
56
- expect(builder.columns.last.data.call(post)).to eq('Hot Dawg - with cheese')
62
+ expect(builder.columns.last.data.call(post)).to eq(
63
+ 'Hot Dawg - with cheese'
64
+ )
57
65
  end
58
66
  end
59
67
  end
@@ -61,10 +69,16 @@ module ActiveAdmin
61
69
  context 'sheet generation without headers' do
62
70
  let!(:users) { [User.new(first_name: 'bob', last_name: 'nancy')] }
63
71
 
64
- let!(:posts) { [Post.new(title: 'bob', body: 'is a swell guy', author: users.first)] }
72
+ let!(:posts) do
73
+ [Post.new(title: 'bob', body: 'is a swell guy', author: users.first)]
74
+ end
65
75
 
66
76
  let!(:builder) do
67
- Builder.new(Post, header_format: { weight: :bold }, i18n_scope: %i[xls post]) do
77
+ options = {
78
+ header_format: { weight: :bold },
79
+ i18n_scope: %i[xls post]
80
+ }
81
+ Builder.new(Post, options) do
68
82
  skip_header
69
83
  end
70
84
  end
@@ -117,7 +131,11 @@ module ActiveAdmin
117
131
 
118
132
  context 'Sheet generation with a highly customized configuration.' do
119
133
  let!(:builder) do
120
- Builder.new(Post, header_style: { size: 10, color: 'red' }, i18n_scope: %i[xls post]) do
134
+ options = {
135
+ header_style: { size: 10, color: 'red' },
136
+ i18n_scope: %i[xls post]
137
+ }
138
+ Builder.new(Post, options) do
121
139
  delete_columns :id, :created_at, :updated_at
122
140
  column(:author) do |resource|
123
141
  "#{resource.author.first_name} #{resource.author.last_name}"
@@ -178,7 +196,9 @@ module ActiveAdmin
178
196
 
179
197
  it 'translates the header row based on our i18n scope' do
180
198
  header_row = @book.worksheets.first.row(2)
181
- expect(header_row).to eq(['Title', 'Content', 'Published On', 'Publisher'])
199
+ expect(header_row).to eq(
200
+ ['Title', 'Content', 'Published On', 'Publisher']
201
+ )
182
202
  end
183
203
 
184
204
  it 'processes the before filter' do
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module ActiveAdmin
4
+ # tests for dsl
4
5
  module Xls
5
6
  describe ::ActiveAdmin::ResourceDSL do
6
7
  context 'in a registration block' do
@@ -42,6 +43,7 @@ module ActiveAdmin
42
43
  it 'has a before filter set' do
43
44
  expect(builder.instance_values['before_filter']).to be_a(Proc)
44
45
  end
46
+
45
47
  it 'has an after filter set' do
46
48
  expect(builder.instance_values['after_filter']).to be_a(Proc)
47
49
  end
@@ -43,7 +43,7 @@ describe ActiveAdmin::ResourceController do
43
43
  expect(controller.send(:per_page)).to eq(max_csv_records)
44
44
  end
45
45
 
46
- it 'uses to the default per_page when we do not specify xls mime type' do
46
+ it 'uses the default per_page when we do not specify xls mime type' do
47
47
  controller.request.accept = 'text/html'
48
48
  aa_default_per_page = ActiveAdmin.application.default_per_page
49
49
  expect(controller.send(:per_page)).to eq(aa_default_per_page)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeadmin-xls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Hambley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-29 00:00:00.000000000 Z
11
+ date: 2018-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeadmin