init
This commit is contained in:
commit
cb7e47a466
53
.gitignore
vendored
Normal file
53
.gitignore
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
||||||
|
#
|
||||||
|
# If you find yourself ignoring temporary files generated by your text editor
|
||||||
|
# or operating system, you probably want to add a global ignore instead:
|
||||||
|
# git config --global core.excludesfile '~/.gitignore_global'
|
||||||
|
|
||||||
|
# Ignore bundler config.
|
||||||
|
/.bundle
|
||||||
|
|
||||||
|
# Ignore the default SQLite database.
|
||||||
|
/db/*.sqlite3
|
||||||
|
/db/*.sqlite3-journal
|
||||||
|
|
||||||
|
# Ignore all logfiles and tempfiles.
|
||||||
|
/log/*
|
||||||
|
!/log/.keep
|
||||||
|
/tmp
|
||||||
|
|
||||||
|
### Ruby ###
|
||||||
|
*.gem
|
||||||
|
*.rbc
|
||||||
|
/.config
|
||||||
|
/coverage/
|
||||||
|
/InstalledFiles
|
||||||
|
/pkg/
|
||||||
|
/spec/reports/
|
||||||
|
/spec/examples.txt
|
||||||
|
/test/tmp/
|
||||||
|
/test/version_tmp/
|
||||||
|
/tmp/
|
||||||
|
|
||||||
|
## Documentation cache and generated files:
|
||||||
|
/.yardoc/
|
||||||
|
/_yardoc/
|
||||||
|
/doc/
|
||||||
|
/rdoc/
|
||||||
|
|
||||||
|
## Environment normalisation:
|
||||||
|
/.bundle/
|
||||||
|
/vendor/bundle
|
||||||
|
/lib/bundler/man/
|
||||||
|
|
||||||
|
### Vim ###
|
||||||
|
[._]*.s[a-w][a-z]
|
||||||
|
[._]s[a-w][a-z]
|
||||||
|
*.un~
|
||||||
|
Session.vim
|
||||||
|
.netrwhist
|
||||||
|
*~
|
||||||
|
#
|
||||||
|
### Application Secrets ###
|
||||||
|
application.yml
|
||||||
|
|
35
.rubocop.yml
Normal file
35
.rubocop.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
AllCops:
|
||||||
|
Exclude:
|
||||||
|
- db/schema.rb
|
||||||
|
- db/seeds.rb
|
||||||
|
- bin/**/*
|
||||||
|
|
||||||
|
Style/StringLiterals:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Documentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/MethodDefParentheses:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/IndentationConsistency:
|
||||||
|
EnforcedStyle: rails
|
||||||
|
|
||||||
|
Metrics/LineLength:
|
||||||
|
Max: 95
|
||||||
|
|
||||||
|
Metrics/MethodLength:
|
||||||
|
Exclude:
|
||||||
|
- db/migrate/*
|
||||||
|
|
||||||
|
Metrics/LineLength:
|
||||||
|
Exclude:
|
||||||
|
- Rakefile
|
||||||
|
- config/**/*
|
||||||
|
- lib/tasks/**/*
|
||||||
|
- test/test_helper.rb
|
||||||
|
|
||||||
|
Style/ClassAndModuleChildren:
|
||||||
|
Exclude:
|
||||||
|
- test/test_helper.rb
|
37
Gemfile
Normal file
37
Gemfile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
source 'https://rubygems.org'
|
||||||
|
ruby "2.2.2"
|
||||||
|
|
||||||
|
gem 'rails', '~> 4.2.4'
|
||||||
|
gem 'thin', '~> 1.6.3'
|
||||||
|
gem 'responders', '~> 2.1.0'
|
||||||
|
gem 'mysql2', '~> 0.3.20'
|
||||||
|
gem 'bcrypt', '~> 3.1.7'
|
||||||
|
# gem 'rack-protection', '~> 1.5.3'
|
||||||
|
gem 'sass-rails', '~> 5.0'
|
||||||
|
gem 'uglifier', '>= 1.3.0'
|
||||||
|
gem 'jquery-rails'
|
||||||
|
gem 'turbolinks'
|
||||||
|
gem 'haml-rails', "~> 0.9"
|
||||||
|
|
||||||
|
# gem 'rabl-rails', '~> 0.4.1'
|
||||||
|
# gem 'jbuilder', '~> 2.0'
|
||||||
|
gem 'json', '~> 1.8.3'
|
||||||
|
gem 'twilio-ruby', '~> 4.3.0'
|
||||||
|
|
||||||
|
# gem 'sorcery'
|
||||||
|
# gem 'faraday'
|
||||||
|
# gem 'faraday_middleware'
|
||||||
|
|
||||||
|
group :development, :test do
|
||||||
|
gem 'web-console', '~> 2.0'
|
||||||
|
gem 'spring'
|
||||||
|
gem 'awesome_print'
|
||||||
|
gem 'pry-rails'
|
||||||
|
gem 'pry-byebug'
|
||||||
|
gem 'binding_of_caller'
|
||||||
|
gem 'rubocop'
|
||||||
|
gem 'guard'
|
||||||
|
gem 'guard-rubocop'
|
||||||
|
gem 'guard-minitest'
|
||||||
|
gem 'minitest-reporters'
|
||||||
|
end
|
252
Gemfile.lock
Normal file
252
Gemfile.lock
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
actionmailer (4.2.4)
|
||||||
|
actionpack (= 4.2.4)
|
||||||
|
actionview (= 4.2.4)
|
||||||
|
activejob (= 4.2.4)
|
||||||
|
mail (~> 2.5, >= 2.5.4)
|
||||||
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
|
actionpack (4.2.4)
|
||||||
|
actionview (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
rack (~> 1.6)
|
||||||
|
rack-test (~> 0.6.2)
|
||||||
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
|
actionview (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
builder (~> 3.1)
|
||||||
|
erubis (~> 2.7.0)
|
||||||
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
|
activejob (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
globalid (>= 0.3.0)
|
||||||
|
activemodel (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
builder (~> 3.1)
|
||||||
|
activerecord (4.2.4)
|
||||||
|
activemodel (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
arel (~> 6.0)
|
||||||
|
activesupport (4.2.4)
|
||||||
|
i18n (~> 0.7)
|
||||||
|
json (~> 1.7, >= 1.7.7)
|
||||||
|
minitest (~> 5.1)
|
||||||
|
thread_safe (~> 0.3, >= 0.3.4)
|
||||||
|
tzinfo (~> 1.1)
|
||||||
|
ansi (1.5.0)
|
||||||
|
arel (6.0.3)
|
||||||
|
ast (2.1.0)
|
||||||
|
astrolabe (1.3.1)
|
||||||
|
parser (~> 2.2)
|
||||||
|
awesome_print (1.6.1)
|
||||||
|
bcrypt (3.1.10)
|
||||||
|
binding_of_caller (0.7.2)
|
||||||
|
debug_inspector (>= 0.0.1)
|
||||||
|
builder (3.2.2)
|
||||||
|
byebug (5.0.0)
|
||||||
|
columnize (= 0.9.0)
|
||||||
|
coderay (1.1.0)
|
||||||
|
coffee-rails (4.1.0)
|
||||||
|
coffee-script (>= 2.2.0)
|
||||||
|
railties (>= 4.0.0, < 5.0)
|
||||||
|
coffee-script (2.4.1)
|
||||||
|
coffee-script-source
|
||||||
|
execjs
|
||||||
|
coffee-script-source (1.9.1.1)
|
||||||
|
columnize (0.9.0)
|
||||||
|
daemons (1.2.3)
|
||||||
|
debug_inspector (0.0.2)
|
||||||
|
erubis (2.7.0)
|
||||||
|
eventmachine (1.0.8)
|
||||||
|
execjs (2.6.0)
|
||||||
|
ffi (1.9.10)
|
||||||
|
formatador (0.2.5)
|
||||||
|
globalid (0.3.6)
|
||||||
|
activesupport (>= 4.1.0)
|
||||||
|
guard (2.13.0)
|
||||||
|
formatador (>= 0.2.4)
|
||||||
|
listen (>= 2.7, <= 4.0)
|
||||||
|
lumberjack (~> 1.0)
|
||||||
|
nenv (~> 0.1)
|
||||||
|
notiffany (~> 0.0)
|
||||||
|
pry (>= 0.9.12)
|
||||||
|
shellany (~> 0.0)
|
||||||
|
thor (>= 0.18.1)
|
||||||
|
guard-compat (1.2.1)
|
||||||
|
guard-minitest (2.4.4)
|
||||||
|
guard-compat (~> 1.2)
|
||||||
|
minitest (>= 3.0)
|
||||||
|
guard-rubocop (1.2.0)
|
||||||
|
guard (~> 2.0)
|
||||||
|
rubocop (~> 0.20)
|
||||||
|
haml (4.0.6)
|
||||||
|
tilt
|
||||||
|
haml-rails (0.9.0)
|
||||||
|
actionpack (>= 4.0.1)
|
||||||
|
activesupport (>= 4.0.1)
|
||||||
|
haml (>= 4.0.6, < 5.0)
|
||||||
|
html2haml (>= 1.0.1)
|
||||||
|
railties (>= 4.0.1)
|
||||||
|
html2haml (2.0.0)
|
||||||
|
erubis (~> 2.7.0)
|
||||||
|
haml (~> 4.0.0)
|
||||||
|
nokogiri (~> 1.6.0)
|
||||||
|
ruby_parser (~> 3.5)
|
||||||
|
i18n (0.7.0)
|
||||||
|
jquery-rails (4.0.5)
|
||||||
|
rails-dom-testing (~> 1.0)
|
||||||
|
railties (>= 4.2.0)
|
||||||
|
thor (>= 0.14, < 2.0)
|
||||||
|
json (1.8.3)
|
||||||
|
jwt (1.4.1)
|
||||||
|
listen (3.0.3)
|
||||||
|
rb-fsevent (>= 0.9.3)
|
||||||
|
rb-inotify (>= 0.9)
|
||||||
|
loofah (2.0.3)
|
||||||
|
nokogiri (>= 1.5.9)
|
||||||
|
lumberjack (1.0.9)
|
||||||
|
mail (2.6.3)
|
||||||
|
mime-types (>= 1.16, < 3)
|
||||||
|
method_source (0.8.2)
|
||||||
|
mime-types (2.6.1)
|
||||||
|
mini_portile (0.6.2)
|
||||||
|
minitest (5.8.0)
|
||||||
|
minitest-reporters (1.0.16)
|
||||||
|
ansi
|
||||||
|
builder
|
||||||
|
minitest (>= 5.0)
|
||||||
|
ruby-progressbar
|
||||||
|
multi_json (1.11.2)
|
||||||
|
mysql2 (0.3.20)
|
||||||
|
nenv (0.2.0)
|
||||||
|
nokogiri (1.6.6.2)
|
||||||
|
mini_portile (~> 0.6.0)
|
||||||
|
notiffany (0.0.7)
|
||||||
|
nenv (~> 0.1)
|
||||||
|
shellany (~> 0.0)
|
||||||
|
parser (2.2.2.6)
|
||||||
|
ast (>= 1.1, < 3.0)
|
||||||
|
powerpack (0.1.1)
|
||||||
|
pry (0.10.1)
|
||||||
|
coderay (~> 1.1.0)
|
||||||
|
method_source (~> 0.8.1)
|
||||||
|
slop (~> 3.4)
|
||||||
|
pry-byebug (3.2.0)
|
||||||
|
byebug (~> 5.0)
|
||||||
|
pry (~> 0.10)
|
||||||
|
pry-rails (0.3.4)
|
||||||
|
pry (>= 0.9.10)
|
||||||
|
rack (1.6.4)
|
||||||
|
rack-test (0.6.3)
|
||||||
|
rack (>= 1.0)
|
||||||
|
rails (4.2.4)
|
||||||
|
actionmailer (= 4.2.4)
|
||||||
|
actionpack (= 4.2.4)
|
||||||
|
actionview (= 4.2.4)
|
||||||
|
activejob (= 4.2.4)
|
||||||
|
activemodel (= 4.2.4)
|
||||||
|
activerecord (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
bundler (>= 1.3.0, < 2.0)
|
||||||
|
railties (= 4.2.4)
|
||||||
|
sprockets-rails
|
||||||
|
rails-deprecated_sanitizer (1.0.3)
|
||||||
|
activesupport (>= 4.2.0.alpha)
|
||||||
|
rails-dom-testing (1.0.7)
|
||||||
|
activesupport (>= 4.2.0.beta, < 5.0)
|
||||||
|
nokogiri (~> 1.6.0)
|
||||||
|
rails-deprecated_sanitizer (>= 1.0.1)
|
||||||
|
rails-html-sanitizer (1.0.2)
|
||||||
|
loofah (~> 2.0)
|
||||||
|
railties (4.2.4)
|
||||||
|
actionpack (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
|
rake (>= 0.8.7)
|
||||||
|
thor (>= 0.18.1, < 2.0)
|
||||||
|
rainbow (2.0.0)
|
||||||
|
rake (10.4.2)
|
||||||
|
rb-fsevent (0.9.5)
|
||||||
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
responders (2.1.0)
|
||||||
|
railties (>= 4.2.0, < 5)
|
||||||
|
rubocop (0.33.0)
|
||||||
|
astrolabe (~> 1.3)
|
||||||
|
parser (>= 2.2.2.5, < 3.0)
|
||||||
|
powerpack (~> 0.1)
|
||||||
|
rainbow (>= 1.99.1, < 3.0)
|
||||||
|
ruby-progressbar (~> 1.4)
|
||||||
|
ruby-progressbar (1.7.5)
|
||||||
|
ruby_parser (3.6.6)
|
||||||
|
sexp_processor (~> 4.1)
|
||||||
|
sass (3.4.18)
|
||||||
|
sass-rails (5.0.4)
|
||||||
|
railties (>= 4.0.0, < 5.0)
|
||||||
|
sass (~> 3.1)
|
||||||
|
sprockets (>= 2.8, < 4.0)
|
||||||
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
|
tilt (>= 1.1, < 3)
|
||||||
|
sexp_processor (4.5.1)
|
||||||
|
shellany (0.0.1)
|
||||||
|
slop (3.6.0)
|
||||||
|
spring (1.3.6)
|
||||||
|
sprockets (3.3.4)
|
||||||
|
rack (~> 1.0)
|
||||||
|
sprockets-rails (2.3.3)
|
||||||
|
actionpack (>= 3.0)
|
||||||
|
activesupport (>= 3.0)
|
||||||
|
sprockets (>= 2.8, < 4.0)
|
||||||
|
thin (1.6.3)
|
||||||
|
daemons (~> 1.0, >= 1.0.9)
|
||||||
|
eventmachine (~> 1.0)
|
||||||
|
rack (~> 1.0)
|
||||||
|
thor (0.19.1)
|
||||||
|
thread_safe (0.3.5)
|
||||||
|
tilt (2.0.1)
|
||||||
|
turbolinks (2.5.3)
|
||||||
|
coffee-rails
|
||||||
|
twilio-ruby (4.3.0)
|
||||||
|
builder (>= 2.1.2)
|
||||||
|
jwt (~> 1.0)
|
||||||
|
multi_json (>= 1.3.0)
|
||||||
|
tzinfo (1.2.2)
|
||||||
|
thread_safe (~> 0.1)
|
||||||
|
uglifier (2.7.2)
|
||||||
|
execjs (>= 0.3.0)
|
||||||
|
json (>= 1.8.0)
|
||||||
|
web-console (2.2.1)
|
||||||
|
activemodel (>= 4.0)
|
||||||
|
binding_of_caller (>= 0.7.2)
|
||||||
|
railties (>= 4.0)
|
||||||
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
awesome_print
|
||||||
|
bcrypt (~> 3.1.7)
|
||||||
|
binding_of_caller
|
||||||
|
guard
|
||||||
|
guard-minitest
|
||||||
|
guard-rubocop
|
||||||
|
haml-rails (~> 0.9)
|
||||||
|
jquery-rails
|
||||||
|
json (~> 1.8.3)
|
||||||
|
minitest-reporters
|
||||||
|
mysql2 (~> 0.3.20)
|
||||||
|
pry-byebug
|
||||||
|
pry-rails
|
||||||
|
rails (~> 4.2.4)
|
||||||
|
responders (~> 2.1.0)
|
||||||
|
rubocop
|
||||||
|
sass-rails (~> 5.0)
|
||||||
|
spring
|
||||||
|
thin (~> 1.6.3)
|
||||||
|
turbolinks
|
||||||
|
twilio-ruby (~> 4.3.0)
|
||||||
|
uglifier (>= 1.3.0)
|
||||||
|
web-console (~> 2.0)
|
29
Guardfile
Normal file
29
Guardfile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# A sample Guardfile
|
||||||
|
# More info at https://github.com/guard/guard#readme
|
||||||
|
|
||||||
|
## Uncomment and set this to only include directories you want to watch
|
||||||
|
# directories %w(app lib config test spec features) \
|
||||||
|
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
||||||
|
|
||||||
|
## Note: if you are using the `directories` clause above and you are not
|
||||||
|
## watching the project directory ('.'), then you will want to move
|
||||||
|
## the Guardfile to a watched dir and symlink it back, e.g.
|
||||||
|
#
|
||||||
|
# $ mkdir config
|
||||||
|
# $ mv Guardfile config/
|
||||||
|
# $ ln -s config/Guardfile .
|
||||||
|
#
|
||||||
|
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
||||||
|
|
||||||
|
guard :rubocop do
|
||||||
|
watch(/.+\.rb$/)
|
||||||
|
watch(/Rakefile/)
|
||||||
|
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
||||||
|
end
|
||||||
|
|
||||||
|
guard :minitest do
|
||||||
|
watch(%r{^test/test_helper\.rb$}) { 'test' }
|
||||||
|
watch(%r{^test/(.*)\/?(.*)_test\.rb$})
|
||||||
|
watch(%r{^app/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
|
||||||
|
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/lib/#{m[1]}#{m[2]}_test.rb" }
|
||||||
|
end
|
32
README.md
Normal file
32
README.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# SMS Pager
|
||||||
|
|
||||||
|
A simple api to send sms messages with [twillio](https://www.twilio.com/).
|
||||||
|
|
||||||
|
## Configure
|
||||||
|
|
||||||
|
### Secrets file:
|
||||||
|
|
||||||
|
`config/secrets.yml` is read at boot and shoves the values into `ENV`.
|
||||||
|
|
||||||
|
1. Copy `config/secrets.yml.sample` and rename to `config/secrets.yml`.
|
||||||
|
2. Edit file and set/define as many secrets as you need. The sample file has the minimum expected keys.
|
||||||
|
3. Make *ABSOLUTE* certain that this file is not checked into your repository.
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
* list parents
|
||||||
|
* list children
|
||||||
|
* lookup child
|
||||||
|
* lookup parent
|
||||||
|
* lookup child by parent
|
||||||
|
* lookup parent by child
|
||||||
|
* add parent
|
||||||
|
* add child
|
||||||
|
* edit parent
|
||||||
|
* edit child
|
||||||
|
* page parent
|
||||||
|
* sorcery or a lower oauth solution
|
||||||
|
* application log
|
||||||
|
* app version file - milestone 0.9.0
|
||||||
|
* task runner - delayedjob or sidekiq or activerecord newness?
|
||||||
|
* milestone 1.0.0
|
6
Rakefile
Normal file
6
Rakefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
||||||
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
||||||
|
|
||||||
|
require File.expand_path('../config/application', __FILE__)
|
||||||
|
|
||||||
|
Rails.application.load_tasks
|
0
app/assets/images/.keep
Normal file
0
app/assets/images/.keep
Normal file
16
app/assets/javascripts/application.js
Normal file
16
app/assets/javascripts/application.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
||||||
|
// listed below.
|
||||||
|
//
|
||||||
|
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
||||||
|
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
||||||
|
//
|
||||||
|
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
||||||
|
// compiled file.
|
||||||
|
//
|
||||||
|
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
||||||
|
// about supported directives.
|
||||||
|
//
|
||||||
|
//= require jquery
|
||||||
|
//= require jquery_ujs
|
||||||
|
//= require turbolinks
|
||||||
|
//= require_tree .
|
15
app/assets/stylesheets/application.css
Normal file
15
app/assets/stylesheets/application.css
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
||||||
|
* listed below.
|
||||||
|
*
|
||||||
|
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
||||||
|
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
||||||
|
*
|
||||||
|
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
||||||
|
* compiled file so the styles you add here take precedence over styles defined in any styles
|
||||||
|
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
||||||
|
* file per style scope.
|
||||||
|
*
|
||||||
|
*= require_tree .
|
||||||
|
*= require_self
|
||||||
|
*/
|
5
app/controllers/application_controller.rb
Normal file
5
app/controllers/application_controller.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class ApplicationController < ActionController::Base
|
||||||
|
# Prevent CSRF attacks by raising an exception.
|
||||||
|
# For APIs, you may want to use :null_session instead.
|
||||||
|
protect_from_forgery with: :exception
|
||||||
|
end
|
2
app/controllers/children_controller.rb
Normal file
2
app/controllers/children_controller.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
class ChildrenController < ApplicationController
|
||||||
|
end
|
10
app/controllers/docs_controller.rb
Normal file
10
app/controllers/docs_controller.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class DocsController < ApplicationController
|
||||||
|
def index
|
||||||
|
doc = {
|
||||||
|
name: "sms-pager-api",
|
||||||
|
documentation: "https://bitbucket.org/markamoser/sms-pager-api"
|
||||||
|
}.to_json
|
||||||
|
|
||||||
|
render json: doc
|
||||||
|
end
|
||||||
|
end
|
2
app/controllers/pages_controller.rb
Normal file
2
app/controllers/pages_controller.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
class PagesController < ApplicationController
|
||||||
|
end
|
6
app/controllers/parents_controller.rb
Normal file
6
app/controllers/parents_controller.rb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class ParentsController < ApplicationController
|
||||||
|
def index
|
||||||
|
@parents = Person.just_parents
|
||||||
|
respond_with @parents
|
||||||
|
end
|
||||||
|
end
|
2
app/controllers/staff_controller.rb
Normal file
2
app/controllers/staff_controller.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
class StaffController < ApplicationController
|
||||||
|
end
|
2
app/controllers/users_controller.rb
Normal file
2
app/controllers/users_controller.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
class UsersController < ApplicationController
|
||||||
|
end
|
2
app/helpers/application_helper.rb
Normal file
2
app/helpers/application_helper.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
module ApplicationHelper
|
||||||
|
end
|
0
app/mailers/.keep
Normal file
0
app/mailers/.keep
Normal file
0
app/models/.keep
Normal file
0
app/models/.keep
Normal file
10
app/views/layouts/application.html.haml
Normal file
10
app/views/layouts/application.html.haml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
!!!
|
||||||
|
%html
|
||||||
|
%head
|
||||||
|
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
||||||
|
%title SmsPager
|
||||||
|
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
|
||||||
|
= javascript_include_tag 'application', 'data-turbolinks-track' => true
|
||||||
|
= csrf_meta_tags
|
||||||
|
%body
|
||||||
|
= yield
|
21
app/workers/sms.rb
Normal file
21
app/workers/sms.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
class SmsSender
|
||||||
|
attr_accessor :from
|
||||||
|
attr_accessor :to
|
||||||
|
attr_accessor :message
|
||||||
|
|
||||||
|
def initialize args_as_hash
|
||||||
|
@from = args_as_hash["from"] ||= ENV["twilio_number"]
|
||||||
|
@to = args_as_hash["to"]
|
||||||
|
@message = args_as_hash["message"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def send!
|
||||||
|
twilio.messages.create(from: @from, to: @to, body: @message)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def twilio
|
||||||
|
Twilio::REST::Client.new ENV['twilio_sid'], ENV['twilio_token']
|
||||||
|
end
|
||||||
|
end
|
3
bin/bundle
Executable file
3
bin/bundle
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
||||||
|
load Gem.bin_path('bundler', 'bundle')
|
8
bin/rails
Executable file
8
bin/rails
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
begin
|
||||||
|
load File.expand_path("../spring", __FILE__)
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
||||||
|
require_relative '../config/boot'
|
||||||
|
require 'rails/commands'
|
8
bin/rake
Executable file
8
bin/rake
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
begin
|
||||||
|
load File.expand_path("../spring", __FILE__)
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
require_relative '../config/boot'
|
||||||
|
require 'rake'
|
||||||
|
Rake.application.run
|
29
bin/setup
Executable file
29
bin/setup
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require 'pathname'
|
||||||
|
|
||||||
|
# path to your application root.
|
||||||
|
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
||||||
|
|
||||||
|
Dir.chdir APP_ROOT do
|
||||||
|
# This script is a starting point to setup your application.
|
||||||
|
# Add necessary setup steps to this file:
|
||||||
|
|
||||||
|
puts "== Installing dependencies =="
|
||||||
|
system "gem install bundler --conservative"
|
||||||
|
system "bundle check || bundle install"
|
||||||
|
|
||||||
|
# puts "\n== Copying sample files =="
|
||||||
|
# unless File.exist?("config/database.yml")
|
||||||
|
# system "cp config/database.yml.sample config/database.yml"
|
||||||
|
# end
|
||||||
|
|
||||||
|
puts "\n== Preparing database =="
|
||||||
|
system "bin/rake db:setup"
|
||||||
|
|
||||||
|
puts "\n== Removing old logs and tempfiles =="
|
||||||
|
system "rm -f log/*"
|
||||||
|
system "rm -rf tmp/cache"
|
||||||
|
|
||||||
|
puts "\n== Restarting application server =="
|
||||||
|
system "touch tmp/restart.txt"
|
||||||
|
end
|
15
bin/spring
Executable file
15
bin/spring
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
# This file loads spring without using Bundler, in order to be fast.
|
||||||
|
# It gets overwritten when you run the `spring binstub` command.
|
||||||
|
|
||||||
|
unless defined?(Spring)
|
||||||
|
require "rubygems"
|
||||||
|
require "bundler"
|
||||||
|
|
||||||
|
if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m)
|
||||||
|
Gem.paths = { "GEM_PATH" => [Bundler.bundle_path.to_s, *Gem.path].uniq }
|
||||||
|
gem "spring", match[1]
|
||||||
|
require "spring/binstub"
|
||||||
|
end
|
||||||
|
end
|
4
config.ru
Normal file
4
config.ru
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# This file is used by Rack-based servers to start the application.
|
||||||
|
|
||||||
|
require ::File.expand_path('../config/environment', __FILE__)
|
||||||
|
run Rails.application
|
26
config/application.rb
Normal file
26
config/application.rb
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
require File.expand_path('../boot', __FILE__)
|
||||||
|
|
||||||
|
require 'rails/all'
|
||||||
|
|
||||||
|
# Require the gems listed in Gemfile, including any gems
|
||||||
|
# you've limited to :test, :development, or :production.
|
||||||
|
Bundler.require(*Rails.groups)
|
||||||
|
|
||||||
|
module SmsPager
|
||||||
|
class Application < Rails::Application
|
||||||
|
# Settings in config/environments/* take precedence over those specified here.
|
||||||
|
# Application configuration should go into files in config/initializers
|
||||||
|
# -- all .rb files in that directory are automatically loaded.
|
||||||
|
|
||||||
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||||
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||||
|
# config.time_zone = 'Central Time (US & Canada)'
|
||||||
|
|
||||||
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
||||||
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||||
|
# config.i18n.default_locale = :de
|
||||||
|
|
||||||
|
# Do not swallow errors in after_commit/after_rollback callbacks.
|
||||||
|
config.active_record.raise_in_transactional_callbacks = true
|
||||||
|
end
|
||||||
|
end
|
6
config/application.yml.sample
Normal file
6
config/application.yml.sample
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
twilio_sid: "my-twillio-sid"
|
||||||
|
twilio_token: "my-twillio-secret"
|
||||||
|
mysql_host: "localhost"
|
||||||
|
mysql_usr: "user"
|
||||||
|
mysql_pwd: "secret"
|
3
config/boot.rb
Normal file
3
config/boot.rb
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
||||||
|
|
||||||
|
require 'bundler/setup' # Set up gems listed in the Gemfile.
|
22
config/database.yml
Normal file
22
config/database.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
a--
|
||||||
|
default: &default
|
||||||
|
adapter: mysql2
|
||||||
|
encoding: utf8
|
||||||
|
reconnect: false
|
||||||
|
pool: 5
|
||||||
|
host: localhost
|
||||||
|
# socket: /tmp/mysql.sock
|
||||||
|
|
||||||
|
development:
|
||||||
|
<<: *default
|
||||||
|
database: sms-pager-dev
|
||||||
|
|
||||||
|
test:
|
||||||
|
<<: *default
|
||||||
|
database: sms-pager-test
|
||||||
|
|
||||||
|
production:
|
||||||
|
<<: *default
|
||||||
|
database: sms-pager-api
|
||||||
|
username: <%= ENV["mysql_usr"] %>
|
||||||
|
password: <%= ENV["mysql_pwd"] %>
|
5
config/environment.rb
Normal file
5
config/environment.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Load the Rails application.
|
||||||
|
require File.expand_path('../application', __FILE__)
|
||||||
|
|
||||||
|
# Initialize the Rails application.
|
||||||
|
Rails.application.initialize!
|
41
config/environments/development.rb
Normal file
41
config/environments/development.rb
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Rails.application.configure do
|
||||||
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
|
||||||
|
# In the development environment your application's code is reloaded on
|
||||||
|
# every request. This slows down response time but is perfect for development
|
||||||
|
# since you don't have to restart the web server when you make code changes.
|
||||||
|
config.cache_classes = false
|
||||||
|
|
||||||
|
# Do not eager load code on boot.
|
||||||
|
config.eager_load = false
|
||||||
|
|
||||||
|
# Show full error reports and disable caching.
|
||||||
|
config.consider_all_requests_local = true
|
||||||
|
config.action_controller.perform_caching = false
|
||||||
|
|
||||||
|
# Don't care if the mailer can't send.
|
||||||
|
config.action_mailer.raise_delivery_errors = false
|
||||||
|
|
||||||
|
# Print deprecation notices to the Rails logger.
|
||||||
|
config.active_support.deprecation = :log
|
||||||
|
|
||||||
|
# Raise an error on page load if there are pending migrations.
|
||||||
|
config.active_record.migration_error = :page_load
|
||||||
|
|
||||||
|
# Debug mode disables concatenation and preprocessing of assets.
|
||||||
|
# This option may cause significant delays in view rendering with a large
|
||||||
|
# number of complex assets.
|
||||||
|
config.assets.debug = true
|
||||||
|
|
||||||
|
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
||||||
|
# yet still be able to expire them through the digest params.
|
||||||
|
config.assets.digest = true
|
||||||
|
|
||||||
|
# Adds additional error checking when serving assets at runtime.
|
||||||
|
# Checks for improperly declared sprockets dependencies.
|
||||||
|
# Raises helpful error messages.
|
||||||
|
config.assets.raise_runtime_errors = true
|
||||||
|
|
||||||
|
# Raises error for missing translations
|
||||||
|
# config.action_view.raise_on_missing_translations = true
|
||||||
|
end
|
79
config/environments/production.rb
Normal file
79
config/environments/production.rb
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
Rails.application.configure do
|
||||||
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
|
||||||
|
# Code is not reloaded between requests.
|
||||||
|
config.cache_classes = true
|
||||||
|
|
||||||
|
# Eager load code on boot. This eager loads most of Rails and
|
||||||
|
# your application in memory, allowing both threaded web servers
|
||||||
|
# and those relying on copy on write to perform better.
|
||||||
|
# Rake tasks automatically ignore this option for performance.
|
||||||
|
config.eager_load = true
|
||||||
|
|
||||||
|
# Full error reports are disabled and caching is turned on.
|
||||||
|
config.consider_all_requests_local = false
|
||||||
|
config.action_controller.perform_caching = true
|
||||||
|
|
||||||
|
# Enable Rack::Cache to put a simple HTTP cache in front of your application
|
||||||
|
# Add `rack-cache` to your Gemfile before enabling this.
|
||||||
|
# For large-scale production use, consider using a caching reverse proxy like
|
||||||
|
# NGINX, varnish or squid.
|
||||||
|
# config.action_dispatch.rack_cache = true
|
||||||
|
|
||||||
|
# Disable serving static files from the `/public` folder by default since
|
||||||
|
# Apache or NGINX already handles this.
|
||||||
|
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
||||||
|
|
||||||
|
# Compress JavaScripts and CSS.
|
||||||
|
config.assets.js_compressor = :uglifier
|
||||||
|
# config.assets.css_compressor = :sass
|
||||||
|
|
||||||
|
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
||||||
|
config.assets.compile = false
|
||||||
|
|
||||||
|
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
||||||
|
# yet still be able to expire them through the digest params.
|
||||||
|
config.assets.digest = true
|
||||||
|
|
||||||
|
# `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
|
||||||
|
|
||||||
|
# Specifies the header that your server uses for sending files.
|
||||||
|
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
|
||||||
|
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
|
||||||
|
|
||||||
|
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
||||||
|
# config.force_ssl = true
|
||||||
|
|
||||||
|
# Use the lowest log level to ensure availability of diagnostic information
|
||||||
|
# when problems arise.
|
||||||
|
config.log_level = :debug
|
||||||
|
|
||||||
|
# Prepend all log lines with the following tags.
|
||||||
|
# config.log_tags = [ :subdomain, :uuid ]
|
||||||
|
|
||||||
|
# Use a different logger for distributed setups.
|
||||||
|
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
||||||
|
|
||||||
|
# Use a different cache store in production.
|
||||||
|
# config.cache_store = :mem_cache_store
|
||||||
|
|
||||||
|
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
|
||||||
|
# config.action_controller.asset_host = 'http://assets.example.com'
|
||||||
|
|
||||||
|
# Ignore bad email addresses and do not raise email delivery errors.
|
||||||
|
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
|
||||||
|
# config.action_mailer.raise_delivery_errors = false
|
||||||
|
|
||||||
|
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
||||||
|
# the I18n.default_locale when a translation cannot be found).
|
||||||
|
config.i18n.fallbacks = true
|
||||||
|
|
||||||
|
# Send deprecation notices to registered listeners.
|
||||||
|
config.active_support.deprecation = :notify
|
||||||
|
|
||||||
|
# Use default logging formatter so that PID and timestamp are not suppressed.
|
||||||
|
config.log_formatter = ::Logger::Formatter.new
|
||||||
|
|
||||||
|
# Do not dump schema after migrations.
|
||||||
|
config.active_record.dump_schema_after_migration = false
|
||||||
|
end
|
42
config/environments/test.rb
Normal file
42
config/environments/test.rb
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Rails.application.configure do
|
||||||
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
|
||||||
|
# The test environment is used exclusively to run your application's
|
||||||
|
# test suite. You never need to work with it otherwise. Remember that
|
||||||
|
# your test database is "scratch space" for the test suite and is wiped
|
||||||
|
# and recreated between test runs. Don't rely on the data there!
|
||||||
|
config.cache_classes = true
|
||||||
|
|
||||||
|
# Do not eager load code on boot. This avoids loading your whole application
|
||||||
|
# just for the purpose of running a single test. If you are using a tool that
|
||||||
|
# preloads Rails for running tests, you may have to set it to true.
|
||||||
|
config.eager_load = false
|
||||||
|
|
||||||
|
# Configure static file server for tests with Cache-Control for performance.
|
||||||
|
config.serve_static_files = true
|
||||||
|
config.static_cache_control = 'public, max-age=3600'
|
||||||
|
|
||||||
|
# Show full error reports and disable caching.
|
||||||
|
config.consider_all_requests_local = true
|
||||||
|
config.action_controller.perform_caching = false
|
||||||
|
|
||||||
|
# Raise exceptions instead of rendering exception templates.
|
||||||
|
config.action_dispatch.show_exceptions = false
|
||||||
|
|
||||||
|
# Disable request forgery protection in test environment.
|
||||||
|
config.action_controller.allow_forgery_protection = false
|
||||||
|
|
||||||
|
# Tell Action Mailer not to deliver emails to the real world.
|
||||||
|
# The :test delivery method accumulates sent emails in the
|
||||||
|
# ActionMailer::Base.deliveries array.
|
||||||
|
config.action_mailer.delivery_method = :test
|
||||||
|
|
||||||
|
# Randomize the order test cases are executed.
|
||||||
|
config.active_support.test_order = :random
|
||||||
|
|
||||||
|
# Print deprecation notices to the stderr.
|
||||||
|
config.active_support.deprecation = :stderr
|
||||||
|
|
||||||
|
# Raises error for missing translations
|
||||||
|
# config.action_view.raise_on_missing_translations = true
|
||||||
|
end
|
11
config/initializers/assets.rb
Normal file
11
config/initializers/assets.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Version of your assets, change this if you want to expire all your assets.
|
||||||
|
Rails.application.config.assets.version = '1.0'
|
||||||
|
|
||||||
|
# Add additional assets to the asset load path
|
||||||
|
# Rails.application.config.assets.paths << Emoji.images_path
|
||||||
|
|
||||||
|
# Precompile additional assets.
|
||||||
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||||
|
# Rails.application.config.assets.precompile += %w( search.js )
|
7
config/initializers/backtrace_silencers.rb
Normal file
7
config/initializers/backtrace_silencers.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
||||||
|
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
||||||
|
|
||||||
|
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
||||||
|
# Rails.backtrace_cleaner.remove_silencers!
|
3
config/initializers/cookies_serializer.rb
Normal file
3
config/initializers/cookies_serializer.rb
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
Rails.application.config.action_dispatch.cookies_serializer = :json
|
4
config/initializers/filter_parameter_logging.rb
Normal file
4
config/initializers/filter_parameter_logging.rb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Configure sensitive parameters which will be filtered from the log file.
|
||||||
|
Rails.application.config.filter_parameters += [:password]
|
16
config/initializers/inflections.rb
Normal file
16
config/initializers/inflections.rb
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Add new inflection rules using the following format. Inflections
|
||||||
|
# are locale specific, and you may define rules for as many different
|
||||||
|
# locales as you wish. All of these examples are active by default:
|
||||||
|
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
||||||
|
# inflect.plural /^(ox)$/i, '\1en'
|
||||||
|
# inflect.singular /^(ox)en/i, '\1'
|
||||||
|
# inflect.irregular 'person', 'people'
|
||||||
|
# inflect.uncountable %w( fish sheep )
|
||||||
|
# end
|
||||||
|
|
||||||
|
# These inflection rules are supported but not enabled by default:
|
||||||
|
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
||||||
|
# inflect.acronym 'RESTful'
|
||||||
|
# end
|
4
config/initializers/mime_types.rb
Normal file
4
config/initializers/mime_types.rb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Add new mime types for use in respond_to blocks:
|
||||||
|
# Mime::Type.register "text/richtext", :rtf
|
3
config/initializers/session_store.rb
Normal file
3
config/initializers/session_store.rb
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
Rails.application.config.session_store :cookie_store, key: '_sms-pager_session'
|
14
config/initializers/wrap_parameters.rb
Normal file
14
config/initializers/wrap_parameters.rb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# This file contains settings for ActionController::ParamsWrapper which
|
||||||
|
# is enabled by default.
|
||||||
|
|
||||||
|
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
||||||
|
ActiveSupport.on_load(:action_controller) do
|
||||||
|
wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
|
||||||
|
end
|
||||||
|
|
||||||
|
# To enable root element in JSON for ActiveRecord objects.
|
||||||
|
# ActiveSupport.on_load(:active_record) do
|
||||||
|
# self.include_root_in_json = true
|
||||||
|
# end
|
23
config/locales/en.yml
Normal file
23
config/locales/en.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Files in the config/locales directory are used for internationalization
|
||||||
|
# and are automatically loaded by Rails. If you want to use locales other
|
||||||
|
# than English, add the necessary files in this directory.
|
||||||
|
#
|
||||||
|
# To use the locales, use `I18n.t`:
|
||||||
|
#
|
||||||
|
# I18n.t 'hello'
|
||||||
|
#
|
||||||
|
# In views, this is aliased to just `t`:
|
||||||
|
#
|
||||||
|
# <%= t('hello') %>
|
||||||
|
#
|
||||||
|
# To use a different locale, set it with `I18n.locale`:
|
||||||
|
#
|
||||||
|
# I18n.locale = :es
|
||||||
|
#
|
||||||
|
# This would use the information in config/locales/es.yml.
|
||||||
|
#
|
||||||
|
# To learn more, please read the Rails Internationalization guide
|
||||||
|
# available at http://guides.rubyonrails.org/i18n.html.
|
||||||
|
|
||||||
|
en:
|
||||||
|
hello: "Hello world"
|
13
config/routes.rb
Normal file
13
config/routes.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Rails.application.routes.draw do
|
||||||
|
get 'parents', to: 'parents#index', as: :list_parents
|
||||||
|
|
||||||
|
get 'children', to: 'children#index', as: :list_children
|
||||||
|
|
||||||
|
get 'staff', to: 'staff#index', as: :list_staff
|
||||||
|
|
||||||
|
get 'users', to: 'users#index', as: :list_users
|
||||||
|
|
||||||
|
get 'pages', to: 'pages#index', as: :list_pages
|
||||||
|
|
||||||
|
root to: 'docs#index'
|
||||||
|
end
|
33
config/secrets.yml
Normal file
33
config/secrets.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Your secret key is used for verifying the integrity of signed cookies.
|
||||||
|
# If you change this key, all old signed cookies will become invalid!
|
||||||
|
|
||||||
|
# Make sure the secret is at least 30 characters and all random,
|
||||||
|
# no regular words or you'll be exposed to dictionary attacks.
|
||||||
|
# You can use `rake secret` to generate a secure secret key.
|
||||||
|
|
||||||
|
# Make sure the secrets in this file are kept private
|
||||||
|
# if you're sharing your code publicly.
|
||||||
|
|
||||||
|
defaults: &defaults
|
||||||
|
twilio_sid: <%= ENV["twilio_sid"] %>
|
||||||
|
twilio_token: <%= ENV["twilio_token"] %>
|
||||||
|
twilio_number: <%= ENV["twilio_number"] %>
|
||||||
|
mysql_host: <%= ENV["mysql_host"] %>
|
||||||
|
mysql_usr: <%= ENV["mysql_usr"] %>
|
||||||
|
mysql_pwd: <%= ENV["mysql_pwd"] %>
|
||||||
|
|
||||||
|
development:
|
||||||
|
<<: *defaults
|
||||||
|
secret_key_base: f97bd71064db7216f6c615c67cdb804479bc784caab9ec0695f66a9fe81f1a261036bbc46a7bb32aa85c525f5cc8204f440a58333714a2a1018a68a9b3d970ca
|
||||||
|
|
||||||
|
test:
|
||||||
|
<<: *defaults
|
||||||
|
secret_key_base: ed3627e7b50494de1ece0bf7b95f9a8eed245a2ef1da022f3bb43c29d85e2116e6fe7a930208cdd0333df24b94579c1b193421fe74fa033b85b08202cb2a50d6
|
||||||
|
|
||||||
|
# Do not keep production secrets in the repository,
|
||||||
|
# instead read values from the environment.
|
||||||
|
production:
|
||||||
|
<<: *defaults
|
||||||
|
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
|
25
db/migrate/20150904033833_init.rb
Normal file
25
db/migrate/20150904033833_init.rb
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
class Init < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
create_table :people do |t|
|
||||||
|
t.string :first_name
|
||||||
|
t.string :last_name
|
||||||
|
t.string :phone
|
||||||
|
t.string :email
|
||||||
|
t.boolean :admin
|
||||||
|
t.boolean :staff
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table :parenthoods do |t|
|
||||||
|
t.integer :person_id
|
||||||
|
t.integer :child_id
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table :children do |t|
|
||||||
|
t.string :first_name
|
||||||
|
t.string :last_name
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :people, :phone
|
||||||
|
add_index :parenthoods, [:person_id, :child_id], name: 'parentship'
|
||||||
|
end
|
||||||
|
end
|
7
db/seeds.rb
Normal file
7
db/seeds.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# This file should contain all the record creation needed to seed the database with its default values.
|
||||||
|
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
|
||||||
|
# Mayor.create(name: 'Emanuel', city: cities.first)
|
0
lib/assets/.keep
Normal file
0
lib/assets/.keep
Normal file
11
lib/secrets.rb
Normal file
11
lib/secrets.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
require 'yaml'
|
||||||
|
module Secrets
|
||||||
|
def self.load
|
||||||
|
return nil unless File.exist?("./config/application.yml")
|
||||||
|
|
||||||
|
secrets = YAML.load(File.read('./config/application.yml'))
|
||||||
|
secrets.each do |k, v|
|
||||||
|
ENV[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
0
lib/tasks/.keep
Normal file
0
lib/tasks/.keep
Normal file
67
public/404.html
Normal file
67
public/404.html
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>The page you were looking for doesn't exist (404)</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #EFEFEF;
|
||||||
|
color: #2E2F30;
|
||||||
|
text-align: center;
|
||||||
|
font-family: arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 33em;
|
||||||
|
margin: 4em auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > div {
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #BBB;
|
||||||
|
border-top: #B00100 solid 4px;
|
||||||
|
border-top-left-radius: 9px;
|
||||||
|
border-top-right-radius: 9px;
|
||||||
|
background-color: white;
|
||||||
|
padding: 7px 12% 0;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 100%;
|
||||||
|
color: #730E15;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > p {
|
||||||
|
margin: 0 0 1em;
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-top-color: #DADADA;
|
||||||
|
color: #666;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/404.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<div>
|
||||||
|
<h1>The page you were looking for doesn't exist.</h1>
|
||||||
|
<p>You may have mistyped the address or the page may have moved.</p>
|
||||||
|
</div>
|
||||||
|
<p>If you are the application owner check the logs for more information.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
67
public/422.html
Normal file
67
public/422.html
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>The change you wanted was rejected (422)</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #EFEFEF;
|
||||||
|
color: #2E2F30;
|
||||||
|
text-align: center;
|
||||||
|
font-family: arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 33em;
|
||||||
|
margin: 4em auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > div {
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #BBB;
|
||||||
|
border-top: #B00100 solid 4px;
|
||||||
|
border-top-left-radius: 9px;
|
||||||
|
border-top-right-radius: 9px;
|
||||||
|
background-color: white;
|
||||||
|
padding: 7px 12% 0;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 100%;
|
||||||
|
color: #730E15;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > p {
|
||||||
|
margin: 0 0 1em;
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-top-color: #DADADA;
|
||||||
|
color: #666;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/422.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<div>
|
||||||
|
<h1>The change you wanted was rejected.</h1>
|
||||||
|
<p>Maybe you tried to change something you didn't have access to.</p>
|
||||||
|
</div>
|
||||||
|
<p>If you are the application owner check the logs for more information.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
66
public/500.html
Normal file
66
public/500.html
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>We're sorry, but something went wrong (500)</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #EFEFEF;
|
||||||
|
color: #2E2F30;
|
||||||
|
text-align: center;
|
||||||
|
font-family: arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 33em;
|
||||||
|
margin: 4em auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > div {
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #BBB;
|
||||||
|
border-top: #B00100 solid 4px;
|
||||||
|
border-top-left-radius: 9px;
|
||||||
|
border-top-right-radius: 9px;
|
||||||
|
background-color: white;
|
||||||
|
padding: 7px 12% 0;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 100%;
|
||||||
|
color: #730E15;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dialog > p {
|
||||||
|
margin: 0 0 1em;
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-left-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-top-color: #DADADA;
|
||||||
|
color: #666;
|
||||||
|
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/500.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<div>
|
||||||
|
<h1>We're sorry, but something went wrong.</h1>
|
||||||
|
</div>
|
||||||
|
<p>If you are the application owner check the logs for more information.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
0
public/favicon.ico
Normal file
0
public/favicon.ico
Normal file
5
public/robots.txt
Normal file
5
public/robots.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
|
||||||
|
#
|
||||||
|
# To ban all spiders from the entire site uncomment the next two lines:
|
||||||
|
# User-agent: *
|
||||||
|
# Disallow: /
|
0
test/controllers/.keep
Normal file
0
test/controllers/.keep
Normal file
7
test/controllers/children_controller_test.rb
Normal file
7
test/controllers/children_controller_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class ChildrenControllerTest < ActionController::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
7
test/controllers/docs_controller_test.rb
Normal file
7
test/controllers/docs_controller_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
class DocsControllerTest < ActionController::TestCase
|
||||||
|
def test_root
|
||||||
|
xhr :get, :index
|
||||||
|
assert response.ok?
|
||||||
|
end
|
||||||
|
end
|
7
test/controllers/pages_controller_test.rb
Normal file
7
test/controllers/pages_controller_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class PagesControllerTest < ActionController::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
8
test/controllers/parents_controller_test.rb
Normal file
8
test/controllers/parents_controller_test.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class ParentsControllerTest < ActionController::TestCase
|
||||||
|
def test_parents
|
||||||
|
xhr :get, :index
|
||||||
|
assert response.ok?
|
||||||
|
end
|
||||||
|
end
|
7
test/controllers/staff_controller_test.rb
Normal file
7
test/controllers/staff_controller_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class StaffControllerTest < ActionController::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
7
test/controllers/users_controller_test.rb
Normal file
7
test/controllers/users_controller_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class UsersControllerTest < ActionController::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
0
test/fixtures/.keep
vendored
Normal file
0
test/fixtures/.keep
vendored
Normal file
10
test/fixtures/child.yml
vendored
Normal file
10
test/fixtures/child.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
kyle:
|
||||||
|
first_name: Kyle
|
||||||
|
last_name: Kerfer
|
||||||
|
sally:
|
||||||
|
first_name: Sally
|
||||||
|
last_name: Smith
|
||||||
|
nemo:
|
||||||
|
first_name: Nemo
|
||||||
|
last_name: Smith
|
44
test/fixtures/person.yml
vendored
Normal file
44
test/fixtures/person.yml
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
admin:
|
||||||
|
first_name: admin
|
||||||
|
last_name: user
|
||||||
|
email: admin.user@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
admin: true
|
||||||
|
basic:
|
||||||
|
first_name: basic
|
||||||
|
last_name: user
|
||||||
|
email: basic.user@mailinator.com
|
||||||
|
phone: 5005550001
|
||||||
|
staff: true
|
||||||
|
wanda:
|
||||||
|
first_name: Wanda
|
||||||
|
last_name: Worker
|
||||||
|
email: wonda.worker@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
staff: true
|
||||||
|
steve:
|
||||||
|
first_name: Steve
|
||||||
|
last_name: Worker
|
||||||
|
email: steve.worker@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
staff: true
|
||||||
|
kimmy:
|
||||||
|
first_name: Kimmy
|
||||||
|
last_name: Kerfer
|
||||||
|
email: kimmy.kerfer@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
staff: true
|
||||||
|
children: kyle
|
||||||
|
marlin:
|
||||||
|
first_name: Marlin
|
||||||
|
last_name: Smith
|
||||||
|
email: marlin.smith@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
children: sally, nemo
|
||||||
|
sarah:
|
||||||
|
first_name: Sarah
|
||||||
|
last_name: Smith
|
||||||
|
email: marlin.smith@mailinator.com
|
||||||
|
phone: 5005550006
|
||||||
|
children: sally, nemo
|
0
test/helpers/.keep
Normal file
0
test/helpers/.keep
Normal file
0
test/integration/.keep
Normal file
0
test/integration/.keep
Normal file
7
test/lib/secrets_test.rb
Normal file
7
test/lib/secrets_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require File.expand_path '../../test_helper.rb', __FILE__
|
||||||
|
|
||||||
|
class SecretsTest < ActiveSupport::TestCase
|
||||||
|
def test_sanity
|
||||||
|
assert Secrets
|
||||||
|
end
|
||||||
|
end
|
0
test/mailers/.keep
Normal file
0
test/mailers/.keep
Normal file
0
test/models/.keep
Normal file
0
test/models/.keep
Normal file
13
test/models/person_test.rb
Normal file
13
test/models/person_test.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class PersonTest < ActiveSupport::TestCase
|
||||||
|
def test_sanity
|
||||||
|
assert Person
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_parents
|
||||||
|
parents = Person.just_parents
|
||||||
|
|
||||||
|
assert parents.count > 1, "Did not find more than one parent"
|
||||||
|
end
|
||||||
|
end
|
35
test/smoke_test.rb
Normal file
35
test/smoke_test.rb
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class SmokeTest < ActiveSupport::TestCase
|
||||||
|
# include Rack::Test::Methods
|
||||||
|
|
||||||
|
# Here we are pretty much just checking that the database is
|
||||||
|
# rolling back transactions after each test run.
|
||||||
|
|
||||||
|
def test_db_reload
|
||||||
|
assert_empty Person.with_name('clean insert'), 'DB has not refreshed'
|
||||||
|
|
||||||
|
Person.create(
|
||||||
|
first_name: 'clean',
|
||||||
|
last_name: 'insert',
|
||||||
|
phone: '8885551212',
|
||||||
|
email: 'insert@mailinator.com'
|
||||||
|
)
|
||||||
|
|
||||||
|
refute_empty Person.with_name('clean insert'), 'person insert failed!'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_db_reload_2x
|
||||||
|
test_db_reload
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_db_reload_3x
|
||||||
|
test_db_reload
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_fixture_load
|
||||||
|
num_people = Person.all.count
|
||||||
|
|
||||||
|
assert num_people > 2, "Should have loaded more than 2 people"
|
||||||
|
end
|
||||||
|
end
|
15
test/test_helper.rb
Normal file
15
test/test_helper.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ENV['RAILS_ENV'] ||= 'test'
|
||||||
|
require File.expand_path('../../config/environment', __FILE__)
|
||||||
|
require 'rails/test_help'
|
||||||
|
require "minitest/autorun"
|
||||||
|
require 'minitest/reporters'
|
||||||
|
Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(color: true)]
|
||||||
|
|
||||||
|
class ActiveSupport::TestCase
|
||||||
|
ActiveRecord::Migration.check_pending!
|
||||||
|
|
||||||
|
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
|
||||||
|
fixtures :all
|
||||||
|
|
||||||
|
# Add more helper methods to be used by all tests here...
|
||||||
|
end
|
0
vendor/assets/javascripts/.keep
vendored
Normal file
0
vendor/assets/javascripts/.keep
vendored
Normal file
0
vendor/assets/stylesheets/.keep
vendored
Normal file
0
vendor/assets/stylesheets/.keep
vendored
Normal file
Loading…
Reference in New Issue
Block a user