sinatra-mvc 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -12,16 +12,17 @@ with this document.
12
12
  A rule of thumb: In command line examples, a `$` prefix means your own
13
13
  user and a `#` prefix is a root terminal.
14
14
 
15
+ A big fat warning: Sinatra MVC < 0.1.0 is not fit for production. The API
16
+ _will_ change with almost _every_ release during sub-0.1.0 development.
17
+ Feel free to play around with it, though.
18
+
15
19
  System Dependencies
16
20
  -------------------
17
21
 
18
22
  Your system needs to have a working Ruby 1.9.2 installation (or later,
19
23
  but I haven't tested that). You'll also need some kind of database. The
20
- currently supported databases are:
21
-
22
- * MySQL
23
- * PostgreSQL
24
- * Sqlite3
24
+ currently supported databases are all of the database backends
25
+ [supported][10] by DataMapper.
25
26
 
26
27
  Sinatra MVC also has the possibility to use Memcache as a session storage
27
28
  system. This is the default. It's recommended as well.
@@ -68,7 +69,6 @@ mirrors of the development tree at wasda.nl.
68
69
  - or if you prefer github -
69
70
  $ git clone git://github.com/jorrizza/sinatra-mvc.git
70
71
  $ cd sinatra-mvc
71
- $ rm sinatra-mvc-*.gem
72
72
  $ gem build sinatra-mvc.gemspec
73
73
  # gem install sinatra-mvc-*.gem
74
74
 
@@ -99,6 +99,28 @@ in the `Gemfile`, will be available to your project. For further
99
99
  documentation about the `Gemfile`, read the [Bundler documentation about
100
100
  the `Gemfile`][17]
101
101
 
102
+ Sharing your project with others
103
+ --------------------------------
104
+
105
+ The project is prepared for use in Git and Mercurial. It's recommended to
106
+ make a repository of your project directory right from the get-go.
107
+
108
+ For example, when using Mercurial:
109
+
110
+ $ cd $HOME/src/my_project
111
+ $ hg init
112
+ $ hg add * .gitignore .hgignore
113
+ $ hg commit -m "First commit."
114
+
115
+ When your friend clones your repository, the Bundler cache is not included.
116
+ The Bundler installer has to be re-run for a clone of your project.
117
+
118
+ Again, an example using Mercurial:
119
+
120
+ $ hg clone ~jameshacker/src/my_project $HOME/src/my_project
121
+ $ cd $HOME/src/my_project
122
+ $ bundle install --path vendor --binstubs
123
+
102
124
  Updating
103
125
  --------
104
126
 
@@ -113,6 +135,7 @@ To get the latest updates from the repository, just pull (and merge if needed).
113
135
  $ hg update
114
136
  - or when using github -
115
137
  $ git pull
138
+ $ rm sinatra-mvc-*.gem
116
139
  $ gem build sinatra-mvc.gemspec
117
140
  # gem install sinatra-mvc-*.gem
118
141
 
@@ -455,6 +478,7 @@ Just don't use these as variables within controllers and views, mkay?
455
478
  [7]: http://rubydoc.info/gems/dm-core/1.0.2/frames
456
479
  [8]: https://github.com/jorrizza/sinatra-mvc
457
480
  [9]: https://bitbucket.org/jorrizza/sinatra-mvc
481
+ [10]: https://github.com/search?langOverride=&q=dm+adapter&repo=&start_value=1&type=Repositories
458
482
  [12]: http://www.rubydoc.info/gems/dm-migrations/1.0.2/frames
459
483
  [13]: http://www.rubydoc.info/gems/dm-aggregates/1.0.2/frames
460
484
  [14]: http://www.rubydoc.info/gems/dm-validations/1.0.2/frames
@@ -5,4 +5,6 @@ PROJECT = ENV['PROJECT'] ? ENV['PROJECT'] : '.'
5
5
 
6
6
  Dir.chdir PROJECT do
7
7
  require 'sinatra-mvc'
8
+
9
+ SinatraMVC.run!
8
10
  end
@@ -15,17 +15,15 @@ $:.push PROJECT
15
15
 
16
16
  # Guess what. We need these.
17
17
  require 'rubygems'
18
- require 'sinatra'
19
- require 'erubis'
20
-
21
- # i18n using R18n.
22
- require 'sinatra/r18n'
18
+ require 'sinatra/base'
23
19
 
24
20
  # Load all of the core modules, in order.
21
+ require 'sinatra-mvc/base'
22
+ require 'sinatra-mvc/i18n'
25
23
  require 'sinatra-mvc/settings'
24
+ require 'sinatra-mvc/environment_helpers'
26
25
  require 'sinatra-mvc/view_prefix'
27
26
  require 'sinatra-mvc/render_params'
28
- require 'sinatra-mvc/database_connection'
29
27
  require 'sinatra-mvc/session_store'
30
28
  require 'sinatra-mvc/flash_messages'
31
29
  require 'sinatra-mvc/post_handler'
@@ -37,8 +35,6 @@ require 'bundler/setup'
37
35
 
38
36
  # Load the application.
39
37
  require 'conf/environment'
38
+ require 'sinatra-mvc/database_connection'
40
39
  require 'sinatra-mvc/load_app'
41
40
  require 'sinatra-mvc/load_utils'
42
-
43
- # Start the classic mode.
44
- set :run, true
@@ -0,0 +1,3 @@
1
+ # The base application class of Sinatra MVC.
2
+ class SinatraMVC < Sinatra::Base
3
+ end
@@ -1,14 +1,15 @@
1
- # Simple helper to display form field data when available.
2
- # It prefers params, but when unavailable it'll use the supplied object (if available).
3
-
4
- helpers do
5
- def c(field, object = nil)
6
- if params.has_key? field.to_s
7
- h params[field.to_s]
8
- elsif object.respond_to? field
9
- h object.send(field)
10
- else
11
- ""
1
+ class SinatraMVC
2
+ helpers do
3
+ # Simple helper to display form field data when available.
4
+ # It prefers params, but when unavailable it'll use the supplied object (if available).
5
+ def c(field, object = nil)
6
+ if params.has_key? field.to_s
7
+ h params[field.to_s]
8
+ elsif object.respond_to? field
9
+ h object.send(field)
10
+ else
11
+ ""
12
+ end
12
13
  end
13
14
  end
14
15
  end
@@ -1,15 +1,18 @@
1
+ # These DataMapper parts are required by Sinatra MVC.
1
2
  require 'dm-core'
2
3
  require 'dm-types'
3
4
  require 'dm-validations'
4
5
 
5
- # Add translations to models
6
+ # Add translations to models.
6
7
  require 'r18n-core/translated'
7
8
 
8
- # When we're developing, some DataMapper debug would be nice.
9
- if development?
10
- DataMapper::Logger.new $stdout, :debug
11
- #DataMapper::Model.raise_on_save_failure = true
9
+ class SinatraMVC
10
+ # When we're developing, some DataMapper debug would be nice.
11
+ if development?
12
+ DataMapper::Logger.new $stdout, :debug
13
+ #DataMapper::Model.raise_on_save_failure = true
14
+ end
12
15
  end
13
16
 
14
17
  # Set up our database connection.
15
- DataMapper.setup :default, Settings.settings['database_connection']
18
+ DataMapper.setup :default, SinatraMVC::Settings.settings['database_connection']
@@ -0,0 +1,23 @@
1
+ class SinatraMVC
2
+ # In classic mode, the helpers are available in request
3
+ # context. Now we have to re-supply these because some people
4
+ # use them a lot. Using the Delegator is a bit too much for
5
+ # this use case.
6
+ helpers do
7
+ # Is my application running in development mode?
8
+ # Uses Rack's environment.
9
+ def development?
10
+ settings.environment == 'development'
11
+ end
12
+ # Is my application running in test mode?
13
+ # Uses Rack's environment.
14
+ def test?
15
+ settings.environment == 'test'
16
+ end
17
+ # Is my application running in production mode?
18
+ # Uses Rack's environment.
19
+ def production?
20
+ settings.environment == 'production'
21
+ end
22
+ end
23
+ end
@@ -1,7 +1,8 @@
1
- # Like rails, make h() escape HTML characters.
2
-
3
- helpers do
4
- def h(s)
5
- Rack::Utils.escape_html s
1
+ class SinatraMVC
2
+ helpers do
3
+ # Like rails, make h() escape HTML characters.
4
+ def h(s)
5
+ Rack::Utils.escape_html s
6
+ end
6
7
  end
7
8
  end
@@ -1,4 +1,10 @@
1
- # Flash messages on redirect
1
+ # Flash messages on redirect.
2
+ # See https://github.com/vast/sinatra-redirect-with-flash
3
+
2
4
  require 'rack-flash'
3
- use Rack::Flash
4
5
  require 'sinatra/redirect_with_flash'
6
+
7
+ class SinatraMVC
8
+ use Rack::Flash
9
+ register Sinatra::RedirectWithFlash
10
+ end
@@ -0,0 +1,6 @@
1
+ # i18n using R18n.
2
+ require 'sinatra/r18n'
3
+
4
+ class SinatraMVC
5
+ register Sinatra::R18n
6
+ end
@@ -1,12 +1,16 @@
1
- # Loads the app recursively.
2
- # It does this by first loading all of the models and then
3
- # the controllers (app components if you will).
1
+ # Load the models in Object scope.
2
+ Dir.glob(File.join PROJECT, 'models', '**', '*.rb').sort.each do |file|
3
+ require file
4
+ end
4
5
 
5
- def load_app(dir)
6
- Dir.glob(File.join PROJECT, dir, '**', '*.rb').sort.each do |file|
7
- load file
6
+ class SinatraMVC
7
+ # Load the app recursively.
8
+ # We have to run the code in our SinatraMVC class. We'll be nice to
9
+ # our developers and don't require them to open the class in every
10
+ # app file.
11
+ Dir.glob(File.join PROJECT, 'app', '**', '*.rb').sort.each do |file|
12
+ # TODO I'm sure we can think of a better way to do this.
13
+ self.class_eval File.new(file).read, file
8
14
  end
9
- end
10
15
 
11
- load_app 'models'
12
- load_app 'app'
16
+ end
@@ -1,67 +1,68 @@
1
- # Utility functions to handle POST data.
2
- # TODO: Write post_object_multi for field[] input fields
3
-
4
- helpers do
5
- # Makes fetch more readable
6
- def n
7
- :n
8
- end
9
-
10
- # Create or modify a single object from POST data.
11
- # We assume the programmer isn't stupid, and actually provided a DataMapper
12
- # class or object as the first argument.
13
- # The second and third arguments supply a redirection mechanism on succes
14
- # and failure. By default it's the referer. When nil, no redirection will
15
- # take place.
16
- def fetch(mode, input,
17
- the_way_forward = request.env['HTTP_REFERER'],
18
- the_way_back = request.env['HTTP_REFERER'])
19
-
20
- # Get the proper object and class.
21
- if input.is_a? DataMapper::Resource
22
- the_object = input
23
- the_class = the_object.class
24
- else
25
- the_class = input
26
- the_object = the_class.new
1
+ class SinatraMVC
2
+ # Utility functions to handle POST data.
3
+ # TODO: Write post_object_multi for field[] input fields
4
+ helpers do
5
+ # Makes fetch more readable
6
+ def n
7
+ :n
27
8
  end
9
+
10
+ # Create or modify a single object from POST data.
11
+ # We assume the programmer isn't stupid, and actually provided a DataMapper
12
+ # class or object as the first argument.
13
+ # The second and third arguments supply a redirection mechanism on succes
14
+ # and failure. By default it's the referer. When nil, no redirection will
15
+ # take place.
16
+ def fetch(mode, input,
17
+ the_way_forward = request.env['HTTP_REFERER'],
18
+ the_way_back = request.env['HTTP_REFERER'])
28
19
 
29
- # fetch 1, ...
30
- if mode == 1
31
- # Check for each parameter if we've got a model field
32
- # and call the setter for that field and redirect.
33
- params.each do |field, value|
34
- method = (field + '=').to_sym
35
- if the_object.respond_to? method
36
- the_object.send(method, value)
37
- end
20
+ # Get the proper object and class.
21
+ if input.is_a? DataMapper::Resource
22
+ the_object = input
23
+ the_class = the_object.class
24
+ else
25
+ the_class = input
26
+ the_object = the_class.new
38
27
  end
39
28
 
40
- # If the object's valid, save and redirect. If not, show all
41
- # the errors to the user at the way back location. We also make
42
- # sure the same error doesn't show twice.
43
- if the_object.valid?
44
- the_object.save
45
- redirect the_way_forward unless the_way_forward.nil?
46
- else
47
- flash[:error] = []
48
- found_errors = []
49
- the_object.errors.each_pair do |field, error|
50
- field = field.to_s
51
- field.gsub! /_id$/, ''
52
- error.each do |e|
53
- unless found_errors.include? [field, error]
54
- flash[:error] << t[the_class.inspect.downcase.to_sym][field.to_sym] + ': ' + e
55
- found_errors << [field, error]
29
+ # fetch 1, ...
30
+ if mode == 1
31
+ # Check for each parameter if we've got a model field
32
+ # and call the setter for that field and redirect.
33
+ params.each do |field, value|
34
+ method = (field + '=').to_sym
35
+ if the_object.respond_to? method
36
+ the_object.send(method, value)
37
+ end
38
+ end
39
+
40
+ # If the object's valid, save and redirect. If not, show all
41
+ # the errors to the user at the way back location. We also make
42
+ # sure the same error doesn't show twice.
43
+ if the_object.valid?
44
+ the_object.save
45
+ redirect the_way_forward unless the_way_forward.nil?
46
+ else
47
+ flash[:error] = []
48
+ found_errors = []
49
+ the_object.errors.each_pair do |field, error|
50
+ field = field.to_s
51
+ field.gsub! /_id$/, ''
52
+ error.each do |e|
53
+ unless found_errors.include? [field, error]
54
+ flash[:error] << t[the_class.inspect.downcase.to_sym][field.to_sym] + ': ' + e
55
+ found_errors << [field, error]
56
+ end
56
57
  end
57
58
  end
59
+ redirect the_way_back unless the_way_back.nil?
58
60
  end
59
- redirect the_way_back unless the_way_back.nil?
61
+ elsif mode == :n
62
+ raise NotImplementedError, 'Sorry, fetch n, ... is not implemented yet.'
63
+ else
64
+ raise ArgumentError, 'No such mode: ' + mode.inspect
60
65
  end
61
- elsif mode == :n
62
- raise NotImplementedError, 'Sorry, fetch n, ... is not implemented yet.'
63
- else
64
- raise ArgumentError, 'No such mode: ' + mode.inspect
65
66
  end
66
67
  end
67
68
  end
@@ -1,18 +1,19 @@
1
- # This will enable neat parameters like Rails and PHP have.
2
- # You know, the variable[key] things.
3
- # From the Sinatra book.
4
-
5
- before do
6
- new_params = {}
7
- params.each_pair do |full_key, value|
8
- this_param = new_params
9
- split_keys = full_key.split(/\]\[|\]|\[/)
10
- split_keys.each_index do |index|
11
- break if split_keys.length == index + 1
12
- this_param[split_keys[index]] ||= {}
13
- this_param = this_param[split_keys[index]]
14
- end
15
- this_param[split_keys.last] = value
1
+ class SinatraMVC
2
+ # This will enable neat parameters like Rails and PHP have.
3
+ # You know, the variable[key] things.
4
+ # From the Sinatra book.
5
+ before do
6
+ new_params = {}
7
+ params.each_pair do |full_key, value|
8
+ this_param = new_params
9
+ split_keys = full_key.split(/\]\[|\]|\[/)
10
+ split_keys.each_index do |index|
11
+ break if split_keys.length == index + 1
12
+ this_param[split_keys[index]] ||= {}
13
+ this_param = this_param[split_keys[index]]
14
+ end
15
+ this_param[split_keys.last] = value
16
+ end
17
+ request.params.replace new_params
16
18
  end
17
- request.params.replace new_params
18
19
  end
@@ -1,14 +1,15 @@
1
- # Sessions for Sinatra
2
- # Both cookie based as Memcache based sessions are supported
3
-
4
- case settings.session_backend
5
- when :cookie
6
- secret = (0..50).map do
7
- (65 + rand(25)).chr
8
- end.join
9
- use Rack::Session::Cookie, :expire_after => settings.session_max_age, :key => 'sinatra.mvc.session', :secret => secret
10
- when :memcache
11
- use Rack::Session::Memcache, :expire_after => settings.session_max_age, :key => 'sinatra.mvc.session', :namespace => 'sinatra:mvc:session', :memcache_server => settings.session_store
12
- else
13
- raise 'Unknown session backend: ' + settings.session_backend.inspect
1
+ class SinatraMVC
2
+ # Sessions for Sinatra
3
+ # Both cookie based as Memcache based sessions are supported
4
+ case settings.session_backend
5
+ when :cookie
6
+ secret = (0..50).map do
7
+ (65 + rand(25)).chr
8
+ end.join
9
+ use Rack::Session::Cookie, :expire_after => settings.session_max_age, :key => 'sinatra.mvc.session', :secret => secret
10
+ when :memcache
11
+ use Rack::Session::Memcache, :expire_after => settings.session_max_age, :key => 'sinatra.mvc.session', :namespace => 'sinatra:mvc:session', :memcache_server => settings.session_store
12
+ else
13
+ raise 'Unknown session backend: ' + settings.session_backend.inspect
14
+ end
14
15
  end
@@ -2,28 +2,37 @@
2
2
 
3
3
  require 'psych'
4
4
 
5
- class Settings
6
- def self.load(filename)
7
- begin
8
- @@settings = Psych.load_file filename
9
- rescue
10
- raise 'Could not load configuration! Psych said: ' + $!.to_s
5
+ class SinatraMVC
6
+ # The settings loading class. It pretty much takes care of loading
7
+ # the settings from your project's settings.yml file.
8
+ class Settings
9
+
10
+ # Loads the settings file and populates the Settings class.
11
+ # Later, these settings will be passed into Sinatra's set().
12
+ def self.load(filename)
13
+ begin
14
+ @@settings = Psych.load_file filename
15
+ rescue
16
+ raise 'Could not load configuration! Psych said: ' + $!.to_s
17
+ end
11
18
  end
12
- end
13
19
 
14
- def self.settings
15
- @@settings
20
+ # Public class attr_reader of the settings.
21
+ # It's just the output of Psych.load_file, really.
22
+ def self.settings
23
+ @@settings
24
+ end
16
25
  end
17
- end
18
26
 
19
- Settings.load File.join(PROJECT, 'conf', 'settings.yml')
27
+ Settings.load File.join(PROJECT, 'conf', 'settings.yml')
20
28
 
21
- # Now we have to feed the Sinatra settings
22
- Settings.settings.each_pair do |setting, value|
23
- case setting
24
- when 'views_root', 'translations', 'public'
25
- set setting.to_sym, File.join(PROJECT, value)
26
- else
27
- set setting.to_sym, value
29
+ # Now we have to feed the Sinatra settings
30
+ Settings.settings.each_pair do |setting, value|
31
+ case setting
32
+ when 'views_root', 'translations', 'public'
33
+ set setting.to_sym, File.join(PROJECT, value)
34
+ else
35
+ set setting.to_sym, value
36
+ end
28
37
  end
29
38
  end
@@ -1,17 +1,21 @@
1
- # Set the view prefix right if the
2
- # first part of the URL exists as a subdir
3
- # of our main view directory.
1
+ class SinatraMVC
2
+ # Set the view prefix right if the first part of the URL exists as a subdir
3
+ # of our main view directory.
4
+ # This construction enables us to recreate some liberty we had in classic
5
+ # mode, in which set() could be called in the request scope.
6
+ before do |obj|
7
+ obj.class.class_exec request do |request|
8
+ first_dir = request.env['REQUEST_URI'].split('/')[1]
4
9
 
5
- before do
6
- first_dir = request.env['REQUEST_URI'].split('/')[1]
7
-
8
- if first_dir
9
- if File.directory? File.join(settings.views_root, first_dir)
10
- set :views, File.join(settings.views_root, first_dir)
11
- else
12
- set :views, settings.views_root
10
+ if first_dir
11
+ if File.directory? File.join(settings.views_root, first_dir)
12
+ set :views, File.join(settings.views_root, first_dir)
13
+ else
14
+ set :views, settings.views_root
15
+ end
16
+ else
17
+ set :views, settings.views_root
18
+ end
13
19
  end
14
- else
15
- set :views, settings.views_root
16
20
  end
17
21
  end
@@ -11,7 +11,13 @@ gem 'maruku'
11
11
  gem 'dm-migrations'
12
12
  gem 'dm-aggregates'
13
13
 
14
+ # Datamapper connection methods.
15
+ gem 'dm-mysql-adapter'
16
+ #gem 'dm-postgres-adapter'
17
+ #gem 'dm-sqlite-adapter'
18
+
14
19
  # Some often used template utilities. Add/enable at will.
20
+ gem 'erubis'
15
21
  # gem 'RedCloth'
16
22
  # gem 'liquid'
17
23
  # gem 'less'
@@ -6,5 +6,6 @@ require 'dm-aggregates'
6
6
  require 'dm-migrations'
7
7
 
8
8
  # Templating Engines
9
+ require 'erubis'
9
10
  #require 'redcloth'
10
11
  #require 'liquid'
@@ -4,5 +4,5 @@
4
4
  ::PROJECT = File.expand_path(File.dirname(__FILE__))
5
5
  Dir.chdir ::PROJECT do
6
6
  require 'sinatra-mvc'
7
- run Sinatra::Application
7
+ run SinatraMVC
8
8
  end
@@ -12,16 +12,17 @@ with this document.
12
12
  A rule of thumb: In command line examples, a `$` prefix means your own
13
13
  user and a `#` prefix is a root terminal.
14
14
 
15
+ A big fat warning: Sinatra MVC < 0.1.0 is not fit for production. The API
16
+ _will_ change with almost _every_ release during sub-0.1.0 development.
17
+ Feel free to play around with it, though.
18
+
15
19
  System Dependencies
16
20
  -------------------
17
21
 
18
22
  Your system needs to have a working Ruby 1.9.2 installation (or later,
19
23
  but I haven't tested that). You'll also need some kind of database. The
20
- currently supported databases are:
21
-
22
- * MySQL
23
- * PostgreSQL
24
- * Sqlite3
24
+ currently supported databases are all of the database backends
25
+ [supported][10] by DataMapper.
25
26
 
26
27
  Sinatra MVC also has the possibility to use Memcache as a session storage
27
28
  system. This is the default. It's recommended as well.
@@ -68,7 +69,6 @@ mirrors of the development tree at wasda.nl.
68
69
  - or if you prefer github -
69
70
  $ git clone git://github.com/jorrizza/sinatra-mvc.git
70
71
  $ cd sinatra-mvc
71
- $ rm sinatra-mvc-*.gem
72
72
  $ gem build sinatra-mvc.gemspec
73
73
  # gem install sinatra-mvc-*.gem
74
74
 
@@ -99,6 +99,28 @@ in the `Gemfile`, will be available to your project. For further
99
99
  documentation about the `Gemfile`, read the [Bundler documentation about
100
100
  the `Gemfile`][17]
101
101
 
102
+ Sharing your project with others
103
+ --------------------------------
104
+
105
+ The project is prepared for use in Git and Mercurial. It's recommended to
106
+ make a repository of your project directory right from the get-go.
107
+
108
+ For example, when using Mercurial:
109
+
110
+ $ cd $HOME/src/my_project
111
+ $ hg init
112
+ $ hg add * .gitignore .hgignore
113
+ $ hg commit -m "First commit."
114
+
115
+ When your friend clones your repository, the Bundler cache is not included.
116
+ The Bundler installer has to be re-run for a clone of your project.
117
+
118
+ Again, an example using Mercurial:
119
+
120
+ $ hg clone ~jameshacker/src/my_project $HOME/src/my_project
121
+ $ cd $HOME/src/my_project
122
+ $ bundle install --path vendor --binstubs
123
+
102
124
  Updating
103
125
  --------
104
126
 
@@ -113,6 +135,7 @@ To get the latest updates from the repository, just pull (and merge if needed).
113
135
  $ hg update
114
136
  - or when using github -
115
137
  $ git pull
138
+ $ rm sinatra-mvc-*.gem
116
139
  $ gem build sinatra-mvc.gemspec
117
140
  # gem install sinatra-mvc-*.gem
118
141
 
@@ -455,6 +478,7 @@ Just don't use these as variables within controllers and views, mkay?
455
478
  [7]: http://rubydoc.info/gems/dm-core/1.0.2/frames
456
479
  [8]: https://github.com/jorrizza/sinatra-mvc
457
480
  [9]: https://bitbucket.org/jorrizza/sinatra-mvc
481
+ [10]: https://github.com/search?langOverride=&q=dm+adapter&repo=&start_value=1&type=Repositories
458
482
  [12]: http://www.rubydoc.info/gems/dm-migrations/1.0.2/frames
459
483
  [13]: http://www.rubydoc.info/gems/dm-aggregates/1.0.2/frames
460
484
  [14]: http://www.rubydoc.info/gems/dm-validations/1.0.2/frames
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joris van Rooij
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-27 00:00:00 +01:00
17
+ date: 2011-01-12 00:00:00 +01:00
18
18
  default_executable: sinatra-mvc
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -150,7 +150,7 @@ dependencies:
150
150
  type: :runtime
151
151
  version_requirements: *id010
152
152
  - !ruby/object:Gem::Dependency
153
- name: dm-mysql-adapter
153
+ name: memcache-client
154
154
  prerelease: false
155
155
  requirement: &id011 !ruby/object:Gem::Requirement
156
156
  none: false
@@ -162,45 +162,6 @@ dependencies:
162
162
  version: "0"
163
163
  type: :runtime
164
164
  version_requirements: *id011
165
- - !ruby/object:Gem::Dependency
166
- name: dm-postgres-adapter
167
- prerelease: false
168
- requirement: &id012 !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- segments:
174
- - 0
175
- version: "0"
176
- type: :runtime
177
- version_requirements: *id012
178
- - !ruby/object:Gem::Dependency
179
- name: dm-sqlite-adapter
180
- prerelease: false
181
- requirement: &id013 !ruby/object:Gem::Requirement
182
- none: false
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- segments:
187
- - 0
188
- version: "0"
189
- type: :runtime
190
- version_requirements: *id013
191
- - !ruby/object:Gem::Dependency
192
- name: memcache-client
193
- prerelease: false
194
- requirement: &id014 !ruby/object:Gem::Requirement
195
- none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- segments:
200
- - 0
201
- version: "0"
202
- type: :runtime
203
- version_requirements: *id014
204
165
  description: A custom MVC stack that tries to keep the lightweight Sinatra feeling, while adding structure to an already awesome workflow.
205
166
  email: jorrizza@jrrzz.net
206
167
  executables:
@@ -212,7 +173,10 @@ extra_rdoc_files: []
212
173
 
213
174
  files:
214
175
  - bin/sinatra-mvc
176
+ - lib/sinatra-mvc/base.rb
177
+ - lib/sinatra-mvc/i18n.rb
215
178
  - lib/sinatra-mvc/escaping.rb
179
+ - lib/sinatra-mvc/environment_helpers.rb
216
180
  - lib/sinatra-mvc/load_utils.rb
217
181
  - lib/sinatra-mvc/render_params.rb
218
182
  - lib/sinatra-mvc/database_connection.rb