daily 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.mdown +46 -0
- data/Rakefile +7 -0
- data/app/assets/images/rails.png +0 -0
- data/app/assets/javascripts/application.js +9 -0
- data/app/assets/stylesheets/application.css +16 -0
- data/app/assets/stylesheets/bootstrap.css +2467 -0
- data/app/controllers/application_controller.rb +14 -0
- data/app/controllers/files_controller.rb +5 -0
- data/app/controllers/main_controller.rb +5 -0
- data/app/controllers/reports_controller.rb +35 -0
- data/app/controllers/tables_controller.rb +20 -0
- data/app/controllers/users_controller.rb +28 -0
- data/app/formatters/html_formatter.rb +65 -0
- data/app/formatters/json_formatter.rb +81 -0
- data/app/helpers/application_helper.rb +85 -0
- data/app/jobs/generate_report_job.rb +13 -0
- data/app/models/report.rb +112 -0
- data/app/models/table.rb +65 -0
- data/app/models/user.rb +20 -0
- data/app/transforms/column_filter.rb +7 -0
- data/app/transforms/moving_average.rb +119 -0
- data/app/transforms/transform.rb +32 -0
- data/app/views/devise/sessions/new.erb +15 -0
- data/app/views/layouts/application.html.erb +40 -0
- data/app/views/main/home.erb +4 -0
- data/app/views/reports/_form.erb +14 -0
- data/app/views/reports/_list.erb +9 -0
- data/app/views/reports/edit.erb +2 -0
- data/app/views/reports/index.erb +3 -0
- data/app/views/reports/new.erb +2 -0
- data/app/views/reports/show.erb +23 -0
- data/app/views/tables/_form.erb +8 -0
- data/app/views/tables/_list.erb +9 -0
- data/app/views/tables/edit.erb +2 -0
- data/app/views/tables/index.erb +3 -0
- data/app/views/tables/new.erb +2 -0
- data/app/views/tables/show.erb +35 -0
- data/app/views/users/_form.erb +5 -0
- data/app/views/users/_items.erb +8 -0
- data/app/views/users/_list.erb +9 -0
- data/app/views/users/edit.erb +2 -0
- data/app/views/users/index.erb +3 -0
- data/app/views/users/new.erb +2 -0
- data/app/views/users/show.erb +4 -0
- data/config/application.rb +52 -0
- data/config/authorization_rules.rb +49 -0
- data/config/boot.rb +6 -0
- data/config/daily.example.yml +19 -0
- data/config/daily.yml +27 -0
- data/config/database.yml +25 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +32 -0
- data/config/environments/production.rb +63 -0
- data/config/environments/test.rb +39 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/devise.rb +212 -0
- data/config/initializers/inflections.rb +10 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/ruport.rb +5 -0
- data/config/initializers/secret_token.rb +7 -0
- data/config/initializers/session_store.rb +8 -0
- data/config/initializers/simple_form.rb +113 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/devise.en.yml +58 -0
- data/config/locales/en.yml +5 -0
- data/config/locales/simple_form.en.yml +24 -0
- data/config/routes.rb +29 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20111109081414_devise_create_users.rb +28 -0
- data/db/migrate/20111111165640_create_tables.rb +14 -0
- data/db/migrate/20111112022333_add_name_to_tables.rb +9 -0
- data/db/migrate/20111112170802_add_reports.rb +15 -0
- data/db/migrate/20111113000026_add_guid_to_tables.rb +9 -0
- data/db/migrate/20111113073326_add_times_to_reports.rb +11 -0
- data/db/migrate/20111113075747_add_times_to_tables.rb +9 -0
- data/db/migrate/20111114041729_create_delayed_jobs.rb +21 -0
- data/db/migrate/20111114053016_add_report_to_delayed_jobs.rb +11 -0
- data/db/migrate/20111115014959_add_admin_to_users.rb +9 -0
- data/db/migrate/20111127065357_add_column_names_to_table.rb +9 -0
- data/db/migrate/20111203020425_add_transform_to_table.rb +16 -0
- data/db/migrate/20111214020029_add_formatter_data_to_reports.rb +8 -0
- data/db/schema.rb +80 -0
- data/db/seeds.rb +7 -0
- data/db/test.sqlite3 +0 -0
- data/lib/daily.rb +9 -0
- data/lib/daily/daily_config.rb +51 -0
- data/lib/daily/engine.rb +4 -0
- data/lib/daily/has_data.rb +52 -0
- data/lib/daily/shared_behaviors.rb +65 -0
- data/lib/daily/version.rb +3 -0
- data/lib/tasks/user.rake +24 -0
- metadata +454 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format
|
4
|
+
# (all these examples are active by default):
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
8
|
+
# inflect.irregular 'person', 'people'
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
10
|
+
# end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
# Make sure the secret is at least 30 characters and all random,
|
6
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
+
Daily::Application.config.secret_token = 'ce963316d81ab3fe75c1e1c30768eafb85d1ebe6d4359d73aad49bfae6acc7f13fec1a1f7a2598e143df034887d06e8be15cc77467347eca47a84b5f3e58a191'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
Daily::Application.config.session_store :cookie_store, :key => '_daily_session'
|
4
|
+
|
5
|
+
# Use the database for sessions instead of the cookie-based default,
|
6
|
+
# which shouldn't be used to store highly confidential information
|
7
|
+
# (create the session table with "rails generate session_migration")
|
8
|
+
# Daily::Application.config.session_store :active_record_store
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require "simple_form"
|
2
|
+
|
3
|
+
# Use this setup block to configure all options available in SimpleForm.
|
4
|
+
SimpleForm.setup do |config|
|
5
|
+
config.form_class = nil
|
6
|
+
config.hint_class = "hint input"
|
7
|
+
config.error_class = 'error input'
|
8
|
+
config.wrapper_class = :clearfix
|
9
|
+
config.wrapper_error_class = :error
|
10
|
+
|
11
|
+
# Components used by the form builder to generate a complete input. You can remove
|
12
|
+
# any of them, change the order, or even add your own components to the stack.
|
13
|
+
# config.components = [ :placeholder, :label_input, :hint, :error ]
|
14
|
+
|
15
|
+
# Default tag used on hints.
|
16
|
+
# config.hint_tag = :span
|
17
|
+
|
18
|
+
# CSS class to add to all hint tags.
|
19
|
+
# config.hint_class = :hint
|
20
|
+
|
21
|
+
# CSS class used on errors.
|
22
|
+
# config.error_class = :error
|
23
|
+
|
24
|
+
# Default tag used on errors.
|
25
|
+
# config.error_tag = :span
|
26
|
+
|
27
|
+
# Method used to tidy up errors.
|
28
|
+
# config.error_method = :first
|
29
|
+
|
30
|
+
# Default tag used for error notification helper.
|
31
|
+
# config.error_notification_tag = :p
|
32
|
+
|
33
|
+
# CSS class to add for error notification helper.
|
34
|
+
# config.error_notification_class = :error_notification
|
35
|
+
|
36
|
+
# ID to add for error notification helper.
|
37
|
+
# config.error_notification_id = nil
|
38
|
+
|
39
|
+
# You can wrap all inputs in a pre-defined tag.
|
40
|
+
# config.wrapper_tag = :div
|
41
|
+
|
42
|
+
# CSS class to add to all wrapper tags.
|
43
|
+
# config.wrapper_class = :input
|
44
|
+
|
45
|
+
# CSS class to add to the wrapper if the field has errors.
|
46
|
+
# config.wrapper_error_class = :field_with_errors
|
47
|
+
|
48
|
+
# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
|
49
|
+
# config.collection_wrapper_tag = nil
|
50
|
+
|
51
|
+
# You can wrap each item in a collection of radio/check boxes with a tag, defaulting to span.
|
52
|
+
# config.item_wrapper_tag = :span
|
53
|
+
|
54
|
+
# Series of attempts to detect a default label method for collection.
|
55
|
+
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
|
56
|
+
|
57
|
+
# Series of attempts to detect a default value method for collection.
|
58
|
+
# config.collection_value_methods = [ :id, :to_s ]
|
59
|
+
|
60
|
+
# How the label text should be generated altogether with the required text.
|
61
|
+
# config.label_text = lambda { |label, required| "#{required} #{label}" }
|
62
|
+
|
63
|
+
# You can define the class to use on all labels. Default is nil.
|
64
|
+
# config.label_class = nil
|
65
|
+
|
66
|
+
# You can define the class to use on all forms. Default is simple_form.
|
67
|
+
# config.form_class = :simple_form
|
68
|
+
|
69
|
+
# Whether attributes are required by default (or not). Default is true.
|
70
|
+
# config.required_by_default = true
|
71
|
+
|
72
|
+
# Tell browsers whether to use default HTML5 validations (novalidate option).
|
73
|
+
# Default is enabled.
|
74
|
+
# config.browser_validations = true
|
75
|
+
|
76
|
+
# Determines whether HTML5 types (:email, :url, :search, :tel) and attributes
|
77
|
+
# (e.g. required) are used or not. True by default.
|
78
|
+
# Having this on in non-HTML5 compliant sites can cause odd behavior in
|
79
|
+
# HTML5-aware browsers such as Chrome.
|
80
|
+
# config.html5 = true
|
81
|
+
|
82
|
+
# Custom mappings for input types. This should be a hash containing a regexp
|
83
|
+
# to match as key, and the input type that will be used when the field name
|
84
|
+
# matches the regexp as value.
|
85
|
+
# config.input_mappings = { /count/ => :integer }
|
86
|
+
|
87
|
+
# Collection of methods to detect if a file type was given.
|
88
|
+
# config.file_methods = [ :mounted_as, :file?, :public_filename ]
|
89
|
+
|
90
|
+
# Default priority for time_zone inputs.
|
91
|
+
# config.time_zone_priority = nil
|
92
|
+
|
93
|
+
# Default priority for country inputs.
|
94
|
+
# config.country_priority = nil
|
95
|
+
|
96
|
+
# Default size for text inputs.
|
97
|
+
# config.default_input_size = 50
|
98
|
+
|
99
|
+
# When false, do not use translations for labels, hints or placeholders.
|
100
|
+
# config.translate = true
|
101
|
+
end
|
102
|
+
|
103
|
+
SimpleForm::Inputs.constants.each do |klazz|
|
104
|
+
next if klazz == :Base
|
105
|
+
"SimpleForm::Inputs::#{klazz.to_s}".constantize.class_eval do
|
106
|
+
def input_with_surrounding_div
|
107
|
+
@builder.template.content_tag :div, input_without_surrounding_div, :class => "input"
|
108
|
+
end
|
109
|
+
alias_method_chain :input, :surrounding_div
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
#
|
3
|
+
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
+
# is enabled by default.
|
5
|
+
|
6
|
+
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
+
ActiveSupport.on_load(:action_controller) do
|
8
|
+
wrap_parameters :format => [:json]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Disable root element in JSON by default.
|
12
|
+
ActiveSupport.on_load(:active_record) do
|
13
|
+
self.include_root_in_json = false
|
14
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Additional translations at http://github.com/plataformatec/devise/wiki/I18n
|
2
|
+
|
3
|
+
en:
|
4
|
+
errors:
|
5
|
+
messages:
|
6
|
+
expired: "has expired, please request a new one"
|
7
|
+
not_found: "not found"
|
8
|
+
already_confirmed: "was already confirmed, please try signing in"
|
9
|
+
not_locked: "was not locked"
|
10
|
+
not_saved:
|
11
|
+
one: "1 error prohibited this %{resource} from being saved:"
|
12
|
+
other: "%{count} errors prohibited this %{resource} from being saved:"
|
13
|
+
|
14
|
+
devise:
|
15
|
+
failure:
|
16
|
+
already_authenticated: 'You are already signed in.'
|
17
|
+
unauthenticated: 'You need to sign in or sign up before continuing.'
|
18
|
+
unconfirmed: 'You have to confirm your account before continuing.'
|
19
|
+
locked: 'Your account is locked.'
|
20
|
+
invalid: 'Invalid email or password.'
|
21
|
+
invalid_token: 'Invalid authentication token.'
|
22
|
+
timeout: 'Your session expired, please sign in again to continue.'
|
23
|
+
inactive: 'Your account was not activated yet.'
|
24
|
+
sessions:
|
25
|
+
signed_in: 'Signed in successfully.'
|
26
|
+
signed_out: 'Signed out successfully.'
|
27
|
+
passwords:
|
28
|
+
send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.'
|
29
|
+
updated: 'Your password was changed successfully. You are now signed in.'
|
30
|
+
updated_not_active: 'Your password was changed successfully.'
|
31
|
+
send_paranoid_instructions: "If your e-mail exists on our database, you will receive a password recovery link on your e-mail"
|
32
|
+
confirmations:
|
33
|
+
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
|
34
|
+
send_paranoid_instructions: 'If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.'
|
35
|
+
confirmed: 'Your account was successfully confirmed. You are now signed in.'
|
36
|
+
registrations:
|
37
|
+
signed_up: 'Welcome! You have signed up successfully.'
|
38
|
+
inactive_signed_up: 'You have signed up successfully. However, we could not sign you in because your account is %{reason}.'
|
39
|
+
updated: 'You updated your account successfully.'
|
40
|
+
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
|
41
|
+
reasons:
|
42
|
+
inactive: 'inactive'
|
43
|
+
unconfirmed: 'unconfirmed'
|
44
|
+
locked: 'locked'
|
45
|
+
unlocks:
|
46
|
+
send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.'
|
47
|
+
unlocked: 'Your account was successfully unlocked. You are now signed in.'
|
48
|
+
send_paranoid_instructions: 'If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.'
|
49
|
+
omniauth_callbacks:
|
50
|
+
success: 'Successfully authorized from %{kind} account.'
|
51
|
+
failure: 'Could not authorize you from %{kind} because "%{reason}".'
|
52
|
+
mailer:
|
53
|
+
confirmation_instructions:
|
54
|
+
subject: 'Confirmation instructions'
|
55
|
+
reset_password_instructions:
|
56
|
+
subject: 'Reset password instructions'
|
57
|
+
unlock_instructions:
|
58
|
+
subject: 'Unlock Instructions'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
en:
|
2
|
+
simple_form:
|
3
|
+
"yes": 'Yes'
|
4
|
+
"no": 'No'
|
5
|
+
required:
|
6
|
+
text: 'required'
|
7
|
+
mark: '*'
|
8
|
+
# You can uncomment the line below if you need to overwrite the whole required html.
|
9
|
+
# When using html, text and mark won't be used.
|
10
|
+
# html: '<abbr title="required">*</abbr>'
|
11
|
+
error_notification:
|
12
|
+
default_message: "Some errors were found, please take a look:"
|
13
|
+
# Labels and hints examples
|
14
|
+
# labels:
|
15
|
+
# password: 'Password'
|
16
|
+
# user:
|
17
|
+
# new:
|
18
|
+
# email: 'E-mail para efetuar o sign in.'
|
19
|
+
# edit:
|
20
|
+
# email: 'E-mail.'
|
21
|
+
# hints:
|
22
|
+
# username: 'User name to sign in.'
|
23
|
+
# password: 'No special characters, please.'
|
24
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
|
3
|
+
scope "/#{DailyConfig.subdirectory}" do
|
4
|
+
|
5
|
+
devise_for :users, :only => :sessions do
|
6
|
+
get "login", :to => "devise/sessions#new"
|
7
|
+
get "logout", :to => "devise/sessions#destroy"
|
8
|
+
root :to => "devise/sessions#new"
|
9
|
+
end
|
10
|
+
|
11
|
+
match 'home' => 'main#home', :as => :user_root
|
12
|
+
|
13
|
+
resources :tables do
|
14
|
+
resources :reports do
|
15
|
+
member do
|
16
|
+
post :generate
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
resources :reports, :only => :index
|
22
|
+
|
23
|
+
resources :users
|
24
|
+
get "account", :to => "users#edit"
|
25
|
+
|
26
|
+
get "files/*path", :to => "files#show", :format => false
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
Binary file
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class DeviseCreateUsers < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table(:users) do |t|
|
4
|
+
t.database_authenticatable :null => false
|
5
|
+
t.recoverable
|
6
|
+
t.rememberable
|
7
|
+
t.trackable
|
8
|
+
|
9
|
+
# t.encryptable
|
10
|
+
# t.confirmable
|
11
|
+
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
|
12
|
+
# t.token_authenticatable
|
13
|
+
|
14
|
+
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
|
18
|
+
add_index :users, :email, :unique => true
|
19
|
+
add_index :users, :reset_password_token, :unique => true
|
20
|
+
# add_index :users, :confirmation_token, :unique => true
|
21
|
+
# add_index :users, :unlock_token, :unique => true
|
22
|
+
# add_index :users, :authentication_token, :unique => true
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.down
|
26
|
+
drop_table :users
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddReports < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table :reports, :force => true do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :filename
|
6
|
+
t.integer :table_id
|
7
|
+
t.integer :user_id
|
8
|
+
t.string :formatter
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def down
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddTimesToReports < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :reports, :generate_started_at, :datetime
|
4
|
+
add_column :reports, :generate_ended_at, :datetime
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
remove_column :reports, :generate_started_at
|
9
|
+
remove_column :reports, :generate_ended_at
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateDelayedJobs < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :delayed_jobs, :force => true do |table|
|
4
|
+
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
|
5
|
+
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
|
6
|
+
table.text :handler # YAML-encoded string of the object that will do work
|
7
|
+
table.text :last_error # reason for last failure (See Note below)
|
8
|
+
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
|
9
|
+
table.datetime :locked_at # Set when a client is working on this object
|
10
|
+
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
|
11
|
+
table.string :locked_by # Who is working on this object (if locked)
|
12
|
+
table.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.down
|
19
|
+
drop_table :delayed_jobs
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddReportToDelayedJobs < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :delayed_jobs, :report_id, :integer
|
4
|
+
add_index :delayed_jobs, :report_id
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
remove_index :delayed_jobs, :report_id
|
9
|
+
remove_column :delayed_jobs, :report_id
|
10
|
+
end
|
11
|
+
end
|