<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: BikeToWork code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 12 Oct 2008 10:50:26 GMT</pubDate>
    <description>DZone Snippets: BikeToWork code</description>
    <item>
      <title>rake tasks to sync project hosted on freeonrails</title>
      <link>http://snippets.dzone.com/posts/show/2166</link>
      <description>// rake tasks to sync project hosted on freeonrails&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require File.dirname(__FILE__) + "/scp_wrapper"&lt;br /&gt;&lt;br /&gt;desc "pushes the app files onto freeonrails"&lt;br /&gt;task :update_freeonrails =&gt; :environment do |t|&lt;br /&gt;  &lt;br /&gt;  scp_wrapper = ScpWrapper.new&lt;br /&gt;  scp_wrapper.update_code&lt;br /&gt;  scp_wrapper.update_db&lt;br /&gt;  scp_wrapper.update_javascript&lt;br /&gt;  scp_wrapper.update_css&lt;br /&gt;  scp_wrapper.update_tests&lt;br /&gt;#  scp_wrapper.images&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;// ha .. moved over to rsync last moment&lt;br /&gt;class ScpWrapper&lt;br /&gt;  &lt;br /&gt;  def update_code&lt;br /&gt;    sync "app"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def update_db&lt;br /&gt;    sync "db/migrate", "db"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def update_javascript&lt;br /&gt;    sync "public/javascripts", "public"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def update_css&lt;br /&gt;    sync "public/stylesheets", "public"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def update_tests&lt;br /&gt;    sync "test"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def images&lt;br /&gt;    sync "public/images", "public"&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  private &lt;br /&gt;  &lt;br /&gt;  def sync(source, dest = "")&lt;br /&gt;    system "rsync -avz #{RAILS_ROOT}/#{source} biketw@biketowork.info:/home/biketw/btw/#{dest}"  &lt;br /&gt;    puts "#{source} synched"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Jun 2006 10:19:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2166</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>Simple enum creation</title>
      <link>http://snippets.dzone.com/posts/show/2163</link>
      <description>// simple Enum creation&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;module Kernel&lt;br /&gt;  # simple (sequential) enumerated values&lt;br /&gt;  def enum(*syms)&lt;br /&gt;    syms.each { |s| const_set(s, s.to_s) }&lt;br /&gt;    const_set(:DEFAULT, syms.first) unless syms.nil?&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;//and the usage&lt;br /&gt;&lt;br /&gt;require 'kernel'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;module Constants&lt;br /&gt;&lt;br /&gt;  module Gradient&lt;br /&gt;&lt;br /&gt;    enum :DOWNSLOPE, :LEVEL, :UPSLOPE&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  module TreeCover&lt;br /&gt;&lt;br /&gt;    enum :GOOD, :BAD, :OK&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  module TrafficDensity&lt;br /&gt;&lt;br /&gt;    enum :LOW, :MEDIUM, :HIGH&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Jun 2006 00:20:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2163</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>Building drop down boxes using enum generated Constants</title>
      <link>http://snippets.dzone.com/posts/show/2162</link>
      <description>Building drop down boxes using enum generated Constants&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;require 'constants'&lt;br /&gt;&lt;br /&gt;module MapHelper&lt;br /&gt;  LOCAL_KEY = &lt;br /&gt;  FREE_ON_RAILS_KEY = &lt;br /&gt;  &lt;br /&gt;  def key&lt;br /&gt;    case `hostname`.chomp&lt;br /&gt;    when 'localhost', 'rohan'&lt;br /&gt;      LOCAL_KEY&lt;br /&gt;    else&lt;br /&gt;      FREE_ON_RAILS_KEY &lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def tree_cover&lt;br /&gt;    build_options Constants::TreeCover&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def gradient&lt;br /&gt;    build_options Constants::Gradient&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def traffic_density&lt;br /&gt;    build_options Constants::TrafficDensity&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def default(method)&lt;br /&gt;    eval "Constants::#{method}::DEFAULT"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  private&lt;br /&gt;  &lt;br /&gt;  def build_options(sym)&lt;br /&gt;    sym.constants.inject("") {|str, value| str + wrap(value) }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def wrap(option)&lt;br /&gt;    "&lt;option value='#{option}'&gt; #{option.downcase.capitalize} &lt;/option&gt;"&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// and the tests for this&lt;br /&gt;require File.dirname(__FILE__) + '/../test_helper'&lt;br /&gt;&lt;br /&gt;class MapHelperTest &lt; Test::Unit::TestCase&lt;br /&gt;  include MapHelper&lt;br /&gt;  &lt;br /&gt;  def test_options_for_combo_box_are_built_correctly&lt;br /&gt;    assert_tree_cover :GOOD&lt;br /&gt;    assert_gradient :DOWNSLOPE&lt;br /&gt;    assert_traffic_density :LOW&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def test_defaulting&lt;br /&gt;    assert_default :TreeCover, :GOOD&lt;br /&gt;    assert_default :Gradient, :DOWNSLOPE&lt;br /&gt;    assert_default :TrafficDensity, :LOW&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def assert_default(subject, const)&lt;br /&gt;    assert_equal const, default(subject)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def assert_tree_cover(const)&lt;br /&gt;    const = const.to_s&lt;br /&gt;    assert tree_cover.include?(option_string(const))&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def assert_gradient(const)&lt;br /&gt;    const = const.to_s&lt;br /&gt;    assert gradient.include?(option_string(const))&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def assert_traffic_density(const)&lt;br /&gt;    const = const.to_s&lt;br /&gt;    assert traffic_density.include?(option_string(const))&lt;br /&gt;  end&lt;br /&gt;    &lt;br /&gt;  def option_string(const)&lt;br /&gt;    "&lt;option value='#{const}'&gt; #{const.downcase.capitalize} &lt;/option&gt;"&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Jun 2006 00:18:39 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2162</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>Shallow Copy using Prototypes Extend</title>
      <link>http://snippets.dzone.com/posts/show/1819</link>
      <description>// description of your code here&lt;br /&gt;Shallow copy of an array in Javascript using Prototype's Object.extend !!!&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;pointz = Object.extend([], points)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 31 Mar 2006 22:35:15 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1819</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>Deletion of a marker with a button on the Info Window</title>
      <link>http://snippets.dzone.com/posts/show/1815</link>
      <description>// description of your code here&lt;br /&gt;Need to delete a marker with the help of a delelte button in the Info Window. &lt;br /&gt;For some reason applying a listener for the click in the info window didnt work. Dunno why.&lt;br /&gt;Anyways. Right now we are calling a global method directly from the  HTML /.. yuck I know. But it works !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;br /&gt;HTML stuff&lt;br /&gt;  &lt;span id='deleteMarker' onclick="delete_marker($('marker').value)"&gt;Delete&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// here we are first copying over the points to a temp array and then doing the stuff. Else we get a recursive error !!&lt;br /&gt;  redraw_map: function() {&lt;br /&gt;    pointz = Object.extend([], points)&lt;br /&gt;    mapper.clean_map()&lt;br /&gt;    mapper.addPointsToMap(pointz)&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//global function&lt;br /&gt;function delete_marker(id) {&lt;br /&gt;  markers = markers.without(markers[id])&lt;br /&gt;  points = points.without(points[id])&lt;br /&gt;  mapper.redraw_map()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 31 Mar 2006 21:45:35 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1815</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>create_marker function for google Maps</title>
      <link>http://snippets.dzone.com/posts/show/1807</link>
      <description>// description of your code here&lt;br /&gt;create_marker function.&lt;br /&gt;&lt;br /&gt;was a pain in the ass(info window was alwasy opening on the latest marker). Till i realized that the variable 'marker' was the same in the global scope. so just putting a 'var' before the marker in the fucntion finally fixed this issue !!!&lt;br /&gt;whew \&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  create_marker: function(point) {&lt;br /&gt;    var marker = new GMarker(point)&lt;br /&gt;    GEvent.addListener(marker, 'click', function() {&lt;br /&gt;      html = '&lt;div style="white-space:nowrap; width: 270px;"&gt;' + $('markerHTML').innerHTML + '&lt;/div&gt;'&lt;br /&gt;      marker.openInfoWindowHtml(html)&lt;br /&gt;    })&lt;br /&gt;    return marker&lt;br /&gt;  },&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 30 Mar 2006 20:15:22 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1807</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>Yellowing Input Box technique</title>
      <link>http://snippets.dzone.com/posts/show/1795</link>
      <description>// how to make input fields a pleasing yellow when the focus is in them and revert them when the focus is not !&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;// the Javascript &lt;br /&gt;&lt;br /&gt;    '.yellowing' : function(e) {&lt;br /&gt;      e.onfocus = function() {&lt;br /&gt;        e.style.backgroundColor = '#FFFFCC'&lt;br /&gt;      },&lt;br /&gt;      e.onblur = function() {&lt;br /&gt;        e.style.backgroundColor = '#FFFFFF'&lt;br /&gt;      }&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;// the CSS&lt;br /&gt;&lt;br /&gt;.yellow {&lt;br /&gt;  background-color: '#FFFFCC'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// the HTML&lt;br /&gt;&lt;br /&gt;	&lt;div class='routeHeading'&gt; Route Information &lt;/div&gt;&lt;br /&gt;	&lt;div&gt; Description &lt;input type='text' class='yellowing' id='routeDesc' name='routeDesc'/&gt;&lt;/div&gt;&lt;br /&gt;	&lt;div&gt; Tags &lt;input type='text' class='yellowing' id='routeTags' name='routeTags'/&gt;&lt;/div&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;div class='SubmitterHeading'&gt; Submitter Information &lt;/div&gt;&lt;br /&gt;	&lt;div&gt; Name &lt;input type='text' class='yellowing' id='submitterName' name='submitterName'/&gt;&lt;/div&gt;&lt;br /&gt;	&lt;div&gt; e-mail &lt;input type='text' class='yellowing' id='submitterEMail' name='submitterEMail'/&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 28 Mar 2006 22:30:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1795</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>How to reset the map with the new bounds passed in !!</title>
      <link>http://snippets.dzone.com/posts/show/1769</link>
      <description>// description of your code here&lt;br /&gt;when we load a new map, we need to reset the zoom of the map if the markers are outside the view port that we currently have. So this code takes care of that&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    bounds = new GLatLngBounds&lt;br /&gt;    points.each(function(point){&lt;br /&gt;      bounds.extend(point)&lt;br /&gt;    })&lt;br /&gt;    map.setZoom(map.getBoundsZoomLevel(bounds))&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 25 Mar 2006 20:15:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1769</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
    <item>
      <title>First stable release of BikeToWork -  mapper.js</title>
      <link>http://snippets.dzone.com/posts/show/1768</link>
      <description>// first stable release of Biketoworks mapper.js&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var map&lt;br /&gt;var points = $A()&lt;br /&gt;var polyline = null&lt;br /&gt;&lt;br /&gt;var mapper = {&lt;br /&gt;  load: function() {&lt;br /&gt;	  map = new GMap($('map'))&lt;br /&gt;    mapper.initializeMap()		&lt;br /&gt;    mapper.registerBehaviours()		&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  initializeMap: function(){&lt;br /&gt;    map.setMapType(G_SATELLITE_MAP)&lt;br /&gt;	&lt;br /&gt;	  map.addControl(new GLargeMapControl())&lt;br /&gt;    map.addControl(new GOverviewMapControl(new GSize(200,200)))&lt;br /&gt;    &lt;br /&gt;    var bangalore = new GLatLng(parseFloat(12.921458133100641), parseFloat(77.58471965789795));&lt;br /&gt;		map.centerAndZoom(bangalore, -1)&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  registerBehaviours: function() {&lt;br /&gt;	  mapper.addZoomLimiter()&lt;br /&gt;	  mapper.addClickListeners()&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  addClickListeners: function(){&lt;br /&gt;    GEvent.addListener(map, 'click', function(overlay, point) {&lt;br /&gt;      if(overlay != null) return&lt;br /&gt;      mapper.addPointsToMap($A([new GLatLng(point.y, point.x)]))&lt;br /&gt;    })&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  load_route : function(request) {&lt;br /&gt;    geopoints = $A(JSON.parse(request.responseText))&lt;br /&gt;    pointz = []&lt;br /&gt;    map.removeOverlay(polyline)&lt;br /&gt;    &lt;br /&gt;    pointz = geopoints.collect(function(geopoint) {&lt;br /&gt;      return new GLatLng(geopoint['longitude'], geopoint['latitude'])&lt;br /&gt;    })&lt;br /&gt;    &lt;br /&gt;    mapper.addPointsToMap(pointz)&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  addPointsToMap: function(pointz) {&lt;br /&gt;    pointz.each(function(point){&lt;br /&gt;      map.addOverlay(new GMarker(point))&lt;br /&gt;      points.push(point)&lt;br /&gt;    })&lt;br /&gt;    &lt;br /&gt;    $('distance').innerHTML = mapper.distance(pointz)&lt;br /&gt;    polyline = new GPolyline(points)&lt;br /&gt;    map.addOverlay(polyline)&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  distance: function(pointz) {&lt;br /&gt;    dist = 0&lt;br /&gt;    for(i = 1; i &lt; pointz.lengh; i++) {&lt;br /&gt;      dist = dist + pointz[i].distanceFrom(pointz[i-1])&lt;br /&gt;    }&lt;br /&gt;    return (dist.toFixed(5))/1000&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  addZoomLimiter: function() {&lt;br /&gt;    GEvent.addListener(map, 'zoom', function() {&lt;br /&gt;      if(map.getZoomLevel() &lt; -1) { map.zoomTo(-1);}&lt;br /&gt;    });&lt;br /&gt;  },&lt;br /&gt;  &lt;br /&gt;  behaviours : {&lt;br /&gt;    '#submit' : function(e) {&lt;br /&gt;      e.onclick = function() {&lt;br /&gt;        json_points = JSON.stringify(points)&lt;br /&gt;        new Ajax.Request('/map/save_route', { onSuccess : alert("Route saved"), parameters: 'markers=' + json_points })&lt;br /&gt;      }&lt;br /&gt;    },&lt;br /&gt;&lt;br /&gt;    '#load' : function(e) {&lt;br /&gt;      e.onclick = function() {&lt;br /&gt;        new Ajax.Request('/map/load_route', { onSuccess: mapper.load_route })&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Behaviour.addLoadEvent(mapper.load);&lt;br /&gt;Behaviour.register(mapper.behaviours)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 25 Mar 2006 20:05:15 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1768</guid>
      <author>rohan_kini (ROhan Kini)</author>
    </item>
  </channel>
</rss>
