From d850884ea2de3d1fa044a1678e71f78b259bcd79 Mon Sep 17 00:00:00 2001
From: drhenner <%= notice %> <%= notice %>
+ Issues (<%= @validation_issue.issue_count %>):
+ Validation Issues
+
+
+
\ No newline at end of file
diff --git a/app/views/validation_admin/validation_issues/show.html.erb b/app/views/validation_admin/validation_issues/show.html.erb
new file mode 100644
index 0000000..c1d9ba3
--- /dev/null
+++ b/app/views/validation_admin/validation_issues/show.html.erb
@@ -0,0 +1,22 @@
+
+
+
+<% @validation_issues.each do |validation_issue| %>
+ Type
+ Form Name
+ Count
+
+
+
+
+<% end %>
+<%= validation_issue.issue_type %>
+ <%= validation_issue.form_name %>
+ <%= validation_issue.issue_count %>
+ <%= link_to 'Show', validation_admin_validation_issue_path(validation_issue) %>
+ <%= link_to 'Reset!',
+ validation_admin_validation_issue_path(validation_issue),
+ method: :delete, data: { confirm: 'Are you sure?' } %>
+ <%= @validation_issue.issue_type %>: <%= @validation_issue.form_name %>
+
+
+ <% @validation_issue.issue_hash.each do |k, v| %>
+
+
+
+ Notes: + <%= @validation_issue.notes %> +
+<% end %> + +<%= link_to 'Back', validation_admin_validation_issues_path, :class => 'button small-dark-orange-button' %> diff --git a/config/routes.rb b/config/routes.rb index 1daf9a4..686dff9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,2 +1,5 @@ Rails.application.routes.draw do + namespace :validation_admin do + resources :validation_issues + end end diff --git a/db/migrate/20120722204204_create_validation_issues.rb b/db/migrate/20120722204204_create_validation_issues.rb new file mode 100644 index 0000000..46ca4aa --- /dev/null +++ b/db/migrate/20120722204204_create_validation_issues.rb @@ -0,0 +1,16 @@ +class CreateValidationIssues < ActiveRecord::Migration + def change + create_table :validation_issues do |t| + t.string :issue_type + t.string :form_name, :null => false + t.text :issue_hash, :null => false + t.text :notes, :default => '' + t.integer :issue_count + + t.timestamps + end + add_index :validation_issues, :form_name# , :length => 10 + add_index :validation_issues, :issue_type + add_index :validation_issues, [:form_name, :issue_type], :unique => true + end +end diff --git a/lib/generators/valid_issues/templates/migration.rb b/lib/generators/valid_issues/templates/migration.rb new file mode 100644 index 0000000..04185b3 --- /dev/null +++ b/lib/generators/valid_issues/templates/migration.rb @@ -0,0 +1,22 @@ +class CreateValidationIssues < ActiveRecord::Migration + def self.up + create_table :validation_issues do |t| + + t.string :issue_type, :null => false + t.string :form_name, :null => false + t.text :issue_hash, :null => false + #t.text :issued_by_ids + t.text :notes + t.integer :issue_count + + t.timestamps + end + add_index :validation_issues, :form_name + add_index :validation_issues, :issue_type + + end + + def self.down + drop_table :versions + end +end \ No newline at end of file diff --git a/lib/generators/valid_issues/valid_issues_generator.rb b/lib/generators/valid_issues/valid_issues_generator.rb new file mode 100644 index 0000000..97f0cbe --- /dev/null +++ b/lib/generators/valid_issues/valid_issues_generator.rb @@ -0,0 +1,23 @@ +# CURRENT FILE :: lib/generators/valid_issues/valid_issues_generator.rb +# Requires +require 'rails/generators' +require 'rails/generators/migration' + +class ValidIssuesGenerator < Rails::Generators::Base + include Rails::Generators::Migration + def self.source_root + @source_root ||= File.join(File.dirname(__FILE__), 'templates') + end + + def self.next_migration_number(dirname) + if ActiveRecord::Base.timestamped_migrations + Time.new.utc.strftime("%Y%m%d%H%M%S") + else + "%.3d" % (current_migration_number(dirname) + 1) + end + end + + def create_migration_file + migration_template 'migration.rb', 'db/migrate/create_validation_issues_table.rb' + end +end \ No newline at end of file diff --git a/lib/validation_issues.rb b/lib/validation_issues.rb index 699f84a..1a4be33 100644 --- a/lib/validation_issues.rb +++ b/lib/validation_issues.rb @@ -1,4 +1,7 @@ require "validation_issues/engine" +require "validation_issues/core_ext" +require 'validation_issues/acts_as_validation_issues' + module ValidationIssues end diff --git a/lib/validation_issues/acts_as_validation_issues.rb b/lib/validation_issues/acts_as_validation_issues.rb new file mode 100644 index 0000000..d1770e6 --- /dev/null +++ b/lib/validation_issues/acts_as_validation_issues.rb @@ -0,0 +1,37 @@ +module ValidationIssues + module ActsAsValidationIssues + extend ActiveSupport::Concern + + included do + end + + module ClassMethods + def acts_as_validation_issues(options = {}) + # your code will go here + end + end + + # Instance Methods + def log_validation_issue!(form_name, options = {}) + if self.errors + vi = ValidationIssue.find_by_form_name_and_issue_type(form_name, self.class.to_s) + vi ||= ValidationIssue.new(:form_name => form_name, :issue_type => self.class.to_s) + + self.errors.map {|k,v| k }.uniq.each do |error_field| + vi.issue_hash[error_field] ||= 0 + vi.issue_hash[error_field] = vi.issue_hash[error_field] + 1 + end + + vi.notes ||= '' + if options[:notes] + vi.notes = vi.notes + ' \n ' + options[:notes] + end + vi.issue_count ||= 0 + vi.save + vi.increment_issue_count! + end + end + end +end + +ActiveRecord::Base.send :include, ValidationIssues::ActsAsValidationIssues diff --git a/lib/validation_issues/core_ext.rb b/lib/validation_issues/core_ext.rb new file mode 100644 index 0000000..e69de29 diff --git a/test/acts_as_validation_issues_test.rb b/test/acts_as_validation_issues_test.rb new file mode 100644 index 0000000..3d9b5e3 --- /dev/null +++ b/test/acts_as_validation_issues_test.rb @@ -0,0 +1,21 @@ +require 'test_helper' + +class ActsAsValidationIssuesTest < Test::Unit::TestCase + + def test_log_validation_issue_should_create_a_log + vi_count_object = ValidationIssue.where(:form_name => 'user_form').last + vi_count = vi_count_object.try(:issue_count) || 0 + user = User.new(:first_name => '', :last_name => 'Good Last Name') + user.save + user.log_validation_issue!('user_form') + vi = ValidationIssue.where(:form_name => 'user_form').last + assert_equal "User", vi.issue_type + # assert_equal { "first_name" => 1 } , vi.issue_hash + assert_equal (vi_count + 1), vi.issue_count + end + + #def test_log_file_should_increment_a_log + # assert_equal "last_tweet", ValidationIssue.log_validation_issue! + #end + +end \ No newline at end of file diff --git a/test/dummy/app/models/user.rb b/test/dummy/app/models/user.rb new file mode 100644 index 0000000..882c9e0 --- /dev/null +++ b/test/dummy/app/models/user.rb @@ -0,0 +1,10 @@ +class User < ActiveRecord::Base + attr_accessible :first_name, :last_name, :nick_name + acts_as_validation_issues + + validates :first_name, :presence => true + validates :last_name, :presence => true + validates :nick_name, :presence => false, + :format => { :with => /w+/ }, + :allow_blank => true +end diff --git a/test/dummy/db/migrate/20120722183345_create_users.rb b/test/dummy/db/migrate/20120722183345_create_users.rb new file mode 100644 index 0000000..edb6f0b --- /dev/null +++ b/test/dummy/db/migrate/20120722183345_create_users.rb @@ -0,0 +1,11 @@ +class CreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + t.string :first_name + t.string :last_name + t.string :nick_name + + t.timestamps + end + end +end diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb new file mode 100644 index 0000000..1f2e4a9 --- /dev/null +++ b/test/dummy/db/schema.rb @@ -0,0 +1,38 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20120722204204) do + + create_table "users", :force => true do |t| + t.string "first_name" + t.string "last_name" + t.string "nick_name" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "validation_issues", :force => true do |t| + t.string "issue_type" + t.string "form_name", :null => false + t.text "issue_hash", :null => false + t.text "notes", :default => "" + t.integer "issue_count" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "validation_issues", ["form_name", "issue_type"], :name => "index_validation_issues_on_form_name_and_issue_type", :unique => true + add_index "validation_issues", ["form_name"], :name => "index_validation_issues_on_form_name" + add_index "validation_issues", ["issue_type"], :name => "index_validation_issues_on_issue_type" + +end diff --git a/test/dummy/test/fixtures/users.yml b/test/dummy/test/fixtures/users.yml new file mode 100644 index 0000000..509a19e --- /dev/null +++ b/test/dummy/test/fixtures/users.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + first_name: MyString + last_name: MyString + nick_name: MyString + +two: + first_name: MyString + last_name: MyString + nick_name: MyString diff --git a/test/dummy/test/unit/user_test.rb b/test/dummy/test/unit/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/test/dummy/test/unit/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/factories/validation_issues.rb b/test/factories/validation_issues.rb new file mode 100644 index 0000000..ff24345 --- /dev/null +++ b/test/factories/validation_issues.rb @@ -0,0 +1,9 @@ +FactoryGirl.define do + factory :validation_issue do + issue_type "User" + form_name "user_form" + issue_hash { ":first_name=>8, :nick_name=>8" } + notes "" + issue_count 7 + end +end \ No newline at end of file diff --git a/test/functional/validation_issues_controller_test.rb b/test/functional/validation_issues_controller_test.rb new file mode 100644 index 0000000..cdc01d2 --- /dev/null +++ b/test/functional/validation_issues_controller_test.rb @@ -0,0 +1,42 @@ +require 'test_helper' + +class ValidationAdmin::ValidationIssuesControllerTest < ActionController::TestCase + + setup do + validation_issue = FactoryGirl.build(:validation_issue) #validation_issues(:one) + vi = ValidationIssue.find_by_form_name_and_issue_type(validation_issue.form_name, 'User') + if vi + @validation_issue = vi + else + validation_issue.save + @validation_issue = validation_issue + end + @controller.stubs(:has_validation_issues_admin_privileges).returns(true) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:validation_issues) + end + + test "should show validation_issue" do + get :show, id: @validation_issue + assert_response :success + end + + test "should destroy validation_issue" do + @validation_issue.issue_hash = {:first_name => 3} + @validation_issue.save + #assert_difference('ValidationIssue.count', -1) do + delete :destroy, id: @validation_issue + #end + @validation_issue.reload + assert_equal @validation_issue.issue_count, 0 + # puts @validation_issue.issue_hash.size + @validation_issue.issue_hash.each do |key, num| + assert_equal 0, num + end + assert_redirected_to validation_admin_validation_issues_path + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index dcd3b27..7869519 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,8 +3,15 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__) require "rails/test_help" +require 'factory_girl' +require 'mocha' Rails.backtrace_cleaner.remove_silencers! # Load support files Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } + +FactoryGirl.find_definitions +#class ActiveSupport::TestCase +# fixtures :all +#end \ No newline at end of file diff --git a/test/unit/helpers/validation_issues_helper_test.rb b/test/unit/helpers/validation_issues_helper_test.rb new file mode 100644 index 0000000..414b347 --- /dev/null +++ b/test/unit/helpers/validation_issues_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class ValidationIssuesHelperTest < ActionView::TestCase +end diff --git a/test/unit/validation_issue_test.rb b/test/unit/validation_issue_test.rb new file mode 100644 index 0000000..dd70d1f --- /dev/null +++ b/test/unit/validation_issue_test.rb @@ -0,0 +1,23 @@ +require 'test_helper' + +class ValidationIssueTest < ActiveSupport::TestCase + test ".clear_data!" do + # assert true + validation_issue = FactoryGirl.build(:validation_issue, :form_name => 'my_super_form', + :issue_count => 5, + :issue_hash => {'name' => 2, + 'password' => 3}) + vi = ValidationIssue.find_by_form_name_and_issue_type(validation_issue.form_name, 'User') + if vi + validation_issue = vi + else + validation_issue.save + end + validation_issue.clear_data! + assert_equal validation_issue.issue_count, 0 + # puts @validation_issue.issue_hash.size + validation_issue.issue_hash.each do |key, num| + assert_equal 0, num + end + end +end diff --git a/validation_issues.gemspec b/validation_issues.gemspec index 8632fe6..b2ad936 100644 --- a/validation_issues.gemspec +++ b/validation_issues.gemspec @@ -7,16 +7,16 @@ require "validation_issues/version" Gem::Specification.new do |s| s.name = "validation_issues" s.version = ValidationIssues::VERSION - s.authors = ["TODO: Your name"] - s.email = ["TODO: Your email"] - s.homepage = "TODO" - s.summary = "TODO: Summary of ValidationIssues." - s.description = "TODO: Description of ValidationIssues." + s.authors = ["David Henner"] + s.email = ["drhenner@gmail.com"] + s.homepage = "http://www.ror-e.com" + s.summary = "To ensure Validations that continue to have issues are addressed by developers." + s.description = "To ensure Validations that continue to have issues are addressed by developers. This is done by logging the failure. When a specific failure continues to be an issue, a developer can look into the problem." - s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"] - s.test_files = Dir["test/**/*"] + s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"] + s.test_files = Dir["test/**/*"] - s.add_dependency "rails", "~> 3.2.1" + s.add_dependency "rails", "~> 3.2.6" # s.add_dependency "jquery-rails" s.add_development_dependency "sqlite3"