rango 0.1.1.2.11 → 0.1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/CHANGELOG +5 -1
  2. data/README.textile +2 -2
  3. data/bin/rango +1 -0
  4. data/lib/rango.rb +34 -6
  5. data/lib/rango/contrib/pagination.rb +1 -4
  6. data/lib/rango/contrib/pagination/adapters/datamapper.rb +2 -0
  7. data/lib/rango/controller.rb +1 -0
  8. data/lib/rango/gv/scaffolding.rb +0 -1
  9. data/lib/rango/helpers/assets.rb +4 -3
  10. data/lib/rango/logger.rb +6 -1
  11. data/lib/rango/orm/README.textile +1 -1
  12. data/lib/rango/rack/middlewares/basic.rb +16 -7
  13. data/lib/rango/rack/middlewares/static.rb +2 -2
  14. data/lib/rango/rack/request.rb +1 -1
  15. data/lib/rango/router.rb +9 -0
  16. data/lib/rango/router/adapters/rack_mount.rb +1 -1
  17. data/lib/rango/router/adapters/usher.rb +2 -2
  18. data/lib/rango/stacks/controller.rb +7 -0
  19. data/lib/rango/stacks/mini.rb +5 -0
  20. data/lib/rango/templates/template.rb +2 -1
  21. data/lib/rango/version.rb +1 -1
  22. data/spec/rango/mixins/render_spec.rb +0 -1
  23. data/stubs/flat/content/flat.ru.rbt +3 -10
  24. data/stubs/stack/content/Gemfile.rbt +4 -0
  25. data/stubs/stack/content/config.ru.rbt +3 -3
  26. data/stubs/stack/content/init.rb.rbt +6 -7
  27. data/stubs/stack/content/spec/spec_helper.rb +1 -1
  28. metadata +8 -14
  29. data/lib/rango/interactive.rb +0 -18
  30. data/lib/rango/mixins/configurable.rb +0 -20
  31. data/lib/rango/project.rb +0 -27
  32. data/lib/rango/settings.rb +0 -98
  33. data/lib/rango/settings/erubis.rb +0 -15
  34. data/lib/rango/settings/framework.rb +0 -42
  35. data/lib/rango/settings/haml.rb +0 -47
  36. data/lib/rango/settings/template.rb +0 -19
  37. data/spec/rango/mixins/configurable_spec.rb +0 -0
  38. data/spec/rango/project_spec.rb +0 -45
  39. data/spec/rango/settings_spec.rb +0 -27
  40. data/stubs/flat/content/flat.ru +0 -21
data/CHANGELOG CHANGED
@@ -34,9 +34,13 @@
34
34
  * ImplicitRendering and ExplicitRendering mixins for using locals
35
35
  vs. rendering in context of current controller instance
36
36
 
37
- = Version 0.1.2, 10/12/2009, SHA1
37
+ = Version 0.1.2, 13/12/2009, 22651050ea20e2997a9e5d07c8a409eb8e5de4fe
38
38
  * Sequel support
39
39
  * Project generator renamed to stack generator
40
40
  * Removed app and bigapp generators
41
41
  * Added migration task for DataMapper
42
42
  * Removed layer of ORM adapters
43
+ * Removed Project constant and settings
44
+ * Much more modular design
45
+ * Removed dependencies, since you can use whichever subset of Rango
46
+ * There is Rango::Router.app instead of Project.router
data/README.textile CHANGED
@@ -1,10 +1,10 @@
1
1
  h1. Installation via RubyGems
2
2
 
3
- * Daily builds: @gem install rango --pre@ _(Daily builds currently doesn't work, I'm going to fix it till end of this week.)_
3
+ * Daily builds: @gem install rango --pre@
4
4
  * Stable version: @gem install rango@
5
5
  * JRuby: @jruby --1.9 -S gem install rango@
6
6
 
7
- _We were using option @--development@ for installing development dependencies, unfortunately Rack has Mongrel as a development dependency and Mongrel compilation fails on Ruby 1.9, so I put everything into normal dependencies for now._
7
+ _Rango itself doesn't define any runtime dependencies, since you may want to use just a subset of Rango, i. e. just template layer. If you are using stack generator, you get @Gemfile@ with usual dependencies, so @gem bundle@ will take care about it._
8
8
 
9
9
  h1. Installation via "Rip":http://hellorip.com
10
10
 
data/bin/rango CHANGED
@@ -31,6 +31,7 @@ rescue LoadError
31
31
  end
32
32
 
33
33
  require "rango"
34
+ require "rango/logger"
34
35
 
35
36
  # === Helpers === #
36
37
  # TODO: Generators.each { |generator| puts generator.help }
data/lib/rango.rb CHANGED
@@ -5,7 +5,6 @@ if RUBY_VERSION < "1.9.1"
5
5
  end
6
6
 
7
7
  require "rango/core_ext"
8
- require "rubyexts/attribute"
9
8
 
10
9
  rango_lib = File.dirname(__FILE__)
11
10
  unless $:.include?(rango_lib) || $:.include?(File.expand_path(rango_lib))
@@ -21,12 +20,20 @@ module Rango
21
20
  # Rango::Helpers.send(:include, Pupu::Helpers)
22
21
  Helpers ||= Module.new
23
22
 
23
+ def self.root=(root)
24
+ @@root = root
25
+ end
26
+
24
27
  def self.root
25
- File.expand_path(File.join(File.dirname(__FILE__), ".."))
28
+ @@root ||= Dir.pwd
29
+ end
30
+
31
+ def self.media_root=(media_root)
32
+ @@media_root = media_root
26
33
  end
27
34
 
28
- def self.lib_root
29
- File.join(self.root, "lib")
35
+ def self.media_root
36
+ @@media_root ||= File.join(self.root, "media")
30
37
  end
31
38
 
32
39
  def self.logger
@@ -50,7 +57,7 @@ module Rango
50
57
  self.environment = options[:environment] if options[:environment]
51
58
  block.call if block_given?
52
59
  self.bootloaders.each do |name, bootloader|
53
- logger.debug "Calling bootloader #{name}"
60
+ # logger.debug "Calling bootloader #{name}"
54
61
  bootloader.call
55
62
  end
56
63
  end
@@ -60,7 +67,12 @@ module Rango
60
67
  self.boot(options.merge(force: true))
61
68
  end
62
69
 
63
- attribute :bootloaders, Hash.new
70
+ def self.bootloaders
71
+ @@bootloaders
72
+ end
73
+
74
+ @@bootloaders = Hash.new
75
+
64
76
  def self.after_boot(name, &block)
65
77
  self.bootloaders[name] = block
66
78
  end
@@ -70,4 +82,20 @@ module Rango
70
82
  full_path = File.expand_path(File.join(File.dirname(__FILE__), relative_path))
71
83
  $LOADED_FEATURES.any? { |file| file == full_path }
72
84
  end
85
+
86
+ # Start IRB interactive session
87
+ # @since 0.0.1
88
+ def self.interactive
89
+ require "irb"
90
+ require "rango/utils"
91
+
92
+ ARGV.delete("-i") # otherwise irb will read it
93
+ ENV["RACK_ENV"] = Rango.environment # for racksh
94
+ unless try_require("racksh/boot")
95
+ Rango.logger.info("For more goodies install racksh gem")
96
+ try_require "irb/completion" # some people can have ruby compliled without readline
97
+ Rango::Utils.load_rackup # so you can use Rango::Router.app etc
98
+ end
99
+ IRB.start
100
+ end
73
101
  end
@@ -1,13 +1,10 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  # http://wiki.github.com/botanicus/rango/pagination
4
-
5
- require "dm-aggregates"
6
-
4
+ # Don't forget to load your ORM adapter!
7
5
  require "rango/contrib/pagination/page"
8
6
  require "rango/contrib/pagination/strategies"
9
7
  require "rango/contrib/pagination/helpers"
10
- require "rango/contrib/pagination/adapters/#{Project.settings.orm || "datamapper"}"
11
8
 
12
9
  Rango::Helpers.send(:include, Rango::Pagination::PaginationMixin)
13
10
  # require code that must be loaded before the application
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require "dm-aggregates"
4
+
3
5
  module DataMapper
4
6
  module Model
5
7
  # @since 0.0.2
@@ -5,6 +5,7 @@
5
5
  require "rango/router"
6
6
  require "rango/exceptions"
7
7
  require "rango/rack/request"
8
+ require "rubyexts/attribute"
8
9
 
9
10
  module Rango
10
11
  class Controller
@@ -5,7 +5,6 @@ require "rango/mini"
5
5
  require "rango/mixins/render"
6
6
 
7
7
  require "rango" # Rango.root
8
- require "rango/project"
9
8
  Rango::Template.template_paths.push(File.join(Rango.root, "templates"))
10
9
 
11
10
  # NOTE: this is just proof of concept, do not use it so far!
@@ -4,25 +4,26 @@
4
4
  # ... but what if I need full path? It should be tested if file exist, of course
5
5
  # javascript Path.new("design/whatever.js")
6
6
  require "rango/helpers"
7
+ require "media-path"
7
8
 
8
9
  module Rango
9
10
  module Helpers
10
11
  # stolen from pupu (but it's OK, it's my code)
11
12
  # @since 0.0.2
12
13
  def javascript(basename)
13
- path = MediaPath.new(File.join(Project.settings.media_root, "javascripts", "#{basename}.js"))
14
+ path = MediaPath.new(File.join(Rango.media_root, "javascripts", "#{basename}.js"))
14
15
  tag :script, src: path.url, type: "text/javascript"
15
16
  end
16
17
 
17
18
  # @since 0.0.2
18
19
  def stylesheet(basename, attrs = Hash.new)
19
- path = MediaPath.new(File.join(Project.settings.media_root, "stylesheets", basename))
20
+ path = MediaPath.new(File.join(Rango.media_root, "stylesheets", basename))
20
21
  default = {href: path.url, media: 'screen', rel: 'stylesheet', type: 'text/css'}
21
22
  single_tag :link, default.merge(attrs)
22
23
  end
23
24
 
24
25
  def image(basename, attrs = Hash.new)
25
- path = MediaPath.new(File.join(Project.settings.media_root, "images", basename))
26
+ path = MediaPath.new(File.join(Rango.media_root, "images", basename))
26
27
  default = {src: path.url, alt: path.basename}
27
28
  single_tag :img, default.merge(attrs)
28
29
  end
data/lib/rango/logger.rb CHANGED
@@ -1,7 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require "rango"
4
- require_gem "rubyexts", "rubyexts/logger"
4
+
5
+ begin
6
+ require "rubyexts/logger"
7
+ rescue LoadError
8
+ raise LoadError, "You have to install rubyexts gem"
9
+ end
5
10
 
6
11
  # @since 0.0.1
7
12
  # @example
@@ -13,7 +13,7 @@ h1. Why not ...
13
13
 
14
14
  h2. Save Used ORM in Project.orm or somewhere?
15
15
 
16
- Because if you need have aditional support for each ORM, it's part of setup to put @load "myplugin/tasks.rake"@ to user's Rakefile etc, so there is no need for this.
16
+ Because if you need have aditional support for each ORM, it's part of setup to put @load "myplugin/tasks/datamapper.rake"@ to user's Rakefile etc, so there is no need for this.
17
17
 
18
18
  h2. Support @config/database.yml@
19
19
 
@@ -13,27 +13,36 @@ module Rango
13
13
  end
14
14
  end
15
15
 
16
-
17
16
  module Rango
18
17
  module Middlewares
19
18
  class Basic
19
+ def self.media_prefix
20
+ @@media_prefix
21
+ end
22
+
23
+ def self.media_prefix=(media_prefix)
24
+ @@media_prefix = media_prefix
25
+ end
26
+
27
+ @@media_prefix = ""
28
+
20
29
  attr_accessor :before, :after
21
30
  def initialize(app, &block)
22
31
  @@called = false unless defined?(@@called) # I'm not entirely sure why we have to do this
23
- @app = app.extend(Rango::RackDebug)
32
+ @app = app#.extend(Rango::RackDebug)
24
33
 
25
34
  #, key: 'rack.session', domain: 'foo.com', path: '/', expire_after: 2592000, secret: 'change_me'
26
35
  self.before = [Rango::Middlewares::Encoding, Rack::MethodOverride, [Rack::Session::Cookie, path: '/']]
27
36
  self.after = [Rack::ContentType, Rack::ContentLength, Rack::Head]
28
37
 
29
38
  self.static_files_serving
30
-
39
+
31
40
  block.call(self) if block_given?
32
41
  # use Rango::Middlewares::Basic do |middleware|
33
42
  # middleware.before.push MyMiddleware
34
43
  # end
35
44
  end
36
-
45
+
37
46
  def call(env)
38
47
  # Matryoshka principle
39
48
  # MethodOverride.new(Encoding.new(@app))
@@ -56,7 +65,7 @@ module Rango
56
65
  end
57
66
 
58
67
  def static_files_serving
59
- if Project.settings.media_prefix.empty?
68
+ if self.class.media_prefix.empty?
60
69
  Rango.logger.info("Media files are routed directly to the /")
61
70
  require "rango/rack/middlewares/static"
62
71
  self.before.unshift Rango::Middlewares::Static
@@ -68,8 +77,8 @@ module Rango
68
77
  # use Rack::Static, :urls => ["/css", "/images"], :root => "public"
69
78
  # will serve all requests beginning with /css or /images from the folder
70
79
  # "public" in the current directory (ie public/css/* and public/images/*)
71
- Rango.logger.info("Media files are available on #{Project.settings.media_prefix}")
72
- options = {urls: [Project.settings.media_prefix]}
80
+ Rango.logger.info("Media files are available on #{self.class.media_prefix}")
81
+ options = {urls: [self.class.media_prefix]}
73
82
  self.before.unshift [Rack::Static, options]
74
83
  end
75
84
  end
@@ -11,7 +11,7 @@ module Rango
11
11
  # @since 0.0.2
12
12
  def initialize(app)
13
13
  @app = app
14
- @file_server = ::Rack::File.new(Project.settings.media_root)
14
+ @file_server = ::Rack::File.new(Rango.media_root)
15
15
  end
16
16
 
17
17
  # @since 0.0.2
@@ -19,7 +19,7 @@ module Rango
19
19
  path = env['PATH_INFO'].chomp('/')
20
20
  method = env['REQUEST_METHOD']
21
21
 
22
- prefix = Project.settings.media_prefix.chomp("/")
22
+ prefix = Rango::Middlewares::Basic.media_prefix.chomp("/")
23
23
  prefix_regexp = Regexp.new(%r[^#{prefix}/])
24
24
  if path.match(prefix_regexp) && FILE_METHODS.include?(method)
25
25
  if file_exist?(path)
@@ -50,7 +50,7 @@ module Rango
50
50
  attr_reader :env
51
51
 
52
52
  # @since 0.0.2
53
- attribute :message, Hash.new
53
+ #attribute :message, Hash.new
54
54
 
55
55
  # @since 0.0.1
56
56
  # @example: blog/post/rango-released
data/lib/rango/router.rb CHANGED
@@ -14,6 +14,15 @@ module Rango
14
14
 
15
15
  class Router
16
16
  @@routers ||= Hash.new
17
+ def self.app
18
+ @@app
19
+ rescue
20
+ raise "You have to assign your router application to Rango::Router.app\nFor example Rango::Router.app = Usher::Interface.for(:rack, &block)"
21
+ end
22
+
23
+ def self.app=(app)
24
+ @@app = app
25
+ end
17
26
 
18
27
  def self.router
19
28
  @@router
@@ -10,7 +10,7 @@ module Rango
10
10
  module UrlHelper
11
11
  # url(:login)
12
12
  def url(*args)
13
- Project.router.url(*args)
13
+ Rango::Router.app.url(*args)
14
14
  end
15
15
  end
16
16
  end
@@ -10,8 +10,8 @@ module Rango
10
10
  module UrlHelper
11
11
  # url(:login)
12
12
  def url(*args)
13
- raise "You have to asign your routes to Project.router, for example Project.router = Usher::Interface.for(:rack) { get('/') }" if Project.router.nil?
14
- Project.router.router.generator.generate(*args)
13
+ raise "You have to asign your routes to Rango::Router.app, for example Rango::Router.app = Usher::Interface.for(:rack) { get('/') }" if Rango::Router.app.nil?
14
+ Rango::Router.app.router.generator.generate(*args)
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ require "rango"
4
+ require "rango/logger"
5
+ require "rango/controller"
6
+ require "rango/environments"
7
+ require "rango/rack/middlewares/basic"
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ require "rango"
4
+ require "rango/mini"
5
+ require "rango/rack/middlewares/basic"
@@ -14,6 +14,7 @@ module Rango
14
14
 
15
15
  class Template
16
16
  cattr_accessor :template_paths
17
+ self.template_paths = [File.join(Rango.root, "templates")]
17
18
 
18
19
  # template -> supertemplate is the same relationship as class -> superclass
19
20
  # @since 0.0.2
@@ -69,7 +70,7 @@ module Rango
69
70
 
70
71
  protected
71
72
  def find_in_template_paths
72
- self.template_paths.each do |directory|
73
+ self.class.template_paths.each do |directory|
73
74
  path = File.join(directory, self.path)
74
75
  return Dir[path, "#{path}.*"].first
75
76
  end
data/lib/rango/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  # NOTE: Do not edit this file manually, this
4
4
  # file is regenerated by task rake version:increase
5
5
  module Rango
6
- VERSION ||= "0.1.1.2.11"
6
+ VERSION ||= "0.1.1.3"
7
7
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require_relative "../../spec_helper"
4
4
 
5
- require "rango/project"
6
5
  require "rango/mixins/render"
7
6
 
8
7
  Rango::Template.template_paths = [File.join(STUBS_ROOT, "templates")]
@@ -2,20 +2,13 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  # rackup -p 4000 -s thin flat.ru
5
- require "rango"
6
- require "rango/mixins/mini"
5
+ require "rango/stacks/mini"
6
+ require "rango/router/adapters/basic"
7
7
 
8
8
  Rango.boot
9
9
 
10
10
  use Rango::Basic
11
11
 
12
- Project.configure do
13
- # TODO
14
- end
15
-
16
- # router
17
- require "rango/router/adapters/basic"
18
-
19
12
  map("/") do
20
- run app { "<h1>Rango is just Awesome!</h1>" }
13
+ run Rango::Mini.app { "<h1>Rango is just Awesome!</h1>" }
21
14
  end
@@ -11,8 +11,12 @@
11
11
  # === Shared Gems === #
12
12
  # Specify a dependency on rango. When the bundler downloads gems,
13
13
  # it will download rango as well as all of rango' dependencies
14
+
15
+ # rango stack
14
16
  gem "rango"#, git: "git://github.com/botanicus/rango.git"
15
17
  gem "rack"#, git: "git://github.com/rack/rack.git"
18
+ gem "tilt"#, git: "git://github.com/rtomayko/tilt.git"
19
+ gem "rubyexts"#, git: "git://github.com/botanicus/rubyexts.git"
16
20
 
17
21
  # router
18
22
  <% case @router %>
@@ -44,12 +44,12 @@ Rango::Router.use(:<%= @router.to_sym %>)
44
44
  <% case @router %>
45
45
  <% when "usher" %>
46
46
  # http://github.com/joshbuddy/usher
47
- Project.router = Usher::Interface.for(:rack) do
47
+ Rango::Router.app = Usher::Interface.for(:rack) do
48
48
  get("/").to(<%= @name.camel_case %>::ShowCase.dispatcher(:index)).name(:showcase)
49
49
  end
50
50
  <% when "rack-mount" %>
51
51
  # http://github.com/josh/rack-mount
52
- Project.router = Rack::Mount::RouteSet.new do |set|
52
+ Rango::Router.app = Rack::Mount::RouteSet.new do |set|
53
53
  # add_route takes a rack application and conditions to match with
54
54
  # conditions may be strings or regexps
55
55
  # See Rack::Mount::RouteSet#add_route for more options.
@@ -62,4 +62,4 @@ end
62
62
  <% end %>
63
63
 
64
64
  use Rango::Middlewares::Basic
65
- run Project.router
65
+ run Rango::Router.app
@@ -16,12 +16,7 @@ rescue LoadError => exception
16
16
  abort "LoadError during loading gems/environment: #{exception.message}\nRun gem bundle to fix it."
17
17
  end
18
18
 
19
- # settings
20
- require_relative "settings_local"
21
-
22
- require "rango"
23
- require "rango/helpers"
24
- require "rango/environments"
19
+ require "rango/stacks/controller"
25
20
 
26
21
  # http://wiki.github.com/botanicus/rango/environments-support
27
22
  require "rango/environments"
@@ -38,8 +33,12 @@ Bundler.require_env(environment)
38
33
 
39
34
  Rango.boot(environment: environment)
40
35
 
36
+ # settings
37
+ require_relative "settings_local"
38
+
41
39
  # register applications
42
- require_relative "<%= @name %>/init.rb"
40
+ require_relative "views.rb"
41
+ require_relative "models.rb"
43
42
 
44
43
  # if you will run this script with -i argument, interactive session will begin
45
44
  Rango.interactive if ARGV.delete("-i")
@@ -30,6 +30,6 @@ Spec::Runner.configure do |config|
30
30
 
31
31
  # for rack-test
32
32
  def app
33
- Project.router
33
+ Rango::Router.app
34
34
  end
35
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rango
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.2.11
4
+ version: 0.1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
@@ -103,13 +103,11 @@ files:
103
103
  - lib/rango/helpers/general.rb
104
104
  - lib/rango/helpers/syntax.rb
105
105
  - lib/rango/helpers.rb
106
- - lib/rango/interactive.rb
107
106
  - lib/rango/logger.rb
108
107
  - lib/rango/loggers/fireruby.rb
109
108
  - lib/rango/mini.rb
110
109
  - lib/rango/mini_render.rb
111
110
  - lib/rango/mixins/application.rb
112
- - lib/rango/mixins/configurable.rb
113
111
  - lib/rango/mixins/filters.rb
114
112
  - lib/rango/mixins/http_caching.rb
115
113
  - lib/rango/mixins/logger.rb
@@ -121,7 +119,6 @@ files:
121
119
  - lib/rango/orm/tasks/datamapper.rake
122
120
  - lib/rango/orm/tasks/sequel.rake
123
121
  - lib/rango/path.rb
124
- - lib/rango/project.rb
125
122
  - lib/rango/rack/middlewares/basic.rb
126
123
  - lib/rango/rack/middlewares/email_obfuscator.rb
127
124
  - lib/rango/rack/middlewares/encoding.rb
@@ -132,11 +129,8 @@ files:
132
129
  - lib/rango/router/adapters/urlmap.rb
133
130
  - lib/rango/router/adapters/usher.rb
134
131
  - lib/rango/router.rb
135
- - lib/rango/settings/erubis.rb
136
- - lib/rango/settings/framework.rb
137
- - lib/rango/settings/haml.rb
138
- - lib/rango/settings/template.rb
139
- - lib/rango/settings.rb
132
+ - lib/rango/stacks/controller.rb
133
+ - lib/rango/stacks/mini.rb
140
134
  - lib/rango/support/cucumber/steps/given_steps.rb
141
135
  - lib/rango/support/cucumber/steps/then_steps.rb
142
136
  - lib/rango/support/cucumber/steps/when_steps.rb
@@ -168,7 +162,6 @@ files:
168
162
  - spec/rango/loggers/fireruby_spec.rb
169
163
  - spec/rango/mini_spec.rb
170
164
  - spec/rango/mixins/application_spec.rb
171
- - spec/rango/mixins/configurable_spec.rb
172
165
  - spec/rango/mixins/filters_spec.rb
173
166
  - spec/rango/mixins/http_caching_spec.rb
174
167
  - spec/rango/mixins/message_spec.rb
@@ -179,7 +172,6 @@ files:
179
172
  - spec/rango/orm/adapters/sequel_spec.rb
180
173
  - spec/rango/orm/support/datamapper/fields_spec.rb
181
174
  - spec/rango/orm/support/datamapper/support_spec.rb
182
- - spec/rango/project_spec.rb
183
175
  - spec/rango/rack/middlewares/basic_spec.rb
184
176
  - spec/rango/rack/middlewares/email_obfuscator_spec.rb
185
177
  - spec/rango/rack/middlewares/encoding_spec.rb
@@ -194,7 +186,6 @@ files:
194
186
  - spec/rango/settings/framework_spec.rb
195
187
  - spec/rango/settings/haml_spec.rb
196
188
  - spec/rango/settings/template_spec.rb
197
- - spec/rango/settings_spec.rb
198
189
  - spec/rango/support/cucumber/steps/given_steps_spec.rb
199
190
  - spec/rango/support/cucumber/steps/then_steps_spec.rb
200
191
  - spec/rango/support/cucumber/steps/when_steps_spec.rb
@@ -232,7 +223,6 @@ files:
232
223
  - spec/stubs/templates/variables.html.haml
233
224
  - stubs/features/content/env.rb
234
225
  - stubs/features/metadata.yml
235
- - stubs/flat/content/flat.ru
236
226
  - stubs/flat/content/flat.ru.rbt
237
227
  - stubs/flat/metadata.yml
238
228
  - stubs/flat/postprocess.rb
@@ -304,12 +294,16 @@ post_install_message: |
304
294
  * ImplicitRendering and ExplicitRendering mixins for using locals
305
295
  vs. rendering in context of current controller instance
306
296
 
307
- = Version 0.1.2, 10/12/2009, SHA1
297
+ = Version 0.1.2, 13/12/2009, 22651050ea20e2997a9e5d07c8a409eb8e5de4fe
308
298
  * Sequel support
309
299
  * Project generator renamed to stack generator
310
300
  * Removed app and bigapp generators
311
301
  * Added migration task for DataMapper
312
302
  * Removed layer of ORM adapters
303
+ * Removed Project constant and settings
304
+ * Much more modular design
305
+ * Removed dependencies, since you can use whichever subset of Rango
306
+ * There is Rango::Router.app instead of Project.router
313
307
 
314
308
  rdoc_options: []
315
309
 
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "irb"
4
- require "rango/utils"
5
- require "rubyexts"
6
-
7
- # Start IRB interactive session
8
- # @since 0.0.1
9
- def Rango.interactive
10
- ARGV.delete("-i") # otherwise irb will read it
11
- ENV["RACK_ENV"] = Rango.environment # for racksh
12
- unless try_require("racksh/boot")
13
- Rango.logger.info("For more goodies install racksh gem")
14
- try_require "irb/completion" # some people can have ruby compliled without readline
15
- Rango::Utils.load_rackup # so you can use Project.router etc
16
- end
17
- IRB.start
18
- end
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # TODO: move into separate gem with settings
4
- module Rango
5
- module Configurable
6
- # @since 0.0.1
7
- # @example
8
- # Project.configure do
9
- # self.property = "value"
10
- # end
11
- # @yield [block] Block which will be evaluated in Project.setttings object.
12
- # @return [Rango::Settings::Framework] Returns project settings.
13
- def configure(&block)
14
- unless self.respond_to?(:settings)
15
- raise "#{self.inspect} has to respond to settings"
16
- end
17
- self.settings.instance_eval(&block)
18
- end
19
- end
20
- end
data/lib/rango/project.rb DELETED
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rango/settings"
4
- require "rango/mixins/application"
5
- require "rango/mixins/configurable"
6
- require "rubyexts/mixins/import"
7
-
8
- class Project
9
- class << self
10
- include RubyExts::ImportMixin
11
- include Rango::ApplicationMixin
12
- include Rango::Configurable
13
- # @since 0.0.1
14
- # @return [String] String reprezentation of project root directory.
15
- root = attribute :root, Dir.pwd
16
-
17
- # @since 0.0.1
18
- # @return [Rango::Settings::Framework] Project settings.
19
- attribute :settings, Rango::Settings::Framework.new
20
-
21
- # @since 0.0.5
22
- # @return [Rango::ORM::Adapter, NilClass] Used ORM
23
- attribute :orm
24
-
25
- attribute :router
26
- end
27
- end
@@ -1,98 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rubyexts/attribute"
4
-
5
- module Rango
6
- module Settings
7
- ConfigurationError = Class.new(StandardError)
8
-
9
- class Settings
10
- def initialize(params = Hash.new)
11
- params.each do |key, value|
12
- self.send("#{key}=", value)
13
- end
14
- end
15
-
16
- # @since 0.0.1
17
- # @example
18
- # Project.settings.merge(MyPlugin.settings)
19
- # @param [Rango::Settings] another Settings which will be merged into self. It doesn't change self.
20
- # @return [Hash] Hash of settings attributes.
21
- # TODO: maybe it should returns Rango::Settings?
22
- def merge(another)
23
- hattributes = another.is_a?(Hash) ? another : another.hattributes
24
- self.hattributes.merge(hattributes)
25
- end
26
-
27
- # @since 0.0.1
28
- # @example
29
- # Project.settings.merge!(MyPlugin.settings)
30
- # @param [Rango::Settings] another Settings which will be merged into self. It change self.
31
- # @return [Hash] Hash of settings attributes.
32
- # TODO: maybe it should returns Rango::Settings?
33
- def merge!(another)
34
- self.hattributes.merge!(another.hattributes)
35
- end
36
-
37
- # @since 0.0.1
38
- # @example
39
- # @return [String] All settings attributes in inspect format.
40
- def inspect
41
- self.hattributes.inspect
42
- end
43
-
44
- # @since 0.0.1
45
- def to_hash
46
- self.hattributes.reject { |key, value| value.nil? }
47
- end
48
-
49
- # @since 0.0.2
50
- def settings_module(name)
51
- if self.hattributes[name]
52
- return self.hattributes[name]
53
- else
54
- require "rango/settings/#{name}"
55
- const_name = name.to_s.camel_case
56
- constant = Rango::Settings.const_get(const_name)
57
- instance = constant.new
58
- self.hattributes[name] = instance
59
- end
60
- end
61
-
62
- # @since 0.0.1
63
- # @example
64
- # Project.configure do
65
- # self.foobar = "something"
66
- # end
67
- # # => Logger will warn you that property foobar doesn't exist.
68
- # @param [type] name explanation
69
- def method_missing(name, *args, &block)
70
- if name.to_s.match(/^([\w\d]+)=$/) && args.length.eql?(1)# && not block_given?
71
- raise ConfigurationError, "Unknown #{self.class} item: #$1"
72
- else
73
- super(name, *args, &block)
74
- end
75
- end
76
- end
77
-
78
- class Anonymous < Settings
79
- # @since 0.0.2
80
- # @example
81
- # Project.configure do
82
- # self.foobar = "something"
83
- # end
84
- # # => Set the property without warning
85
- # @param [type] name explanation
86
- def method_missing(name, *args, &block)
87
- if name.to_s.match(/^([\w\d]+)=$/) && args.length.eql?(1)# && not block_given?
88
- self.class.hattribute $1.to_sym
89
- self.send(name, *args, &block)
90
- else
91
- super(name, *args, &block)
92
- end
93
- end
94
- end
95
- end
96
- end
97
-
98
- require "rango/settings/framework"
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rango/settings"
4
-
5
- module Rango
6
- module Settings
7
- class Erubis < Settings
8
- # @since 0.0.2
9
- hattribute :pattern, "<% %>" # can be string or regexp
10
-
11
- # @since 0.0.2
12
- hattribute :custom_class # use your own class instead of Erubis::Eruby. Don't forget that you must include (TODO: what) for autoescaping
13
- end
14
- end
15
- end
@@ -1,42 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rango/settings"
4
-
5
- module Rango
6
- module Settings
7
- class Framework < Settings
8
- # @since 0.0.1
9
- # @return [String] Path to your +media+ directory.
10
- hattribute :media_root, lambda { File.join(Project.root, "media") }
11
-
12
- # @since 0.0.2
13
- # @return [String] rango-project.org/media/javascripts/mootools-core.js
14
- hattribute :media_prefix, String.new#"/media"
15
-
16
- # @since 0.0.1
17
- # @return [Array[String]] Array with paths where Rango will trying to find templates.
18
- hattribute :template_dirs, ["templates"]
19
-
20
- # @since 0.0.2
21
- hattribute :mime_formats, Array.new
22
-
23
- # @since 0.0.2
24
- # Just informative for plugins, it doesn't really do anything
25
- hattribute :orm
26
-
27
- # @since 0.0.2
28
- # Project.settings.erubis.pattern
29
- # hattribute :erubis, lambda { self.settings_module(:erubis) }
30
- def erubis
31
- self.settings_module(:erubis)
32
- end
33
-
34
- # @since 0.0.2
35
- # Project.settings.haml.format
36
- # hattribute :haml, lambda { self.settings_module(:haml) }
37
- def haml
38
- self.settings_module(:haml)
39
- end
40
- end
41
- end
42
- end
@@ -1,47 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rango" # Rango.loaded?
4
- require "rango/settings"
5
-
6
- module Rango
7
- module Settings
8
- class Haml < Settings
9
- # @since 0.0.2
10
- # Determines the output format. The default is :xhtml. Other options are :html4 and :html5, which are identical to :xhtml except there are no self-closing tags, XML prolog is ignored and correct DOCTYPEs are generated.
11
- hattribute :format, :xhtml # TODO: take from Project.settings.template.format
12
-
13
- # @since 0.0.2
14
- # Sets whether or not to escape HTML-sensitive characters in script. If this is true, = behaves like &=; otherwise, it behaves like !=. Note that if this is set, != should be used for yielding to subtemplates and rendering partials. Defaults to false.
15
- hattribute :escape_html, false
16
-
17
- # @since 0.0.2
18
- # Whether or not attribute hashes and Ruby scripts designated by = or ~ should be evaluated. If this is true, said scripts are rendered as empty strings. Defaults to false.
19
- hattribute :suppress_eval, false
20
-
21
- # @since 0.0.2
22
- # The character that should wrap element attributes. This defaults to ' (an apostrophe). Characters of this type within the attributes will be escaped (e.g. by replacing them with &apos;) if the character is an apostrophe or a quotation mark.
23
- hattribute :attr_wrapper, '"'
24
-
25
- # @since 0.0.2
26
- # A list of tag names that should be automatically self-closed if they have no content. Defaults to ['meta', 'img', 'link', 'br', 'hr', 'input', 'area', 'param', 'col', 'base'].
27
- hattribute :autoclose, %w[meta img link br hr input area param col base]
28
-
29
- # @since 0.0.2
30
- # A list of tag names that should automatically have their newlines preserved using the Haml::Helpers#preserve helper. This means that any content given on the same line as the tag will be preserved. For example
31
- # %textarea= "Foo\nBar"
32
- # compiles to:
33
- # <textarea>Foo&&#x000A;Bar</textarea>
34
- # Defaults to ['textarea', 'pre'].
35
- hattribute :preserve, %w[textarea pre]
36
-
37
- # @since 0.0.7
38
- # Haml now has an :ugly option, thanks to Wincent Colaiuta. This option forgoes pretty output formatting in favor of speed increases, which show up in particular when rendering deeply nested partials
39
- hattribute :ugly, lambda { Rango.loaded?("environments.rb") ? !Rango.development? : false }
40
-
41
- # @since 0.1.1
42
- # You don't have to explicitly specify attributes which are same for all the tags of same
43
- # kind in your markup over and over if you just specify them as an options for the engine
44
- hattribute :default_attributes, {script: {type: "text/javascript"}, form: {method: "POST"}}
45
- end
46
- end
47
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "rango/settings"
4
-
5
- module Rango
6
- module Settings
7
- class Template < Settings
8
- # @since 0.0.3
9
- hattribute :caching, Rango.development?
10
-
11
- # @since 0.0.3
12
- # useful for helpers
13
- hattribute :format, :html
14
-
15
- # @since 0.0.3
16
- hattribute :format_version, 5
17
- end
18
- end
19
- end
File without changes
@@ -1,45 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative "../spec_helper"
4
- require "media-path"
5
- require "rango/project"
6
-
7
- describe Project do
8
- it "should have root" do
9
- Project.should respond_to(:root)
10
- Project.root.should be_kind_of(String)
11
- end
12
-
13
- it "should have path which is similar as root, but it is MediaPath, not String" do
14
- Project.should respond_to(:path)
15
- Project.path.should be_kind_of(MediaPath)
16
- end
17
-
18
- it "should respond to name" do
19
- Project.should respond_to(:name)
20
- Project.name.should eql("rango") # it's derived from Dir.pwd
21
- end
22
-
23
- it "should have settings" do
24
- pending
25
- Project.should respond_to(:settings)
26
- Project.setttings.should be_kind_of(Rango::Settings::Framework)
27
- end
28
-
29
- it "should have logger" do
30
- Project.should respond_to(:logger)
31
- Project.logger.should be_kind_of(RubyExts::Logger)
32
- end
33
-
34
- describe ".import" do
35
- # TODO
36
- end
37
-
38
- describe ".import!" do
39
- # TODO
40
- end
41
-
42
- describe ".configure" do
43
- # TODO
44
- end
45
- end
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative "../spec_helper"
4
-
5
- describe Rango::Settings do
6
- before(:each) do
7
- @settings = Rango::Settings::Framework.new
8
- end
9
-
10
- it "should can merge one settings with another" do
11
- p @settings
12
- # TODO
13
- end
14
-
15
- it "should can merge! one settings with another" do
16
- # TODO
17
- end
18
-
19
- it "should log message if anyone tries to write nonexisting property" do
20
- # TODO
21
- #@settings.foobar = "something"
22
- end
23
-
24
- describe Rango::Settings::Framework do
25
- # TODO
26
- end
27
- end
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env rackup -s thin -p 4000
2
- # encoding: utf-8
3
-
4
- # rackup -p 4000 -s thin flat.ru
5
- require "rango"
6
- require "rango/mixins/mini"
7
-
8
- Rango.boot
9
-
10
- use Rango::Basic
11
-
12
- Project.configure do
13
- # TODO
14
- end
15
-
16
- # router
17
- require "rango/router/adapters/basic"
18
-
19
- map("/") do
20
- run app { "<h1>Rango is just Awesome!</h1>" }
21
- end