activeadmin-xls 1.0.5 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 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