oh_my_log 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +65 -0
  3. data/.document +4 -0
  4. data/.gitignore +8 -0
  5. data/.rubocop.yml +73 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +31 -0
  8. data/Appraisals +25 -0
  9. data/Gemfile +2 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +180 -0
  12. data/Rakefile +20 -0
  13. data/blue_print/oh_my_log_initializer.rb +8 -0
  14. data/gemfiles/rails_4.2_stable.gemfile +8 -0
  15. data/gemfiles/rails_4.2_stable.gemfile.lock +181 -0
  16. data/gemfiles/rails_5.0_stable.gemfile +8 -0
  17. data/gemfiles/rails_5.0_stable.gemfile.lock +188 -0
  18. data/gemfiles/rails_5.1_stable.gemfile +8 -0
  19. data/gemfiles/rails_5.1_stable.gemfile.lock +188 -0
  20. data/gemfiles/rails_5.2_stable.gemfile +8 -0
  21. data/gemfiles/rails_5.2_stable.gemfile.lock +196 -0
  22. data/lib/oh_my_log/active_record_observer.rb +11 -0
  23. data/lib/oh_my_log/configuration.rb +37 -0
  24. data/lib/oh_my_log/effect.rb +18 -0
  25. data/lib/oh_my_log/log.rb +140 -0
  26. data/lib/oh_my_log/mongoid_observer.rb +11 -0
  27. data/lib/oh_my_log/observer_factory.rb +90 -0
  28. data/lib/oh_my_log/request.rb +22 -0
  29. data/lib/oh_my_log/result.rb +48 -0
  30. data/lib/oh_my_log/selector.rb +44 -0
  31. data/lib/oh_my_log/version.rb +5 -0
  32. data/lib/oh_my_log.rb +47 -0
  33. data/lib/railtie.rb +48 -0
  34. data/lib/tasks/oh_my_log.rake +32 -0
  35. data/oh_my_log.gemspec +36 -0
  36. data/spec/controllers/foos_controller_spec.rb +116 -0
  37. data/spec/dummy/Rakefile +4 -0
  38. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  39. data/spec/dummy/app/controllers/foos_controller.rb +23 -0
  40. data/spec/dummy/app/models/application_record.rb +3 -0
  41. data/spec/dummy/app/models/doo.rb +2 -0
  42. data/spec/dummy/app/models/foo.rb +2 -0
  43. data/spec/dummy/app/views/foos/create.html.erb +0 -0
  44. data/spec/dummy/app/views/foos/index.html.erb +0 -0
  45. data/spec/dummy/app/views/foos/show.html.erb +0 -0
  46. data/spec/dummy/app/views/foos/two_in_one.html.erb +0 -0
  47. data/spec/dummy/app/views/foos/update.html.erb +0 -0
  48. data/spec/dummy/config/application.rb +20 -0
  49. data/spec/dummy/config/boot.rb +6 -0
  50. data/spec/dummy/config/database.yml +7 -0
  51. data/spec/dummy/config/environment.rb +2 -0
  52. data/spec/dummy/config/environments/test.rb +37 -0
  53. data/spec/dummy/config/initializers/migration_class.rb +8 -0
  54. data/spec/dummy/config/routes.rb +5 -0
  55. data/spec/dummy/config/secrets.yml +2 -0
  56. data/spec/dummy/config.ru +4 -0
  57. data/spec/dummy/db/migrate/20120508165529_create_tables.rb +21 -0
  58. data/spec/rails_helper.rb +1 -0
  59. data/spec/spec_helper.rb +32 -0
  60. metadata +262 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4b6e566db9eef37a2baa46558246d1806cdb6168b5b1e893670570f8455d4fdd
4
+ data.tar.gz: 5846cde591c8be91cfc8b45df5d83ff6660ae1a5782bdef8ac962ffd4765888b
5
+ SHA512:
6
+ metadata.gz: aed087cbaf738416e0377c8824c995c0de36692aeaf408594fb22b413e294d842fca0479eed429a2a8bf2f7feeaae0e14d1486554911d624eef77ddb0b6ba031
7
+ data.tar.gz: 821c53d92e568c3790432fc683274fec3c1614b25ade16c94ecab89787eb27b5c39334bc9d2d679e2f2731a7d87cddc53eb87c3cfcac73ea19adce4a790169a8
data/.codeclimate.yml ADDED
@@ -0,0 +1,65 @@
1
+ lversion: "2"
2
+ checks:
3
+ argument-count:
4
+ enabled: true
5
+ config:
6
+ threshold: 4
7
+ complex-logic:
8
+ enabled: true
9
+ config:
10
+ threshold: 4
11
+ file-lines:
12
+ enabled: true
13
+ config:
14
+ threshold: 250
15
+ method-complexity:
16
+ enabled: true
17
+ config:
18
+ threshold: 5
19
+ method-count:
20
+ enabled: true
21
+ config:
22
+ threshold: 20
23
+ method-lines:
24
+ enabled: true
25
+ config:
26
+ threshold: 25
27
+ nested-control-flow:
28
+ enabled: true
29
+ config:
30
+ threshold: 4
31
+ return-statements:
32
+ enabled: true
33
+ config:
34
+ threshold: 4
35
+ similar-code:
36
+ enabled: true
37
+ config:
38
+ threshold: #language-specific defaults. overrides affect all languages.
39
+ identical-code:
40
+ enabled: true
41
+ config:
42
+ threshold: #language-specific defaults. overrides affect all languages.
43
+ plugins:
44
+ rubocop:
45
+ enabled: true
46
+ channel: rubocop-0-59
47
+ markdownlint:
48
+ enabled: true
49
+ brakeman:
50
+ enabled: true
51
+ config:
52
+ app_path: spec/dummy
53
+ exclude_patterns:
54
+ - "config/"
55
+ - "db/"
56
+ - "dist/"
57
+ - "features/"
58
+ - "**/node_modules/"
59
+ - "script/"
60
+ - "**/spec/"
61
+ - "**/test/"
62
+ - "**/tests/"
63
+ - "**/vendor/"
64
+ - "**/*.d.ts"
65
+ - "gemfiles/"
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ LICENSE.txt
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .idea/
2
+ rdoc/*
3
+ coverage/*
4
+ spec/dummy/log/*
5
+ spec/dummy/tmp/*
6
+ .bundle
7
+ Gemfile.lock
8
+ vendor/
data/.rubocop.yml ADDED
@@ -0,0 +1,73 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Include:
4
+ - '**/Rakefile'
5
+ - '**/config.ru'
6
+ - 'lib/tasks/**/*'
7
+ Exclude:
8
+ - Gemfile*
9
+ - README
10
+ - 'db/**/*'
11
+ - 'config/**/*'
12
+ - 'bin/**/*'
13
+ - 'vendor/bundle/**/*'
14
+ - 'spec/support/**/*' # rspec support helpers have a strange api
15
+
16
+ Rails:
17
+ Enabled: true
18
+
19
+ # We don't care about method length, since we check method cyclomatic
20
+ # complexity.
21
+ Metrics/MethodLength:
22
+ Enabled: false
23
+
24
+ Metrics/LineLength:
25
+ Enabled: false
26
+
27
+ Naming/FileName:
28
+ Exclude: ["oh_my_log.gemspec"]
29
+
30
+ Style/ClassAndModuleChildren:
31
+ EnforcedStyle: compact
32
+ SupportedStyles:
33
+ - nested
34
+ - compact
35
+
36
+ Layout/TrailingBlankLines:
37
+ Description: 'Checks trailing blank lines and final newline.'
38
+ StyleGuide: '#newline-eof'
39
+ Enabled: false
40
+ EnforcedStyle: final_newline
41
+ SupportedStyles:
42
+ - final_newline
43
+ - final_blank_line
44
+
45
+ Style/HashSyntax:
46
+ EnforcedStyle: ruby19
47
+
48
+ Style/SymbolArray:
49
+ EnforcedStyle: brackets
50
+
51
+ # Trailing commas make for clearer diffs because the last line won't appear
52
+ # to have been changed, as it would if it lacked a comma and had one added.
53
+ Style/TrailingCommaInArrayLiteral:
54
+ EnforcedStyleForMultiline: comma
55
+ Style/TrailingCommaInHashLiteral:
56
+ EnforcedStyleForMultiline: comma
57
+ Style/TrailingCommaInArguments:
58
+ EnforcedStyleForMultiline: comma
59
+
60
+ # Cop supports --auto-correct.
61
+ # Configuration parameters: PreferredDelimiters.
62
+ Style/PercentLiteralDelimiters:
63
+ PreferredDelimiters:
64
+ # Using `[]` for string arrays instead of `()`, since normal arrays are
65
+ # indicated with `[]` not `()`.
66
+ '%w': '[]'
67
+ '%W': '[]'
68
+
69
+ Style/AndOr:
70
+ # Whether `and` and `or` are banned only in conditionals (conditionals)
71
+ # or completely (always).
72
+ # They read better, more like normal English.
73
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3
data/.travis.yml ADDED
@@ -0,0 +1,31 @@
1
+ language: ruby
2
+ before_install: gem install bundler -v '1.17.3'
3
+ install: bundle _1.17.3_ install --jobs=3 --retry=3
4
+ script: bundle exec rspec
5
+ rvm:
6
+ - 2.3.0
7
+ - 2.4.0
8
+ - 2.5.0
9
+ - 2.6.0
10
+ - ruby-head
11
+ matrix:
12
+ exclude:
13
+ # Skip these combinations because they have incompatible dependencies
14
+ # and will always fail.
15
+ - rvm: 2.6.0
16
+ gemfile: gemfiles/rails_4.2_stable.gemfile
17
+ - rvm: ruby-head
18
+ gemfile: gemfiles/rails_4.2_stable.gemfile
19
+ # - rvm: 2.3
20
+ # gemfile: gemfiles/rails_6.0_beta.gemfile
21
+ # - rvm: 2.4
22
+ # gemfile: gemfiles/rails_6.0_beta.gemfile
23
+ allow_failures:
24
+ # - gemfile: gemfiles/rails_6.0_beta.gemfile
25
+ # - rvm: ruby-head
26
+ gemfile:
27
+ - gemfiles/rails_4.2_stable.gemfile
28
+ - gemfiles/rails_5.0_stable.gemfile
29
+ - gemfiles/rails_5.1_stable.gemfile
30
+ - gemfiles/rails_5.2_stable.gemfile
31
+ # - gemfiles/rails_6.0_beta.gemfile
data/Appraisals ADDED
@@ -0,0 +1,25 @@
1
+ appraise 'rails-4.2-stable' do
2
+ gem 'rails', '~> 4.2.0'
3
+ gem 'rails-observers'
4
+ end
5
+
6
+ appraise 'rails-5.0-stable' do
7
+ gem 'rails', '~> 5.0.0'
8
+ gem 'rails-observers'
9
+ end
10
+
11
+ appraise 'rails-5.1-stable' do
12
+ gem 'rails', '~> 5.1.0'
13
+ gem 'rails-observers'
14
+ end
15
+
16
+
17
+ appraise 'rails-5.2-stable' do
18
+ gem 'rails', '~> 5.2.0'
19
+ gem 'rails-observers'
20
+ end
21
+
22
+ # appraise 'rails-6.0-beta' do
23
+ # gem 'rails', '~> 6.0.0.beta1'
24
+ # gem 'rails-observers'
25
+ # end
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2019 Fabrizio Spadaro
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,180 @@
1
+ # OhMyLog
2
+
3
+ [![Build Status](https://travis-ci.com/fabriziospadaro/oh_my_log.svg?branch=master)](https://travis-ci.com/fabriziospadaro/oh_my_log)[![Coverage Status](https://coveralls.io/repos/github/fabriziospadaro/oh_my_log/badge.svg?branch=master)](https://coveralls.io/github/fabriziospadaro/oh_my_log?branch=master)[![Maintainability](https://api.codeclimate.com/v1/badges/adf9807d95dab0112f0c/maintainability)](https://codeclimate.com/github/fabriziospadaro/oh_my_log/maintainability)
4
+
5
+ ![N|Solid](https://i.ibb.co/WgCY6WX/oh-my-log-logo-256x270.png)
6
+
7
+ ##### Oh my log is a powerful auditing system gem that tracks each changes on a model without being intrusive at all
8
+ ___
9
+ ### Dependecy
10
+ * Rails
11
+ * ActiveRecord or MongoId
12
+ ### How to use:
13
+ * 1- Include this gem in your gemfile:
14
+
15
+ ```sh
16
+ gem 'oh_my_log', git: "https://bitbucket.org/thefoolsrl/oh_my_log"
17
+ ```
18
+
19
+ * 2- Generate the initializer with the following rake task:
20
+
21
+ ```sh
22
+ bundle exec rake oh_my_log:generate_initializer
23
+ ```
24
+
25
+ This rake task will generate a simple initializer that you can later change:
26
+
27
+ ```sh
28
+ OhMyLog::Log.configure do |config|
29
+ OhMyLog::Log.configure do |config|
30
+ config.print_log = true
31
+ selector = OhMyLog::Log::Selector.universal_for(actions: {"EXCEPT" =>["index"]})
32
+ #selector.set_status_codes("ONLY" =>[(0..200)])
33
+ config.add_selector(selector)
34
+ #put your configs here
35
+ end
36
+ end
37
+ ```
38
+
39
+ * 3- Generate Observers using the following rake task:
40
+
41
+ ```sh
42
+ bundle exec rake oh_my_log:generate_observers
43
+ ```
44
+
45
+ ---
46
+ #### Configuration Class
47
+
48
+ ###### Instance variables:
49
+
50
+ >models Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of models' name)
51
+
52
+ >print_log bool (print the results on the console)
53
+
54
+ >record_history bool (keep track of all the activity recorded by OML)
55
+
56
+ >log_instance File (instance of the file where you want to store the recorded activities)
57
+
58
+ >log_path string (path of the file where you want to store the recorded activities)
59
+
60
+ >selectors Selector[] (instance list of all the selectors)
61
+
62
+ ###### Instance methods:
63
+
64
+ >add_selector(selector ->Selector) (use this to add a new selector inside the configuration,
65
+ you need to pass an instance of the Selector class)
66
+
67
+ ----
68
+
69
+ #### Selector Class
70
+
71
+ When using multiple selectors remember that if any of the conditions among all selectors fails the logger will not register
72
+
73
+ ###### Instance variables:
74
+
75
+ >[read only] controllers Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of Controller Names)
76
+
77
+ >[read only] actions Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of actions)
78
+
79
+ >[read only] ips Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of ips)
80
+
81
+ >[read only] status_codes Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of status codes)
82
+
83
+ ###### Instance methods:
84
+
85
+ >set_controllers (controller ->Hash{string =>string[]})
86
+
87
+ >set_actions (actions ->Hash{string =>string[]})
88
+
89
+ >set_ips (ips ->Hash{string =>string[]})
90
+
91
+ >set_status_codes (status_codes ->Hash{string =>Range[]})
92
+
93
+ ###### Class methods:
94
+
95
+ >universal_for(action: {"ALL" =>[]}, controllers: {"ALL" =>[]}) (inside the hash only or
96
+ except you can put an array of actions)
97
+
98
+ Complex initializer example:
99
+
100
+ ```sh
101
+ OhMyLog::Log.configure do |config|
102
+ config.print_log = true
103
+ selector = OhMyLog::Log::Selector.new
104
+ selector.set_controllers("EXCEPT" =>["ApplicationController"])
105
+ selector.set_actions("ONLY" =>["index","create","destroy"])
106
+ selector.set_status_codes("ONLY" =>[(0..200)])
107
+ selector.set_ips("EXCEPT"=>["192.168.0.1"])
108
+ config.add_selector(selector)
109
+ #put your configs here
110
+ end
111
+ ```
112
+
113
+ ---
114
+
115
+ #### OhMyLog::Log Module
116
+
117
+ ###### Module variables:
118
+
119
+ >targets Model[] (list of all models affected by the current action)
120
+
121
+ >configuration Configuration (configuration for the Log)
122
+
123
+ >history Result[] (history of all the results occurred during a session)
124
+
125
+ >last_recorded Result (result produced by the last loggable action)
126
+
127
+ ###### Module methods:
128
+
129
+ >configure(&block) (use configure method to pass a configuration block)
130
+
131
+ >clear (clear the history)
132
+
133
+ >flush (get rid of all the cached data(targets) stored in the Log)
134
+
135
+ #### OhMyLog::Log::Result Class
136
+
137
+ ###### Instance variables:
138
+
139
+ >effects Effect[] (list of effects that an action has caused)
140
+
141
+ >request Request (request done by the user)
142
+
143
+ >flush (get rid of all the cached data(targets) stored in the Log)
144
+
145
+ ---
146
+
147
+ #### OhMyLog::Log::Request Class
148
+
149
+ ###### Instance variables:
150
+
151
+ >sender string(who did the action, if you are logged with devise it will be the email of the logged user, else it will be the ip wich the request came from)
152
+
153
+ >date Time (when did the action occured in UTC)
154
+
155
+ >params string (headers of the rails request)
156
+
157
+ >method string (method of the request: GET/HEAD/POST/PATCH/PUT/DELETE)
158
+
159
+ >status int (status code of the request)
160
+
161
+ ---
162
+
163
+ #### OhMyLog::Log::Effect Class
164
+
165
+ ###### Instance variables:
166
+
167
+ >receiver Model (instance of the model that got affected by the action)
168
+
169
+ >changes string (changes that this model had before and after the action)
170
+
171
+ ---
172
+
173
+ ### Development
174
+
175
+ Developed by Fabrizio Spadaro
176
+
177
+ ### License:
178
+ MIT
179
+
180
+ **Free Software, Hell Yeah!**
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
4
+ require 'rubygems'
5
+ require 'bundler'
6
+ require 'rake/testtask'
7
+ require 'rdoc/task'
8
+ require 'oh_my_log/version'
9
+
10
+ desc 'Default: generate Oh My Log doc'
11
+ task default: :doc
12
+
13
+ Rake::RDocTask.new(:doc) do |rdoc|
14
+ version = OhMyLog::VERSION
15
+
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = "oh_my_log_#{version}"
18
+ rdoc.rdoc_files.include('README*')
19
+ rdoc.rdoc_files.include('lib/**/*.rb')
20
+ end
@@ -0,0 +1,8 @@
1
+ OhMyLog::Log.configure do |config|
2
+ config.print_log = true
3
+ selector = OhMyLog::Log::Selector.universal_for(actions: {"EXCEPT" => ["index"]})
4
+ #selector.set_status_codes("ONLY" => [(0..200)])
5
+ config.add_selector(selector)
6
+ OhMyLog.start if File.directory?(Rails.root + "app/models/observers/oh_my_log")
7
+ #put your configs here
8
+ end
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.0"
6
+ gem "rails-observers"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,181 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ oh_my_log (1.0.0)
5
+ json
6
+ rails (>= 4.2.0, < 7.0)
7
+ rails-observers (~> 0.1.5)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ actionmailer (4.2.11)
13
+ actionpack (= 4.2.11)
14
+ actionview (= 4.2.11)
15
+ activejob (= 4.2.11)
16
+ mail (~> 2.5, >= 2.5.4)
17
+ rails-dom-testing (~> 1.0, >= 1.0.5)
18
+ actionpack (4.2.11)
19
+ actionview (= 4.2.11)
20
+ activesupport (= 4.2.11)
21
+ rack (~> 1.6)
22
+ rack-test (~> 0.6.2)
23
+ rails-dom-testing (~> 1.0, >= 1.0.5)
24
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
25
+ actionview (4.2.11)
26
+ activesupport (= 4.2.11)
27
+ builder (~> 3.1)
28
+ erubis (~> 2.7.0)
29
+ rails-dom-testing (~> 1.0, >= 1.0.5)
30
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
31
+ activejob (4.2.11)
32
+ activesupport (= 4.2.11)
33
+ globalid (>= 0.3.0)
34
+ activemodel (4.2.11)
35
+ activesupport (= 4.2.11)
36
+ builder (~> 3.1)
37
+ activerecord (4.2.11)
38
+ activemodel (= 4.2.11)
39
+ activesupport (= 4.2.11)
40
+ arel (~> 6.0)
41
+ activesupport (4.2.11)
42
+ i18n (~> 0.7)
43
+ minitest (~> 5.1)
44
+ thread_safe (~> 0.3, >= 0.3.4)
45
+ tzinfo (~> 1.1)
46
+ appraisal (2.2.0)
47
+ bundler
48
+ rake
49
+ thor (>= 0.14.0)
50
+ arel (6.0.4)
51
+ ast (2.4.0)
52
+ builder (3.2.3)
53
+ concurrent-ruby (1.1.4)
54
+ coveralls (0.8.22)
55
+ json (>= 1.8, < 3)
56
+ simplecov (~> 0.16.1)
57
+ term-ansicolor (~> 1.3)
58
+ thor (~> 0.19.4)
59
+ tins (~> 1.6)
60
+ crass (1.0.4)
61
+ diff-lcs (1.3)
62
+ docile (1.3.1)
63
+ erubis (2.7.0)
64
+ globalid (0.4.2)
65
+ activesupport (>= 4.2.0)
66
+ i18n (0.9.5)
67
+ concurrent-ruby (~> 1.0)
68
+ jaro_winkler (1.5.2)
69
+ json (2.2.0)
70
+ loofah (2.2.3)
71
+ crass (~> 1.0.2)
72
+ nokogiri (>= 1.5.9)
73
+ mail (2.7.1)
74
+ mini_mime (>= 0.1.1)
75
+ mini_mime (1.0.1)
76
+ mini_portile2 (2.4.0)
77
+ minitest (5.11.3)
78
+ nokogiri (1.10.1)
79
+ mini_portile2 (~> 2.4.0)
80
+ parallel (1.14.0)
81
+ parser (2.6.0.0)
82
+ ast (~> 2.4.0)
83
+ powerpack (0.1.2)
84
+ rack (1.6.11)
85
+ rack-test (0.6.3)
86
+ rack (>= 1.0)
87
+ rails (4.2.11)
88
+ actionmailer (= 4.2.11)
89
+ actionpack (= 4.2.11)
90
+ actionview (= 4.2.11)
91
+ activejob (= 4.2.11)
92
+ activemodel (= 4.2.11)
93
+ activerecord (= 4.2.11)
94
+ activesupport (= 4.2.11)
95
+ bundler (>= 1.3.0, < 2.0)
96
+ railties (= 4.2.11)
97
+ sprockets-rails
98
+ rails-deprecated_sanitizer (1.0.3)
99
+ activesupport (>= 4.2.0.alpha)
100
+ rails-dom-testing (1.0.9)
101
+ activesupport (>= 4.2.0, < 5.0)
102
+ nokogiri (~> 1.6)
103
+ rails-deprecated_sanitizer (>= 1.0.1)
104
+ rails-html-sanitizer (1.0.4)
105
+ loofah (~> 2.2, >= 2.2.2)
106
+ rails-observers (0.1.5)
107
+ activemodel (>= 4.0)
108
+ railties (4.2.11)
109
+ actionpack (= 4.2.11)
110
+ activesupport (= 4.2.11)
111
+ rake (>= 0.8.7)
112
+ thor (>= 0.18.1, < 2.0)
113
+ rainbow (3.0.0)
114
+ rake (12.3.2)
115
+ rspec-core (3.8.0)
116
+ rspec-support (~> 3.8.0)
117
+ rspec-expectations (3.8.2)
118
+ diff-lcs (>= 1.2.0, < 2.0)
119
+ rspec-support (~> 3.8.0)
120
+ rspec-mocks (3.8.0)
121
+ diff-lcs (>= 1.2.0, < 2.0)
122
+ rspec-support (~> 3.8.0)
123
+ rspec-rails (3.8.2)
124
+ actionpack (>= 3.0)
125
+ activesupport (>= 3.0)
126
+ railties (>= 3.0)
127
+ rspec-core (~> 3.8.0)
128
+ rspec-expectations (~> 3.8.0)
129
+ rspec-mocks (~> 3.8.0)
130
+ rspec-support (~> 3.8.0)
131
+ rspec-support (3.8.0)
132
+ rubocop (0.59.2)
133
+ jaro_winkler (~> 1.5.1)
134
+ parallel (~> 1.10)
135
+ parser (>= 2.5, != 2.5.1.1)
136
+ powerpack (~> 0.1)
137
+ rainbow (>= 2.2.2, < 4.0)
138
+ ruby-progressbar (~> 1.7)
139
+ unicode-display_width (~> 1.0, >= 1.0.1)
140
+ ruby-progressbar (1.10.0)
141
+ simplecov (0.16.1)
142
+ docile (~> 1.1)
143
+ json (>= 1.8, < 3)
144
+ simplecov-html (~> 0.10.0)
145
+ simplecov-html (0.10.2)
146
+ sprockets (3.7.2)
147
+ concurrent-ruby (~> 1.0)
148
+ rack (> 1, < 3)
149
+ sprockets-rails (3.2.1)
150
+ actionpack (>= 4.0)
151
+ activesupport (>= 4.0)
152
+ sprockets (>= 3.0.0)
153
+ sqlite3 (1.3.10)
154
+ term-ansicolor (1.7.1)
155
+ tins (~> 1.0)
156
+ thor (0.19.4)
157
+ thread_safe (0.3.6)
158
+ tins (1.20.2)
159
+ tzinfo (1.2.5)
160
+ thread_safe (~> 0.1)
161
+ unicode-display_width (1.5.0)
162
+ wwtd (1.3.0)
163
+
164
+ PLATFORMS
165
+ ruby
166
+
167
+ DEPENDENCIES
168
+ appraisal
169
+ bundler
170
+ coveralls
171
+ oh_my_log!
172
+ rails (~> 4.2.0)
173
+ rails-observers
174
+ rspec-core
175
+ rspec-rails
176
+ rubocop (~> 0.59.2)
177
+ sqlite3 (= 1.3.10)
178
+ wwtd
179
+
180
+ BUNDLED WITH
181
+ 1.17.1
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 5.0.0"
6
+ gem "rails-observers"
7
+
8
+ gemspec path: "../"