From dfb92b89a53aa67da10cfc3d18f1e1cc5c976bbb Mon Sep 17 00:00:00 2001 From: Connor Turland Date: Wed, 24 Oct 2012 02:47:08 -0400 Subject: [PATCH] added ability to add synapse from any page on which there is a map --- README.rdoc | 261 ------------------ .../Jit/ForceDirected/metamapFD.js | 17 +- app/assets/javascripts/application.js | 17 +- app/assets/stylesheets/application.css | 4 +- app/controllers/synapses_controller.rb | 5 +- app/models/map.rb | 2 + app/models/synapse.rb | 9 + app/views/items/_new.html.erb | 4 +- app/views/items/create.js.erb | 52 ++-- app/views/items/edit.html.erb | 2 +- app/views/items/new.html.erb | 4 +- app/views/items/show.html.erb | 3 +- app/views/layouts/application.html.erb | 2 +- app/views/main/home.html.erb | 2 + app/views/main/usersynapses.html.erb | 1 + app/views/synapses/_new.html.erb | 18 ++ app/views/synapses/create.js.erb | 82 ++++++ app/views/synapses/edit.html.erb | 4 +- app/views/synapses/new.html.erb | 10 +- db/migrate/20121023231434_create_maps.rb | 8 + test/fixtures/maps.yml | 11 + test/unit/map_test.rb | 7 + 22 files changed, 213 insertions(+), 312 deletions(-) create mode 100644 app/models/map.rb create mode 100644 app/views/synapses/_new.html.erb create mode 100644 app/views/synapses/create.js.erb create mode 100644 db/migrate/20121023231434_create_maps.rb create mode 100644 test/fixtures/maps.yml create mode 100644 test/unit/map_test.rb diff --git a/README.rdoc b/README.rdoc index 7c36f235..e69de29b 100644 --- a/README.rdoc +++ b/README.rdoc @@ -1,261 +0,0 @@ -== Welcome to Rails - -Rails is a web-application framework that includes everything needed to create -database-backed web applications according to the Model-View-Control pattern. - -This pattern splits the view (also called the presentation) into "dumb" -templates that are primarily responsible for inserting pre-built data in between -HTML tags. The model contains the "smart" domain objects (such as Account, -Product, Person, Post) that holds all the business logic and knows how to -persist themselves to a database. The controller handles the incoming requests -(such as Save New Account, Update Product, Show Post) by manipulating the model -and directing data to the view. - -In Rails, the model is handled by what's called an object-relational mapping -layer entitled Active Record. This layer allows you to present the data from -database rows as objects and embellish these data objects with business logic -methods. You can read more about Active Record in -link:files/vendor/rails/activerecord/README.html. - -The controller and view are handled by the Action Pack, which handles both -layers by its two parts: Action View and Action Controller. These two layers -are bundled in a single package due to their heavy interdependence. This is -unlike the relationship between the Active Record and Action Pack that is much -more separate. Each of these packages can be used independently outside of -Rails. You can read more about Action Pack in -link:files/vendor/rails/actionpack/README.html. - - -== Getting Started - -1. At the command prompt, create a new Rails application: - rails new myapp (where myapp is the application name) - -2. Change directory to myapp and start the web server: - cd myapp; rails server (run with --help for options) - -3. Go to http://localhost:3000/ and you'll see: - "Welcome aboard: You're riding Ruby on Rails!" - -4. Follow the guidelines to start developing your application. You can find -the following resources handy: - -* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html -* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ - - -== Debugging Rails - -Sometimes your application goes wrong. Fortunately there are a lot of tools that -will help you debug it and get it back on the rails. - -First area to check is the application log files. Have "tail -f" commands -running on the server.log and development.log. Rails will automatically display -debugging and runtime information to these files. Debugging info will also be -shown in the browser on requests from 127.0.0.1. - -You can also log your own messages directly into the log file from your code -using the Ruby logger class from inside your controllers. Example: - - class WeblogController < ActionController::Base - def destroy - @weblog = Weblog.find(params[:id]) - @weblog.destroy - logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") - end - end - -The result will be a message in your log file along the lines of: - - Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! - -More information on how to use the logger is at http://www.ruby-doc.org/core/ - -Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are -several books available online as well: - -* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) -* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) - -These two books will bring you up to speed on the Ruby language and also on -programming in general. - - -== Debugger - -Debugger support is available through the debugger command when you start your -Mongrel or WEBrick server with --debugger. This means that you can break out of -execution at any point in the code, investigate and change the model, and then, -resume execution! You need to install ruby-debug to run the server in debugging -mode. With gems, use sudo gem install ruby-debug. Example: - - class WeblogController < ActionController::Base - def index - @posts = Post.all - debugger - end - end - -So the controller will accept the action, run the first line, then present you -with a IRB prompt in the server window. Here you can do things like: - - >> @posts.inspect - => "[#nil, "body"=>nil, "id"=>"1"}>, - #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" - >> @posts.first.title = "hello from a debugger" - => "hello from a debugger" - -...and even better, you can examine how your runtime objects actually work: - - >> f = @posts.first - => #nil, "body"=>nil, "id"=>"1"}> - >> f. - Display all 152 possibilities? (y or n) - -Finally, when you're ready to resume execution, you can enter "cont". - - -== Console - -The console is a Ruby shell, which allows you to interact with your -application's domain model. Here you'll have all parts of the application -configured, just like it is when the application is running. You can inspect -domain models, change values, and save to the database. Starting the script -without arguments will launch it in the development environment. - -To start the console, run rails console from the application -directory. - -Options: - -* Passing the -s, --sandbox argument will rollback any modifications - made to the database. -* Passing an environment name as an argument will load the corresponding - environment. Example: rails console production. - -To reload your controllers and models after launching the console run -reload! - -More information about irb can be found at: -link:http://www.rubycentral.org/pickaxe/irb.html - - -== dbconsole - -You can go to the command line of your database directly through rails -dbconsole. You would be connected to the database with the credentials -defined in database.yml. Starting the script without arguments will connect you -to the development database. Passing an argument will connect you to a different -database, like rails dbconsole production. Currently works for MySQL, -PostgreSQL and SQLite 3. - -== Description of Contents - -The default directory structure of a generated Ruby on Rails application: - - |-- app - | |-- assets - | |-- images - | |-- javascripts - | `-- stylesheets - | |-- controllers - | |-- helpers - | |-- mailers - | |-- models - | `-- views - | `-- layouts - |-- config - | |-- environments - | |-- initializers - | `-- locales - |-- db - |-- doc - |-- lib - | `-- tasks - |-- log - |-- public - |-- script - |-- test - | |-- fixtures - | |-- functional - | |-- integration - | |-- performance - | `-- unit - |-- tmp - | |-- cache - | |-- pids - | |-- sessions - | `-- sockets - `-- vendor - |-- assets - `-- stylesheets - `-- plugins - -app - Holds all the code that's specific to this particular application. - -app/assets - Contains subdirectories for images, stylesheets, and JavaScript files. - -app/controllers - Holds controllers that should be named like weblogs_controller.rb for - automated URL mapping. All controllers should descend from - ApplicationController which itself descends from ActionController::Base. - -app/models - Holds models that should be named like post.rb. Models descend from - ActiveRecord::Base by default. - -app/views - Holds the template files for the view that should be named like - weblogs/index.html.erb for the WeblogsController#index action. All views use - eRuby syntax by default. - -app/views/layouts - Holds the template files for layouts to be used with views. This models the - common header/footer method of wrapping views. In your views, define a layout - using the layout :default and create a file named default.html.erb. - Inside default.html.erb, call <% yield %> to render the view using this - layout. - -app/helpers - Holds view helpers that should be named like weblogs_helper.rb. These are - generated for you automatically when using generators for controllers. - Helpers can be used to wrap functionality for your views into methods. - -config - Configuration files for the Rails environment, the routing map, the database, - and other dependencies. - -db - Contains the database schema in schema.rb. db/migrate contains all the - sequence of Migrations for your schema. - -doc - This directory is where your application documentation will be stored when - generated using rake doc:app - -lib - Application specific libraries. Basically, any kind of custom code that - doesn't belong under controllers, models, or helpers. This directory is in - the load path. - -public - The directory available for the web server. Also contains the dispatchers and the - default HTML files. This should be set as the DOCUMENT_ROOT of your web - server. - -script - Helper scripts for automation and generation. - -test - Unit and functional tests along with fixtures. When using the rails generate - command, template test files will be generated for you and placed in this - directory. - -vendor - External libraries that the application depends on. Also includes the plugins - subdirectory. If the app has frozen rails, those gems also go here, under - vendor/rails/. This directory is in the load path. diff --git a/app/assets/javascripts/Jit/ForceDirected/metamapFD.js b/app/assets/javascripts/Jit/ForceDirected/metamapFD.js index 1e2fe192..fbcac2d6 100644 --- a/app/assets/javascripts/Jit/ForceDirected/metamapFD.js +++ b/app/assets/javascripts/Jit/ForceDirected/metamapFD.js @@ -94,6 +94,7 @@ function initFD(){ Edge: { overridable: true, color: '#d1d1d1', + //type: 'arrow', lineWidth: 0.4 }, //Native canvas text styling @@ -265,18 +266,14 @@ function initFD(){ // load JSON data. fd.loadJSON(json); // compute positions incrementally and animate. - fd.computeIncremental({ - iter: 40, - property: 'end', - onStep: function(perc){ - }, - onComplete: function(){ - fd.animate({ + fd.compute() + + $(document).ready(function() { + fd.animate({ modes: ['linear'], transition: $jit.Trans.Elastic.easeOut, duration: 2500 - }); - } - }); + }); + }); // end } diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index cbe5cc13..48d26acf 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -22,14 +22,27 @@ $(document).ready(function() { $('.nodemargin').css('padding-top',$('.focus').css('height')); + + // if there's an add topic directly to page form loaded on the page you're on then let the user add one $('#newtopic').click(function(event){ - obj = document.getElementById('new_item'); - if (obj != null) { + obj1 = document.getElementById('new_item'); + if (obj1 != null) { + $('#new_synapse').css('display','none'); $('#new_item').fadeIn('fast'); event.preventDefault(); } }); + // if there's an add synapse directly to page form loaded on the page you're on then let the user add one + $('#newsynapse').click(function(event){ + obj2 = document.getElementById('new_synapse'); + if (obj2 != null) { + $('#new_item').css('display','none'); + $('#new_synapse').fadeIn('fast'); + event.preventDefault(); + } + }); + var sliding = false; $(".legend").hover( function () { diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 61644c7b..bf7058fb 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -32,8 +32,8 @@ a {color:#2d6a5d; text-decoration:none;} .new_session, .new_user, .new_item, .new_synapse, .edit_item, .edit_synapse { display: block; width: 350px; margin: 0 auto; background: #D1D1D1; padding: 20px; border-radius: 15px; color: #000; border:2px solid #000; } -.anypage .new_item { display: none; position:absolute; left:50%; top:50%; margin:-175px 0 0 -195px; border:2px solid #000; } -#closenewtopic { position:absolute; top: 3px; right:3px; } +.anypage .new_item, .anypage .new_synapse { display: none; position:absolute; left:50%; top:0; margin:200px 0 0 -195px; border:2px solid #000; } +#closenewtopic, #closenewsynapse { position:absolute; top: 3px; right:3px; } label, select, input, textarea { display:block; } diff --git a/app/controllers/synapses_controller.rb b/app/controllers/synapses_controller.rb index bc1c1526..82dfe7da 100644 --- a/app/controllers/synapses_controller.rb +++ b/app/controllers/synapses_controller.rb @@ -16,9 +16,8 @@ class SynapsesController < ApplicationController def new @synapse = Synapse.new @user = current_user - @allitems = Item.all - respond_with(@synapse, @allitems) + respond_with(@synapse) end # GET /synapse/:id @@ -26,7 +25,7 @@ class SynapsesController < ApplicationController @synapse = Synapse.find(params[:id]) if @synapse - @synapsejson = @synapse.self_as_json.html_safe + @synapsejson = @synapse.selfplusnodes_as_json.html_safe end respond_to do |format| diff --git a/app/models/map.rb b/app/models/map.rb new file mode 100644 index 00000000..e7d4ce28 --- /dev/null +++ b/app/models/map.rb @@ -0,0 +1,2 @@ +class Map < ActiveRecord::Base +end diff --git a/app/models/synapse.rb b/app/models/synapse.rb index 718c05ec..7ceebb5a 100644 --- a/app/models/synapse.rb +++ b/app/models/synapse.rb @@ -6,6 +6,15 @@ belongs_to :item1, :class_name => "Item", :foreign_key => "node1_id" belongs_to :item2, :class_name => "Item", :foreign_key => "node2_id" def self_as_json + Jbuilder.encode do |json| + @synapsedata = Hash.new + @synapsedata['$desc'] = self.desc + @synapsedata['$category'] = self.category + json.data @synapsedata + end + end + + def selfplusnodes_as_json Jbuilder.encode do |json| @items = Array.new @items.push(self.item1) diff --git a/app/views/items/_new.html.erb b/app/views/items/_new.html.erb index 76b4fd87..cb240dfd 100644 --- a/app/views/items/_new.html.erb +++ b/app/views/items/_new.html.erb @@ -1,9 +1,9 @@
<%= form_for Item.new, url: items_path, remote: true do |form| %> -

Add Item

+

Add Topic

- <%= select_tag "category", options_from_collection_for_select(ItemCategory.all, "id", "name") %> + <%= select_tag "category", options_from_collection_for_select(ItemCategory.order("name ASC").all, "id", "name") %> <%= form.text_field :name %> diff --git a/app/views/items/create.js.erb b/app/views/items/create.js.erb index 289b5e1a..b6e67a44 100644 --- a/app/views/items/create.js.erb +++ b/app/views/items/create.js.erb @@ -2,32 +2,44 @@ $('#new_item').fadeOut('fast'); $('#new_item')[0].reset() // if there's a map, add the node to that, if its in card view add card -obj = document.getElementById('container'); +map2 = document.getElementById('container'); - -if (obj != null) { +if (map2 != null) { var newnode = <%= @item.self_as_json.html_safe %>; + console.log(newnode); if (fd != null) { - fd.graph.addNode(newnode); - var temp = fd.graph.getNode('<%= @item.id %>'); - temp.setData('dim', 1, 'start'); - temp.setData('dim', 40, 'end'); - fd.fx.animate({ - modes: ['node-property:dim'], - duration: 400 - }); + fd.graph.addNode(newnode); + var temp = fd.graph.getNode('<%= @item.id %>'); + temp.setData('dim', 1, 'start'); + temp.setData('dim', 40, 'end'); + temp.setPos(new $jit.Complex(0, 0), 'current'); + temp.setPos(new $jit.Complex(0, 0), 'start'); + temp.setPos(new $jit.Complex(0, 0), 'end'); + fd.fx.plotNode(temp, fd.canvas); + fd.fx.animate({ + modes: ['node-property:dim'], + duration: 400 + }); } else if (rg != null) { - rg.graph.addNode(newnode); - var temp = rggraph.getNode('<%= @item.id %>'); - temp.setData('dim', 1, 'start'); - temp.setData('dim', 40, 'end'); - rg.fx.animate({ - modes: ['node-property:dim'], - duration: 400 - }); - } + rg.graph.addNode(newnode); + var temp = rg.graph.getNode('<%= @item.id %>'); + temp.setData('dim', 1, 'start'); + temp.setData('dim', 40, 'end'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'current'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'start'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'end'); + rg.fx.plotNode(temp, rg.canvas); + rg.fx.animate({ + modes: ['node-property:dim'], + duration: 400 + }); + } + // add the new node to the synapse select list + $("#node1_id").prepend(""); + $("#node2_id").prepend(""); + } else { $('#cards').prepend('<%= escape_javascript(render(@item)) %>'); diff --git a/app/views/items/edit.html.erb b/app/views/items/edit.html.erb index ee94d764..33c3af8f 100644 --- a/app/views/items/edit.html.erb +++ b/app/views/items/edit.html.erb @@ -1,7 +1,7 @@ <%= form_for @item, url: item_url do |form| %>

Edit Item

- <%= select "category", "item_category_id", ItemCategory.all.collect {|p| [ p.name, p.id ] }, { :selected => @item.item_category.id } %> + <%= select "category", "item_category_id", ItemCategory.order("name ASC").all.collect {|p| [ p.name, p.id ] }, { :selected => @item.item_category.id } %> <%= form.text_field :name %> diff --git a/app/views/items/new.html.erb b/app/views/items/new.html.erb index 416eecb9..9e8afb5e 100644 --- a/app/views/items/new.html.erb +++ b/app/views/items/new.html.erb @@ -1,8 +1,8 @@
<%= form_for @item || Item.new, url: items_path do |form| %> -

Add Item

+

Add Topic

- <%= select_tag "category", options_from_collection_for_select(ItemCategory.all, "id", "name") %> + <%= select_tag "category", options_from_collection_for_select(ItemCategory.order("name ASC").all, "id", "name") %> <%= form.text_field :name %> diff --git a/app/views/items/show.html.erb b/app/views/items/show.html.erb index a0ee179b..f3de9ac6 100644 --- a/app/views/items/show.html.erb +++ b/app/views/items/show.html.erb @@ -34,4 +34,5 @@ }); -<%= render :partial => 'items/new' %> \ No newline at end of file +<%= render :partial => 'items/new' %> +<%= render :partial => 'synapses/new' %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 4cfddfa0..1cd23c83 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -61,7 +61,7 @@
  • <%= link_to "My Synapses", usersynapses_path %>
  • <%= link_to "My Topics", userobjects_path %>
  • |
  • -
  • <%= link_to "Add Synapse", new_synapse_path %>
  • +
  • <%= link_to "Add Synapse", new_synapse_path, id: "newsynapse" %>
  • |
  • <%= link_to "Add Topic", new_item_path, id: "newtopic" %>
  • |
  • diff --git a/app/views/main/home.html.erb b/app/views/main/home.html.erb index 0ef470c0..12363628 100644 --- a/app/views/main/home.html.erb +++ b/app/views/main/home.html.erb @@ -19,3 +19,5 @@ <% end %> <%= render :partial => 'items/new' %> +<%= render :partial => 'synapses/new' %> + diff --git a/app/views/main/usersynapses.html.erb b/app/views/main/usersynapses.html.erb index bd1d8f38..9db07769 100644 --- a/app/views/main/usersynapses.html.erb +++ b/app/views/main/usersynapses.html.erb @@ -15,3 +15,4 @@ <%= render :partial => 'items/new' %> +<%= render :partial => 'synapses/new' %> diff --git a/app/views/synapses/_new.html.erb b/app/views/synapses/_new.html.erb new file mode 100644 index 00000000..535576cf --- /dev/null +++ b/app/views/synapses/_new.html.erb @@ -0,0 +1,18 @@ +
    + <%= form_for Synapse.new, url: synapses_url, remote: true do |form| %> + +

    Add Synapse Between Topics

    + <%= hidden_field_tag(:category, "Item") %> + <% if Item.all.count > 0 %> + + <%= select_tag :node1_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %> + <% end %> + + <%= form.text_field :desc, class: "description" %> + <% if Item.all.count > 0 %> + + <%= select_tag :node2_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %> + <% end %> + <%= form.submit "Add Synapse", class: "add" %> + <% end %> +
    \ No newline at end of file diff --git a/app/views/synapses/create.js.erb b/app/views/synapses/create.js.erb new file mode 100644 index 00000000..960d500f --- /dev/null +++ b/app/views/synapses/create.js.erb @@ -0,0 +1,82 @@ +$('#new_synapse').fadeOut('fast'); +$('#new_synapse')[0].reset(); + +// if there's a map, add the synapse to that +map1 = document.getElementById('container'); + +if (map1 != null) { + + var mymap, newnode, select1, select2, option, temp1, temp2, temp; + if (fd != null) { + mymap = fd; + } + else if (rg != null) { + mymap = rg; + } + + temp1 = mymap.graph.getNode(<%= @synapse.item1.id %>); + if (temp1 == null) { + newnode = <%= @synapse.item1.self_as_json.html_safe %>; + mymap.graph.addNode(newnode); + temp = mymap.graph.getNode('<%= @synapse.item1.id %>'); + temp.setData('dim', 1, 'start'); + temp.setData('dim', 40, 'end'); + if (mymap == fd) { + temp.setPos(new $jit.Complex(0, 0), 'current'); + temp.setPos(new $jit.Complex(0, 0), 'start'); + temp.setPos(new $jit.Complex(0, 0), 'end'); + } + else if (mymap == rg) { + temp.setPos(new $jit.Polar(5.54, 347.6), 'current'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'start'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'end'); + } + mymap.fx.plotNode(temp, mymap.canvas); + temp1 = mymap.graph.getNode(<%= @synapse.item1.id %>); + // add the new node to the synapse select list + $("#node1_id").prepend(""); + $("#node2_id").prepend(""); + } + temp2 = mymap.graph.getNode(<%= @synapse.item2.id %>); + if (temp2 == null) { + newnode = <%= @synapse.item2.self_as_json.html_safe %>; + mymap.graph.addNode(newnode); + temp = mymap.graph.getNode('<%= @synapse.item2.id %>'); + temp.setData('dim', 1, 'start'); + temp.setData('dim', 40, 'end'); + if (mymap == fd) { + temp.setPos(new $jit.Complex(0, 0), 'current'); + temp.setPos(new $jit.Complex(0, 0), 'start'); + temp.setPos(new $jit.Complex(0, 0), 'end'); + } + else if (mymap == rg) { + temp.setPos(new $jit.Polar(5.54, 347.6), 'current'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'start'); + temp.setPos(new $jit.Polar(5.54, 347.6), 'end'); + } + mymap.fx.plotNode(temp, mymap.canvas); + temp2 = mymap.graph.getNode(<%= @synapse.item2.id %>); + // add the new node to the synapse select list + $("#node1_id").prepend(""); + $("#node2_id").prepend(""); + } + mymap.graph.addAdjacence(temp1, temp2, {}); + temp = mymap.graph.getAdjacence(temp1.id, temp2.id); + temp.setDataset('start', { + lineWidth: 0.4, + color: '#d1d1d1' + }); + temp.setDataset('end', { + lineWidth: 3, + color: '#36acfb' + }); + temp.setDataset('current', { + desc: '<%= @synapse.desc %>', + category: '<%= @synapse.category %>' + }); + mymap.fx.plotLine(temp, mymap.canvas); + mymap.fx.animate({ + modes: ['node-property:dim','edge-property:lineWidth:color'], + duration: 400 + }); +} \ No newline at end of file diff --git a/app/views/synapses/edit.html.erb b/app/views/synapses/edit.html.erb index 18fe7912..c681a896 100644 --- a/app/views/synapses/edit.html.erb +++ b/app/views/synapses/edit.html.erb @@ -2,13 +2,13 @@

    Edit Synapse

    <% if @collection.count > 0 %> - <%= select "node1_id", "node1", @collection.map {|p| [ p.name, p.id ] }, { :selected => @synapse.node1_id } %> + <%= select "node1_id", "node1", @collection.order("name ASC").map {|p| [ p.name, p.id ] }, { :selected => @synapse.node1_id } %> <% end %> <%= form.text_field :desc, class: "description" %> <% if @collection.count > 0 %> - <%= select "node2_id", "node2", @collection.map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %> + <%= select "node2_id", "node2", @collection.order("name ASC").map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %> <% end %> <%= form.submit "Update", class: "update" %> <% end %> \ No newline at end of file diff --git a/app/views/synapses/new.html.erb b/app/views/synapses/new.html.erb index 84564d9d..d4e652c0 100644 --- a/app/views/synapses/new.html.erb +++ b/app/views/synapses/new.html.erb @@ -1,16 +1,16 @@
    <%= form_for @synapse, url: synapses_url do |form| %> -

    Add Synapse Between Items

    +

    Add Synapse Between Topics

    <%= hidden_field_tag(:category, "Item") %> - <% if @allitems.count > 0 %> + <% if Item.all.count > 0 %> - <%= select_tag :node1_id, options_from_collection_for_select(@allitems, "id", "name") %> + <%= select_tag :node1_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %> <% end %> <%= form.text_field :desc, class: "description" %> - <% if @allitems.count > 0 %> + <% if Item.all.count > 0 %> - <%= select_tag :node2_id, options_from_collection_for_select(@allitems, "id", "name") %> + <%= select_tag :node2_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %> <% end %> <%= form.submit "Add Synapse", class: "add" %> <% end %> diff --git a/db/migrate/20121023231434_create_maps.rb b/db/migrate/20121023231434_create_maps.rb new file mode 100644 index 00000000..628e032f --- /dev/null +++ b/db/migrate/20121023231434_create_maps.rb @@ -0,0 +1,8 @@ +class CreateMaps < ActiveRecord::Migration + def change + create_table :maps do |t| + + t.timestamps + end + end +end diff --git a/test/fixtures/maps.yml b/test/fixtures/maps.yml new file mode 100644 index 00000000..c63aac0b --- /dev/null +++ b/test/fixtures/maps.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/unit/map_test.rb b/test/unit/map_test.rb new file mode 100644 index 00000000..033cf0ff --- /dev/null +++ b/test/unit/map_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class MapTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end