redacted 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +31 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +72 -0
  6. data/Rakefile +34 -0
  7. data/app/assets/stylesheets/redacted.css +2 -0
  8. data/lib/redacted.rb +10 -0
  9. data/lib/redacted/action_view/helpers.rb +45 -0
  10. data/lib/redacted/engine.rb +4 -0
  11. data/lib/redacted/railtie.rb +9 -0
  12. data/lib/redacted/version.rb +3 -0
  13. data/redacted.gemspec +28 -0
  14. data/test/dummy/Rakefile +6 -0
  15. data/test/dummy/app/assets/images/.keep +0 -0
  16. data/test/dummy/app/assets/javascripts/application.js +13 -0
  17. data/test/dummy/app/assets/stylesheets/application.css +16 -0
  18. data/test/dummy/app/controllers/application_controller.rb +5 -0
  19. data/test/dummy/app/controllers/concerns/.keep +0 -0
  20. data/test/dummy/app/controllers/welcome_controller.rb +4 -0
  21. data/test/dummy/app/helpers/application_helper.rb +2 -0
  22. data/test/dummy/app/mailers/.keep +0 -0
  23. data/test/dummy/app/models/.keep +0 -0
  24. data/test/dummy/app/models/concerns/.keep +0 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/app/views/welcome/index.html.erb +42 -0
  27. data/test/dummy/bin/bundle +3 -0
  28. data/test/dummy/bin/rails +4 -0
  29. data/test/dummy/bin/rake +4 -0
  30. data/test/dummy/config.ru +4 -0
  31. data/test/dummy/config/application.rb +25 -0
  32. data/test/dummy/config/boot.rb +5 -0
  33. data/test/dummy/config/environment.rb +5 -0
  34. data/test/dummy/config/environments/development.rb +37 -0
  35. data/test/dummy/config/environments/production.rb +78 -0
  36. data/test/dummy/config/environments/test.rb +38 -0
  37. data/test/dummy/config/initializers/assets.rb +8 -0
  38. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  40. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  41. data/test/dummy/config/initializers/inflections.rb +16 -0
  42. data/test/dummy/config/initializers/mime_types.rb +4 -0
  43. data/test/dummy/config/initializers/session_store.rb +3 -0
  44. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  45. data/test/dummy/config/locales/en.yml +23 -0
  46. data/test/dummy/config/routes.rb +3 -0
  47. data/test/dummy/config/secrets.yml +22 -0
  48. data/test/dummy/lib/assets/.keep +0 -0
  49. data/test/dummy/log/.keep +0 -0
  50. data/test/dummy/public/404.html +67 -0
  51. data/test/dummy/public/422.html +67 -0
  52. data/test/dummy/public/500.html +66 -0
  53. data/test/dummy/public/favicon.ico +0 -0
  54. data/test/dummy/test/controllers/welcome_controller_test.rb +9 -0
  55. data/test/redacted_helper_test.rb +63 -0
  56. data/test/redacted_test.rb +29 -0
  57. data/test/test_helper.rb +8 -0
  58. metadata +235 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 696543c83a20c2ec7c2e3e1be6062f94b220c5e6
4
+ data.tar.gz: e6a6d8bfd03718e43f5aae7b492ddf583a392a3d
5
+ SHA512:
6
+ metadata.gz: c90ebfe53f7445723c715c0871e7f6fd681ae41db835eae3ab773478945173a8e9c0ce54d1447bad0ec3227d764ec5f9cbb72b7130cb135a4c24ba231031fe4c
7
+ data.tar.gz: 25720cd8c67d238dff781e163da67c690b7af1b411f10c2f103e30c3056252e1532c79be7047c569ad22b465842e2622d8e9c886bb7a14fe4e3819a226072d3b
@@ -0,0 +1,31 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .DS_Store
7
+ .ruby-version
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
20
+ *.bundle
21
+ *.so
22
+ *.o
23
+ *.a
24
+ mkmf.log
25
+ log/*.log
26
+ pkg/
27
+ test/dummy/db/*.sqlite3
28
+ test/dummy/db/*.sqlite3-journal
29
+ test/dummy/log/*.log
30
+ test/dummy/tmp/
31
+ test/dummy/.sass-cache
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redacted.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'pry', platforms: :ruby
8
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Kurt Funai
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,72 @@
1
+ # Redacted
2
+
3
+ The goal of Redacted is to take a block of text, turn it into Lorem ipsum of the same size, and then apply styles with CSS to make the text appear redacted! Just like top secret documents.
4
+
5
+ Basically it takes a string like `My maple syrup was stolen by a moose!` and turns it into a blacked-out block of text that is roughly the same size.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'redacted'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ In your application.css, include the css file:
18
+ ```
19
+ /*
20
+ *= require redacted
21
+ */
22
+ ```
23
+ ## Usage
24
+
25
+ Redacted will convert both plaintext and HTML into redacted text.
26
+
27
+ After installing the gem, you will have access to a couple new methods in your Rails Views.
28
+
29
+ **Plain text (inline):**
30
+ ```ruby
31
+ <%= redact('All of the maple syrup was stolen by aliens.')=>
32
+ #=> Iusto eos eligendi non iure rerum quia accus
33
+
34
+ All of the maple syrup was stolen by <%= redact('aliens')=>.
35
+ #=> All of the maple syrup was stolen by ducimu
36
+ ```
37
+ The plain text method can create inline redacted text, or write out paragraphs to maintain the size/shape of paragraphs.
38
+
39
+ **Plain text (paragraphs):**
40
+ ```ruby
41
+ <%= redact('Roses are red.\nViolets are blue.\n\nAll our base\r\n are belong to you.')=>
42
+ #=> <p>Roses are red.</p><p>Violets are blue.</p><p>All our base</p><p>are belong to you.</p>
43
+ ```
44
+ The `#redact` method will try to guess if the text should be inline or not, but you can also explictly call `redact_text` or `redact_paragraphs` if you want specific functionality.
45
+
46
+ **HTML**
47
+ ```ruby
48
+ redact_html('<p>A mind needs books as a sword needs a whetstone<br>if it is to keep its edge.</p><div>- George R.R. Martin, A Game of Thrones</div>')
49
+ #=> <p>adipisci labore quae perferendis impedit autem <br>odit impedit dolorem rerum</p><div>et quibusdam qui quis accusantium ullam</div>
50
+ ```
51
+ Redacted parses the HTML string and replaces the text with lorem ipsum while maintaining the original HTML structure.
52
+
53
+ ## How it works
54
+ Redacted takes text like `Winter is coming.` and replaces it with lorem ipsum of the same string length.
55
+
56
+ It then returns the redacted text surrounded by `<span></span>` tags that have the class `.redacted-text`.
57
+ ```ruby
58
+ redact('Winter is coming.')
59
+ ```
60
+ Becomes:
61
+ ```html
62
+ <span class="redacted-text">quis saepe enimat</span>
63
+ ```
64
+ Some basic CSS styles are included with the gem, but you can overwrite the look of the text by adding your own styles if you prefer.
65
+
66
+ ## Contributing
67
+
68
+ 1. Fork it ( https://github.com/[my-github-username]/redacted/fork )
69
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
70
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
71
+ 4. Push to the branch (`git push origin my-new-feature`)
72
+ 5. Create a new Pull Request
@@ -0,0 +1,34 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rdoc/task'
10
+
11
+ RDoc::Task.new(:rdoc) do |rdoc|
12
+ rdoc.rdoc_dir = 'rdoc'
13
+ rdoc.title = 'Redacted'
14
+ rdoc.options << '--line-numbers'
15
+ rdoc.rdoc_files.include('README.rdoc')
16
+ rdoc.rdoc_files.include('lib/**/*.rb')
17
+ end
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
22
+ require 'rake/testtask'
23
+
24
+ Rake::TestTask.new(:test) do |t|
25
+ t.libs << 'lib'
26
+ t.libs << 'test'
27
+ t.pattern = 'test/**/*_test.rb'
28
+ t.verbose = false
29
+ end
30
+
31
+
32
+ task default: :test
33
+
34
+
@@ -0,0 +1,2 @@
1
+ .redacted-text {background: #000;color:#000;}
2
+ .redacted-text::selection {background: #000;color:#000;}
@@ -0,0 +1,10 @@
1
+ require 'redacted/version'
2
+ require 'redacted/action_view/helpers.rb'
3
+ require 'redacted/engine.rb' if defined?(Rails)
4
+ require 'redacted/railtie.rb' if defined?(Rails)
5
+ require 'faker'
6
+ require 'nokogiri'
7
+
8
+ module Redacted
9
+ end
10
+
@@ -0,0 +1,45 @@
1
+ module Redacted
2
+ module ActionView
3
+ module Helpers
4
+ def ascii_redact str
5
+ length = str.length
6
+ "\u2588" * length unless length.zero?
7
+ end
8
+
9
+ def redact str
10
+ if str.include?("\n")
11
+ redact_paragraphs(str).join('').html_safe
12
+ else
13
+ redact_text(str).html_safe
14
+ end
15
+ end
16
+
17
+ def redact_paragraphs str
18
+ str.lines.map do |l|
19
+ "<p>#{redact_text(l.chomp)}</p>" if l.chomp.present?
20
+ end.reject{|l|l.nil?}
21
+ end
22
+
23
+ def redact_text str
24
+ return '' unless str
25
+ "<span class=\"redacted-text\">#{generate_fake_text(str)}</span>"
26
+ end
27
+
28
+ def redact_html html_str
29
+ doc = Nokogiri::HTML::DocumentFragment.parse(html_str)
30
+ doc.traverse do |ele|
31
+ ele.replace(redact_text(ele.content.chomp)) if ele.text?
32
+ end
33
+ doc.to_html
34
+ end
35
+
36
+ private
37
+ def generate_fake_text str
38
+ word_count = str.split.size
39
+ fake_text = Faker::Lorem.words(word_count).join(' ')
40
+ fake_text << Faker::Lorem.characters(str.length - fake_text.length) if str.length > fake_text.length
41
+ fake_text.slice(0, str.length)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ module Redacted
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ module Redacted
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "redacted.configure_view_controller" do |app|
4
+ ActiveSupport.on_load :action_view do
5
+ include Redacted::ActionView::Helpers
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Redacted
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'redacted/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "redacted"
8
+ spec.version = Redacted::VERSION
9
+ spec.authors = ["Kurt Funai"]
10
+ spec.email = ["me@kurtfunai.com"]
11
+ spec.summary = "Convert strings into redacted text."
12
+ spec.description = "Allows a user to turn any string of text into a redacted block of the same size."
13
+ spec.homepage = "http://kurtfunai.com"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "faker", "~> 1.4"
22
+ spec.add_dependency "nokogiri", "~> 1.6.3"
23
+ spec.add_dependency "railties", ">= 3.2", "< 5.0"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.6"
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "rails", "~> 4.1"
28
+ end
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
File without changes
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,16 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ *= require redacted
16
+ */
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery with: :exception
5
+ end
@@ -0,0 +1,4 @@
1
+ class WelcomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,42 @@
1
+ <h1>Welcome#index</h1>
2
+ <p>Don't mind me... just redacting some stuff.</p>
3
+
4
+ <h3>Example:</h3>
5
+ <p>All of the maple syrup was stolen by aliens.</p>
6
+ <p><%= redact('All of the maple syrup was stolen by aliens.') %></p>
7
+
8
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore, molestias maiores sit doloribus officiis quibusdam quod perspiciatis minus cupiditate necessitatibus vitae architecto atque error eaque repellat et quae aliquam tenetur!
9
+ <p><%= redact('Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore, molestias maiores sit doloribus officiis quibusdam quod perspiciatis minus cupiditate necessitatibus vitae architecto atque error eaque repellat et quae aliquam tenetur!') %></p>
10
+
11
+ <p>All of the maple syrup was stolen by <%= redact('aliens.') %></p>
12
+
13
+ <br><br><br><br>
14
+ <%
15
+ @new_lines =
16
+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. In, provident, cupiditate iusto magni eius tenetur voluptates quisquam nobis modi alias quia vitae necessitatibus et adipisci sunt placeat reprehenderit non molestiae.
17
+
18
+ Quas, possimus unde a cumque quasi. Saepe aliquam ex nobis autem recusandae minus libero! Facere incidunt optio repellat aperiam autem quam non dolore recusandae. Perspiciatis corporis beatae maxime illum quis.
19
+
20
+ Non aliquid architecto optio provident sequi placeat cupiditate similique voluptate eveniet nesciunt? Nisi, sint, veniam, delectus, obcaecati rem nobis veritatis explicabo saepe velit et impedit quae possimus qui quidem repellendus.'
21
+ %>
22
+ <%= @new_lines.html_safe %>
23
+ <br>
24
+ <%= redact(@new_lines).html_safe %>
25
+
26
+ <br><br><br><br>
27
+ <%
28
+ @p_tags = '<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo, tempora, qui temporibus ut a sapiente natus voluptate incidunt soluta velit ullam recusandae veniam nulla. A laboriosam reprehenderit esse quas voluptates!</p>
29
+ <p>Esse, similique, deleniti neque fuga ea perferendis praesentium vitae nam repudiandae atque labore nostrum autem omnis iusto in dolore blanditiis doloremque quae ut maxime placeat quo sit. Earum, enim, pariatur!</p>'
30
+ %>
31
+ <%= @p_tags.html_safe %>
32
+ <br>
33
+ <%= redact_html(@p_tags).html_safe %>
34
+
35
+
36
+ <br><br><br><br>
37
+ <%
38
+ @br = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo, tempora, qui temporibus ut a sapiente natus voluptate incidunt soluta velit ullam recusandae veniam nulla. A laboriosam reprehenderit esse quas voluptates!<br>Esse, similique, deleniti neque fuga ea perferendis praesentium vitae nam repudiandae atque labore nostrum autem omnis iusto in dolore blanditiis doloremque quae ut maxime placeat quo sit. Earum, enim, pariatur!'
39
+ %>
40
+ <%= @br.html_safe %>
41
+ <br>
42
+ <%= redact_html(@br).html_safe %>
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+ load Gem.bin_path('bundler', 'bundle')
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails.application