module ZWResources
Public Class Methods
extended(base)
click to toggle source
Route to send model definitions to ember
# File lib/wurst/resource.rb, line 42 def self.extended base base.send :get, '/models.js' do content_type :js, :charset => 'utf-8' # @@models_js_template defined at bottom of module def Tilt::ERBTemplate.new{@@models_js_template}.render end %w(handlebars-v1.3.0.js ember.js ember-data.js).each do |filename| base.send :get, "/#{filename}" do content_type :js, :charset => 'utf-8' File.read File.join(File.dirname(File.expand_path(__FILE__)), "../assets/#{filename}") end end end
Public Instance Methods
frontend_model(model_name, model)
click to toggle source
Collect resources for ember model definitions
# File lib/wurst/resource.rb, line 33 def frontend_model model_name, model FRONTEND_MODELS[model_name] = ( model.properties.to_a.map! do |property| {name: property.name} end ) end
resource(model_sym, &block)
click to toggle source
# File lib/wurst/resource.rb, line 57 def resource model_sym, &block model_name_string = model_sym.to_s model_name = model_name_string[0].upcase + model_name_string[1..-2] model = Kernel.const_get(model_name) frontend_model model_name, model # Sends model definition to ember router = ZWRouter.new if block_given? block.call(router) end router.switch puts "***" puts router.routes.inspect # Parse JSON payload # http://stackoverflow.com/a/17049683 before do request.body.rewind request_body = request.body.read @request_payload = JSON.parse(request_body, :symbolize_names => true) unless request_body.empty? end # Find get "/#{model_name_string}/:id" do |id| content_type :json, :charset => 'utf-8' if router.has_route? :read {post: router.read(id)}.to_json else {post: model.get(id)}.to_json end end # Find All get "/#{model_name_string}" do content_type :json, :charset => 'utf-8' if router.has_route? :index {posts: router.index}.to_json else {posts: model.all}.to_json end end # Update put "/#{model_name_string}/:id" do |id| content_type :json, :charset => 'utf-8' if router.has_route? :update {post: router.update(id, @request_payload[:post])}.to_json else param_names = model.properties.select{ |prop| prop.class != DataMapper::Property::Serial }.map{ |prop| prop.name } m = model.get(id) m.update(@request_payload[:post].select{ |k,v| param_names.include? k.to_sym }) {post: m}.to_json end end # Create post "/#{model_name_string}" do content_type :json, :charset => 'utf-8' if router.has_route? :create {post: router.create(@request_payload[:post])}.to_json else param_names = model.properties.select{ |prop| prop.class != DataMapper::Property::Serial }.map{ |prop| prop.name } m = model.create(@request_payload[:post].select{ |k,v| param_names.include? k.to_sym }) {post: m}.to_json end end # Delete delete "/#{model_name_string}/:id" do |id| content_type :json, :charset => 'utf-8' if router.has_route? :destroy {post: router.destroy(params)}.to_json else model.get(id).destroy {}.to_json end end end