– # Copyright © 2010-2012 Michael Berkovich # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # “Software”), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++
namespace :dev do
# <ActiveRecord::ConnectionAdapters::SQLiteColumn:0x007fdffc77bee0 # @coder=nil, # @default=nil, # @limit=nil, # @name=“id”, # @null=false, # @precision=nil, # @primary=true, # @scale=nil, # @sql_type=“INTEGER”, # @type=:integer>
# <struct ActiveRecord::ConnectionAdapters::IndexDefinition # table=“will_filter_filters”, # name=“index_will_filter_filters_on_user_id”, # unique=false, # columns=, # lengths=nil>
desc "Annotates tr8n models" task :annotate => :environment do Dir[File.expand_path("#{File.dirname(__FILE__)}/../../app/models/platform/*.rb")].sort.each do |file| class_name = file[file.rindex('platform')..-1].gsub('.rb', '').camelcase klass = class_name.constantize lines = [] lines << "#--" lines << "# Copyright (c) 2010-2012 Michael Berkovich" lines << "#" lines << "# Permission is hereby granted, free of charge, to any person obtaining" lines << "# a copy of this software and associated documentation files (the" lines << "# \"Software\"), to deal in the Software without restriction, including" lines << "# without limitation the rights to use, copy, modify, merge, publish," lines << "# distribute, sublicense, and/or sell copies of the Software, and to" lines << "# permit persons to whom the Software is furnished to do so, subject to" lines << "# the following conditions:" lines << "#" lines << "# The above copyright notice and this permission notice shall be" lines << "# included in all copies or substantial portions of the Software." lines << "#" lines << "# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND," lines << "# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF" lines << "# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND" lines << "# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE" lines << "# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION" lines << "# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION" lines << "# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." lines << "#++" lines << "#" lines << "#-- #{class_name} Schema Information" lines << "#" lines << "# Table name: #{klass.table_name}" lines << "#" name_width = 0 type_width = 0 sql_type_width = 0 klass.columns.each do |column| name_width = [column.name.to_s.length, name_width].max type_width = [column.type.to_s.length, type_width].max sql_type_width = [column.sql_type.to_s.length, sql_type_width].max end klass.columns.each do |column| line = ["# "] line << column.name line << (" " * (name_width - column.name.length + 4)) # line << column.type.to_s # line << (" " * (type_width - column.type.to_s.length + 4)) line << column.sql_type line << (" " * (sql_type_width - column.sql_type.to_s.length + 4)) meta = [] meta << "not null" if !column.null meta << "primary key" if column.primary meta << "default = #{column.default.to_s}" if column.default line << meta.join(', ') lines << line.join('') end lines << "#" lines << "# Indexes" lines << "#" indexes = ActiveRecord::Base.connection.indexes(klass.table_name) name_width = 0 indexes.each do |index| name_width = [index.name.to_s.length, name_width].max end indexes.each do |index| line = ["# "] line << index.name line << (" " * (name_width - index.name.length + 4)) line << "(#{index.columns.join(', ')})" line << " " line << "UNIQUE" if index.unique lines << line.join('') end lines << "#" lines << "#++" pp "Updating #{file}..." model_file = File.open(file, "r+") old_lines = model_file.readlines model_file.close model_file = File.new(file, "w") lines.each do |line| model_file.write(line + "\r\n") end in_class = false old_lines.each do |line| in_class = true unless line.index("#") == 0 next unless in_class model_file.write(line) end model_file.close end end
end