merb_laszlo 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Yehuda Katz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,4 @@
1
+ merb-laszlo
2
+ ===========
3
+
4
+ A plugin for the Merb framework that provides support for Laszlo
data/Rakefile ADDED
@@ -0,0 +1,87 @@
1
+ require 'rubygems'
2
+ require 'rubygems/specification'
3
+ require 'date'
4
+ require 'rake/gempackagetask'
5
+ require "extlib"
6
+ require 'merb-core/tasks/merb_rake_helper'
7
+ require "spec/rake/spectask"
8
+
9
+ ##############################################################################
10
+ # Package && release
11
+ ##############################################################################
12
+ RUBY_FORGE_PROJECT = "merb"
13
+ PROJECT_URL = "http://merbivore.com"
14
+ PROJECT_SUMMARY = "Merb plugin that provides support for Laszlo."
15
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY
16
+
17
+ GEM_AUTHOR = "Yehuda Katz"
18
+ GEM_EMAIL = "ykatz@engineyard.com"
19
+
20
+ GEM_NAME = "merb_laszlo"
21
+ PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
22
+ GEM_VERSION = "0.5.0" + PKG_BUILD
23
+
24
+ RELEASE_NAME = "REL #{GEM_VERSION}"
25
+
26
+ require "extlib/tasks/release"
27
+
28
+ spec = Gem::Specification.new do |s|
29
+ s.rubyforge_project = RUBY_FORGE_PROJECT
30
+ s.name = GEM_NAME
31
+ s.version = GEM_VERSION
32
+ s.platform = Gem::Platform::RUBY
33
+ s.has_rdoc = true
34
+ s.extra_rdoc_files = ["README", "LICENSE"]
35
+ s.summary = PROJECT_SUMMARY
36
+ s.description = PROJECT_DESCRIPTION
37
+ s.author = GEM_AUTHOR
38
+ s.email = GEM_EMAIL
39
+ s.homepage = PROJECT_URL
40
+ s.add_dependency('merb-core', '>= 0.9.4')
41
+ s.require_path = 'lib'
42
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{lib,specs}/**/*")
43
+ end
44
+
45
+ Rake::GemPackageTask.new(spec) do |pkg|
46
+ pkg.gem_spec = spec
47
+ end
48
+
49
+ desc "create a gemspec file"
50
+ task :make_spec do
51
+ File.open("#{NAME}.gemspec", "w") do |file|
52
+ file.puts spec.to_ruby
53
+ end
54
+ end
55
+
56
+ ##############################################################################
57
+ # Installation
58
+ ##############################################################################
59
+
60
+ task :install => [:package] do
61
+ sh %{#{sudo} gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
62
+ end
63
+
64
+ namespace :jruby do
65
+ "Run :package and install the resulting .gem with jruby"
66
+ task :install => :package do
67
+ sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
68
+ end
69
+ end
70
+
71
+ ##############################################################################
72
+ # Specs
73
+ ##############################################################################
74
+ desc "Run all specs"
75
+ Spec::Rake::SpecTask.new("specs") do |t|
76
+ t.spec_opts = ["--format", "specdoc", "--colour"]
77
+ t.spec_files = Dir["spec/**/*_spec.rb"].sort
78
+ end
79
+
80
+ desc "Run all specs and generate an rcov report"
81
+ Spec::Rake::SpecTask.new('rcov') do |t|
82
+ t.spec_files = FileList['spec/**/*_spec.rb']
83
+ t.spec_opts = ["--format", "specdoc", "--colour"]
84
+ t.rcov = true
85
+ t.rcov_dir = 'coverage'
86
+ t.rcov_opts = ['--exclude', 'gems', '--exclude', 'spec']
87
+ end
@@ -0,0 +1,53 @@
1
+ require "pathname"
2
+ module Merb
3
+ class Controller
4
+
5
+ def laszlo(str)
6
+ @lz_resources ||= []
7
+
8
+ root, template_location = self.class._template_roots.last
9
+ resource_dir = root / send(template_location, "resources")[0...-1]
10
+ Merb.logger.info! "Resource dir: #{resource_dir}"
11
+
12
+ zip_filename = "#{Laszlo.file_name}.zip"
13
+ FileUtils.mkdir_p(Merb.root / "tmp")
14
+ Zip::ZipFile.open(Merb.root / "tmp" / zip_filename, Zip::ZipFile::CREATE) do |zipfile|
15
+ zipfile.get_output_stream("#{action_name}.lzx") do |f|
16
+ f.puts str
17
+ end
18
+ @lz_resources.each do |resource|
19
+ filepath = resource.split("/")
20
+ dir = filepath[1...-1].join("/").gsub(/^#{Merb.root}/, "")
21
+ filename = filepath[-1]
22
+ zipfile.mkdir(dir) unless zipfile.find_entry(dir) || dir.empty?
23
+ Merb.logger.info! "Looking for #{resource_dir / resource}"
24
+ if File.file?(resource_dir / resource)
25
+ zipfile.add(resource, resource_dir / resource)
26
+ elsif File.file?(root / resource)
27
+ zipfile.add(resource, root / resource)
28
+ end
29
+ end
30
+ end
31
+ c = Curl::Easy.new
32
+
33
+ c.url = "#{Laszlo.url}/file_upload.jsp"
34
+ c.multipart_form_post = true
35
+
36
+ file = Curl::PostField.file("myFile", Merb.root / "tmp" / zip_filename, zip_filename)
37
+ file.content_type = "application/zip"
38
+
39
+ c.http_post(
40
+ file,
41
+ Curl::PostField.content("uid", "#{Laszlo.app_name}__#{controller_name}"))
42
+
43
+ File.delete(Merb.root / "tmp" / zip_filename)
44
+
45
+ if c.response_code == 200
46
+ redirect("#{Laszlo.url}/my-apps/#{Laszlo.app_name}__#{controller_name}/#{action_name}.lzx")
47
+ else
48
+ raise NotAcceptable
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ module Merb
2
+ module GlobalHelpers
3
+
4
+ def lz(name, *args, &blk)
5
+ send("lz_#{name}", *args, &blk)
6
+ end
7
+
8
+ def lz_reload_button
9
+ contents = "Reload" +
10
+ tag(:handler, %{LzBrowser.loadJS("window.location = \\\"#{request.full_uri}\\\"")}, :name => "onclick") +
11
+ tag(:handler, %{this.bringToFront()}, :name => "oninit")
12
+
13
+ tag(:button, contents, :valign => "bottom", :align => "right")
14
+ end
15
+
16
+ def lz_class(name, extends = nil, opts = {}, &blk)
17
+ opts.merge!(:name => name)
18
+ opts.merge!(:extends => extends) if extends
19
+ tag(:class, nil, opts, &blk)
20
+ end
21
+
22
+ def lz_text(text, opts = {})
23
+ self_closing_tag(:text, {:text => text}.merge(opts))
24
+ end
25
+
26
+ def lz_window(width, height, opts = {}, &blk)
27
+ opts = {:resizable => true, :width => width, :height => height}.merge!(opts)
28
+ tag(:window, nil, opts, &blk)
29
+ end
30
+
31
+ def lz_resource(name, src, opts = {})
32
+ @lz_resources ||= []
33
+ @lz_resources << src
34
+ opts.merge!(:name => name, :src => src)
35
+ self_closing_tag(:resource, opts)
36
+ end
37
+
38
+ def lz_on(name, options = {}, *args, &blk)
39
+ options.merge!(:name => "on#{name}")
40
+ options.merge!(:args => args.map {|x| x.to_s}.join(", ")) unless args.empty?
41
+ tag(:handler, capture(&blk), options)
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,6 @@
1
+ namespace :merb-laszlo do
2
+ desc "Do something for merb-laszlo"
3
+ task :default do
4
+ puts "merb-laszlo doesn't do anything"
5
+ end
6
+ end
@@ -0,0 +1,38 @@
1
+ require "digest/md5"
2
+ require "fileutils"
3
+ require "curb"
4
+ require "zip/zip"
5
+ srand(Time.now.to_i)
6
+
7
+ class Laszlo
8
+ def self.file_name
9
+ Digest::MD5.hexdigest(rand(Time.now.to_i).to_s)
10
+ end
11
+
12
+ def self.app_name
13
+ File.basename(File.expand_path(Merb.root))
14
+ end
15
+
16
+ cattr_accessor :url
17
+ end
18
+
19
+ require "haml"
20
+
21
+ module Haml
22
+ module Filters
23
+ module Cdata
24
+ include Haml::Filters::Base
25
+
26
+ def render(text)
27
+ "<![CDATA[#{("\n" + text).rstrip.gsub("\n", "\n ")}\n]]>"
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ Merb::Config[:haml] ||= {}
34
+ Merb::Config[:haml][:filters] ||= {}
35
+ Merb::Config[:haml][:filters].merge!("cdata" => Haml::Filters::Cdata)
36
+
37
+ require "merb-laszlo/controllers"
38
+ require "merb-laszlo/helpers"
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: merb_laszlo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Yehuda Katz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-03 00:00:00 +03:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: merb-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.4
24
+ version:
25
+ description: Merb plugin that provides support for Laszlo.
26
+ email: ykatz@engineyard.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README
33
+ - LICENSE
34
+ files:
35
+ - LICENSE
36
+ - README
37
+ - Rakefile
38
+ - lib/merb-laszlo
39
+ - lib/merb-laszlo/controllers.rb
40
+ - lib/merb-laszlo/helpers.rb
41
+ - lib/merb-laszlo/merbtasks.rb
42
+ - lib/merb-laszlo.rb
43
+ has_rdoc: true
44
+ homepage: http://merbivore.com
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project: merb
65
+ rubygems_version: 1.2.0
66
+ signing_key:
67
+ specification_version: 2
68
+ summary: Merb plugin that provides support for Laszlo.
69
+ test_files: []
70
+