ar_report 0.0.1.alpha

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/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ar_report.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Manish Puri
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,72 @@
1
+ # ArReport
2
+
3
+ Install, Generate and email.. cant get simpler than this.. Generate basic ActiveRecord Report with ease.
4
+
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'ar_report'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install ar_report
19
+
20
+ ## Usage
21
+
22
+ This gem uses the spreadsheet and mail gem to send out reports to a email specified email address.
23
+
24
+ Once you install the gem, Use it as follows.
25
+
26
+ Run,
27
+
28
+ $ rails g ar_report:install
29
+
30
+ This will generate a config/ar_report.yml in your application directory.
31
+
32
+ When you open this file, you can specify various options fir your report like models, report_name, report_from and report_to. Following is the structure for the yml:
33
+ <pre>
34
+ ar_report:
35
+ models: #specify model name here for eg 'User' or array of models ['User', 'Post']
36
+
37
+ file_name: #specify name of the xls report to be attached
38
+
39
+ report_from: # specify email address of user from which you want to send the email.
40
+
41
+ report_to: # specify email address of users/group to whom you want to send an email to.
42
+ </pre>
43
+
44
+ Fill in al the required details and.. hey.. you are done..!
45
+
46
+ Just run the rake provided by the gem:
47
+
48
+ $ rake ar_report:generate
49
+
50
+ This will generate a xls file in your public folder.
51
+
52
+ You could also run:
53
+
54
+ $ rake ar_report:generate_and_email
55
+
56
+ This will not only generate an xls fie but will also mail it to the emai address specified in the ar_report.yml file.
57
+
58
+ Note: This gem depends on Mail gem to send out emails. So, Please specify the configs for the mail gem. Refer https://github.com/mikel/mail for details.
59
+
60
+ ## Contributing
61
+
62
+ 1. Fork it
63
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
64
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
65
+ 4. Push to the branch (`git push origin my-new-feature`)
66
+ 5. Create new Pull Request
67
+
68
+ #ToDo
69
+
70
+ Specs.
71
+
72
+ :collision: :collision: :collision:
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/ar_report.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/ar_report/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Manish Puri"]
6
+ gem.email = ["manishspuri@gmail.com"]
7
+ gem.description = %q{A wrapper to send model reports using using spreadsheet and mail gem}
8
+ gem.summary = %q{This gem will extract an excel report from a activerecord model and send a report to a specified email}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "ar_report"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = ArReport::VERSION
17
+
18
+ gem.add_dependency 'rails'
19
+ gem.add_dependency 'spreadsheet'
20
+
21
+ gem.add_dependency 'mail'
22
+ gem.add_development_dependency 'rspec'
23
+ #gem.add_development_dependency 'sqlite3'
24
+ end
@@ -0,0 +1,3 @@
1
+ module ArReport
2
+ VERSION = "0.0.1.alpha"
3
+ end
data/lib/ar_report.rb ADDED
@@ -0,0 +1,79 @@
1
+ require "ar_report/version"
2
+ require 'yaml'
3
+ require 'settings'
4
+ require 'spreadsheet'
5
+
6
+ module ArReport
7
+ require "railtie" if defined?(Rails)
8
+
9
+ class << self
10
+ def start(options={})
11
+ Settings.load!
12
+ generate_report
13
+ email_report if options[:mail]
14
+ schedule_report if options[:schedule]
15
+ end
16
+
17
+ private
18
+ def generate_report
19
+ begin
20
+ p 'Generating excel report...'
21
+ book = Spreadsheet::Workbook.new
22
+ get_valid_model_names.each do |class_name_str|
23
+ p 'Exporting.. '+ class_name_str.pluralize
24
+ sheet = book.create_worksheet :name => class_name_str
25
+ class_name=class_name_str.constantize
26
+ columns=class_name.column_names
27
+ columns.each { |x| sheet.row(0).push x}
28
+
29
+ class_eval(class_name_str).all.each_with_index do |record,i|
30
+ row_values =[]
31
+
32
+ columns.each do |column|
33
+ row_values << record.send(column)
34
+ end
35
+
36
+ row_values.each { |x|sheet.row(i+1).push x}
37
+ end
38
+ end
39
+ spreadsheet = StringIO.new
40
+ p "Report Generated at 'public/#{get_file_name}'. Thankyou for using Ar_Report.!"
41
+ book.write "public/#{get_file_name}"
42
+ rescue
43
+ # raise "ArReport::Error: No models specified. Please add model names to config/ar_report.yml"
44
+ end
45
+
46
+
47
+ end
48
+
49
+ def email_report
50
+ raise "ArReport::Error: Please specify report_to and report_from email addresses in config/ar_report.yml" if (Settings.ar_report[:report_from].nil? || Settings.ar_report[:report_to].nil? )
51
+
52
+ file_name=get_file_name
53
+ mail = Mail.new do
54
+ from Settings.ar_report[:report_from]
55
+ to Settings.ar_report[:report_to]
56
+ subject Settings.ar_report[:report_to]
57
+ attachments[file_name] = File.read("#{Rails.root}/public/#{file_name}")
58
+ end
59
+ mail.deliver!
60
+ end
61
+
62
+ def get_valid_model_names
63
+ raise "No models specified. Please add model names to config/ar_report.yml" if Settings.ar_report[:models].nil?
64
+ Settings.ar_report[:models].gsub(/\s+/, "").split(',').delete_if{|a| class_eval(a).superclass!=ActiveRecord::Base rescue true}
65
+ end
66
+
67
+ def get_file_name
68
+ (Settings.ar_report[:file_name] || "ar_report_#{Date.today}") + '.xls'
69
+ end
70
+ end
71
+
72
+ end
73
+
74
+
75
+
76
+
77
+
78
+
79
+
@@ -0,0 +1,15 @@
1
+ module ArReport
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
5
+
6
+ desc "Creates config file to your application."
7
+
8
+ def copy_initializer
9
+ require 'rails'
10
+ template '../templates/ar_report.yml', 'config/ar_report.yml'
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ ar_report:
2
+ models: #specify model name here for eg 'User' or array of models ['User'.'Post']
3
+
4
+ file_name: #specify name of the report to be attached
5
+
6
+ subject: #specify subject of the email to be sent.
7
+
8
+ report_from: # specify email addresses of the users/group to receive an email.
9
+
10
+ report_to: # specify email address from which you want to receive an email.
11
+
12
+
13
+
data/lib/railtie.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'ar_report'
2
+ require 'rails'
3
+ module ArReport
4
+ class Railtie < Rails::Railtie
5
+
6
+ rake_tasks do
7
+ Dir[File.join(File.dirname(__FILE__),'/../tasks/*.rake')].each { |f| load f }
8
+ end
9
+ end
10
+ end
data/lib/settings.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Settings
2
+
3
+
4
+ extend self
5
+ # again - it's a singleton, thus implemented as a self-extended module
6
+ @_settings = {}
7
+
8
+ def load!(options={})
9
+ @_settings = YAML::load(ERB.new(Rails.root.join("config", "ar_report.yml").read).result).with_indifferent_access
10
+ @_settings = newsets[options[:env].to_sym] if \
11
+ options[:env] && \
12
+ newsets[options[:env].to_sym]
13
+
14
+ end
15
+
16
+
17
+
18
+ def method_missing(name, *args, &block)
19
+ @_settings.with_indifferent_access[name.to_sym] ||
20
+ fail(NoMethodError, "unknown configuration root #{name}", caller)
21
+ end
22
+
23
+
24
+
25
+ end
@@ -0,0 +1,14 @@
1
+ # Author Manish Puri
2
+ # Task to setup mailer
3
+ namespace :ar_report do
4
+ task :generate => :environment do
5
+ ArReport.start
6
+ end
7
+
8
+ task :generate_and_mail => :environment do
9
+ p 'Please note ar_report relies on mail gem to send out emails. Please make sure you have specified the SMTP settings
10
+ as required by the mail gem.'
11
+ ArReport.start(:mail=>true)
12
+ end
13
+
14
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ar_report
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.alpha
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Manish Puri
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: spreadsheet
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: mail
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: A wrapper to send model reports using using spreadsheet and mail gem
79
+ email:
80
+ - manishspuri@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - LICENSE
88
+ - README.md
89
+ - Rakefile
90
+ - ar_report.gemspec
91
+ - lib/ar_report.rb
92
+ - lib/ar_report/version.rb
93
+ - lib/generators/ar_report/install_generator.rb
94
+ - lib/generators/ar_report/templates/ar_report.yml
95
+ - lib/railtie.rb
96
+ - lib/settings.rb
97
+ - tasks/ar_report.rake
98
+ homepage: ''
99
+ licenses: []
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>'
114
+ - !ruby/object:Gem::Version
115
+ version: 1.3.1
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.23
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: This gem will extract an excel report from a activerecord model and send
122
+ a report to a specified email
123
+ test_files: []