sinatra-mvc 0.0.2 → 0.0.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.
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