volt-daterange 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +15 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/app/daterange/assets/css/daterangepicker.css +341 -0
- data/app/daterange/assets/js/01_moment.js +3112 -0
- data/app/daterange/assets/js/daterangepicker.js +1458 -0
- data/app/daterange/config/dependencies.rb +1 -0
- data/app/daterange/config/initializers/boot.rb +10 -0
- data/app/daterange/config/routes.rb +1 -0
- data/app/daterange/controllers/main_controller.rb +106 -0
- data/app/daterange/views/main/index.html +4 -0
- data/lib/volt/daterange.rb +18 -0
- data/lib/volt/daterange/version.rb +5 -0
- data/spec/dummy/.gitignore +9 -0
- data/spec/dummy/README.md +4 -0
- data/spec/dummy/app/main/assets/css/app.css.scss +1 -0
- data/spec/dummy/app/main/config/dependencies.rb +11 -0
- data/spec/dummy/app/main/config/initializers/boot.rb +10 -0
- data/spec/dummy/app/main/config/routes.rb +14 -0
- data/spec/dummy/app/main/controllers/main_controller.rb +27 -0
- data/spec/dummy/app/main/models/user.rb +12 -0
- data/spec/dummy/app/main/views/main/about.html +7 -0
- data/spec/dummy/app/main/views/main/index.html +6 -0
- data/spec/dummy/app/main/views/main/main.html +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/app.rb +137 -0
- data/spec/dummy/config/base/index.html +15 -0
- data/spec/dummy/config/initializers/boot.rb +4 -0
- data/spec/integration/sample_integration_spec.rb +11 -0
- data/spec/sample_spec.rb +7 -0
- data/spec/spec_helper.rb +18 -0
- data/volt-daterange.gemspec +38 -0
- metadata +280 -0
@@ -0,0 +1 @@
|
|
1
|
+
# Component dependencies
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Place any code you want to run when the component is included on the client
|
2
|
+
# or server.
|
3
|
+
|
4
|
+
# To include code only on the client use:
|
5
|
+
# if RUBY_PLATFORM == 'opal'
|
6
|
+
#
|
7
|
+
# To include code only on the server, use:
|
8
|
+
# unless RUBY_PLATFORM == 'opal'
|
9
|
+
# ^^ this will not send compile in code in the conditional to the client.
|
10
|
+
# ^^ this include code required in the conditional.
|
@@ -0,0 +1 @@
|
|
1
|
+
# Component routes
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Daterange
|
2
|
+
class MainController < Volt::ModelController
|
3
|
+
|
4
|
+
def format_str
|
5
|
+
attrs.format_str || 'MM-DD-YYYY'
|
6
|
+
end
|
7
|
+
|
8
|
+
def index_ready
|
9
|
+
callback = proc { |start_date, end_date| set_date(start_date, end_date) }
|
10
|
+
`
|
11
|
+
var opts = {
|
12
|
+
ranges: {
|
13
|
+
'Today': [moment(), moment()],
|
14
|
+
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
15
|
+
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
|
16
|
+
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
17
|
+
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
18
|
+
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
|
19
|
+
}
|
20
|
+
};
|
21
|
+
`
|
22
|
+
# You can specify an integer to limit the number of days you can select
|
23
|
+
# at once.
|
24
|
+
if attrs.limit_days
|
25
|
+
`opts.dateLimit = {
|
26
|
+
days: #{attrs.limit_days.to_i}
|
27
|
+
};`
|
28
|
+
end
|
29
|
+
|
30
|
+
@picker = `$(#{first_element}).daterangepicker(opts, #{callback})`
|
31
|
+
|
32
|
+
puts "a"
|
33
|
+
if attrs.start_date
|
34
|
+
start_date = `moment(#{attrs.start_date}, #{format_str})`
|
35
|
+
else
|
36
|
+
start_date = `moment().subtract(29, 'days')`
|
37
|
+
end
|
38
|
+
|
39
|
+
puts "b"
|
40
|
+
|
41
|
+
if attrs.end_date
|
42
|
+
end_date = `moment(#{attrs.end_date}, #{format_str})`
|
43
|
+
else
|
44
|
+
end_date = `moment()`
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "c"
|
48
|
+
|
49
|
+
set_date(start_date, end_date)
|
50
|
+
|
51
|
+
puts "d"
|
52
|
+
|
53
|
+
@start_comp = proc do
|
54
|
+
val = attrs.start_date
|
55
|
+
picker = @picker
|
56
|
+
if val
|
57
|
+
`
|
58
|
+
if (picker.setStartDate) {
|
59
|
+
var date = moment(val);
|
60
|
+
if (date.isValid()) {
|
61
|
+
console.log('set start');
|
62
|
+
picker.setStartDate(date);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
`
|
66
|
+
end
|
67
|
+
end.watch!
|
68
|
+
|
69
|
+
@end_comp = proc do
|
70
|
+
val = attrs.end_date
|
71
|
+
picker = @picker
|
72
|
+
if val
|
73
|
+
puts "Try Update"
|
74
|
+
`
|
75
|
+
if (picker.setEndDate) {
|
76
|
+
var date = moment(val);
|
77
|
+
if (date.isValid()) {
|
78
|
+
console.log('set end');
|
79
|
+
picker.setEndDate(date);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
`
|
83
|
+
end
|
84
|
+
end.watch!
|
85
|
+
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def picker
|
90
|
+
# Get the picker obj so we can set on it
|
91
|
+
return `$(#{first_element}).data('daterangepicker')`
|
92
|
+
end
|
93
|
+
|
94
|
+
def before_index_remove
|
95
|
+
@start_comp.stop
|
96
|
+
@end_comp.stop
|
97
|
+
end
|
98
|
+
|
99
|
+
def set_date(start_date, end_date)
|
100
|
+
`$(#{first_element}).find('span').html(start_date.format(#{format_str}) + ' - ' + end_date.format(#{format_str})); `
|
101
|
+
|
102
|
+
attrs.start_date = `start_date.format(#{format_str})`
|
103
|
+
attrs.end_date = `end_date.format(#{format_str})`
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# If you need to require in code in the gem's app folder, keep in mind that
|
2
|
+
# the app is not on the load path when the gem is required. Use
|
3
|
+
# app/{gemname}/config/initializers/boot.rb to require in client or server
|
4
|
+
# code.
|
5
|
+
#
|
6
|
+
# Also, in volt apps, you typically use the lib folder in the
|
7
|
+
# app/{componentname} folder instead of this lib folder. This lib folder is
|
8
|
+
# for setting up gem code when Bundler.require is called. (or the gem is
|
9
|
+
# required.)
|
10
|
+
#
|
11
|
+
# If you need to configure volt in some way, you can add a Volt.configure block
|
12
|
+
# in this file.
|
13
|
+
|
14
|
+
module Volt
|
15
|
+
module Daterange
|
16
|
+
# Your code goes here...
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
// Place your apps css here
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Specify which components you wish to include when
|
2
|
+
# the "home" component loads.
|
3
|
+
|
4
|
+
# bootstrap css framework
|
5
|
+
component 'bootstrap'
|
6
|
+
|
7
|
+
# a default theme for the bootstrap framework
|
8
|
+
component 'bootstrap_jumbotron_theme'
|
9
|
+
|
10
|
+
# provides templates for login, signup, and logout
|
11
|
+
component 'user_templates'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Place any code you want to run when the component is included on the client
|
2
|
+
# or server.
|
3
|
+
|
4
|
+
# To include code only on the client use:
|
5
|
+
# if RUBY_PLATFORM == 'opal'
|
6
|
+
#
|
7
|
+
# To include code only on the server, use:
|
8
|
+
# unless RUBY_PLATFORM == 'opal'
|
9
|
+
# ^^ this will not send compile in code in the conditional to the client.
|
10
|
+
# ^^ this include code required in the conditional.
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# See https://github.com/voltrb/volt#routes for more info on routes
|
2
|
+
|
3
|
+
client '/about', action: 'about'
|
4
|
+
|
5
|
+
# Routes for login and signup, provided by user_templates component gem
|
6
|
+
client '/signup', component: 'user_templates', controller: 'signup'
|
7
|
+
client '/login', component: 'user_templates', controller: 'login', action: 'index'
|
8
|
+
client '/password_reset', component: 'user_templates', controller: 'password_reset', action: 'index'
|
9
|
+
client '/forgot', component: 'user_templates', controller: 'login', action: 'forgot'
|
10
|
+
client '/account', component: 'user_templates', controller: 'account', action: 'index'
|
11
|
+
|
12
|
+
# The main route, this should be last. It will match any params not
|
13
|
+
# previously matched.
|
14
|
+
client '/', {}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# By default Volt generates this controller for your Main component
|
2
|
+
module Main
|
3
|
+
class MainController < Volt::ModelController
|
4
|
+
def index
|
5
|
+
# Add code for when the index view is loaded
|
6
|
+
end
|
7
|
+
|
8
|
+
def about
|
9
|
+
# Add code for when the about view is loaded
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# The main template contains a #template binding that shows another
|
15
|
+
# template. This is the path to that template. It may change based
|
16
|
+
# on the params._component, params._controller, and params._action values.
|
17
|
+
def main_path
|
18
|
+
"#{params._component || 'main'}/#{params._controller || 'main'}/#{params._action || 'index'}"
|
19
|
+
end
|
20
|
+
|
21
|
+
# Determine if the current nav component is the active one by looking
|
22
|
+
# at the first part of the url against the href attribute.
|
23
|
+
def active_tab?
|
24
|
+
url.path.split('/')[1] == attrs.href.split('/')[1]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# By default Volt generates this User model which inherits from Volt::User,
|
2
|
+
# you can rename this if you want.
|
3
|
+
class User < Volt::User
|
4
|
+
# login_field is set to :email by default and can be changed to :username
|
5
|
+
# in config/app.rb
|
6
|
+
field login_field
|
7
|
+
field :name
|
8
|
+
|
9
|
+
validate login_field, unique: true, length: 8
|
10
|
+
validate :email, email: true
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<:Title>
|
2
|
+
{{ view main_path, "title", {controller_group: 'main'} }}
|
3
|
+
|
4
|
+
<:Body>
|
5
|
+
<div class="container">
|
6
|
+
<div class="header">
|
7
|
+
<ul class="nav nav-pills pull-right">
|
8
|
+
<:nav href="/">Home</:nav>
|
9
|
+
<:nav href="/about">About</:nav>
|
10
|
+
<:user_templates:menu />
|
11
|
+
</ul>
|
12
|
+
<h3 class="text-muted">dummy</h3>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<:volt:notices />
|
16
|
+
|
17
|
+
{{ view main_path, 'body', {controller_group: 'main'} }}
|
18
|
+
|
19
|
+
<div class="footer">
|
20
|
+
<p>© Company {{ Time.now.year }}</p>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<:Nav>
|
26
|
+
<li class="{{ if active_tab? }}active{{ end }}">
|
27
|
+
<a href="{{ attrs.href }}">{{ yield }}</a>
|
28
|
+
</li>
|
29
|
+
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# app.rb is used to configure your app. This code is only run on the server,
|
2
|
+
# then any config options in config.public are passed to the client as well.
|
3
|
+
|
4
|
+
Volt.configure do |config|
|
5
|
+
# Setup your global app config here.
|
6
|
+
|
7
|
+
#######################################
|
8
|
+
# Basic App Info (stuff you should set)
|
9
|
+
#######################################
|
10
|
+
config.domain = 'dummy.com'
|
11
|
+
config.app_name = 'Dummy'
|
12
|
+
config.mailer.from = 'Dummy <no-reply@dummy.com>'
|
13
|
+
|
14
|
+
############
|
15
|
+
# App Secret
|
16
|
+
############
|
17
|
+
# Your app secret is used for signing things like the user cookie so it can't
|
18
|
+
# be tampered with. A random value is generated on new projects that will work
|
19
|
+
# without the need to customize. Make sure this value doesn't leave your server.
|
20
|
+
#
|
21
|
+
# For added security we recommend moving the app secret into an environment. You can
|
22
|
+
# setup that like so:
|
23
|
+
#
|
24
|
+
# config.app_secret = ENV['APP_SECRET']
|
25
|
+
#
|
26
|
+
config.app_secret = 'FNiXFFRj9z-vRL6GQaSFdFwJdXAQnmBDF_BMTlQcyPzhFA2XjAPKS6wAwx2SBQ6a0tg'
|
27
|
+
|
28
|
+
###############
|
29
|
+
# Log Filtering
|
30
|
+
###############
|
31
|
+
# Data updates from the client come in via Tasks. The task dispatcher logs all calls to tasks.
|
32
|
+
# By default hashes in the arguments can be filtered based on keys. So any hash with a key of
|
33
|
+
# password will be filtered. You can add more fields to filter below:
|
34
|
+
config.filter_keys = [:password]
|
35
|
+
|
36
|
+
##########
|
37
|
+
# Database
|
38
|
+
##########
|
39
|
+
# Database config all start with db_ and can be set either in the config
|
40
|
+
# file or with an environment variable (DB_NAME for example).
|
41
|
+
|
42
|
+
# config.db_driver = 'mongo'
|
43
|
+
# config.db_name = (config.app_name + '_' + Volt.env.to_s)
|
44
|
+
# config.db_host = 'localhost'
|
45
|
+
# config.db_port = 27017
|
46
|
+
|
47
|
+
#####################
|
48
|
+
# Compression options
|
49
|
+
#####################
|
50
|
+
# If you are not running behind something like nginx in production, you can
|
51
|
+
# have rack deflate all files.
|
52
|
+
# config.deflate = true
|
53
|
+
|
54
|
+
#######################
|
55
|
+
# Public configurations
|
56
|
+
#######################
|
57
|
+
# Anything under config.public will be sent to the client as well as the server,
|
58
|
+
# so be sure no private data ends up under public
|
59
|
+
|
60
|
+
# Use username instead of email as the login
|
61
|
+
# config.public.auth.use_username = true
|
62
|
+
|
63
|
+
#####################
|
64
|
+
# Compression Options
|
65
|
+
#####################
|
66
|
+
# Disable or enable css/js/image compression. Default is to only run in production.
|
67
|
+
# if Volt.env.production?
|
68
|
+
# config.compress_javascript = true
|
69
|
+
# config.compress_css = true
|
70
|
+
# config.compress_images = true
|
71
|
+
# end
|
72
|
+
|
73
|
+
################
|
74
|
+
# Mailer options
|
75
|
+
################
|
76
|
+
# The volt-mailer gem uses pony (https://github.com/benprew/pony) to deliver e-mail. Any
|
77
|
+
# options you would pass to pony can be setup below.
|
78
|
+
# NOTE: The from address is setup at the top
|
79
|
+
|
80
|
+
# Normally pony uses /usr/sbin/sendmail if one is installed. You can specify smtp below:
|
81
|
+
# config.mailer.via = :smtp
|
82
|
+
# config.mailer.via_options = {
|
83
|
+
# :address => 'smtp.yourserver.com',
|
84
|
+
# :port => '25',
|
85
|
+
# :user_name => 'user',
|
86
|
+
# :password => 'password',
|
87
|
+
# :authentication => :plain, # :plain, :login, :cram_md5, no auth by default
|
88
|
+
# :domain => "localhost.localdomain" # the HELO domain provided by the client to the server
|
89
|
+
# }
|
90
|
+
|
91
|
+
#############
|
92
|
+
# Message Bus
|
93
|
+
#############
|
94
|
+
# Volt provides a "Message Bus" out of the box. The message bus provides
|
95
|
+
# a pub/sub service between any volt instance (server, client, runner, etc..)
|
96
|
+
# that share the same database. The message bus can be used by app code. It
|
97
|
+
# is also used internally to push data to any listening clients.
|
98
|
+
#
|
99
|
+
# The default message bus (called "peer_to_peer") uses the database to sync
|
100
|
+
# socket ip's/ports.
|
101
|
+
# config.message_bus.bus_name = 'peer_to_peer'
|
102
|
+
#
|
103
|
+
# Encrypt message bus - messages on the message bus are encrypted by default
|
104
|
+
# using rbnacl.
|
105
|
+
|
106
|
+
#
|
107
|
+
# For dummy apps, we disable_encryption, to simplify the gem requirements.
|
108
|
+
config.message_bus.disable_encryption = true
|
109
|
+
|
110
|
+
#
|
111
|
+
# ## MessageBus Server -- the message bus binds to a port and ip which the
|
112
|
+
# other volt instances need to be able to connect to. You can customize
|
113
|
+
# the server below:
|
114
|
+
#
|
115
|
+
# Port range - you can specify a range of ports that an instance can bind the
|
116
|
+
# message bus on. You can specify a range, an array of Integers, or an array
|
117
|
+
# of ranges.
|
118
|
+
# config.message_bus.bind_port_ranges = (58000..61000)
|
119
|
+
#
|
120
|
+
# Bind Ip - specifies the ip address the message bus server should bind on.
|
121
|
+
# config.message_bus.bind_ip = '127.0.0.1'
|
122
|
+
|
123
|
+
#############
|
124
|
+
# Concurrency
|
125
|
+
#############
|
126
|
+
# Volt provides a thread worker pool for incoming task requests (and all
|
127
|
+
# database requests, since those use tasks to do their work.) The following
|
128
|
+
# lets you control the size of the worker pool. Threads are only created as
|
129
|
+
# needed, and are removed after a certain amount of inactivity.
|
130
|
+
# config.min_worker_threads = 1
|
131
|
+
# config.max_worker_threads = 10
|
132
|
+
#
|
133
|
+
# You can also specify the amount of time a Task should run for before it
|
134
|
+
# timeout's. Setting this to short can cause unexpected results, currently
|
135
|
+
# we recomend it be at least 10 seconds.
|
136
|
+
# config.worker_timeout = 60
|
137
|
+
end
|