From 1f0c476f951d06c3d06d1cec9ab1e358044ff2a2 Mon Sep 17 00:00:00 2001 From: Mark Yoon Date: Mon, 9 May 2011 11:48:48 -0500 Subject: [PATCH] add api ids --- README.md | 9 ++++++++- Rakefile | 1 + lib/generators/surveyor/install_generator.rb | 2 +- .../surveyor/templates/db/migrate/add_api_ids.rb | 13 +++++++++++++ lib/surveyor/models/answer_methods.rb | 1 + lib/surveyor/models/question_methods.rb | 1 + lib/surveyor/models/survey_methods.rb | 1 + lib/surveyor/unparser.rb | 6 +++--- spec/models/answer_spec.rb | 4 ++++ spec/models/question_spec.rb | 4 ++++ spec/models/survey_spec.rb | 4 ++++ testbed/Gemfile | 3 ++- 12 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 lib/generators/surveyor/templates/db/migrate/add_api_ids.rb diff --git a/README.md b/README.md index 58407e16..baa418d8 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,14 @@ and read surveys/EXTENDING\_SURVEYOR # Requirements -Surveyor depends on Ruby (1.8.7 - 1.9.1), Rails 3 and HAML/SASS http://haml.hamptoncatlin.com/. It also depends on fastercsv for csv exports. +Surveyor depends on: + +* Ruby (1.8.7 - 1.9.1) +* Rails 2.3 +* HAML/SASS +* formtastic +* fastercsv for csv exports +* UUID # Contributing, testing diff --git a/Rakefile b/Rakefile index 9bba8d74..a4bcaca7 100644 --- a/Rakefile +++ b/Rakefile @@ -12,6 +12,7 @@ begin gem.add_dependency 'haml' gem.add_dependency 'fastercsv' gem.add_dependency 'formtastic' + gem.add_dependency 'uuid' gem.add_development_dependency "yard", ">= 0" # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings end diff --git a/lib/generators/surveyor/install_generator.rb b/lib/generators/surveyor/install_generator.rb index a8d20cc1..e606b6f1 100644 --- a/lib/generators/surveyor/install_generator.rb +++ b/lib/generators/surveyor/install_generator.rb @@ -12,7 +12,7 @@ def migrations unless options[:skip_migrations] # because all migration timestamps end up the same, causing a collision when running rake db:migrate # copied functionality from RAILS_GEM_PATH/lib/rails_generator/commands.rb - %w(create_surveys create_survey_sections create_questions create_question_groups create_answers create_response_sets create_responses create_dependencies create_dependency_conditions create_validations create_validation_conditions add_display_order_to_surveys add_correct_answer_id_to_questions add_index_to_response_sets add_index_to_surveys add_unique_indicies add_section_id_to_responses add_default_value_to_answers).each_with_index do |model, i| + %w(create_surveys create_survey_sections create_questions create_question_groups create_answers create_response_sets create_responses create_dependencies create_dependency_conditions create_validations create_validation_conditions add_display_order_to_surveys add_correct_answer_id_to_questions add_index_to_response_sets add_index_to_surveys add_unique_indicies add_section_id_to_responses add_default_value_to_answers add_api_ids).each_with_index do |model, i| unless (prev_migrations = Dir.glob("db/migrate/[0-9]*_*.rb").grep(/[0-9]+_#{model}.rb$/)).empty? prev_migration_timestamp = prev_migrations[0].match(/([0-9]+)_#{model}.rb$/)[1] end diff --git a/lib/generators/surveyor/templates/db/migrate/add_api_ids.rb b/lib/generators/surveyor/templates/db/migrate/add_api_ids.rb new file mode 100644 index 00000000..e63712bc --- /dev/null +++ b/lib/generators/surveyor/templates/db/migrate/add_api_ids.rb @@ -0,0 +1,13 @@ +class AddApiIds < ActiveRecord::Migration + def self.up + add_column :surveys, :api_id, :string + add_column :questions, :api_id, :string + add_column :answers, :api_id, :string + end + + def self.down + remove_column :surveys, :api_id + remove_column :questions, :api_id + remove_column :answers, :api_id + end +end diff --git a/lib/surveyor/models/answer_methods.rb b/lib/surveyor/models/answer_methods.rb index 12ac94b4..81fe6104 100644 --- a/lib/surveyor/models/answer_methods.rb +++ b/lib/surveyor/models/answer_methods.rb @@ -33,6 +33,7 @@ def default_args self.response_class ||= "answer" self.short_text ||= text self.data_export_identifier ||= Surveyor::Common.normalize(text) + self.api_id ||= UUID.generate end def css_class diff --git a/lib/surveyor/models/question_methods.rb b/lib/surveyor/models/question_methods.rb index d962759c..99dfc979 100644 --- a/lib/surveyor/models/question_methods.rb +++ b/lib/surveyor/models/question_methods.rb @@ -37,6 +37,7 @@ def default_args self.display_order ||= self.survey_section ? self.survey_section.questions.count : 0 self.data_export_identifier ||= Surveyor::Common.normalize(text) self.short_text ||= text + self.api_id ||= UUID.generate end def pick=(val) diff --git a/lib/surveyor/models/survey_methods.rb b/lib/surveyor/models/survey_methods.rb index f0cea8c6..1ef5da83 100644 --- a/lib/surveyor/models/survey_methods.rb +++ b/lib/surveyor/models/survey_methods.rb @@ -36,6 +36,7 @@ def initialize(*args) def default_args self.inactive_at ||= DateTime.now + self.api_id ||= UUID.generate end def title=(value) diff --git a/lib/surveyor/unparser.rb b/lib/surveyor/unparser.rb index 732b8169..46af23a4 100644 --- a/lib/surveyor/unparser.rb +++ b/lib/surveyor/unparser.rb @@ -14,7 +14,7 @@ class Survey < ActiveRecord::Base # block def unparse(dsl) - attrs = (self.attributes.diff Survey.new(:title => title).attributes).delete_if{|k,v| %w(created_at updated_at inactive_at id title access_code).include? k}.symbolize_keys! + attrs = (self.attributes.diff Survey.new(:title => title).attributes).delete_if{|k,v| %w(created_at updated_at inactive_at id title access_code api_id).include? k}.symbolize_keys! dsl << "survey \"#{title}\"" dsl << (attrs.blank? ? " do\n" : ", #{attrs.inspect.gsub(/\{|\}/, "")} do\n") sections.each{|section| section.unparse(dsl)} @@ -62,7 +62,7 @@ class Question < ActiveRecord::Base # nonblock def unparse(dsl) - attrs = (self.attributes.diff Question.new(:text => text).attributes).delete_if{|k,v| %w(created_at updated_at reference_identifier id survey_section_id question_group_id).include?(k) or (k == "display_type" && v == "label")}.symbolize_keys! + attrs = (self.attributes.diff Question.new(:text => text).attributes).delete_if{|k,v| %w(created_at updated_at reference_identifier id survey_section_id question_group_id api_id).include?(k) or (k == "display_type" && v == "label")}.symbolize_keys! dsl << (solo? ? "\n" : " ") if display_type == "label" dsl << " label" @@ -105,7 +105,7 @@ class Answer < ActiveRecord::Base # nonblock def unparse(dsl) - attrs = (self.attributes.diff Answer.new(:text => text).attributes).delete_if{|k,v| %w(created_at updated_at reference_identifier response_class id question_id).include? k}.symbolize_keys! + attrs = (self.attributes.diff Answer.new(:text => text).attributes).delete_if{|k,v| %w(created_at updated_at reference_identifier response_class id question_id api_id).include? k}.symbolize_keys! attrs.delete(:is_exclusive) if text == "Omit" && is_exclusive == true attrs.merge!({:is_exclusive => false}) if text == "Omit" && is_exclusive == false dsl << " " if question.part_of_group? diff --git a/spec/models/answer_spec.rb b/spec/models/answer_spec.rb index 289e0cca..d51a2615 100644 --- a/spec/models/answer_spec.rb +++ b/spec/models/answer_spec.rb @@ -37,4 +37,8 @@ @answer.destroy Validation.find_by_id(v_id).should be_nil end + + it "should have an api_id" do + @answer.api_id.length.should == 36 + end end \ No newline at end of file diff --git a/spec/models/question_spec.rb b/spec/models/question_spec.rb index ef5ba413..8ed69fce 100644 --- a/spec/models/question_spec.rb +++ b/spec/models/question_spec.rb @@ -38,6 +38,10 @@ @question.split_text(:pre).should == "before" @question.split_text(:post).should == "after|extra" end + + it "should have an api_id" do + @question.api_id.length.should == 36 + end end describe Question, "that has answers" do diff --git a/spec/models/survey_spec.rb b/spec/models/survey_spec.rb index bb4ebf82..a4cf38c6 100644 --- a/spec/models/survey_spec.rb +++ b/spec/models/survey_spec.rb @@ -21,6 +21,10 @@ bandwagoneer.save.should be_true bandwagoneer.title.should == "Foo 2" end + + it "should have an api_id" do + @survey.api_id.length.should == 36 + end end # Associations diff --git a/testbed/Gemfile b/testbed/Gemfile index e9f2ebee..ec8056c4 100644 --- a/testbed/Gemfile +++ b/testbed/Gemfile @@ -39,4 +39,5 @@ end gem 'formtastic' gem 'surveyor', :path => ".." gem 'haml' -gem 'fastercsv' \ No newline at end of file +gem 'fastercsv' +gem 'uuid' \ No newline at end of file