├── .gitignore ├── .rspec ├── .travis.yml ├── Appraisals ├── CHANGELOG.rdoc ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.rdoc ├── Rakefile ├── gemfiles ├── .bundle │ └── config ├── 4.0.gemfile ├── 4.0.gemfile.lock ├── 4.1.gemfile ├── 4.1.gemfile.lock ├── 4.2.gemfile ├── 4.2.gemfile.lock ├── 5.2.gemfile ├── 5.2.gemfile.lock ├── 6.0.gemfile └── 6.0.gemfile.lock ├── init.rb ├── lib ├── nilify_blanks.rb └── nilify_blanks │ ├── matchers.rb │ ├── railtie.rb │ └── version.rb ├── nilify_blanks.gemspec ├── rails └── init.rb └── spec ├── db ├── database.yml └── schema.rb ├── nilify_blanks_spec.rb └── spec_helper.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite3 2 | pkg 3 | *.gem 4 | spec/examples.txt 5 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --colour 2 | --format doc 3 | --backtrace 4 | --require spec_helper 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.4.5 4 | - 2.5.3 5 | - 2.6.1 6 | 7 | gemfile: 8 | - gemfiles/4.0.gemfile 9 | - gemfiles/4.1.gemfile 10 | - gemfiles/4.2.gemfile 11 | - gemfiles/5.2.gemfile 12 | - gemfiles/6.0.gemfile 13 | 14 | matrix: 15 | fast_finish: true 16 | exclude: 17 | - gemfile: gemfiles/6.0.gemfile 18 | rvm: 2.4.5 19 | 20 | before_install: 21 | - gem install bundler -v '< 2' 22 | - "rm gemfiles/*.lock" 23 | 24 | install: 25 | - bundle _1.17.3_ install --retry=3 --jobs=3 26 | 27 | script: "bundle exec rake clean test" 28 | -------------------------------------------------------------------------------- /Appraisals: -------------------------------------------------------------------------------- 1 | appraise "4.0" do 2 | gem "rails", "~> 4.0.12" 3 | end 4 | 5 | appraise "4.1" do 6 | gem "rails", "~> 4.1.8" 7 | end 8 | 9 | appraise "4.2" do 10 | gem "rails", "~> 4.2.0" 11 | end 12 | 13 | appraise "5.2" do 14 | gem "rails", "~> 5.2.0" 15 | end 16 | 17 | appraise "6.0" do 18 | gem "rails", "~> 6.0.2" 19 | end 20 | -------------------------------------------------------------------------------- /CHANGELOG.rdoc: -------------------------------------------------------------------------------- 1 | == [2020-04-18] 1.4.0 2 | 3 | * Internally restructure NilifyBlanks, use modern tooling like ActiveSupport::Concern 4 | * Drop support for Rails 3, expand Appraisals to include Rails 6 5 | * Change default before callback to :validation (from :save) 6 | 7 | == [2017-12-23] 1.3.0 8 | 9 | * Use all columns (not just content_columns) 10 | * Allow nullables_only: false option for including columns that don't allow NULLs 11 | * Support citext columns 12 | 13 | == [2015-04-12] 1.2.1 14 | 15 | * Fix inconsistency in nilify_blanks RSpec matcher: should filter by type 16 | 17 | == [2014-07-04] 1.2.0 18 | 19 | * Drop support for ruby 1.8.7 and 1.9.2 - too many issues with backwards-compatibility 20 | * Explicit support for Rails 4.1 and 4.2 21 | * Up-to-date Appraisals and dependencies 22 | 23 | == [2014-07-04] 1.1.0 24 | 25 | * Implement new mechanism to allow for global usage at ActiveRecord::Base level (or namespaced base model) 26 | * Make define_nilify_blanks thread safe 27 | * New rspec matchers with: require "nilify_blanks/matchers" 28 | * Only consider string and text columns, and allow types option to configure 29 | 30 | == [2013-11-09] 1.0.4 31 | 32 | * Fix issues with wrapping define_attribute_methods in jruby on Rails 4 (Thanks, tank157) 33 | 34 | == [2013-11-09] 1.0.3 35 | 36 | * Add rbx and JRuby compatibility (Thanks, petergoldstein) 37 | 38 | == [2013-08-25] 1.0.2 39 | 40 | * Hook on AR::Base.define_attribute_methods in order to prevent eager load of models [byroot] 41 | 42 | == [2010-10-15] 1.0.0 Major Updates 43 | 44 | * Finally updated to be a Gem 45 | * Internal refactoring 46 | * Converted tests to RSpec 47 | * Added support for Rails 3.0 48 | 49 | == 0.1.2 Fixed issue with table not existing. 50 | == 0.1.0 Initial Version 51 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "http://rubygems.org" 2 | 3 | gem 'rubysl', '~> 2.0', :platforms => [:rbx] 4 | 5 | gem 'activerecord-jdbcsqlite3-adapter', :platforms => [:jruby] 6 | gem 'sqlite3', '~> 1.3.6', :platforms => [:ruby] 7 | 8 | gemspec 9 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: . 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | activemodel (6.0.2.1) 12 | activesupport (= 6.0.2.1) 13 | activerecord (6.0.2.1) 14 | activemodel (= 6.0.2.1) 15 | activesupport (= 6.0.2.1) 16 | activesupport (6.0.2.1) 17 | concurrent-ruby (~> 1.0, >= 1.0.2) 18 | i18n (>= 0.7, < 2) 19 | minitest (~> 5.1) 20 | tzinfo (~> 1.1) 21 | zeitwerk (~> 2.2) 22 | appraisal (2.2.0) 23 | bundler 24 | rake 25 | thor (>= 0.14.0) 26 | concurrent-ruby (1.1.5) 27 | diff-lcs (1.3) 28 | ffi2-generators (0.1.1) 29 | i18n (1.8.2) 30 | concurrent-ruby (~> 1.0) 31 | minitest (5.14.0) 32 | rake (13.0.1) 33 | rspec (3.9.0) 34 | rspec-core (~> 3.9.0) 35 | rspec-expectations (~> 3.9.0) 36 | rspec-mocks (~> 3.9.0) 37 | rspec-core (3.9.1) 38 | rspec-support (~> 3.9.1) 39 | rspec-expectations (3.9.1) 40 | diff-lcs (>= 1.2.0, < 2.0) 41 | rspec-support (~> 3.9.0) 42 | rspec-mocks (3.9.1) 43 | diff-lcs (>= 1.2.0, < 2.0) 44 | rspec-support (~> 3.9.0) 45 | rspec-support (3.9.2) 46 | rubysl (2.2.0) 47 | rubysl-abbrev (~> 2.0) 48 | rubysl-base64 (~> 2.0) 49 | rubysl-benchmark (~> 2.0) 50 | rubysl-bigdecimal (~> 2.0) 51 | rubysl-cgi (~> 2.0) 52 | rubysl-cgi-session (~> 2.0) 53 | rubysl-cmath (~> 2.0) 54 | rubysl-complex (~> 2.0) 55 | rubysl-continuation (~> 2.0) 56 | rubysl-coverage (~> 2.0) 57 | rubysl-csv (~> 2.0) 58 | rubysl-curses (~> 2.0) 59 | rubysl-date (~> 2.0) 60 | rubysl-delegate (~> 2.0) 61 | rubysl-digest (~> 2.0) 62 | rubysl-drb (~> 2.0) 63 | rubysl-e2mmap (~> 2.0) 64 | rubysl-english (~> 2.0) 65 | rubysl-enumerator (~> 2.0) 66 | rubysl-erb (~> 2.0) 67 | rubysl-etc (~> 2.0) 68 | rubysl-expect (~> 2.0) 69 | rubysl-fcntl (~> 2.0) 70 | rubysl-fiber (~> 2.0) 71 | rubysl-fileutils (~> 2.0) 72 | rubysl-find (~> 2.0) 73 | rubysl-forwardable (~> 2.0) 74 | rubysl-getoptlong (~> 2.0) 75 | rubysl-gserver (~> 2.0) 76 | rubysl-io-console (~> 2.0) 77 | rubysl-io-nonblock (~> 2.0) 78 | rubysl-io-wait (~> 2.0) 79 | rubysl-ipaddr (~> 2.0) 80 | rubysl-irb (~> 2.1) 81 | rubysl-logger (~> 2.0) 82 | rubysl-mathn (~> 2.0) 83 | rubysl-matrix (~> 2.0) 84 | rubysl-mkmf (~> 2.0) 85 | rubysl-monitor (~> 2.0) 86 | rubysl-mutex_m (~> 2.0) 87 | rubysl-net-ftp (~> 2.0) 88 | rubysl-net-http (~> 2.0) 89 | rubysl-net-imap (~> 2.0) 90 | rubysl-net-pop (~> 2.0) 91 | rubysl-net-protocol (~> 2.0) 92 | rubysl-net-smtp (~> 2.0) 93 | rubysl-net-telnet (~> 2.0) 94 | rubysl-nkf (~> 2.0) 95 | rubysl-observer (~> 2.0) 96 | rubysl-open-uri (~> 2.0) 97 | rubysl-open3 (~> 2.0) 98 | rubysl-openssl (~> 2.0) 99 | rubysl-optparse (~> 2.0) 100 | rubysl-ostruct (~> 2.0) 101 | rubysl-pathname (~> 2.0) 102 | rubysl-prettyprint (~> 2.0) 103 | rubysl-prime (~> 2.0) 104 | rubysl-profile (~> 2.0) 105 | rubysl-profiler (~> 2.0) 106 | rubysl-pstore (~> 2.0) 107 | rubysl-pty (~> 2.0) 108 | rubysl-rational (~> 2.0) 109 | rubysl-resolv (~> 2.0) 110 | rubysl-rexml (~> 2.0) 111 | rubysl-rinda (~> 2.0) 112 | rubysl-rss (~> 2.0) 113 | rubysl-scanf (~> 2.0) 114 | rubysl-securerandom (~> 2.0) 115 | rubysl-set (~> 2.0) 116 | rubysl-shellwords (~> 2.0) 117 | rubysl-singleton (~> 2.0) 118 | rubysl-socket (~> 2.0) 119 | rubysl-stringio (~> 2.0) 120 | rubysl-strscan (~> 2.0) 121 | rubysl-sync (~> 2.0) 122 | rubysl-syslog (~> 2.0) 123 | rubysl-tempfile (~> 2.0) 124 | rubysl-thread (~> 2.0) 125 | rubysl-thwait (~> 2.0) 126 | rubysl-time (~> 2.0) 127 | rubysl-timeout (~> 2.0) 128 | rubysl-tmpdir (~> 2.0) 129 | rubysl-tsort (~> 2.0) 130 | rubysl-un (~> 2.0) 131 | rubysl-unicode_normalize (~> 2.0) 132 | rubysl-uri (~> 2.0) 133 | rubysl-weakref (~> 2.0) 134 | rubysl-webrick (~> 2.0) 135 | rubysl-xmlrpc (~> 2.0) 136 | rubysl-yaml (~> 2.0) 137 | rubysl-zlib (~> 2.0) 138 | rubysl-abbrev (2.0.4) 139 | rubysl-base64 (2.0.0) 140 | rubysl-benchmark (2.0.1) 141 | rubysl-bigdecimal (2.0.2) 142 | rubysl-cgi (2.0.1) 143 | rubysl-cgi-session (2.1.0) 144 | rubysl-cmath (2.0.0) 145 | rubysl-complex (2.0.0) 146 | rubysl-continuation (2.0.0) 147 | rubysl-coverage (2.1) 148 | rubysl-csv (2.0.2) 149 | rubysl-english (~> 2.0) 150 | rubysl-curses (2.0.1) 151 | rubysl-date (2.0.9) 152 | rubysl-delegate (2.0.1) 153 | rubysl-digest (2.0.8) 154 | rubysl-drb (2.0.1) 155 | rubysl-e2mmap (2.0.0) 156 | rubysl-english (2.0.0) 157 | rubysl-enumerator (2.0.0) 158 | rubysl-erb (2.0.2) 159 | rubysl-etc (2.0.3) 160 | ffi2-generators (~> 0.1) 161 | rubysl-expect (2.0.0) 162 | rubysl-fcntl (2.0.4) 163 | ffi2-generators (~> 0.1) 164 | rubysl-fiber (2.0.0) 165 | rubysl-fileutils (2.0.3) 166 | rubysl-find (2.0.1) 167 | rubysl-forwardable (2.0.1) 168 | rubysl-getoptlong (2.0.0) 169 | rubysl-gserver (2.0.0) 170 | rubysl-socket (~> 2.0) 171 | rubysl-thread (~> 2.0) 172 | rubysl-io-console (2.0.0) 173 | rubysl-io-nonblock (2.0.0) 174 | rubysl-io-wait (2.0.0) 175 | rubysl-ipaddr (2.0.0) 176 | rubysl-irb (2.1.1) 177 | rubysl-e2mmap (~> 2.0) 178 | rubysl-mathn (~> 2.0) 179 | rubysl-thread (~> 2.0) 180 | rubysl-logger (2.1.0) 181 | rubysl-mathn (2.0.0) 182 | rubysl-matrix (2.1.0) 183 | rubysl-e2mmap (~> 2.0) 184 | rubysl-mkmf (2.1) 185 | rubysl-fileutils (~> 2.0) 186 | rubysl-shellwords (~> 2.0) 187 | rubysl-monitor (2.1) 188 | rubysl-mutex_m (2.0.0) 189 | rubysl-net-ftp (2.0.1) 190 | rubysl-net-http (2.0.4) 191 | rubysl-cgi (~> 2.0) 192 | rubysl-erb (~> 2.0) 193 | rubysl-singleton (~> 2.0) 194 | rubysl-net-imap (2.0.1) 195 | rubysl-net-pop (2.0.1) 196 | rubysl-net-protocol (2.0.1) 197 | rubysl-net-smtp (2.0.1) 198 | rubysl-net-telnet (2.0.0) 199 | rubysl-nkf (2.0.1) 200 | rubysl-observer (2.0.0) 201 | rubysl-open-uri (2.0.0) 202 | rubysl-open3 (2.0.0) 203 | rubysl-openssl (2.10) 204 | rubysl-optparse (2.0.1) 205 | rubysl-shellwords (~> 2.0) 206 | rubysl-ostruct (2.1.0) 207 | rubysl-pathname (2.3) 208 | rubysl-prettyprint (2.0.3) 209 | rubysl-prime (2.0.1) 210 | rubysl-profile (2.0.0) 211 | rubysl-profiler (2.1) 212 | rubysl-pstore (2.0.0) 213 | rubysl-pty (2.0.3) 214 | rubysl-rational (2.0.1) 215 | rubysl-resolv (2.1.2) 216 | rubysl-rexml (2.0.4) 217 | rubysl-rinda (2.0.1) 218 | rubysl-rss (2.0.0) 219 | rubysl-scanf (2.0.0) 220 | rubysl-securerandom (2.0.0) 221 | rubysl-set (2.0.1) 222 | rubysl-shellwords (2.0.0) 223 | rubysl-singleton (2.0.0) 224 | rubysl-socket (2.2.1) 225 | rubysl-fcntl (~> 2.0) 226 | rubysl-stringio (2.3) 227 | rubysl-strscan (2.0.0) 228 | rubysl-sync (2.0.0) 229 | rubysl-syslog (2.1.0) 230 | ffi2-generators (~> 0.1) 231 | rubysl-tempfile (2.0.1) 232 | rubysl-thread (2.1) 233 | rubysl-thwait (2.0.0) 234 | rubysl-time (2.0.3) 235 | rubysl-timeout (2.0.0) 236 | rubysl-tmpdir (2.0.1) 237 | rubysl-tsort (2.0.1) 238 | rubysl-un (2.0.0) 239 | rubysl-fileutils (~> 2.0) 240 | rubysl-optparse (~> 2.0) 241 | rubysl-unicode_normalize (2.0) 242 | rubysl-uri (2.0.0) 243 | rubysl-weakref (2.0.0) 244 | rubysl-webrick (2.0.0) 245 | rubysl-xmlrpc (2.0.0) 246 | rubysl-yaml (2.1.0) 247 | rubysl-zlib (2.0.1) 248 | sqlite3 (1.3.13) 249 | thor (0.20.3) 250 | thread_safe (0.3.6) 251 | tzinfo (1.2.6) 252 | thread_safe (~> 0.1) 253 | zeitwerk (2.2.2) 254 | 255 | PLATFORMS 256 | ruby 257 | 258 | DEPENDENCIES 259 | activerecord-jdbcsqlite3-adapter 260 | appraisal (>= 1.0.2) 261 | nilify_blanks! 262 | rake (~> 13.0.1) 263 | rspec (>= 3.8.0) 264 | rubysl (~> 2.0) 265 | sqlite3 (~> 1.3.6) 266 | 267 | BUNDLED WITH 268 | 1.17.3 269 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Ben Hughes 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.rdoc: -------------------------------------------------------------------------------- 1 | {Build Status}[http://travis-ci.org/rubiety/nilify_blanks] 2 | 3 | == Nilify Blanks 4 | 5 | In Rails when saving a model from a form and values are not provided by the user, an empty string is recorded to the database instead of a NULL as many would prefer (mixing blanks and NULLs can become confusing). This plugin allows you to specify a list of attributes (or exceptions from all the attributes) that will be converted to nil if they are blank before a model is saved. 6 | 7 | By default, columns set as NOT NULL will not be nilified, since that value cannot be persisted, and it might be better to catch that with a validation. If you want to nilify those columns anyway, you can use `only:` (see below) to explicitly mention them. 8 | 9 | Only attributes responding to blank? with a value of true will be converted to nil. Therefore, this does not work with integer fields with the value of 0, for example. Usage is best shown through examples: 10 | 11 | == Requirements 12 | 13 | As of v1.4.0, this gem requires Rails 4 and Ruby 2.2 or higher. 14 | 15 | == Install 16 | 17 | Include the gem using bundler in your Gemfile: 18 | 19 | gem "nilify_blanks" 20 | 21 | == Basic Usage 22 | 23 | # Checks and converts all content fields in the model 24 | class Post < ActiveRecord::Base 25 | nilify_blanks 26 | end 27 | 28 | # Checks and converts only text fields in the model 29 | class Post < ActiveRecord::Base 30 | nilify_blanks types: [:text] 31 | end 32 | 33 | # Checks and converts only the title and author fields 34 | class Post < ActiveRecord::Base 35 | nilify_blanks only: [:author, :title] 36 | end 37 | 38 | # Checks and converts all fields except for title and author 39 | class Post < ActiveRecord::Base 40 | nilify_blanks except: [:author, :title] 41 | end 42 | 43 | # Checks and converts any fields, regardless of their null constraint 44 | class Post < ActiveRecord::Base 45 | nilify_blanks nullables_only: false 46 | end 47 | 48 | == Global Usage 49 | 50 | You can also apply nilify_blanks to all models inheriting from ActiveRecord::Base: 51 | 52 | ActiveRecord::Base.nilify_blanks 53 | 54 | Or perhaps just a model namespace base class: 55 | 56 | Inventory::Base.nilify_blanks 57 | 58 | == Specifying a Callback 59 | 60 | Checking uses an ActiveRecord before_validation callback by default, but you can specify a different callback with the :before option. Any callback will work - just first remove the "before_" prefix from the name. 61 | 62 | class Post < ActiveRecord::Base 63 | nilify_blanks before: :create 64 | end 65 | 66 | class Post < ActiveRecord::Base 67 | nilify_blanks before: :validation_on_update 68 | end 69 | 70 | == RSpec Matcher 71 | 72 | First, include the matchers: 73 | 74 | require "nilify_blanks/matchers" 75 | 76 | To ensure for a given column: 77 | 78 | describe City do 79 | it { should nilify_blanks_for(:name) } 80 | end 81 | 82 | To ensure for all applicable content columns: 83 | 84 | describe City do 85 | it { should nilify_blanks } 86 | end 87 | 88 | You can optionally match on options also: 89 | 90 | describe City do 91 | it { should nilify_blanks_for(:name, before: :create) } 92 | end 93 | 94 | describe City do 95 | it { should nilify_blanks(before: :create) } 96 | end 97 | 98 | == Running Tests 99 | 100 | This gem uses appraisal to test with different versions of the dependencies. See Appraisal first for which versions are tested, then run to test all appraisals: 101 | 102 | $ rake appraisal install 103 | $ rake appraisal test 104 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/gem_tasks' 2 | require 'appraisal' 3 | require 'rspec/core/rake_task' 4 | 5 | require 'bundler/setup' 6 | 7 | require 'rake' 8 | require 'rspec/core/rake_task' 9 | 10 | desc "Default: run unit tests." 11 | task default: [:clean, :all] 12 | 13 | task test: :spec 14 | 15 | desc "Test this plugin under all supported Rails versions." 16 | task :all do |t| 17 | if ENV['BUNDLE_GEMFILE'] 18 | exec('rake spec && cucumber') 19 | else 20 | exec("rm -f gemfiles/*.lock") 21 | Rake::Task["appraisal:gemfiles"].execute 22 | Rake::Task["appraisal:install"].execute 23 | exec('rake appraisal') 24 | end 25 | end 26 | 27 | desc "Run Specs" 28 | RSpec::Core::RakeTask.new(:spec) 29 | 30 | desc "Start an IRB session within this plugin" 31 | task :shell do |t| 32 | chdir File.dirname(__FILE__) 33 | exec 'irb -I lib/ -I lib/paperclip -r rubygems -r active_record -r tempfile -r init' 34 | end 35 | 36 | desc "Clean up files." 37 | task :clean do |t| 38 | FileUtils.rm_rf "tmp" 39 | Dir.glob("nilify_blanks-*.gem").each {|f| FileUtils.rm f } 40 | Dir.glob("spec/db/*.sqlite3").each {|f| FileUtils.rm f } 41 | end 42 | -------------------------------------------------------------------------------- /gemfiles/.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_RETRY: "1" 3 | -------------------------------------------------------------------------------- /gemfiles/4.0.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "rubysl", "~> 2.0", platforms: [:rbx] 6 | gem "activerecord-jdbcsqlite3-adapter", platforms: [:jruby] 7 | gem "sqlite3", "~> 1.3.6", platforms: [:ruby] 8 | gem "rails", "~> 4.0.12" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/4.0.gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: .. 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | actionmailer (4.0.13) 12 | actionpack (= 4.0.13) 13 | mail (~> 2.5, >= 2.5.4) 14 | actionpack (4.0.13) 15 | activesupport (= 4.0.13) 16 | builder (~> 3.1.0) 17 | erubis (~> 2.7.0) 18 | rack (~> 1.5.2) 19 | rack-test (~> 0.6.2) 20 | activemodel (4.0.13) 21 | activesupport (= 4.0.13) 22 | builder (~> 3.1.0) 23 | activerecord (4.0.13) 24 | activemodel (= 4.0.13) 25 | activerecord-deprecated_finders (~> 1.0.2) 26 | activesupport (= 4.0.13) 27 | arel (~> 4.0.0) 28 | activerecord-deprecated_finders (1.0.4) 29 | activesupport (4.0.13) 30 | i18n (~> 0.6, >= 0.6.9) 31 | minitest (~> 4.2) 32 | multi_json (~> 1.3) 33 | thread_safe (~> 0.1) 34 | tzinfo (~> 0.3.37) 35 | appraisal (2.2.0) 36 | bundler 37 | rake 38 | thor (>= 0.14.0) 39 | arel (4.0.2) 40 | builder (3.1.4) 41 | concurrent-ruby (1.1.4) 42 | diff-lcs (1.3) 43 | erubis (2.7.0) 44 | ffi2-generators (0.1.1) 45 | i18n (0.9.5) 46 | concurrent-ruby (~> 1.0) 47 | mail (2.7.1) 48 | mini_mime (>= 0.1.1) 49 | mini_mime (1.0.1) 50 | minitest (4.7.5) 51 | multi_json (1.13.1) 52 | rack (1.5.5) 53 | rack-test (0.6.3) 54 | rack (>= 1.0) 55 | rails (4.0.13) 56 | actionmailer (= 4.0.13) 57 | actionpack (= 4.0.13) 58 | activerecord (= 4.0.13) 59 | activesupport (= 4.0.13) 60 | bundler (>= 1.3.0, < 2.0) 61 | railties (= 4.0.13) 62 | sprockets-rails (~> 2.0) 63 | railties (4.0.13) 64 | actionpack (= 4.0.13) 65 | activesupport (= 4.0.13) 66 | rake (>= 0.8.7) 67 | thor (>= 0.18.1, < 2.0) 68 | rake (13.0.1) 69 | rspec (3.9.0) 70 | rspec-core (~> 3.9.0) 71 | rspec-expectations (~> 3.9.0) 72 | rspec-mocks (~> 3.9.0) 73 | rspec-core (3.9.1) 74 | rspec-support (~> 3.9.1) 75 | rspec-expectations (3.9.1) 76 | diff-lcs (>= 1.2.0, < 2.0) 77 | rspec-support (~> 3.9.0) 78 | rspec-mocks (3.9.1) 79 | diff-lcs (>= 1.2.0, < 2.0) 80 | rspec-support (~> 3.9.0) 81 | rspec-support (3.9.2) 82 | rubysl (2.2.0) 83 | rubysl-abbrev (~> 2.0) 84 | rubysl-base64 (~> 2.0) 85 | rubysl-benchmark (~> 2.0) 86 | rubysl-bigdecimal (~> 2.0) 87 | rubysl-cgi (~> 2.0) 88 | rubysl-cgi-session (~> 2.0) 89 | rubysl-cmath (~> 2.0) 90 | rubysl-complex (~> 2.0) 91 | rubysl-continuation (~> 2.0) 92 | rubysl-coverage (~> 2.0) 93 | rubysl-csv (~> 2.0) 94 | rubysl-curses (~> 2.0) 95 | rubysl-date (~> 2.0) 96 | rubysl-delegate (~> 2.0) 97 | rubysl-digest (~> 2.0) 98 | rubysl-drb (~> 2.0) 99 | rubysl-e2mmap (~> 2.0) 100 | rubysl-english (~> 2.0) 101 | rubysl-enumerator (~> 2.0) 102 | rubysl-erb (~> 2.0) 103 | rubysl-etc (~> 2.0) 104 | rubysl-expect (~> 2.0) 105 | rubysl-fcntl (~> 2.0) 106 | rubysl-fiber (~> 2.0) 107 | rubysl-fileutils (~> 2.0) 108 | rubysl-find (~> 2.0) 109 | rubysl-forwardable (~> 2.0) 110 | rubysl-getoptlong (~> 2.0) 111 | rubysl-gserver (~> 2.0) 112 | rubysl-io-console (~> 2.0) 113 | rubysl-io-nonblock (~> 2.0) 114 | rubysl-io-wait (~> 2.0) 115 | rubysl-ipaddr (~> 2.0) 116 | rubysl-irb (~> 2.1) 117 | rubysl-logger (~> 2.0) 118 | rubysl-mathn (~> 2.0) 119 | rubysl-matrix (~> 2.0) 120 | rubysl-mkmf (~> 2.0) 121 | rubysl-monitor (~> 2.0) 122 | rubysl-mutex_m (~> 2.0) 123 | rubysl-net-ftp (~> 2.0) 124 | rubysl-net-http (~> 2.0) 125 | rubysl-net-imap (~> 2.0) 126 | rubysl-net-pop (~> 2.0) 127 | rubysl-net-protocol (~> 2.0) 128 | rubysl-net-smtp (~> 2.0) 129 | rubysl-net-telnet (~> 2.0) 130 | rubysl-nkf (~> 2.0) 131 | rubysl-observer (~> 2.0) 132 | rubysl-open-uri (~> 2.0) 133 | rubysl-open3 (~> 2.0) 134 | rubysl-openssl (~> 2.0) 135 | rubysl-optparse (~> 2.0) 136 | rubysl-ostruct (~> 2.0) 137 | rubysl-pathname (~> 2.0) 138 | rubysl-prettyprint (~> 2.0) 139 | rubysl-prime (~> 2.0) 140 | rubysl-profile (~> 2.0) 141 | rubysl-profiler (~> 2.0) 142 | rubysl-pstore (~> 2.0) 143 | rubysl-pty (~> 2.0) 144 | rubysl-rational (~> 2.0) 145 | rubysl-resolv (~> 2.0) 146 | rubysl-rexml (~> 2.0) 147 | rubysl-rinda (~> 2.0) 148 | rubysl-rss (~> 2.0) 149 | rubysl-scanf (~> 2.0) 150 | rubysl-securerandom (~> 2.0) 151 | rubysl-set (~> 2.0) 152 | rubysl-shellwords (~> 2.0) 153 | rubysl-singleton (~> 2.0) 154 | rubysl-socket (~> 2.0) 155 | rubysl-stringio (~> 2.0) 156 | rubysl-strscan (~> 2.0) 157 | rubysl-sync (~> 2.0) 158 | rubysl-syslog (~> 2.0) 159 | rubysl-tempfile (~> 2.0) 160 | rubysl-thread (~> 2.0) 161 | rubysl-thwait (~> 2.0) 162 | rubysl-time (~> 2.0) 163 | rubysl-timeout (~> 2.0) 164 | rubysl-tmpdir (~> 2.0) 165 | rubysl-tsort (~> 2.0) 166 | rubysl-un (~> 2.0) 167 | rubysl-unicode_normalize (~> 2.0) 168 | rubysl-uri (~> 2.0) 169 | rubysl-weakref (~> 2.0) 170 | rubysl-webrick (~> 2.0) 171 | rubysl-xmlrpc (~> 2.0) 172 | rubysl-yaml (~> 2.0) 173 | rubysl-zlib (~> 2.0) 174 | rubysl-abbrev (2.0.4) 175 | rubysl-base64 (2.0.0) 176 | rubysl-benchmark (2.0.1) 177 | rubysl-bigdecimal (2.0.2) 178 | rubysl-cgi (2.0.1) 179 | rubysl-cgi-session (2.1.0) 180 | rubysl-cmath (2.0.0) 181 | rubysl-complex (2.0.0) 182 | rubysl-continuation (2.0.0) 183 | rubysl-coverage (2.1) 184 | rubysl-csv (2.0.2) 185 | rubysl-english (~> 2.0) 186 | rubysl-curses (2.0.1) 187 | rubysl-date (2.0.9) 188 | rubysl-delegate (2.0.1) 189 | rubysl-digest (2.0.8) 190 | rubysl-drb (2.0.1) 191 | rubysl-e2mmap (2.0.0) 192 | rubysl-english (2.0.0) 193 | rubysl-enumerator (2.0.0) 194 | rubysl-erb (2.0.2) 195 | rubysl-etc (2.0.3) 196 | ffi2-generators (~> 0.1) 197 | rubysl-expect (2.0.0) 198 | rubysl-fcntl (2.0.4) 199 | ffi2-generators (~> 0.1) 200 | rubysl-fiber (2.0.0) 201 | rubysl-fileutils (2.0.3) 202 | rubysl-find (2.0.1) 203 | rubysl-forwardable (2.0.1) 204 | rubysl-getoptlong (2.0.0) 205 | rubysl-gserver (2.0.0) 206 | rubysl-socket (~> 2.0) 207 | rubysl-thread (~> 2.0) 208 | rubysl-io-console (2.0.0) 209 | rubysl-io-nonblock (2.0.0) 210 | rubysl-io-wait (2.0.0) 211 | rubysl-ipaddr (2.0.0) 212 | rubysl-irb (2.1.1) 213 | rubysl-e2mmap (~> 2.0) 214 | rubysl-mathn (~> 2.0) 215 | rubysl-thread (~> 2.0) 216 | rubysl-logger (2.1.0) 217 | rubysl-mathn (2.0.0) 218 | rubysl-matrix (2.1.0) 219 | rubysl-e2mmap (~> 2.0) 220 | rubysl-mkmf (2.1) 221 | rubysl-fileutils (~> 2.0) 222 | rubysl-shellwords (~> 2.0) 223 | rubysl-monitor (2.1) 224 | rubysl-mutex_m (2.0.0) 225 | rubysl-net-ftp (2.0.1) 226 | rubysl-net-http (2.0.4) 227 | rubysl-cgi (~> 2.0) 228 | rubysl-erb (~> 2.0) 229 | rubysl-singleton (~> 2.0) 230 | rubysl-net-imap (2.0.1) 231 | rubysl-net-pop (2.0.1) 232 | rubysl-net-protocol (2.0.1) 233 | rubysl-net-smtp (2.0.1) 234 | rubysl-net-telnet (2.0.0) 235 | rubysl-nkf (2.0.1) 236 | rubysl-observer (2.0.0) 237 | rubysl-open-uri (2.0.0) 238 | rubysl-open3 (2.0.0) 239 | rubysl-openssl (2.10) 240 | rubysl-optparse (2.0.1) 241 | rubysl-shellwords (~> 2.0) 242 | rubysl-ostruct (2.1.0) 243 | rubysl-pathname (2.3) 244 | rubysl-prettyprint (2.0.3) 245 | rubysl-prime (2.0.1) 246 | rubysl-profile (2.0.0) 247 | rubysl-profiler (2.1) 248 | rubysl-pstore (2.0.0) 249 | rubysl-pty (2.0.3) 250 | rubysl-rational (2.0.1) 251 | rubysl-resolv (2.1.2) 252 | rubysl-rexml (2.0.4) 253 | rubysl-rinda (2.0.1) 254 | rubysl-rss (2.0.0) 255 | rubysl-scanf (2.0.0) 256 | rubysl-securerandom (2.0.0) 257 | rubysl-set (2.0.1) 258 | rubysl-shellwords (2.0.0) 259 | rubysl-singleton (2.0.0) 260 | rubysl-socket (2.2.1) 261 | rubysl-fcntl (~> 2.0) 262 | rubysl-stringio (2.3) 263 | rubysl-strscan (2.0.0) 264 | rubysl-sync (2.0.0) 265 | rubysl-syslog (2.1.0) 266 | ffi2-generators (~> 0.1) 267 | rubysl-tempfile (2.0.1) 268 | rubysl-thread (2.1) 269 | rubysl-thwait (2.0.0) 270 | rubysl-time (2.0.3) 271 | rubysl-timeout (2.0.0) 272 | rubysl-tmpdir (2.0.1) 273 | rubysl-tsort (2.0.1) 274 | rubysl-un (2.0.0) 275 | rubysl-fileutils (~> 2.0) 276 | rubysl-optparse (~> 2.0) 277 | rubysl-unicode_normalize (2.0) 278 | rubysl-uri (2.0.0) 279 | rubysl-weakref (2.0.0) 280 | rubysl-webrick (2.0.0) 281 | rubysl-xmlrpc (2.0.0) 282 | rubysl-yaml (2.1.0) 283 | rubysl-zlib (2.0.1) 284 | sprockets (3.7.2) 285 | concurrent-ruby (~> 1.0) 286 | rack (> 1, < 3) 287 | sprockets-rails (2.3.3) 288 | actionpack (>= 3.0) 289 | activesupport (>= 3.0) 290 | sprockets (>= 2.8, < 4.0) 291 | sqlite3 (1.3.13) 292 | thor (0.20.3) 293 | thread_safe (0.3.6) 294 | tzinfo (0.3.55) 295 | 296 | PLATFORMS 297 | ruby 298 | 299 | DEPENDENCIES 300 | activerecord-jdbcsqlite3-adapter 301 | appraisal (>= 1.0.2) 302 | nilify_blanks! 303 | rails (~> 4.0.12) 304 | rake (~> 13.0.1) 305 | rspec (>= 3.8.0) 306 | rubysl (~> 2.0) 307 | sqlite3 (~> 1.3.6) 308 | 309 | BUNDLED WITH 310 | 1.17.3 311 | -------------------------------------------------------------------------------- /gemfiles/4.1.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "rubysl", "~> 2.0", platforms: [:rbx] 6 | gem "activerecord-jdbcsqlite3-adapter", platforms: [:jruby] 7 | gem "sqlite3", "~> 1.3.6", platforms: [:ruby] 8 | gem "rails", "~> 4.1.8" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/4.1.gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: .. 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | actionmailer (4.1.16) 12 | actionpack (= 4.1.16) 13 | actionview (= 4.1.16) 14 | mail (~> 2.5, >= 2.5.4) 15 | actionpack (4.1.16) 16 | actionview (= 4.1.16) 17 | activesupport (= 4.1.16) 18 | rack (~> 1.5.2) 19 | rack-test (~> 0.6.2) 20 | actionview (4.1.16) 21 | activesupport (= 4.1.16) 22 | builder (~> 3.1) 23 | erubis (~> 2.7.0) 24 | activemodel (4.1.16) 25 | activesupport (= 4.1.16) 26 | builder (~> 3.1) 27 | activerecord (4.1.16) 28 | activemodel (= 4.1.16) 29 | activesupport (= 4.1.16) 30 | arel (~> 5.0.0) 31 | activesupport (4.1.16) 32 | i18n (~> 0.6, >= 0.6.9) 33 | json (~> 1.7, >= 1.7.7) 34 | minitest (~> 5.1) 35 | thread_safe (~> 0.1) 36 | tzinfo (~> 1.1) 37 | appraisal (2.2.0) 38 | bundler 39 | rake 40 | thor (>= 0.14.0) 41 | arel (5.0.1.20140414130214) 42 | builder (3.2.3) 43 | concurrent-ruby (1.1.4) 44 | diff-lcs (1.3) 45 | erubis (2.7.0) 46 | ffi2-generators (0.1.1) 47 | i18n (0.9.5) 48 | concurrent-ruby (~> 1.0) 49 | json (1.8.6) 50 | mail (2.7.1) 51 | mini_mime (>= 0.1.1) 52 | mini_mime (1.0.1) 53 | minitest (5.11.3) 54 | rack (1.5.5) 55 | rack-test (0.6.3) 56 | rack (>= 1.0) 57 | rails (4.1.16) 58 | actionmailer (= 4.1.16) 59 | actionpack (= 4.1.16) 60 | actionview (= 4.1.16) 61 | activemodel (= 4.1.16) 62 | activerecord (= 4.1.16) 63 | activesupport (= 4.1.16) 64 | bundler (>= 1.3.0, < 2.0) 65 | railties (= 4.1.16) 66 | sprockets-rails (~> 2.0) 67 | railties (4.1.16) 68 | actionpack (= 4.1.16) 69 | activesupport (= 4.1.16) 70 | rake (>= 0.8.7) 71 | thor (>= 0.18.1, < 2.0) 72 | rake (13.0.1) 73 | rspec (3.9.0) 74 | rspec-core (~> 3.9.0) 75 | rspec-expectations (~> 3.9.0) 76 | rspec-mocks (~> 3.9.0) 77 | rspec-core (3.9.1) 78 | rspec-support (~> 3.9.1) 79 | rspec-expectations (3.9.1) 80 | diff-lcs (>= 1.2.0, < 2.0) 81 | rspec-support (~> 3.9.0) 82 | rspec-mocks (3.9.1) 83 | diff-lcs (>= 1.2.0, < 2.0) 84 | rspec-support (~> 3.9.0) 85 | rspec-support (3.9.2) 86 | rubysl (2.2.0) 87 | rubysl-abbrev (~> 2.0) 88 | rubysl-base64 (~> 2.0) 89 | rubysl-benchmark (~> 2.0) 90 | rubysl-bigdecimal (~> 2.0) 91 | rubysl-cgi (~> 2.0) 92 | rubysl-cgi-session (~> 2.0) 93 | rubysl-cmath (~> 2.0) 94 | rubysl-complex (~> 2.0) 95 | rubysl-continuation (~> 2.0) 96 | rubysl-coverage (~> 2.0) 97 | rubysl-csv (~> 2.0) 98 | rubysl-curses (~> 2.0) 99 | rubysl-date (~> 2.0) 100 | rubysl-delegate (~> 2.0) 101 | rubysl-digest (~> 2.0) 102 | rubysl-drb (~> 2.0) 103 | rubysl-e2mmap (~> 2.0) 104 | rubysl-english (~> 2.0) 105 | rubysl-enumerator (~> 2.0) 106 | rubysl-erb (~> 2.0) 107 | rubysl-etc (~> 2.0) 108 | rubysl-expect (~> 2.0) 109 | rubysl-fcntl (~> 2.0) 110 | rubysl-fiber (~> 2.0) 111 | rubysl-fileutils (~> 2.0) 112 | rubysl-find (~> 2.0) 113 | rubysl-forwardable (~> 2.0) 114 | rubysl-getoptlong (~> 2.0) 115 | rubysl-gserver (~> 2.0) 116 | rubysl-io-console (~> 2.0) 117 | rubysl-io-nonblock (~> 2.0) 118 | rubysl-io-wait (~> 2.0) 119 | rubysl-ipaddr (~> 2.0) 120 | rubysl-irb (~> 2.1) 121 | rubysl-logger (~> 2.0) 122 | rubysl-mathn (~> 2.0) 123 | rubysl-matrix (~> 2.0) 124 | rubysl-mkmf (~> 2.0) 125 | rubysl-monitor (~> 2.0) 126 | rubysl-mutex_m (~> 2.0) 127 | rubysl-net-ftp (~> 2.0) 128 | rubysl-net-http (~> 2.0) 129 | rubysl-net-imap (~> 2.0) 130 | rubysl-net-pop (~> 2.0) 131 | rubysl-net-protocol (~> 2.0) 132 | rubysl-net-smtp (~> 2.0) 133 | rubysl-net-telnet (~> 2.0) 134 | rubysl-nkf (~> 2.0) 135 | rubysl-observer (~> 2.0) 136 | rubysl-open-uri (~> 2.0) 137 | rubysl-open3 (~> 2.0) 138 | rubysl-openssl (~> 2.0) 139 | rubysl-optparse (~> 2.0) 140 | rubysl-ostruct (~> 2.0) 141 | rubysl-pathname (~> 2.0) 142 | rubysl-prettyprint (~> 2.0) 143 | rubysl-prime (~> 2.0) 144 | rubysl-profile (~> 2.0) 145 | rubysl-profiler (~> 2.0) 146 | rubysl-pstore (~> 2.0) 147 | rubysl-pty (~> 2.0) 148 | rubysl-rational (~> 2.0) 149 | rubysl-resolv (~> 2.0) 150 | rubysl-rexml (~> 2.0) 151 | rubysl-rinda (~> 2.0) 152 | rubysl-rss (~> 2.0) 153 | rubysl-scanf (~> 2.0) 154 | rubysl-securerandom (~> 2.0) 155 | rubysl-set (~> 2.0) 156 | rubysl-shellwords (~> 2.0) 157 | rubysl-singleton (~> 2.0) 158 | rubysl-socket (~> 2.0) 159 | rubysl-stringio (~> 2.0) 160 | rubysl-strscan (~> 2.0) 161 | rubysl-sync (~> 2.0) 162 | rubysl-syslog (~> 2.0) 163 | rubysl-tempfile (~> 2.0) 164 | rubysl-thread (~> 2.0) 165 | rubysl-thwait (~> 2.0) 166 | rubysl-time (~> 2.0) 167 | rubysl-timeout (~> 2.0) 168 | rubysl-tmpdir (~> 2.0) 169 | rubysl-tsort (~> 2.0) 170 | rubysl-un (~> 2.0) 171 | rubysl-unicode_normalize (~> 2.0) 172 | rubysl-uri (~> 2.0) 173 | rubysl-weakref (~> 2.0) 174 | rubysl-webrick (~> 2.0) 175 | rubysl-xmlrpc (~> 2.0) 176 | rubysl-yaml (~> 2.0) 177 | rubysl-zlib (~> 2.0) 178 | rubysl-abbrev (2.0.4) 179 | rubysl-base64 (2.0.0) 180 | rubysl-benchmark (2.0.1) 181 | rubysl-bigdecimal (2.0.2) 182 | rubysl-cgi (2.0.1) 183 | rubysl-cgi-session (2.1.0) 184 | rubysl-cmath (2.0.0) 185 | rubysl-complex (2.0.0) 186 | rubysl-continuation (2.0.0) 187 | rubysl-coverage (2.1) 188 | rubysl-csv (2.0.2) 189 | rubysl-english (~> 2.0) 190 | rubysl-curses (2.0.1) 191 | rubysl-date (2.0.9) 192 | rubysl-delegate (2.0.1) 193 | rubysl-digest (2.0.8) 194 | rubysl-drb (2.0.1) 195 | rubysl-e2mmap (2.0.0) 196 | rubysl-english (2.0.0) 197 | rubysl-enumerator (2.0.0) 198 | rubysl-erb (2.0.2) 199 | rubysl-etc (2.0.3) 200 | ffi2-generators (~> 0.1) 201 | rubysl-expect (2.0.0) 202 | rubysl-fcntl (2.0.4) 203 | ffi2-generators (~> 0.1) 204 | rubysl-fiber (2.0.0) 205 | rubysl-fileutils (2.0.3) 206 | rubysl-find (2.0.1) 207 | rubysl-forwardable (2.0.1) 208 | rubysl-getoptlong (2.0.0) 209 | rubysl-gserver (2.0.0) 210 | rubysl-socket (~> 2.0) 211 | rubysl-thread (~> 2.0) 212 | rubysl-io-console (2.0.0) 213 | rubysl-io-nonblock (2.0.0) 214 | rubysl-io-wait (2.0.0) 215 | rubysl-ipaddr (2.0.0) 216 | rubysl-irb (2.1.1) 217 | rubysl-e2mmap (~> 2.0) 218 | rubysl-mathn (~> 2.0) 219 | rubysl-thread (~> 2.0) 220 | rubysl-logger (2.1.0) 221 | rubysl-mathn (2.0.0) 222 | rubysl-matrix (2.1.0) 223 | rubysl-e2mmap (~> 2.0) 224 | rubysl-mkmf (2.1) 225 | rubysl-fileutils (~> 2.0) 226 | rubysl-shellwords (~> 2.0) 227 | rubysl-monitor (2.1) 228 | rubysl-mutex_m (2.0.0) 229 | rubysl-net-ftp (2.0.1) 230 | rubysl-net-http (2.0.4) 231 | rubysl-cgi (~> 2.0) 232 | rubysl-erb (~> 2.0) 233 | rubysl-singleton (~> 2.0) 234 | rubysl-net-imap (2.0.1) 235 | rubysl-net-pop (2.0.1) 236 | rubysl-net-protocol (2.0.1) 237 | rubysl-net-smtp (2.0.1) 238 | rubysl-net-telnet (2.0.0) 239 | rubysl-nkf (2.0.1) 240 | rubysl-observer (2.0.0) 241 | rubysl-open-uri (2.0.0) 242 | rubysl-open3 (2.0.0) 243 | rubysl-openssl (2.10) 244 | rubysl-optparse (2.0.1) 245 | rubysl-shellwords (~> 2.0) 246 | rubysl-ostruct (2.1.0) 247 | rubysl-pathname (2.3) 248 | rubysl-prettyprint (2.0.3) 249 | rubysl-prime (2.0.1) 250 | rubysl-profile (2.0.0) 251 | rubysl-profiler (2.1) 252 | rubysl-pstore (2.0.0) 253 | rubysl-pty (2.0.3) 254 | rubysl-rational (2.0.1) 255 | rubysl-resolv (2.1.2) 256 | rubysl-rexml (2.0.4) 257 | rubysl-rinda (2.0.1) 258 | rubysl-rss (2.0.0) 259 | rubysl-scanf (2.0.0) 260 | rubysl-securerandom (2.0.0) 261 | rubysl-set (2.0.1) 262 | rubysl-shellwords (2.0.0) 263 | rubysl-singleton (2.0.0) 264 | rubysl-socket (2.2.1) 265 | rubysl-fcntl (~> 2.0) 266 | rubysl-stringio (2.3) 267 | rubysl-strscan (2.0.0) 268 | rubysl-sync (2.0.0) 269 | rubysl-syslog (2.1.0) 270 | ffi2-generators (~> 0.1) 271 | rubysl-tempfile (2.0.1) 272 | rubysl-thread (2.1) 273 | rubysl-thwait (2.0.0) 274 | rubysl-time (2.0.3) 275 | rubysl-timeout (2.0.0) 276 | rubysl-tmpdir (2.0.1) 277 | rubysl-tsort (2.0.1) 278 | rubysl-un (2.0.0) 279 | rubysl-fileutils (~> 2.0) 280 | rubysl-optparse (~> 2.0) 281 | rubysl-unicode_normalize (2.0) 282 | rubysl-uri (2.0.0) 283 | rubysl-weakref (2.0.0) 284 | rubysl-webrick (2.0.0) 285 | rubysl-xmlrpc (2.0.0) 286 | rubysl-yaml (2.1.0) 287 | rubysl-zlib (2.0.1) 288 | sprockets (3.7.2) 289 | concurrent-ruby (~> 1.0) 290 | rack (> 1, < 3) 291 | sprockets-rails (2.3.3) 292 | actionpack (>= 3.0) 293 | activesupport (>= 3.0) 294 | sprockets (>= 2.8, < 4.0) 295 | sqlite3 (1.3.13) 296 | thor (0.20.3) 297 | thread_safe (0.3.6) 298 | tzinfo (1.2.5) 299 | thread_safe (~> 0.1) 300 | 301 | PLATFORMS 302 | ruby 303 | 304 | DEPENDENCIES 305 | activerecord-jdbcsqlite3-adapter 306 | appraisal (>= 1.0.2) 307 | nilify_blanks! 308 | rails (~> 4.1.8) 309 | rake (~> 13.0.1) 310 | rspec (>= 3.8.0) 311 | rubysl (~> 2.0) 312 | sqlite3 (~> 1.3.6) 313 | 314 | BUNDLED WITH 315 | 1.17.3 316 | -------------------------------------------------------------------------------- /gemfiles/4.2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "rubysl", "~> 2.0", platforms: [:rbx] 6 | gem "activerecord-jdbcsqlite3-adapter", platforms: [:jruby] 7 | gem "sqlite3", "~> 1.3.6", platforms: [:ruby] 8 | gem "rails", "~> 4.2.0" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/4.2.gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: .. 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | actionmailer (4.2.11) 12 | actionpack (= 4.2.11) 13 | actionview (= 4.2.11) 14 | activejob (= 4.2.11) 15 | mail (~> 2.5, >= 2.5.4) 16 | rails-dom-testing (~> 1.0, >= 1.0.5) 17 | actionpack (4.2.11) 18 | actionview (= 4.2.11) 19 | activesupport (= 4.2.11) 20 | rack (~> 1.6) 21 | rack-test (~> 0.6.2) 22 | rails-dom-testing (~> 1.0, >= 1.0.5) 23 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 24 | actionview (4.2.11) 25 | activesupport (= 4.2.11) 26 | builder (~> 3.1) 27 | erubis (~> 2.7.0) 28 | rails-dom-testing (~> 1.0, >= 1.0.5) 29 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 30 | activejob (4.2.11) 31 | activesupport (= 4.2.11) 32 | globalid (>= 0.3.0) 33 | activemodel (4.2.11) 34 | activesupport (= 4.2.11) 35 | builder (~> 3.1) 36 | activerecord (4.2.11) 37 | activemodel (= 4.2.11) 38 | activesupport (= 4.2.11) 39 | arel (~> 6.0) 40 | activesupport (4.2.11) 41 | i18n (~> 0.7) 42 | minitest (~> 5.1) 43 | thread_safe (~> 0.3, >= 0.3.4) 44 | tzinfo (~> 1.1) 45 | appraisal (2.2.0) 46 | bundler 47 | rake 48 | thor (>= 0.14.0) 49 | arel (6.0.4) 50 | builder (3.2.3) 51 | concurrent-ruby (1.1.4) 52 | crass (1.0.4) 53 | diff-lcs (1.3) 54 | erubis (2.7.0) 55 | ffi2-generators (0.1.1) 56 | globalid (0.4.2) 57 | activesupport (>= 4.2.0) 58 | i18n (0.9.5) 59 | concurrent-ruby (~> 1.0) 60 | loofah (2.2.3) 61 | crass (~> 1.0.2) 62 | nokogiri (>= 1.5.9) 63 | mail (2.7.1) 64 | mini_mime (>= 0.1.1) 65 | mini_mime (1.0.1) 66 | mini_portile2 (2.4.0) 67 | minitest (5.11.3) 68 | nokogiri (1.10.1) 69 | mini_portile2 (~> 2.4.0) 70 | rack (1.6.11) 71 | rack-test (0.6.3) 72 | rack (>= 1.0) 73 | rails (4.2.11) 74 | actionmailer (= 4.2.11) 75 | actionpack (= 4.2.11) 76 | actionview (= 4.2.11) 77 | activejob (= 4.2.11) 78 | activemodel (= 4.2.11) 79 | activerecord (= 4.2.11) 80 | activesupport (= 4.2.11) 81 | bundler (>= 1.3.0, < 2.0) 82 | railties (= 4.2.11) 83 | sprockets-rails 84 | rails-deprecated_sanitizer (1.0.3) 85 | activesupport (>= 4.2.0.alpha) 86 | rails-dom-testing (1.0.9) 87 | activesupport (>= 4.2.0, < 5.0) 88 | nokogiri (~> 1.6) 89 | rails-deprecated_sanitizer (>= 1.0.1) 90 | rails-html-sanitizer (1.0.4) 91 | loofah (~> 2.2, >= 2.2.2) 92 | railties (4.2.11) 93 | actionpack (= 4.2.11) 94 | activesupport (= 4.2.11) 95 | rake (>= 0.8.7) 96 | thor (>= 0.18.1, < 2.0) 97 | rake (13.0.1) 98 | rspec (3.9.0) 99 | rspec-core (~> 3.9.0) 100 | rspec-expectations (~> 3.9.0) 101 | rspec-mocks (~> 3.9.0) 102 | rspec-core (3.9.1) 103 | rspec-support (~> 3.9.1) 104 | rspec-expectations (3.9.1) 105 | diff-lcs (>= 1.2.0, < 2.0) 106 | rspec-support (~> 3.9.0) 107 | rspec-mocks (3.9.1) 108 | diff-lcs (>= 1.2.0, < 2.0) 109 | rspec-support (~> 3.9.0) 110 | rspec-support (3.9.2) 111 | rubysl (2.2.0) 112 | rubysl-abbrev (~> 2.0) 113 | rubysl-base64 (~> 2.0) 114 | rubysl-benchmark (~> 2.0) 115 | rubysl-bigdecimal (~> 2.0) 116 | rubysl-cgi (~> 2.0) 117 | rubysl-cgi-session (~> 2.0) 118 | rubysl-cmath (~> 2.0) 119 | rubysl-complex (~> 2.0) 120 | rubysl-continuation (~> 2.0) 121 | rubysl-coverage (~> 2.0) 122 | rubysl-csv (~> 2.0) 123 | rubysl-curses (~> 2.0) 124 | rubysl-date (~> 2.0) 125 | rubysl-delegate (~> 2.0) 126 | rubysl-digest (~> 2.0) 127 | rubysl-drb (~> 2.0) 128 | rubysl-e2mmap (~> 2.0) 129 | rubysl-english (~> 2.0) 130 | rubysl-enumerator (~> 2.0) 131 | rubysl-erb (~> 2.0) 132 | rubysl-etc (~> 2.0) 133 | rubysl-expect (~> 2.0) 134 | rubysl-fcntl (~> 2.0) 135 | rubysl-fiber (~> 2.0) 136 | rubysl-fileutils (~> 2.0) 137 | rubysl-find (~> 2.0) 138 | rubysl-forwardable (~> 2.0) 139 | rubysl-getoptlong (~> 2.0) 140 | rubysl-gserver (~> 2.0) 141 | rubysl-io-console (~> 2.0) 142 | rubysl-io-nonblock (~> 2.0) 143 | rubysl-io-wait (~> 2.0) 144 | rubysl-ipaddr (~> 2.0) 145 | rubysl-irb (~> 2.1) 146 | rubysl-logger (~> 2.0) 147 | rubysl-mathn (~> 2.0) 148 | rubysl-matrix (~> 2.0) 149 | rubysl-mkmf (~> 2.0) 150 | rubysl-monitor (~> 2.0) 151 | rubysl-mutex_m (~> 2.0) 152 | rubysl-net-ftp (~> 2.0) 153 | rubysl-net-http (~> 2.0) 154 | rubysl-net-imap (~> 2.0) 155 | rubysl-net-pop (~> 2.0) 156 | rubysl-net-protocol (~> 2.0) 157 | rubysl-net-smtp (~> 2.0) 158 | rubysl-net-telnet (~> 2.0) 159 | rubysl-nkf (~> 2.0) 160 | rubysl-observer (~> 2.0) 161 | rubysl-open-uri (~> 2.0) 162 | rubysl-open3 (~> 2.0) 163 | rubysl-openssl (~> 2.0) 164 | rubysl-optparse (~> 2.0) 165 | rubysl-ostruct (~> 2.0) 166 | rubysl-pathname (~> 2.0) 167 | rubysl-prettyprint (~> 2.0) 168 | rubysl-prime (~> 2.0) 169 | rubysl-profile (~> 2.0) 170 | rubysl-profiler (~> 2.0) 171 | rubysl-pstore (~> 2.0) 172 | rubysl-pty (~> 2.0) 173 | rubysl-rational (~> 2.0) 174 | rubysl-resolv (~> 2.0) 175 | rubysl-rexml (~> 2.0) 176 | rubysl-rinda (~> 2.0) 177 | rubysl-rss (~> 2.0) 178 | rubysl-scanf (~> 2.0) 179 | rubysl-securerandom (~> 2.0) 180 | rubysl-set (~> 2.0) 181 | rubysl-shellwords (~> 2.0) 182 | rubysl-singleton (~> 2.0) 183 | rubysl-socket (~> 2.0) 184 | rubysl-stringio (~> 2.0) 185 | rubysl-strscan (~> 2.0) 186 | rubysl-sync (~> 2.0) 187 | rubysl-syslog (~> 2.0) 188 | rubysl-tempfile (~> 2.0) 189 | rubysl-thread (~> 2.0) 190 | rubysl-thwait (~> 2.0) 191 | rubysl-time (~> 2.0) 192 | rubysl-timeout (~> 2.0) 193 | rubysl-tmpdir (~> 2.0) 194 | rubysl-tsort (~> 2.0) 195 | rubysl-un (~> 2.0) 196 | rubysl-unicode_normalize (~> 2.0) 197 | rubysl-uri (~> 2.0) 198 | rubysl-weakref (~> 2.0) 199 | rubysl-webrick (~> 2.0) 200 | rubysl-xmlrpc (~> 2.0) 201 | rubysl-yaml (~> 2.0) 202 | rubysl-zlib (~> 2.0) 203 | rubysl-abbrev (2.0.4) 204 | rubysl-base64 (2.0.0) 205 | rubysl-benchmark (2.0.1) 206 | rubysl-bigdecimal (2.0.2) 207 | rubysl-cgi (2.0.1) 208 | rubysl-cgi-session (2.1.0) 209 | rubysl-cmath (2.0.0) 210 | rubysl-complex (2.0.0) 211 | rubysl-continuation (2.0.0) 212 | rubysl-coverage (2.1) 213 | rubysl-csv (2.0.2) 214 | rubysl-english (~> 2.0) 215 | rubysl-curses (2.0.1) 216 | rubysl-date (2.0.9) 217 | rubysl-delegate (2.0.1) 218 | rubysl-digest (2.0.8) 219 | rubysl-drb (2.0.1) 220 | rubysl-e2mmap (2.0.0) 221 | rubysl-english (2.0.0) 222 | rubysl-enumerator (2.0.0) 223 | rubysl-erb (2.0.2) 224 | rubysl-etc (2.0.3) 225 | ffi2-generators (~> 0.1) 226 | rubysl-expect (2.0.0) 227 | rubysl-fcntl (2.0.4) 228 | ffi2-generators (~> 0.1) 229 | rubysl-fiber (2.0.0) 230 | rubysl-fileutils (2.0.3) 231 | rubysl-find (2.0.1) 232 | rubysl-forwardable (2.0.1) 233 | rubysl-getoptlong (2.0.0) 234 | rubysl-gserver (2.0.0) 235 | rubysl-socket (~> 2.0) 236 | rubysl-thread (~> 2.0) 237 | rubysl-io-console (2.0.0) 238 | rubysl-io-nonblock (2.0.0) 239 | rubysl-io-wait (2.0.0) 240 | rubysl-ipaddr (2.0.0) 241 | rubysl-irb (2.1.1) 242 | rubysl-e2mmap (~> 2.0) 243 | rubysl-mathn (~> 2.0) 244 | rubysl-thread (~> 2.0) 245 | rubysl-logger (2.1.0) 246 | rubysl-mathn (2.0.0) 247 | rubysl-matrix (2.1.0) 248 | rubysl-e2mmap (~> 2.0) 249 | rubysl-mkmf (2.1) 250 | rubysl-fileutils (~> 2.0) 251 | rubysl-shellwords (~> 2.0) 252 | rubysl-monitor (2.1) 253 | rubysl-mutex_m (2.0.0) 254 | rubysl-net-ftp (2.0.1) 255 | rubysl-net-http (2.0.4) 256 | rubysl-cgi (~> 2.0) 257 | rubysl-erb (~> 2.0) 258 | rubysl-singleton (~> 2.0) 259 | rubysl-net-imap (2.0.1) 260 | rubysl-net-pop (2.0.1) 261 | rubysl-net-protocol (2.0.1) 262 | rubysl-net-smtp (2.0.1) 263 | rubysl-net-telnet (2.0.0) 264 | rubysl-nkf (2.0.1) 265 | rubysl-observer (2.0.0) 266 | rubysl-open-uri (2.0.0) 267 | rubysl-open3 (2.0.0) 268 | rubysl-openssl (2.10) 269 | rubysl-optparse (2.0.1) 270 | rubysl-shellwords (~> 2.0) 271 | rubysl-ostruct (2.1.0) 272 | rubysl-pathname (2.3) 273 | rubysl-prettyprint (2.0.3) 274 | rubysl-prime (2.0.1) 275 | rubysl-profile (2.0.0) 276 | rubysl-profiler (2.1) 277 | rubysl-pstore (2.0.0) 278 | rubysl-pty (2.0.3) 279 | rubysl-rational (2.0.1) 280 | rubysl-resolv (2.1.2) 281 | rubysl-rexml (2.0.4) 282 | rubysl-rinda (2.0.1) 283 | rubysl-rss (2.0.0) 284 | rubysl-scanf (2.0.0) 285 | rubysl-securerandom (2.0.0) 286 | rubysl-set (2.0.1) 287 | rubysl-shellwords (2.0.0) 288 | rubysl-singleton (2.0.0) 289 | rubysl-socket (2.2.1) 290 | rubysl-fcntl (~> 2.0) 291 | rubysl-stringio (2.3) 292 | rubysl-strscan (2.0.0) 293 | rubysl-sync (2.0.0) 294 | rubysl-syslog (2.1.0) 295 | ffi2-generators (~> 0.1) 296 | rubysl-tempfile (2.0.1) 297 | rubysl-thread (2.1) 298 | rubysl-thwait (2.0.0) 299 | rubysl-time (2.0.3) 300 | rubysl-timeout (2.0.0) 301 | rubysl-tmpdir (2.0.1) 302 | rubysl-tsort (2.0.1) 303 | rubysl-un (2.0.0) 304 | rubysl-fileutils (~> 2.0) 305 | rubysl-optparse (~> 2.0) 306 | rubysl-unicode_normalize (2.0) 307 | rubysl-uri (2.0.0) 308 | rubysl-weakref (2.0.0) 309 | rubysl-webrick (2.0.0) 310 | rubysl-xmlrpc (2.0.0) 311 | rubysl-yaml (2.1.0) 312 | rubysl-zlib (2.0.1) 313 | sprockets (3.7.2) 314 | concurrent-ruby (~> 1.0) 315 | rack (> 1, < 3) 316 | sprockets-rails (3.2.1) 317 | actionpack (>= 4.0) 318 | activesupport (>= 4.0) 319 | sprockets (>= 3.0.0) 320 | sqlite3 (1.3.13) 321 | thor (0.20.3) 322 | thread_safe (0.3.6) 323 | tzinfo (1.2.5) 324 | thread_safe (~> 0.1) 325 | 326 | PLATFORMS 327 | ruby 328 | 329 | DEPENDENCIES 330 | activerecord-jdbcsqlite3-adapter 331 | appraisal (>= 1.0.2) 332 | nilify_blanks! 333 | rails (~> 4.2.0) 334 | rake (~> 13.0.1) 335 | rspec (>= 3.8.0) 336 | rubysl (~> 2.0) 337 | sqlite3 (~> 1.3.6) 338 | 339 | BUNDLED WITH 340 | 1.17.3 341 | -------------------------------------------------------------------------------- /gemfiles/5.2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "rubysl", "~> 2.0", platforms: [:rbx] 6 | gem "activerecord-jdbcsqlite3-adapter", platforms: [:jruby] 7 | gem "sqlite3", "~> 1.3.6", platforms: [:ruby] 8 | gem "rails", "~> 5.2.0" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/5.2.gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: .. 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | actioncable (5.2.2) 12 | actionpack (= 5.2.2) 13 | nio4r (~> 2.0) 14 | websocket-driver (>= 0.6.1) 15 | actionmailer (5.2.2) 16 | actionpack (= 5.2.2) 17 | actionview (= 5.2.2) 18 | activejob (= 5.2.2) 19 | mail (~> 2.5, >= 2.5.4) 20 | rails-dom-testing (~> 2.0) 21 | actionpack (5.2.2) 22 | actionview (= 5.2.2) 23 | activesupport (= 5.2.2) 24 | rack (~> 2.0) 25 | rack-test (>= 0.6.3) 26 | rails-dom-testing (~> 2.0) 27 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 28 | actionview (5.2.2) 29 | activesupport (= 5.2.2) 30 | builder (~> 3.1) 31 | erubi (~> 1.4) 32 | rails-dom-testing (~> 2.0) 33 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 34 | activejob (5.2.2) 35 | activesupport (= 5.2.2) 36 | globalid (>= 0.3.6) 37 | activemodel (5.2.2) 38 | activesupport (= 5.2.2) 39 | activerecord (5.2.2) 40 | activemodel (= 5.2.2) 41 | activesupport (= 5.2.2) 42 | arel (>= 9.0) 43 | activestorage (5.2.2) 44 | actionpack (= 5.2.2) 45 | activerecord (= 5.2.2) 46 | marcel (~> 0.3.1) 47 | activesupport (5.2.2) 48 | concurrent-ruby (~> 1.0, >= 1.0.2) 49 | i18n (>= 0.7, < 2) 50 | minitest (~> 5.1) 51 | tzinfo (~> 1.1) 52 | appraisal (2.2.0) 53 | bundler 54 | rake 55 | thor (>= 0.14.0) 56 | arel (9.0.0) 57 | builder (3.2.3) 58 | concurrent-ruby (1.1.4) 59 | crass (1.0.4) 60 | diff-lcs (1.3) 61 | erubi (1.8.0) 62 | ffi2-generators (0.1.1) 63 | globalid (0.4.2) 64 | activesupport (>= 4.2.0) 65 | i18n (1.5.3) 66 | concurrent-ruby (~> 1.0) 67 | loofah (2.2.3) 68 | crass (~> 1.0.2) 69 | nokogiri (>= 1.5.9) 70 | mail (2.7.1) 71 | mini_mime (>= 0.1.1) 72 | marcel (0.3.3) 73 | mimemagic (~> 0.3.2) 74 | method_source (0.9.2) 75 | mimemagic (0.3.3) 76 | mini_mime (1.0.1) 77 | mini_portile2 (2.4.0) 78 | minitest (5.11.3) 79 | nio4r (2.3.1) 80 | nokogiri (1.10.1) 81 | mini_portile2 (~> 2.4.0) 82 | rack (2.0.6) 83 | rack-test (1.1.0) 84 | rack (>= 1.0, < 3) 85 | rails (5.2.2) 86 | actioncable (= 5.2.2) 87 | actionmailer (= 5.2.2) 88 | actionpack (= 5.2.2) 89 | actionview (= 5.2.2) 90 | activejob (= 5.2.2) 91 | activemodel (= 5.2.2) 92 | activerecord (= 5.2.2) 93 | activestorage (= 5.2.2) 94 | activesupport (= 5.2.2) 95 | bundler (>= 1.3.0) 96 | railties (= 5.2.2) 97 | sprockets-rails (>= 2.0.0) 98 | rails-dom-testing (2.0.3) 99 | activesupport (>= 4.2.0) 100 | nokogiri (>= 1.6) 101 | rails-html-sanitizer (1.0.4) 102 | loofah (~> 2.2, >= 2.2.2) 103 | railties (5.2.2) 104 | actionpack (= 5.2.2) 105 | activesupport (= 5.2.2) 106 | method_source 107 | rake (>= 0.8.7) 108 | thor (>= 0.19.0, < 2.0) 109 | rake (13.0.1) 110 | rspec (3.9.0) 111 | rspec-core (~> 3.9.0) 112 | rspec-expectations (~> 3.9.0) 113 | rspec-mocks (~> 3.9.0) 114 | rspec-core (3.9.1) 115 | rspec-support (~> 3.9.1) 116 | rspec-expectations (3.9.1) 117 | diff-lcs (>= 1.2.0, < 2.0) 118 | rspec-support (~> 3.9.0) 119 | rspec-mocks (3.9.1) 120 | diff-lcs (>= 1.2.0, < 2.0) 121 | rspec-support (~> 3.9.0) 122 | rspec-support (3.9.2) 123 | rubysl (2.2.0) 124 | rubysl-abbrev (~> 2.0) 125 | rubysl-base64 (~> 2.0) 126 | rubysl-benchmark (~> 2.0) 127 | rubysl-bigdecimal (~> 2.0) 128 | rubysl-cgi (~> 2.0) 129 | rubysl-cgi-session (~> 2.0) 130 | rubysl-cmath (~> 2.0) 131 | rubysl-complex (~> 2.0) 132 | rubysl-continuation (~> 2.0) 133 | rubysl-coverage (~> 2.0) 134 | rubysl-csv (~> 2.0) 135 | rubysl-curses (~> 2.0) 136 | rubysl-date (~> 2.0) 137 | rubysl-delegate (~> 2.0) 138 | rubysl-digest (~> 2.0) 139 | rubysl-drb (~> 2.0) 140 | rubysl-e2mmap (~> 2.0) 141 | rubysl-english (~> 2.0) 142 | rubysl-enumerator (~> 2.0) 143 | rubysl-erb (~> 2.0) 144 | rubysl-etc (~> 2.0) 145 | rubysl-expect (~> 2.0) 146 | rubysl-fcntl (~> 2.0) 147 | rubysl-fiber (~> 2.0) 148 | rubysl-fileutils (~> 2.0) 149 | rubysl-find (~> 2.0) 150 | rubysl-forwardable (~> 2.0) 151 | rubysl-getoptlong (~> 2.0) 152 | rubysl-gserver (~> 2.0) 153 | rubysl-io-console (~> 2.0) 154 | rubysl-io-nonblock (~> 2.0) 155 | rubysl-io-wait (~> 2.0) 156 | rubysl-ipaddr (~> 2.0) 157 | rubysl-irb (~> 2.1) 158 | rubysl-logger (~> 2.0) 159 | rubysl-mathn (~> 2.0) 160 | rubysl-matrix (~> 2.0) 161 | rubysl-mkmf (~> 2.0) 162 | rubysl-monitor (~> 2.0) 163 | rubysl-mutex_m (~> 2.0) 164 | rubysl-net-ftp (~> 2.0) 165 | rubysl-net-http (~> 2.0) 166 | rubysl-net-imap (~> 2.0) 167 | rubysl-net-pop (~> 2.0) 168 | rubysl-net-protocol (~> 2.0) 169 | rubysl-net-smtp (~> 2.0) 170 | rubysl-net-telnet (~> 2.0) 171 | rubysl-nkf (~> 2.0) 172 | rubysl-observer (~> 2.0) 173 | rubysl-open-uri (~> 2.0) 174 | rubysl-open3 (~> 2.0) 175 | rubysl-openssl (~> 2.0) 176 | rubysl-optparse (~> 2.0) 177 | rubysl-ostruct (~> 2.0) 178 | rubysl-pathname (~> 2.0) 179 | rubysl-prettyprint (~> 2.0) 180 | rubysl-prime (~> 2.0) 181 | rubysl-profile (~> 2.0) 182 | rubysl-profiler (~> 2.0) 183 | rubysl-pstore (~> 2.0) 184 | rubysl-pty (~> 2.0) 185 | rubysl-rational (~> 2.0) 186 | rubysl-resolv (~> 2.0) 187 | rubysl-rexml (~> 2.0) 188 | rubysl-rinda (~> 2.0) 189 | rubysl-rss (~> 2.0) 190 | rubysl-scanf (~> 2.0) 191 | rubysl-securerandom (~> 2.0) 192 | rubysl-set (~> 2.0) 193 | rubysl-shellwords (~> 2.0) 194 | rubysl-singleton (~> 2.0) 195 | rubysl-socket (~> 2.0) 196 | rubysl-stringio (~> 2.0) 197 | rubysl-strscan (~> 2.0) 198 | rubysl-sync (~> 2.0) 199 | rubysl-syslog (~> 2.0) 200 | rubysl-tempfile (~> 2.0) 201 | rubysl-thread (~> 2.0) 202 | rubysl-thwait (~> 2.0) 203 | rubysl-time (~> 2.0) 204 | rubysl-timeout (~> 2.0) 205 | rubysl-tmpdir (~> 2.0) 206 | rubysl-tsort (~> 2.0) 207 | rubysl-un (~> 2.0) 208 | rubysl-unicode_normalize (~> 2.0) 209 | rubysl-uri (~> 2.0) 210 | rubysl-weakref (~> 2.0) 211 | rubysl-webrick (~> 2.0) 212 | rubysl-xmlrpc (~> 2.0) 213 | rubysl-yaml (~> 2.0) 214 | rubysl-zlib (~> 2.0) 215 | rubysl-abbrev (2.0.4) 216 | rubysl-base64 (2.0.0) 217 | rubysl-benchmark (2.0.1) 218 | rubysl-bigdecimal (2.0.2) 219 | rubysl-cgi (2.0.1) 220 | rubysl-cgi-session (2.1.0) 221 | rubysl-cmath (2.0.0) 222 | rubysl-complex (2.0.0) 223 | rubysl-continuation (2.0.0) 224 | rubysl-coverage (2.1) 225 | rubysl-csv (2.0.2) 226 | rubysl-english (~> 2.0) 227 | rubysl-curses (2.0.1) 228 | rubysl-date (2.0.9) 229 | rubysl-delegate (2.0.1) 230 | rubysl-digest (2.0.8) 231 | rubysl-drb (2.0.1) 232 | rubysl-e2mmap (2.0.0) 233 | rubysl-english (2.0.0) 234 | rubysl-enumerator (2.0.0) 235 | rubysl-erb (2.0.2) 236 | rubysl-etc (2.0.3) 237 | ffi2-generators (~> 0.1) 238 | rubysl-expect (2.0.0) 239 | rubysl-fcntl (2.0.4) 240 | ffi2-generators (~> 0.1) 241 | rubysl-fiber (2.0.0) 242 | rubysl-fileutils (2.0.3) 243 | rubysl-find (2.0.1) 244 | rubysl-forwardable (2.0.1) 245 | rubysl-getoptlong (2.0.0) 246 | rubysl-gserver (2.0.0) 247 | rubysl-socket (~> 2.0) 248 | rubysl-thread (~> 2.0) 249 | rubysl-io-console (2.0.0) 250 | rubysl-io-nonblock (2.0.0) 251 | rubysl-io-wait (2.0.0) 252 | rubysl-ipaddr (2.0.0) 253 | rubysl-irb (2.1.1) 254 | rubysl-e2mmap (~> 2.0) 255 | rubysl-mathn (~> 2.0) 256 | rubysl-thread (~> 2.0) 257 | rubysl-logger (2.1.0) 258 | rubysl-mathn (2.0.0) 259 | rubysl-matrix (2.1.0) 260 | rubysl-e2mmap (~> 2.0) 261 | rubysl-mkmf (2.1) 262 | rubysl-fileutils (~> 2.0) 263 | rubysl-shellwords (~> 2.0) 264 | rubysl-monitor (2.1) 265 | rubysl-mutex_m (2.0.0) 266 | rubysl-net-ftp (2.0.1) 267 | rubysl-net-http (2.0.4) 268 | rubysl-cgi (~> 2.0) 269 | rubysl-erb (~> 2.0) 270 | rubysl-singleton (~> 2.0) 271 | rubysl-net-imap (2.0.1) 272 | rubysl-net-pop (2.0.1) 273 | rubysl-net-protocol (2.0.1) 274 | rubysl-net-smtp (2.0.1) 275 | rubysl-net-telnet (2.0.0) 276 | rubysl-nkf (2.0.1) 277 | rubysl-observer (2.0.0) 278 | rubysl-open-uri (2.0.0) 279 | rubysl-open3 (2.0.0) 280 | rubysl-openssl (2.10) 281 | rubysl-optparse (2.0.1) 282 | rubysl-shellwords (~> 2.0) 283 | rubysl-ostruct (2.1.0) 284 | rubysl-pathname (2.3) 285 | rubysl-prettyprint (2.0.3) 286 | rubysl-prime (2.0.1) 287 | rubysl-profile (2.0.0) 288 | rubysl-profiler (2.1) 289 | rubysl-pstore (2.0.0) 290 | rubysl-pty (2.0.3) 291 | rubysl-rational (2.0.1) 292 | rubysl-resolv (2.1.2) 293 | rubysl-rexml (2.0.4) 294 | rubysl-rinda (2.0.1) 295 | rubysl-rss (2.0.0) 296 | rubysl-scanf (2.0.0) 297 | rubysl-securerandom (2.0.0) 298 | rubysl-set (2.0.1) 299 | rubysl-shellwords (2.0.0) 300 | rubysl-singleton (2.0.0) 301 | rubysl-socket (2.2.1) 302 | rubysl-fcntl (~> 2.0) 303 | rubysl-stringio (2.3) 304 | rubysl-strscan (2.0.0) 305 | rubysl-sync (2.0.0) 306 | rubysl-syslog (2.1.0) 307 | ffi2-generators (~> 0.1) 308 | rubysl-tempfile (2.0.1) 309 | rubysl-thread (2.1) 310 | rubysl-thwait (2.0.0) 311 | rubysl-time (2.0.3) 312 | rubysl-timeout (2.0.0) 313 | rubysl-tmpdir (2.0.1) 314 | rubysl-tsort (2.0.1) 315 | rubysl-un (2.0.0) 316 | rubysl-fileutils (~> 2.0) 317 | rubysl-optparse (~> 2.0) 318 | rubysl-unicode_normalize (2.0) 319 | rubysl-uri (2.0.0) 320 | rubysl-weakref (2.0.0) 321 | rubysl-webrick (2.0.0) 322 | rubysl-xmlrpc (2.0.0) 323 | rubysl-yaml (2.1.0) 324 | rubysl-zlib (2.0.1) 325 | sprockets (3.7.2) 326 | concurrent-ruby (~> 1.0) 327 | rack (> 1, < 3) 328 | sprockets-rails (3.2.1) 329 | actionpack (>= 4.0) 330 | activesupport (>= 4.0) 331 | sprockets (>= 3.0.0) 332 | sqlite3 (1.3.13) 333 | thor (0.20.3) 334 | thread_safe (0.3.6) 335 | tzinfo (1.2.5) 336 | thread_safe (~> 0.1) 337 | websocket-driver (0.7.0) 338 | websocket-extensions (>= 0.1.0) 339 | websocket-extensions (0.1.3) 340 | 341 | PLATFORMS 342 | ruby 343 | 344 | DEPENDENCIES 345 | activerecord-jdbcsqlite3-adapter 346 | appraisal (>= 1.0.2) 347 | nilify_blanks! 348 | rails (~> 5.2.0) 349 | rake (~> 13.0.1) 350 | rspec (>= 3.8.0) 351 | rubysl (~> 2.0) 352 | sqlite3 (~> 1.3.6) 353 | 354 | BUNDLED WITH 355 | 1.17.3 356 | -------------------------------------------------------------------------------- /gemfiles/6.0.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "rubysl", "~> 2.0", platforms: [:rbx] 6 | gem "activerecord-jdbcsqlite3-adapter", platforms: [:jruby] 7 | gem "sqlite3", "~> 1.4.2", platforms: [:ruby] 8 | gem "rails", "~> 6.0.2" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/6.0.gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: .. 3 | specs: 4 | nilify_blanks (1.3.0) 5 | activerecord (>= 4.0.0) 6 | activesupport (>= 4.0.0) 7 | 8 | GEM 9 | remote: http://rubygems.org/ 10 | specs: 11 | actioncable (6.0.2.1) 12 | actionpack (= 6.0.2.1) 13 | nio4r (~> 2.0) 14 | websocket-driver (>= 0.6.1) 15 | actionmailbox (6.0.2.1) 16 | actionpack (= 6.0.2.1) 17 | activejob (= 6.0.2.1) 18 | activerecord (= 6.0.2.1) 19 | activestorage (= 6.0.2.1) 20 | activesupport (= 6.0.2.1) 21 | mail (>= 2.7.1) 22 | actionmailer (6.0.2.1) 23 | actionpack (= 6.0.2.1) 24 | actionview (= 6.0.2.1) 25 | activejob (= 6.0.2.1) 26 | mail (~> 2.5, >= 2.5.4) 27 | rails-dom-testing (~> 2.0) 28 | actionpack (6.0.2.1) 29 | actionview (= 6.0.2.1) 30 | activesupport (= 6.0.2.1) 31 | rack (~> 2.0, >= 2.0.8) 32 | rack-test (>= 0.6.3) 33 | rails-dom-testing (~> 2.0) 34 | rails-html-sanitizer (~> 1.0, >= 1.2.0) 35 | actiontext (6.0.2.1) 36 | actionpack (= 6.0.2.1) 37 | activerecord (= 6.0.2.1) 38 | activestorage (= 6.0.2.1) 39 | activesupport (= 6.0.2.1) 40 | nokogiri (>= 1.8.5) 41 | actionview (6.0.2.1) 42 | activesupport (= 6.0.2.1) 43 | builder (~> 3.1) 44 | erubi (~> 1.4) 45 | rails-dom-testing (~> 2.0) 46 | rails-html-sanitizer (~> 1.1, >= 1.2.0) 47 | activejob (6.0.2.1) 48 | activesupport (= 6.0.2.1) 49 | globalid (>= 0.3.6) 50 | activemodel (6.0.2.1) 51 | activesupport (= 6.0.2.1) 52 | activerecord (6.0.2.1) 53 | activemodel (= 6.0.2.1) 54 | activesupport (= 6.0.2.1) 55 | activestorage (6.0.2.1) 56 | actionpack (= 6.0.2.1) 57 | activejob (= 6.0.2.1) 58 | activerecord (= 6.0.2.1) 59 | marcel (~> 0.3.1) 60 | activesupport (6.0.2.1) 61 | concurrent-ruby (~> 1.0, >= 1.0.2) 62 | i18n (>= 0.7, < 2) 63 | minitest (~> 5.1) 64 | tzinfo (~> 1.1) 65 | zeitwerk (~> 2.2) 66 | appraisal (2.2.0) 67 | bundler 68 | rake 69 | thor (>= 0.14.0) 70 | builder (3.2.4) 71 | concurrent-ruby (1.1.5) 72 | crass (1.0.6) 73 | diff-lcs (1.3) 74 | erubi (1.9.0) 75 | ffi2-generators (0.1.1) 76 | globalid (0.4.2) 77 | activesupport (>= 4.2.0) 78 | i18n (1.8.2) 79 | concurrent-ruby (~> 1.0) 80 | loofah (2.4.0) 81 | crass (~> 1.0.2) 82 | nokogiri (>= 1.5.9) 83 | mail (2.7.1) 84 | mini_mime (>= 0.1.1) 85 | marcel (0.3.3) 86 | mimemagic (~> 0.3.2) 87 | method_source (0.9.2) 88 | mimemagic (0.3.3) 89 | mini_mime (1.0.2) 90 | mini_portile2 (2.4.0) 91 | minitest (5.14.0) 92 | nio4r (2.5.2) 93 | nokogiri (1.10.7) 94 | mini_portile2 (~> 2.4.0) 95 | rack (2.1.2) 96 | rack-test (1.1.0) 97 | rack (>= 1.0, < 3) 98 | rails (6.0.2.1) 99 | actioncable (= 6.0.2.1) 100 | actionmailbox (= 6.0.2.1) 101 | actionmailer (= 6.0.2.1) 102 | actionpack (= 6.0.2.1) 103 | actiontext (= 6.0.2.1) 104 | actionview (= 6.0.2.1) 105 | activejob (= 6.0.2.1) 106 | activemodel (= 6.0.2.1) 107 | activerecord (= 6.0.2.1) 108 | activestorage (= 6.0.2.1) 109 | activesupport (= 6.0.2.1) 110 | bundler (>= 1.3.0) 111 | railties (= 6.0.2.1) 112 | sprockets-rails (>= 2.0.0) 113 | rails-dom-testing (2.0.3) 114 | activesupport (>= 4.2.0) 115 | nokogiri (>= 1.6) 116 | rails-html-sanitizer (1.3.0) 117 | loofah (~> 2.3) 118 | railties (6.0.2.1) 119 | actionpack (= 6.0.2.1) 120 | activesupport (= 6.0.2.1) 121 | method_source 122 | rake (>= 0.8.7) 123 | thor (>= 0.20.3, < 2.0) 124 | rake (13.0.1) 125 | rspec (3.9.0) 126 | rspec-core (~> 3.9.0) 127 | rspec-expectations (~> 3.9.0) 128 | rspec-mocks (~> 3.9.0) 129 | rspec-core (3.9.1) 130 | rspec-support (~> 3.9.1) 131 | rspec-expectations (3.9.1) 132 | diff-lcs (>= 1.2.0, < 2.0) 133 | rspec-support (~> 3.9.0) 134 | rspec-mocks (3.9.1) 135 | diff-lcs (>= 1.2.0, < 2.0) 136 | rspec-support (~> 3.9.0) 137 | rspec-support (3.9.2) 138 | rubysl (2.2.0) 139 | rubysl-abbrev (~> 2.0) 140 | rubysl-base64 (~> 2.0) 141 | rubysl-benchmark (~> 2.0) 142 | rubysl-bigdecimal (~> 2.0) 143 | rubysl-cgi (~> 2.0) 144 | rubysl-cgi-session (~> 2.0) 145 | rubysl-cmath (~> 2.0) 146 | rubysl-complex (~> 2.0) 147 | rubysl-continuation (~> 2.0) 148 | rubysl-coverage (~> 2.0) 149 | rubysl-csv (~> 2.0) 150 | rubysl-curses (~> 2.0) 151 | rubysl-date (~> 2.0) 152 | rubysl-delegate (~> 2.0) 153 | rubysl-digest (~> 2.0) 154 | rubysl-drb (~> 2.0) 155 | rubysl-e2mmap (~> 2.0) 156 | rubysl-english (~> 2.0) 157 | rubysl-enumerator (~> 2.0) 158 | rubysl-erb (~> 2.0) 159 | rubysl-etc (~> 2.0) 160 | rubysl-expect (~> 2.0) 161 | rubysl-fcntl (~> 2.0) 162 | rubysl-fiber (~> 2.0) 163 | rubysl-fileutils (~> 2.0) 164 | rubysl-find (~> 2.0) 165 | rubysl-forwardable (~> 2.0) 166 | rubysl-getoptlong (~> 2.0) 167 | rubysl-gserver (~> 2.0) 168 | rubysl-io-console (~> 2.0) 169 | rubysl-io-nonblock (~> 2.0) 170 | rubysl-io-wait (~> 2.0) 171 | rubysl-ipaddr (~> 2.0) 172 | rubysl-irb (~> 2.1) 173 | rubysl-logger (~> 2.0) 174 | rubysl-mathn (~> 2.0) 175 | rubysl-matrix (~> 2.0) 176 | rubysl-mkmf (~> 2.0) 177 | rubysl-monitor (~> 2.0) 178 | rubysl-mutex_m (~> 2.0) 179 | rubysl-net-ftp (~> 2.0) 180 | rubysl-net-http (~> 2.0) 181 | rubysl-net-imap (~> 2.0) 182 | rubysl-net-pop (~> 2.0) 183 | rubysl-net-protocol (~> 2.0) 184 | rubysl-net-smtp (~> 2.0) 185 | rubysl-net-telnet (~> 2.0) 186 | rubysl-nkf (~> 2.0) 187 | rubysl-observer (~> 2.0) 188 | rubysl-open-uri (~> 2.0) 189 | rubysl-open3 (~> 2.0) 190 | rubysl-openssl (~> 2.0) 191 | rubysl-optparse (~> 2.0) 192 | rubysl-ostruct (~> 2.0) 193 | rubysl-pathname (~> 2.0) 194 | rubysl-prettyprint (~> 2.0) 195 | rubysl-prime (~> 2.0) 196 | rubysl-profile (~> 2.0) 197 | rubysl-profiler (~> 2.0) 198 | rubysl-pstore (~> 2.0) 199 | rubysl-pty (~> 2.0) 200 | rubysl-rational (~> 2.0) 201 | rubysl-resolv (~> 2.0) 202 | rubysl-rexml (~> 2.0) 203 | rubysl-rinda (~> 2.0) 204 | rubysl-rss (~> 2.0) 205 | rubysl-scanf (~> 2.0) 206 | rubysl-securerandom (~> 2.0) 207 | rubysl-set (~> 2.0) 208 | rubysl-shellwords (~> 2.0) 209 | rubysl-singleton (~> 2.0) 210 | rubysl-socket (~> 2.0) 211 | rubysl-stringio (~> 2.0) 212 | rubysl-strscan (~> 2.0) 213 | rubysl-sync (~> 2.0) 214 | rubysl-syslog (~> 2.0) 215 | rubysl-tempfile (~> 2.0) 216 | rubysl-thread (~> 2.0) 217 | rubysl-thwait (~> 2.0) 218 | rubysl-time (~> 2.0) 219 | rubysl-timeout (~> 2.0) 220 | rubysl-tmpdir (~> 2.0) 221 | rubysl-tsort (~> 2.0) 222 | rubysl-un (~> 2.0) 223 | rubysl-unicode_normalize (~> 2.0) 224 | rubysl-uri (~> 2.0) 225 | rubysl-weakref (~> 2.0) 226 | rubysl-webrick (~> 2.0) 227 | rubysl-xmlrpc (~> 2.0) 228 | rubysl-yaml (~> 2.0) 229 | rubysl-zlib (~> 2.0) 230 | rubysl-abbrev (2.0.4) 231 | rubysl-base64 (2.0.0) 232 | rubysl-benchmark (2.0.1) 233 | rubysl-bigdecimal (2.0.2) 234 | rubysl-cgi (2.0.1) 235 | rubysl-cgi-session (2.1.0) 236 | rubysl-cmath (2.0.0) 237 | rubysl-complex (2.0.0) 238 | rubysl-continuation (2.0.0) 239 | rubysl-coverage (2.1) 240 | rubysl-csv (2.0.2) 241 | rubysl-english (~> 2.0) 242 | rubysl-curses (2.0.1) 243 | rubysl-date (2.0.9) 244 | rubysl-delegate (2.0.1) 245 | rubysl-digest (2.1) 246 | rubysl-drb (2.0.1) 247 | rubysl-e2mmap (2.0.0) 248 | rubysl-english (2.0.0) 249 | rubysl-enumerator (2.0.0) 250 | rubysl-erb (2.0.2) 251 | rubysl-etc (2.0.3) 252 | ffi2-generators (~> 0.1) 253 | rubysl-expect (2.0.0) 254 | rubysl-fcntl (2.0.4) 255 | ffi2-generators (~> 0.1) 256 | rubysl-fiber (2.0.0) 257 | rubysl-fileutils (2.0.3) 258 | rubysl-find (2.0.1) 259 | rubysl-forwardable (2.0.1) 260 | rubysl-getoptlong (2.0.0) 261 | rubysl-gserver (2.0.0) 262 | rubysl-socket (~> 2.0) 263 | rubysl-thread (~> 2.0) 264 | rubysl-io-console (2.0.0) 265 | rubysl-io-nonblock (2.0.0) 266 | rubysl-io-wait (2.0.0) 267 | rubysl-ipaddr (2.0.0) 268 | rubysl-irb (2.1.1) 269 | rubysl-e2mmap (~> 2.0) 270 | rubysl-mathn (~> 2.0) 271 | rubysl-thread (~> 2.0) 272 | rubysl-logger (2.1.0) 273 | rubysl-mathn (2.0.0) 274 | rubysl-matrix (2.1.0) 275 | rubysl-e2mmap (~> 2.0) 276 | rubysl-mkmf (2.1) 277 | rubysl-fileutils (~> 2.0) 278 | rubysl-shellwords (~> 2.0) 279 | rubysl-monitor (2.1) 280 | rubysl-mutex_m (2.0.0) 281 | rubysl-net-ftp (2.0.1) 282 | rubysl-net-http (2.0.4) 283 | rubysl-cgi (~> 2.0) 284 | rubysl-erb (~> 2.0) 285 | rubysl-singleton (~> 2.0) 286 | rubysl-net-imap (2.0.1) 287 | rubysl-net-pop (2.0.1) 288 | rubysl-net-protocol (2.0.1) 289 | rubysl-net-smtp (2.0.1) 290 | rubysl-net-telnet (2.0.0) 291 | rubysl-nkf (2.0.1) 292 | rubysl-observer (2.0.0) 293 | rubysl-open-uri (2.0.0) 294 | rubysl-open3 (2.0.0) 295 | rubysl-openssl (2.13) 296 | rubysl-optparse (2.0.1) 297 | rubysl-shellwords (~> 2.0) 298 | rubysl-ostruct (2.1.0) 299 | rubysl-pathname (2.3) 300 | rubysl-prettyprint (2.0.3) 301 | rubysl-prime (2.0.1) 302 | rubysl-profile (2.0.0) 303 | rubysl-profiler (2.1) 304 | rubysl-pstore (2.0.0) 305 | rubysl-pty (2.0.3) 306 | rubysl-rational (2.0.1) 307 | rubysl-resolv (2.1.2) 308 | rubysl-rexml (2.0.4) 309 | rubysl-rinda (2.0.1) 310 | rubysl-rss (2.0.0) 311 | rubysl-scanf (2.0.0) 312 | rubysl-securerandom (2.0.0) 313 | rubysl-set (2.0.1) 314 | rubysl-shellwords (2.0.0) 315 | rubysl-singleton (2.0.0) 316 | rubysl-socket (2.2.1) 317 | rubysl-fcntl (~> 2.0) 318 | rubysl-stringio (2.3) 319 | rubysl-strscan (2.0.0) 320 | rubysl-sync (2.0.0) 321 | rubysl-syslog (2.1.0) 322 | ffi2-generators (~> 0.1) 323 | rubysl-tempfile (2.0.1) 324 | rubysl-thread (2.1) 325 | rubysl-thwait (2.0.0) 326 | rubysl-time (2.0.3) 327 | rubysl-timeout (2.0.0) 328 | rubysl-tmpdir (2.0.1) 329 | rubysl-tsort (2.0.1) 330 | rubysl-un (2.0.0) 331 | rubysl-fileutils (~> 2.0) 332 | rubysl-optparse (~> 2.0) 333 | rubysl-unicode_normalize (2.0) 334 | rubysl-uri (2.0.0) 335 | rubysl-weakref (2.0.0) 336 | rubysl-webrick (2.0.0) 337 | rubysl-xmlrpc (2.0.0) 338 | rubysl-yaml (2.1.0) 339 | rubysl-zlib (2.0.1) 340 | sprockets (3.7.2) 341 | concurrent-ruby (~> 1.0) 342 | rack (> 1, < 3) 343 | sprockets-rails (3.2.1) 344 | actionpack (>= 4.0) 345 | activesupport (>= 4.0) 346 | sprockets (>= 3.0.0) 347 | sqlite3 (1.4.2) 348 | thor (0.20.3) 349 | thread_safe (0.3.6) 350 | tzinfo (1.2.6) 351 | thread_safe (~> 0.1) 352 | websocket-driver (0.7.1) 353 | websocket-extensions (>= 0.1.0) 354 | websocket-extensions (0.1.4) 355 | zeitwerk (2.2.2) 356 | 357 | PLATFORMS 358 | ruby 359 | 360 | DEPENDENCIES 361 | activerecord-jdbcsqlite3-adapter 362 | appraisal (>= 1.0.2) 363 | nilify_blanks! 364 | rails (~> 6.0.2) 365 | rake (~> 13.0.1) 366 | rspec (>= 3.8.0) 367 | rubysl (~> 2.0) 368 | sqlite3 (~> 1.4.2) 369 | 370 | BUNDLED WITH 371 | 1.17.3 372 | -------------------------------------------------------------------------------- /init.rb: -------------------------------------------------------------------------------- 1 | require "nilify_blanks" 2 | 3 | NilifyBlanks::Railtie.insert -------------------------------------------------------------------------------- /lib/nilify_blanks.rb: -------------------------------------------------------------------------------- 1 | require "active_support/concern" 2 | 3 | module NilifyBlanks 4 | extend ActiveSupport::Concern 5 | 6 | included do 7 | class_attribute :nilify_blanks_columns, instance_writer: false, default: [] 8 | class_attribute :nilify_blanks_options, instance_writer: false, default: nil 9 | end 10 | 11 | module ClassMethods 12 | DEFAULT_TYPES = [:string, :text, :citext] 13 | DEFAULT_CALLBACK = :validation 14 | 15 | @@define_nilify_blank_methods_lock = Mutex.new 16 | 17 | # This overrides the underlying rails method that defines attribute methods. 18 | # This must be thread safe, just like the underlying method. 19 | # 20 | def define_attribute_methods 21 | if super 22 | define_nilify_blank_methods 23 | end 24 | end 25 | 26 | def nilify_blanks(options = {}) 27 | self.nilify_blanks_options = options 28 | 29 | # Normally we wait for rails to define attribute methods, but we could be calling this after this has already been done. 30 | # If so, let's just immediately generate nilify blanks methods. 31 | # 32 | define_nilify_blank_methods if @attribute_methods_generated 33 | end 34 | 35 | 36 | private 37 | 38 | def define_nilify_blank_methods 39 | return unless nilify_blanks_options 40 | 41 | @@define_nilify_blank_methods_lock.synchronize do 42 | options = nilify_blanks_options.dup 43 | 44 | options[:before] ||= DEFAULT_CALLBACK 45 | options[:only] = Array.wrap(options[:only]).map(&:to_s) if options[:only] 46 | options[:except] = Array.wrap(options[:except]).map(&:to_s) if options[:except] 47 | options[:types] = options[:types] ? Array.wrap(options[:types]).map(&:to_sym) : DEFAULT_TYPES 48 | 49 | if options[:only] 50 | columns_to_nilify = options[:only].clone 51 | elsif options[:nullables_only] == false 52 | columns_to_nilify = self.columns.select {|c| options[:types].include?(c.type) }.map(&:name).map(&:to_s) 53 | else 54 | columns_to_nilify = self.columns.select(&:null).select {|c| options[:types].include?(c.type) }.map(&:name).map(&:to_s) 55 | end 56 | 57 | columns_to_nilify -= options[:except] if options[:except] 58 | 59 | self.nilify_blanks_columns = columns_to_nilify.map(&:to_s) 60 | 61 | send("before_#{options[:before]}", :nilify_blanks) 62 | end 63 | end 64 | end 65 | 66 | def nilify_blanks 67 | (nilify_blanks_columns || []).each do |column| 68 | value = read_attribute(column) 69 | next unless value.is_a?(String) 70 | next unless value.respond_to?(:blank?) 71 | 72 | write_attribute(column, nil) if value.blank? 73 | end 74 | end 75 | end 76 | 77 | require "nilify_blanks/railtie" 78 | -------------------------------------------------------------------------------- /lib/nilify_blanks/matchers.rb: -------------------------------------------------------------------------------- 1 | rspec_module = defined?(RSpec::Core) ? 'RSpec' : 'Spec' # for RSpec 1 compatability 2 | 3 | def failure_message_method 4 | rspec_major_version >= 3 ? :failure_message : :failure_message_for_should 5 | rescue 6 | :failure_message_for_should 7 | end 8 | 9 | def negated_failure_message_method 10 | rspec_major_version >= 3 ? :failure_message_when_negated : :failure_message_for_should_not 11 | rescue 12 | :failure_message_for_should_not 13 | end 14 | 15 | def rspec_major_version 16 | RSpec::Core::Version::STRING.split('.').first.to_i 17 | end 18 | 19 | Kernel.const_get(rspec_module)::Matchers.define :nilify_blanks_for do |column_name, options = {}| 20 | match do |model_instance| 21 | model_class = model_instance.class 22 | model_class.define_attribute_methods 23 | model_class.included_modules.include?(NilifyBlanks) && 24 | model_class.respond_to?(:nilify_blanks_columns) && 25 | model_class.nilify_blanks_columns.include?(column_name.to_s) && 26 | (options || {}).all? {|k, v| model_class.nilify_blanks_options[k] == v } 27 | end 28 | 29 | send(failure_message_method) do |_| 30 | "expected to nilify blanks for #{column_name} #{options.inspect unless options.empty?}" 31 | end 32 | 33 | send(negated_failure_message_method) do |_| 34 | "expected to not nilify blanks for #{column_name} #{options.inspect unless options.empty?}" 35 | end 36 | end 37 | 38 | Kernel.const_get(rspec_module)::Matchers.define :nilify_blanks do |options = {}| 39 | match do |model_instance| 40 | expected_types = options[:types] ? Array.wrap(options[:types]).map(&:to_sym) : NilifyBlanks::ClassMethods::DEFAULT_TYPES 41 | 42 | model_class = model_instance.class 43 | model_class.define_attribute_methods 44 | model_class.included_modules.include?(NilifyBlanks) && 45 | model_class.respond_to?(:nilify_blanks_columns) && 46 | model_class.nilify_blanks_columns == model_class.columns.select(&:null).select {|c| expected_types.include?(c.type) }.map(&:name).map(&:to_s) && 47 | (options || {}).all? {|k, v| model_class.nilify_blanks_options[k] == v } 48 | end 49 | 50 | send(failure_message_method) do |_| 51 | "expected to nilify blanks #{options.inspect unless options.empty?}" 52 | end 53 | 54 | send(negated_failure_message_method) do |_| 55 | "expected to not nilify blanks #{options.inspect unless options.empty?}" 56 | end 57 | end 58 | -------------------------------------------------------------------------------- /lib/nilify_blanks/railtie.rb: -------------------------------------------------------------------------------- 1 | module NilifyBlanks 2 | if defined?(Rails::Railtie) 3 | require "rails" 4 | 5 | class Railtie < Rails::Railtie 6 | initializer "nilify_blanks.extend_active_record" do 7 | ActiveSupport.on_load(:active_record) do 8 | NilifyBlanks::Railtie.insert 9 | end 10 | end 11 | end 12 | end 13 | 14 | class Railtie 15 | def self.insert 16 | ActiveRecord::Base.send(:include, NilifyBlanks) 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /lib/nilify_blanks/version.rb: -------------------------------------------------------------------------------- 1 | module NilifyBlanks 2 | VERSION = "1.4.0" 3 | end 4 | -------------------------------------------------------------------------------- /nilify_blanks.gemspec: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | $:.push File.expand_path("../lib", __FILE__) 3 | require "nilify_blanks/version" 4 | 5 | Gem::Specification.new do |s| 6 | s.name = "nilify_blanks" 7 | s.version = NilifyBlanks::VERSION 8 | s.license = 'MIT' 9 | s.author = "Ben Hughes" 10 | s.email = "ben@railsgarden.com" 11 | s.homepage = "https://github.com/rubiety/nilify_blanks" 12 | s.summary = "Auto-convert blank fields to nil." 13 | s.description = "Often times you'll end up with empty strings where you really want nil at the database level. This plugin automatically converts blanks to nil and is configurable." 14 | 15 | s.files = Dir["{lib,spec}/**/*", "[A-Z]*", "init.rb"] 16 | s.require_path = "lib" 17 | 18 | s.required_rubygems_version = ">= 1.3.4" 19 | 20 | s.add_dependency("activesupport", [">= 4.0.0"]) 21 | s.add_dependency("activerecord", [">= 4.0.0"]) 22 | s.add_development_dependency("rake", "~> 13.0.1") 23 | s.add_development_dependency("rspec", [">= 3.8.0"]) 24 | s.add_development_dependency("appraisal", [">= 1.0.2"]) 25 | s.add_development_dependency("sqlite3", [">= 1.3.6"]) 26 | end 27 | -------------------------------------------------------------------------------- /rails/init.rb: -------------------------------------------------------------------------------- 1 | require "nilify_blanks" 2 | 3 | NilifyBlanks::Railtie.insert -------------------------------------------------------------------------------- /spec/db/database.yml: -------------------------------------------------------------------------------- 1 | sqlite: 2 | adapter: sqlite 3 | database: spec/db/test.sqlite 4 | 5 | sqlite3: 6 | adapter: sqlite3 7 | database: spec/db/test.sqlite3 8 | 9 | postgresql: 10 | adapter: postgresql 11 | username: postgres 12 | password: postgres 13 | database: nilify_blanks_plugin_test 14 | min_messages: ERROR 15 | 16 | mysql: 17 | adapter: mysql 18 | host: localhost 19 | username: root 20 | password: 21 | database: nilify_blanks_plugin_test -------------------------------------------------------------------------------- /spec/db/schema.rb: -------------------------------------------------------------------------------- 1 | ActiveRecord::Schema.define(:version => 0) do 2 | 3 | create_table :posts, :force => true do |t| 4 | t.string :first_name 5 | t.string :last_name, :null => false 6 | t.string :title 7 | t.text :summary 8 | t.text :body 9 | t.column :slug, :citext 10 | t.integer :views 11 | t.integer :category_id 12 | t.string :blog_id 13 | end 14 | 15 | end 16 | -------------------------------------------------------------------------------- /spec/nilify_blanks_spec.rb: -------------------------------------------------------------------------------- 1 | require "nilify_blanks/matchers" 2 | 3 | RSpec.describe NilifyBlanks do 4 | context "Model with nilify_blanks" do 5 | before(:all) do 6 | class Post < ActiveRecord::Base 7 | nilify_blanks 8 | end 9 | 10 | @post = Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0, :blog_id => '') 11 | @post.save 12 | end 13 | 14 | it "should recognize all non-null string, text, citext columns" do 15 | expect(Post.nilify_blanks_columns).to eq(['first_name', 'title', 'summary', 'body', 'slug', 'blog_id']) 16 | end 17 | 18 | it "should convert all blanks to nils" do 19 | expect(@post.first_name).to be_nil 20 | expect(@post.title).to be_nil 21 | expect(@post.summary).to be_nil 22 | expect(@post.body).to be_nil 23 | expect(@post.slug).to be_nil 24 | expect(@post.blog_id).to be_nil 25 | end 26 | 27 | it "should leave not-null last name field alone" do 28 | expect(@post.last_name).to eq("") 29 | end 30 | 31 | it "should leave integer views field alone" do 32 | expect(@post.views).to eq(0) 33 | end 34 | 35 | it "should not nilify non-null column" do 36 | expect(@post.class.nilify_blanks_columns).to_not include('last_name') 37 | end 38 | end 39 | 40 | context "Model with nilify_blanks :nullables_only => false" do 41 | before(:all) do 42 | class PostWithNullables < ActiveRecord::Base 43 | self.table_name = "posts" 44 | nilify_blanks :nullables_only => false 45 | end 46 | 47 | @post = PostWithNullables.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0, :blog_id => '') 48 | end 49 | 50 | it "should recognize all (even null) string, text, citext columns" do 51 | expect(PostWithNullables.nilify_blanks_columns).to eq(['first_name', 'last_name', 'title', 'summary', 'body', 'slug', 'blog_id']) 52 | end 53 | end 54 | 55 | context "Model with nilify_blanks :types => [:text]" do 56 | def citext_supported 57 | PostOnlyText.content_columns.detect {|c| c.type == :citext} 58 | end 59 | 60 | before(:all) do 61 | class PostOnlyText < ActiveRecord::Base 62 | self.table_name = "posts" 63 | nilify_blanks :types => [:text] 64 | end 65 | 66 | @post = PostOnlyText.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 67 | @post.save 68 | end 69 | 70 | it "should recognize all non-null text only columns" do 71 | expected_types = ['summary', 'body'] 72 | expected_types << 'slug' unless citext_supported 73 | expect(PostOnlyText.nilify_blanks_columns).to eq(expected_types) 74 | end 75 | 76 | it "should convert all blanks to nils" do 77 | expect(@post.summary).to be_nil 78 | expect(@post.body).to be_nil 79 | expect(@post.slug).to be_nil unless citext_supported 80 | end 81 | 82 | it "should leave not-null string fields alone" do 83 | expect(@post.first_name).to eq("") 84 | expect(@post.last_name).to eq("") 85 | expect(@post.title).to eq("") 86 | expect(@post.slug).to eq("") if citext_supported 87 | end 88 | end 89 | 90 | context "Model with nilify_blanks :only => [:first_name, :title]" do 91 | before(:all) do 92 | class PostOnlyFirstNameAndTitle < ActiveRecord::Base 93 | self.table_name = "posts" 94 | nilify_blanks :only => [:first_name, :title] 95 | end 96 | 97 | @post = PostOnlyFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 98 | @post.save 99 | end 100 | 101 | it "should recognize only first_name and title" do 102 | expect(PostOnlyFirstNameAndTitle.nilify_blanks_columns).to eq(['first_name', 'title']) 103 | end 104 | 105 | it "should convert first_name and title blanks to nils" do 106 | expect(@post.first_name).to be_nil 107 | expect(@post.title).to be_nil 108 | end 109 | 110 | it "should leave other fields alone" do 111 | expect(@post.summary).to eq("") 112 | expect(@post.body).to eq("") 113 | expect(@post.slug).to eq("") 114 | end 115 | end 116 | 117 | context "Model with nilify_blanks :except => [:first_name, :title]" do 118 | before(:all) do 119 | class PostExceptFirstNameAndTitle < ActiveRecord::Base 120 | self.table_name = "posts" 121 | nilify_blanks :except => [:first_name, :title, :blog_id] 122 | end 123 | 124 | @post = PostExceptFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 125 | @post.save 126 | end 127 | 128 | it "should recognize only summary, body, and views" do 129 | expect(PostExceptFirstNameAndTitle.nilify_blanks_columns).to eq(['summary', 'body', 'slug']) 130 | end 131 | 132 | it "should convert summary and body blanks to nils" do 133 | expect(@post.summary).to be_nil 134 | expect(@post.body).to be_nil 135 | expect(@post.slug).to be_nil 136 | end 137 | 138 | it "should leave other fields alone" do 139 | expect(@post.first_name).to eq("") 140 | expect(@post.title).to eq("") 141 | end 142 | end 143 | 144 | 145 | context "Global Usage" do 146 | context "Namespaced Base Class with nilify_blanks inline" do 147 | before(:all) do 148 | module Admin1 149 | class Base < ActiveRecord::Base 150 | self.abstract_class = true 151 | nilify_blanks 152 | end 153 | end 154 | 155 | class Admin1::Post < Admin1::Base 156 | self.table_name = "posts" 157 | end 158 | 159 | @post = Admin1::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 160 | @post.save 161 | end 162 | 163 | it "should convert all blanks to nils" do 164 | expect(@post.first_name).to be_nil 165 | end 166 | end 167 | 168 | context "Namespaced Base Class with nilify_blanks applied after definition" do 169 | before(:all) do 170 | module Admin2 171 | class Base < ActiveRecord::Base 172 | self.abstract_class = true 173 | end 174 | end 175 | 176 | class Admin2::Post < Admin2::Base 177 | self.table_name = "posts" 178 | end 179 | 180 | Admin2::Base.nilify_blanks 181 | 182 | @post = Admin2::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 183 | @post.save 184 | end 185 | 186 | it "should convert all blanks to nils" do 187 | expect(@post.first_name).to be_nil 188 | end 189 | end 190 | 191 | context "Namespaced Base Class with nilify_blanks applied after definition" do 192 | before(:all) do 193 | ActiveRecord::Base.nilify_blanks 194 | 195 | class InheritedPost < ActiveRecord::Base 196 | self.table_name = "posts" 197 | end 198 | 199 | @post = InheritedPost.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 200 | @post.save 201 | end 202 | 203 | it "should convert all blanks to nils" do 204 | expect(@post.first_name).to be_nil 205 | end 206 | end 207 | 208 | context "Namespaced Base Class with nilify_blanks with overrides applied after definition" do 209 | before(:all) do 210 | ActiveRecord::Base.nilify_blanks 211 | 212 | class InheritedPost < ActiveRecord::Base 213 | self.table_name = "posts" 214 | 215 | nilify_blanks except: [:first_name] 216 | end 217 | 218 | @post = InheritedPost.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0) 219 | @post.save 220 | end 221 | 222 | it "should convert all blanks to nils" do 223 | expect(@post.first_name).to_not be_nil 224 | expect(@post.title).to be_nil 225 | end 226 | end 227 | end 228 | 229 | describe "matchers" do 230 | describe "nilify_blanks_for" do 231 | subject { Post.new } 232 | 233 | before(:all) do 234 | class Post < ActiveRecord::Base 235 | nilify_blanks 236 | end 237 | end 238 | 239 | it { is_expected.to nilify_blanks_for(:first_name) } 240 | it { is_expected.to nilify_blanks_for(:title) } 241 | it { is_expected.to nilify_blanks_for(:summary) } 242 | it { is_expected.to nilify_blanks_for(:body) } 243 | it { is_expected.to nilify_blanks_for(:slug) } 244 | it { is_expected.to nilify_blanks_for(:blog_id) } 245 | 246 | it { is_expected.to_not nilify_blanks_for(:id) } 247 | it { is_expected.to_not nilify_blanks_for(:last_name) } 248 | end 249 | 250 | describe "nilify_blanks" do 251 | subject { Post.new } 252 | 253 | before(:all) do 254 | class Post < ActiveRecord::Base 255 | nilify_blanks 256 | end 257 | end 258 | 259 | context "foreign key column is nilified" do 260 | it { is_expected.to nilify_blanks } 261 | end 262 | end 263 | end 264 | end 265 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require "rubygems" 2 | require "rspec" 3 | require "active_support" 4 | require "active_record" 5 | require "yaml" 6 | 7 | # Establish DB Connection 8 | config = YAML::load(IO.read(File.join(File.dirname(__FILE__), 'db', 'database.yml'))) 9 | ActiveRecord::Base.configurations = {'test' => config[ENV['DB'] || 'sqlite3']} 10 | ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test']) 11 | 12 | # Load Test Schema into the Database 13 | load(File.dirname(__FILE__) + "/db/schema.rb") 14 | 15 | require File.dirname(__FILE__) + '/../init' 16 | 17 | RSpec.configure do |config| 18 | config.define_derived_metadata do |meta| 19 | meta[:aggregate_failures] = true unless meta.key?(:aggregate_failures) 20 | end 21 | 22 | config.disable_monkey_patching! 23 | 24 | config.expect_with :rspec do |expectations| 25 | expectations.include_chain_clauses_in_custom_matcher_descriptions = true 26 | end 27 | 28 | config.mock_with :rspec do |mocks| 29 | mocks.verify_partial_doubles = true 30 | end 31 | 32 | config.shared_context_metadata_behavior = :apply_to_host_groups 33 | config.filter_run_when_matching :focus 34 | config.example_status_persistence_file_path = "spec/examples.txt" 35 | 36 | # config.order = :random 37 | # Kernel.srand config.seed 38 | 39 | # config.warnings = true 40 | end 41 | --------------------------------------------------------------------------------