Module: Ropenlayer::ActsAs
- Defined in:
- lib/ropenlayer.rb,
lib/ropenlayer/acts_as.rb,
lib/ropenlayer/acts_as/mapper.rb,
lib/ropenlayer/acts_as/nodeable.rb
Defined Under Namespace
Instance Method Summary collapse
-
#acts_as_localizable_on(relation, options = {}) ⇒ Object
acts_as_localizable_on: give to the model facilities to store and draw object in a map.
-
#acts_as_map(options = {}) ⇒ Object
acts_as_map: give to the model map construiction and build facilities.
Instance Method Details
#acts_as_localizable_on(relation, options = {}) ⇒ Object
acts_as_localizable_on: give to the model facilities to store and draw object in a map.
class Team < ActiveRecord::Base
acts_as_map :default_layer => :google_streets, :nodes => [ :offices ]
end
class Office < ActiveRecord::Base
belongs_to :team
acts_as_localizable_on :team
end
Avalaible options:
All the options can be mapped to a Proc object that will bind self or a Symbol which perform send(:symbol) method.
- :name, :Name of the point. By default, Just another Element
- :popup_content:Content of the popup, if set, element will render a popup in click with this xhtml content. by default, is false
- :icon_url: Icon url to show, by default, /images/ropenlayer/default_marker.png
- :color: Background color, by default transparent
Examples
Build a Map of the team offices with custom icons
# on app/models/team.rb
class Team < ActiveRecord::Base
has_many :offices
acts_as_map :default_layer => :google_streets, :latitude => 40000.23, :longitude => 54555.233, :zoom => 3
:nodes => [ :offices ]
end
# on app/models/office.rb
class Office < ActiveRecord::Base
belongs_to :team
acts_as_localizable_on :team, :icon_url => Proc.new{|o| o.main ? '/images/main_office.png' : '/images/office.png' },
:color => Proc.new{|o| o.main ? 'red' : 'blue' },
:popup_content => :full_description
def full_description
%( #{ name } - #{ address } )
end
end
on your view, just
apps/views/offices/index.html
<div id="offices_for_team_map" style="width: 500px; height: 400px;"></div>
<%= raw @team.ropenlayer_map(:id => 'offices_for_team_map').to_js %>
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/ropenlayer/acts_as.rb', line 124 def acts_as_localizable_on(relation, = {}) class_eval do cattr_reader :acts_as_nodeable cattr_reader :ropenlayer_node_config send("class_variable_set", "@@acts_as_nodeable", true) send("class_variable_set", "@@ropenlayer_node_config", ) include Ropenlayer::ActsAs::Nodeable end end |
#acts_as_map(options = {}) ⇒ Object
acts_as_map: give to the model map construiction and build facilities.
class Team < ActiveRecord::Base
acts_as_map :default_layer => :google_streets
end
Avalaible options:
- :longitude, :latitude, :zoom : Default starting values for map. Can be a float (latitude, longitude) or integer (zoom) object, so values will be parsed as them are.
A Symbol, in this case, ropenlayer will send :symbol method to mapper instance, or a valid Proc object
- :default_layer: Default layer for visualization. For avalaible layers see Ropenlayer::Openlayer::Map
- :nodes: Relations which can be pointed on the map. Relations are expected to have acts_as_localizable_on behaviour in their class
Examples
Build a Map with static features, just for localization
class Team < ActiveRecord::Base
acts_as_map :default_layer => :google_streets, :latitude => 40000.23, :longitude => 54555.233, :zoom => 3
end
Build a Map with Proc calls to perform automatic localization on forms
class Team < ActiveRecord
has_many :offices
has_one :main_office, :conditions => { :main => true }
acts_as_map :default_layer => :google_streets, :longitude => :main_office_longitude, :latitude => :main_office_latitude, :zoom => :main_office_zoom
:nodes => [ :offices ]
def main_office_longitude
main_office.longitude
end
def main_office_longitude=(value)
main_office_longitude = value
end
def main_office_latitude
main_office.latitude
end
def main_office_latitude=(value)
main_office.latitude = value
end
def main_office_longitude
main_office.longitude
end
def main_office_zoom=(value)
main_office.zoom = value
end
end
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ropenlayer/acts_as.rb', line 61 def acts_as_map( = {}) class_eval do cattr_reader :acts_as_mapper, :ropenlayer_mapper_config, :localizable send("class_variable_set", "@@acts_as_mapper", true) send("class_variable_set", "@@ropenlayer_mapper_config", ) include Ropenlayer::ActsAs::Mapper end end |