fume 0.10.0a → 0.10.0

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -5
  3. data/.rspec +2 -0
  4. data/.travis.yml +8 -0
  5. data/CHANGELOG.md +11 -3
  6. data/Gemfile +1 -1
  7. data/LICENSE.txt +22 -0
  8. data/README.md +28 -0
  9. data/Rakefile +3 -5
  10. data/fume.gemspec +34 -25
  11. data/gemfiles/rails3_2.gemfile +6 -0
  12. data/lib/fume.rb +7 -5
  13. data/lib/fume/active_record_exts.rb +10 -0
  14. data/lib/fume/controller_exts.rb +35 -0
  15. data/lib/fume/helper_exts.rb +8 -0
  16. data/lib/fume/railtie.rb +5 -7
  17. data/lib/fume/render_cache.rb +26 -20
  18. data/lib/fume/require_accessor.rb +22 -0
  19. data/lib/fume/version.rb +3 -0
  20. data/spec/fume/controller_exts_spec.rb +60 -0
  21. data/spec/fume/helper_exts_spec.rb +17 -0
  22. data/spec/fume/render_cache_spec.rb +62 -0
  23. data/spec/fume/require_accessor_spec.rb +19 -0
  24. data/spec/internal/app/controllers/application_controller.rb +2 -0
  25. data/spec/internal/app/models/page.rb +2 -0
  26. data/spec/internal/config/database.yml +3 -0
  27. data/spec/internal/config/routes.rb +3 -0
  28. data/spec/internal/db/schema.rb +6 -0
  29. data/spec/internal/log/.gitignore +1 -0
  30. data/spec/internal/public/favicon.ico +0 -0
  31. data/spec/spec_helper.rb +22 -8
  32. metadata +152 -34
  33. data/VERSION +0 -1
  34. data/lib/fume/app_setting_loader.rb +0 -12
  35. data/lib/fume/rails_ext.rb +0 -70
  36. data/lib/generators/fume/simple_scaffold/USAGE +0 -10
  37. data/lib/generators/fume/simple_scaffold/simple_scaffold_generator.rb +0 -44
  38. data/lib/generators/fume/simple_scaffold/templates/_form.html.erb +0 -7
  39. data/lib/generators/fume/simple_scaffold/templates/controller.rb +0 -44
  40. data/lib/generators/fume/simple_scaffold/templates/edit.html.erb +0 -5
  41. data/lib/generators/fume/simple_scaffold/templates/index.html.erb +0 -32
  42. data/lib/generators/fume/simple_scaffold/templates/new.html.erb +0 -5
  43. data/spec/spec.opts +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f05795f6ec083125f74c05e480c4e9a9baa00ac
4
- data.tar.gz: 520e63e594b0c35c78cc88f57e816e84a3036556
3
+ metadata.gz: 94d01eede63fdda3019866d702fb8229f347bfbc
4
+ data.tar.gz: 6056e4c689516d952cd7f59fdcfcf891176c6dfd
5
5
  SHA512:
6
- metadata.gz: 1d6391c752c7db8bad341974c949334da6af1f40c84a87c728c3ec68227fb66502968768eed9f4f595ad6612a84baa0e8d7d73a9b33f83c035bde2af6356beb0
7
- data.tar.gz: b13947b844463c6174daccccf8bc757a9571f86fc5c243e7f42afca63e7db96b1d383d7d2908d786e32fb3f4cc2d27ff4c8636d8df369c39347a7dda03b04fb1
6
+ metadata.gz: a10457e43ac6bb7401c982e56597d70e0f43a4d2496f368150aba49903feb0642e485c1e6b6a01cb5b10235b253e47f8980106006ba5033486b04f715f66d4b9
7
+ data.tar.gz: e8d36377f06ad71b8bdb2f227669952b5fa7cb5546a80f2af9ab7acda9735b6fe7922db04086b67ff34e94ebd2ea58fc40e186b4336735363f2bd93db00afcda
data/.gitignore CHANGED
@@ -1,6 +1,9 @@
1
1
  .DS_Store
2
- coverage
3
- pkg/*
4
- tmp/*
5
- gem_graph.png
6
- Gemfile.lock
2
+ /coverage
3
+ /pkg/*
4
+ /tmp/*
5
+ /gem_graph.png
6
+ /Gemfile.lock
7
+ /gemfiles/*.lock
8
+ /tags
9
+ /spec/internal/db/*.sqlite
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,8 @@
1
+ script: "bundle exec rake spec"
2
+ rvm:
3
+ - 2.1.0
4
+ - 2.0.0
5
+ - 1.9.3
6
+ gemfile:
7
+ - Gemfile
8
+ - gemfiles/rails3_2.gemfile
@@ -1,12 +1,20 @@
1
- ## 0.9.0
1
+ ## 0.10
2
+ - add require_accessor on model
3
+ - extract simple_nav to fume-nav gem
4
+ - remove app_setting_loader, use fume-settable instead of it.
5
+ - remove action_attr_accessor
6
+ - remove simple_scaffold generator
7
+ - refactor code structure
8
+
9
+ ## 0.9
2
10
  - extract cancan to standalone gem
3
11
  - remove authlogic ext
4
12
 
5
- ## 0.8.0
13
+ ## 0.8
6
14
  - don't depends all rails plugin, you must depend it for yourself.
7
15
  - upgrade rails to 3.1.0
8
16
 
9
- ## 0.7.0 (2011-09-01):
17
+ ## 0.7
10
18
  - add action_attr_accessor method
11
19
  - depend rails_i18n
12
20
  - rename simple\_theme to simple_nav and rewirte
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in fume.gemspec
4
4
  gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 sunteya
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -0,0 +1,28 @@
1
+ # Fume
2
+
3
+ [![Build Status](https://travis-ci.org/sunteya/fume.svg?branch=master)](https://travis-ci.org/sunteya/fume)
4
+ [![Coverage Status](https://coveralls.io/repos/sunteya/fume/badge.png)](https://coveralls.io/r/sunteya/fume)
5
+
6
+ some simple rails extentions
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'fume'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ ## Usage
19
+
20
+ please read source code and spec file.
21
+
22
+ ## Contributing
23
+
24
+ 1. Fork it ( http://github.com/sunteya/fume/fork )
25
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
26
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
27
+ 4. Push to the branch (`git push origin my-new-feature`)
28
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
2
 
3
- require 'rake/version_task'
4
- Rake::VersionTask.new
5
-
6
-
7
-
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
@@ -1,31 +1,40 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
-
4
- Gem::Specification.new do |s|
5
- s.name = "fume"
6
- s.version = File.read(File.expand_path("../VERSION", __FILE__)).chomp
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ["Sunteya"]
9
- s.email = ["Sunteya@gmail.com"]
10
- s.homepage = "http://github.com/sunteya/fume"
11
- s.summary = %q{a simple rails scaffold.}
12
- s.description = %q{a simple rails scaffold.}
13
-
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib"]
18
-
19
-
20
- # rails
21
- s.add_dependency "rails", ">= 3.2.13"
22
- s.add_dependency "rails-i18n", ">= 0.7.2"
23
- s.add_dependency "hashie", ">= 1.2.0"
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fume/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fume"
8
+ spec.version = Fume::VERSION
9
+ spec.authors = ["sunteya"]
10
+ spec.email = ["sunteya@gmail.com"]
11
+ spec.summary = %q{some simple rails extentions.}
12
+ spec.description = %q{some simple rails extentions.}
13
+ spec.homepage = "https://github.com/sunteya/fume"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "rails", ">= 3.2.13"
22
+ spec.add_dependency "rails-i18n", ">= 0.7.2"
23
+ spec.add_dependency "hashie", ">= 1.2.0"
24
24
 
25
- # development
26
- s.add_development_dependency "version"
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "rake"
27
+
28
+ spec.add_development_dependency "rspec-rails", "~> 2.14.1"
29
+ spec.add_development_dependency "rspec-do_action", "~> 0.0.3"
30
+ spec.add_development_dependency "coveralls"
31
+
32
+ spec.add_development_dependency "pry-nav"
33
+ spec.add_development_dependency "sqlite3"
34
+ spec.add_development_dependency "combustion", "~> 0.5.1"
27
35
  end
28
36
 
29
37
 
30
38
 
31
39
 
40
+
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "rails", "~> 3.2.0"
4
+
5
+ # Specify your gem's dependencies in rspec-do_action.gemspec
6
+ gemspec path: '..'
@@ -1,17 +1,19 @@
1
1
  require "active_support"
2
2
  require "rails-i18n"
3
+ require "fume/version"
3
4
 
4
5
  module Fume
5
- VERSION = File.read(File.expand_path("../../VERSION", __FILE__)).chomp
6
-
7
6
  extend ActiveSupport::Autoload
8
- autoload :RailsExt
9
- autoload :AppSettingLoader
7
+ autoload :HelperExts
8
+ autoload :ActiveRecordExts
9
+ autoload :ControllerExts
10
+
10
11
  autoload :RenderCache
12
+ autoload :RequireAccessor
11
13
 
12
14
  def self.load_tasks
13
15
  Dir[File.expand_path("../tasks/*.rake", __FILE__)].each { |ext| load ext }
14
16
  end
15
17
  end
16
18
 
17
- require File.expand_path("../fume/railtie", __FILE__)
19
+ require File.expand_path("../fume/railtie", __FILE__)
@@ -0,0 +1,10 @@
1
+ module Fume
2
+ module ActiveRecordExts
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include RequireAccessor
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,35 @@
1
+ module Fume
2
+ module ControllerExts
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper_method :public_path, :public_url
7
+ end
8
+
9
+ protected
10
+ def redirect_to_ok_url_or_default(default)
11
+ redirect_to params[:ok_url] || default
12
+ end
13
+
14
+ def public_url(source)
15
+ if source.include?("://")
16
+ source
17
+ else
18
+ "#{request.protocol}#{request.host_with_port}#{public_path(source)}"
19
+ end
20
+ end
21
+
22
+ def public_path(source)
23
+ url = url_for(source)
24
+ return url if url.include?("://")
25
+
26
+ if url.start_with?(request.script_name)
27
+ url
28
+ else
29
+ "#{request.script_name}#{url}"
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+
@@ -0,0 +1,8 @@
1
+ module Fume
2
+ module HelperExts
3
+ def ok_url_tag
4
+ hidden_field_tag "ok_url", params[:ok_url] if !params[:ok_url].blank?
5
+ end
6
+ end
7
+ end
8
+
@@ -2,18 +2,16 @@ require "rails/railtie"
2
2
 
3
3
  module Fume
4
4
  class Railtie < ::Rails::Railtie
5
- initializer 'fume.initialize', :after => :after_initialize do |app|
6
- RailsExt.init!
5
+ initializer 'fume' do |app|
6
+ ActiveSupport.on_load(:action_controller) { include ControllerExts }
7
+ ActiveSupport.on_load(:action_view) { include HelperExts }
8
+ ActiveSupport.on_load(:active_record) { include ActiveRecordExts }
9
+
7
10
  RenderCache.init!
8
11
  end
9
12
 
10
- initializer "fume.after_initialize", :after => :after_initialize do |app|
11
- AppSettingLoader.init!
12
- end
13
-
14
13
  rake_tasks do
15
14
  Fume.load_tasks
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -1,14 +1,8 @@
1
1
  module Fume
2
2
  module RenderCache
3
-
4
3
  def self.init!
5
- if defined? ::ActionController::Base
6
- ::ActionController::Base.send :include, ControllerExtensions
7
- end
8
-
9
- if defined? ::ActiveRecord::Base
10
- ::ActiveRecord::Base.send :include, ActiveRecordExtensions
11
- end
4
+ ::ActionController::Base.send :include, ControllerExtensions if defined? ::ActionController::Base
5
+ ::ActiveRecord::Base.send :include, ActiveRecordExtensions if defined? ::ActiveRecord::Base
12
6
  end
13
7
 
14
8
  module ActiveRecordExtensions
@@ -38,12 +32,12 @@ module Fume
38
32
  params[:key] = build_render_cache_key(key)
39
33
  params[:options] = options
40
34
 
41
- if fragment = params[:cache].read(params[:key])
35
+ if page = RenderCachePage.load(params[:cache].read(params[:key]))
42
36
  params[:key] = nil
43
37
 
44
- response.charset = fragment[:charset]
45
- response.content_type = fragment[:content_type]
46
- self.response_body = fragment[:body].html_safe
38
+ response.charset = page.charset
39
+ response.content_type = page.content_type
40
+ self.response_body = page.body.html_safe
47
41
  return
48
42
  end
49
43
  end
@@ -66,7 +60,7 @@ module Fume
66
60
  when Array
67
61
  obj.map { |val| self.key_to_string(val) }.join(",")
68
62
  when Time, Date
69
- obj.to_s(:db)
63
+ obj.utc.iso8601
70
64
  else
71
65
  obj.to_s
72
66
  end
@@ -74,26 +68,38 @@ module Fume
74
68
  end
75
69
 
76
70
  class RenderCacheFilter
77
- def filter(controller)
71
+ def around(controller)
78
72
  controller.render_cache_params ||= {
79
73
  options: {},
80
74
  cache: nil
81
75
  }
76
+
82
77
  controller.render_cache_params[:cache] = Rails.cache if controller.class.perform_caching
83
78
 
84
79
  yield
85
80
 
86
81
  params = controller.render_cache_params
87
82
  if params[:key]
88
- content = {
89
- :charset => controller.response.charset,
90
- :content_type => controller.response.content_type,
91
- :body => controller.response_body.is_a?(Array) ? controller.response_body.join : controller.response_body
92
- }
93
- params[:cache].write(params[:key], content, params[:options])
83
+ page = RenderCachePage.new(controller.response.charset,
84
+ controller.response.content_type,
85
+ controller.response_body.is_a?(Array) ? controller.response_body.join : controller.response_body)
86
+ params[:cache].write(params[:key], page.dump, params[:options])
94
87
  end
95
88
  end
96
89
  end
97
90
 
91
+ class RenderCachePage < Struct.new(:charset, :content_type, :body)
92
+ def self.load(io)
93
+ page = YAML.load(io) if io
94
+ page if page.is_a?(self)
95
+ rescue Exception
96
+ nil
97
+ end
98
+
99
+ def dump
100
+ YAML.dump(self)
101
+ end
102
+ end
103
+
98
104
  end
99
105
  end
@@ -0,0 +1,22 @@
1
+ module Fume
2
+ module RequireAccessor
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def require_accessor(*names)
7
+ names.each do |name|
8
+ field_name = "#{name}_required"
9
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
10
+ def require_#{name}!
11
+ @#{field_name} = true
12
+ end
13
+
14
+ def #{field_name}?
15
+ !!@#{field_name}
16
+ end
17
+ EOS
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Fume
2
+ VERSION = "0.10.0"
3
+ end
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+
3
+ describe Fume::ControllerExts, type: :controller do
4
+ controller(ApplicationController) { }
5
+
6
+ describe "#public_path" do
7
+ before { request.script_name = "/context" }
8
+ subject { controller.send(:public_path, source) }
9
+
10
+ context "then source is full url" do
11
+ let(:source) { "http://test.host/path" }
12
+ it { should eq source }
13
+ end
14
+
15
+ context "then source is path" do
16
+ let(:source) { "/path" }
17
+ it { should eq "/context/path" }
18
+ end
19
+
20
+ context "then source already include script_name" do
21
+ let(:source) { "/context/path" }
22
+ it { should eq "/context/path" }
23
+ end
24
+ end
25
+
26
+ describe "#public_url" do
27
+ before { request.script_name = "/context" }
28
+ subject { controller.send(:public_url, source) }
29
+
30
+ context "then source is full url" do
31
+ let(:source) { "http://test.host/path" }
32
+ it { should eq source }
33
+ end
34
+
35
+ context "then source is path" do
36
+ let(:source) { "/path" }
37
+ it { should eq "http://test.host/context/path" }
38
+ end
39
+ end
40
+
41
+ describe "#redirect_to_ok_url_or_default" do
42
+ controller do
43
+ def create
44
+ redirect_to_ok_url_or_default "/foo"
45
+ end
46
+ end
47
+
48
+ let(:params) { Hash.new }
49
+ before { post :create, params }
50
+
51
+ context "then no ok_url" do
52
+ it { should redirect_to("/foo") }
53
+ end
54
+
55
+ context "then have ok_url" do
56
+ let(:params) { { ok_url: "/bar" } }
57
+ it { should redirect_to("/bar") }
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe Fume::HelperExts, type: :helper do
4
+ describe "#ok_url_tag" do
5
+ subject { helper.ok_url_tag }
6
+
7
+ context "then not ok_url params" do
8
+ it { should eq nil }
9
+ end
10
+
11
+ context "then have ok_url" do
12
+ before { params[:ok_url] = "/foo" }
13
+ it { should include 'value="/foo"' }
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+
3
+ describe Fume::RenderCache::ActiveRecordExtensions, type: :model do
4
+ describe "#last_updated_at" do
5
+ let!(:pages) { 10.times.map { Page.create } }
6
+ it { expect(Page.last_updated_at).to eq pages[-1].reload.updated_at }
7
+ end
8
+ end
9
+
10
+
11
+ describe Fume::RenderCache::ControllerExtensions, type: :controller do
12
+ controller(ApplicationController) do
13
+ def show
14
+ render_cache("key", {}) do
15
+ render text: "foo"
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "#render_cache" do
21
+ before { Rails.cache.clear }
22
+ before { controller.class.perform_caching = true }
23
+ after { controller.class.perform_caching = false }
24
+
25
+ let(:cache_key) { controller.send(:build_render_cache_key, "key") }
26
+ action { get :show, id: 1 }
27
+ it { expect(Rails.cache).to be_exist(cache_key) }
28
+
29
+ context "then page already cached" do
30
+ let(:cache_key) { "CACHE_KEY" }
31
+ before { allow(controller).to receive(:build_render_cache_key).and_return(cache_key) }
32
+
33
+ let(:cache_page) { Fume::RenderCache::RenderCachePage.new("utf8", "application/json", "bar") }
34
+ before { Rails.cache.write(cache_key, cache_page.dump) }
35
+ it { expect(response.body).to eq "bar" }
36
+ end
37
+ end
38
+
39
+ describe "#key_to_string" do
40
+ subject { controller.send(:key_to_string, obj) }
41
+
42
+ context "obj is nil" do
43
+ let(:obj) { nil }
44
+ it { should eq "nil!" }
45
+ end
46
+
47
+ context "obj is array" do
48
+ let(:obj) { [ 1, 2 ] }
49
+ it { should eq "1,2" }
50
+ end
51
+
52
+ context "obj is hash" do
53
+ let(:obj) { { a: 1, b: 2 } }
54
+ it { should eq "a=1&b=2" }
55
+ end
56
+
57
+ context "obj is time" do
58
+ let(:obj) { Time.parse("2014-03-21T04:28:12+0000") }
59
+ it { should eq "2014-03-21T04:28:12Z" }
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe Fume::RequireAccessor, type: :model do
4
+ class Page < ActiveRecord::Base
5
+ require_accessor :something
6
+ end
7
+
8
+ subject { Page.new }
9
+
10
+ context 'default value' do
11
+ its(:something_required?) { should eq false }
12
+ end
13
+
14
+ context '#require_something!' do
15
+ before { subject.require_something! }
16
+ its(:something_required?) { should eq true }
17
+ end
18
+
19
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Page < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/combustion_test.sqlite
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ #
3
+ end
@@ -0,0 +1,6 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :pages, force: true do |t|
3
+ t.text :content
4
+ t.timestamps
5
+ end
6
+ end
@@ -0,0 +1 @@
1
+ *.log
File without changes
@@ -1,12 +1,26 @@
1
- require File.expand_path("../../depends.rb", __FILE__)
2
- GemLoader.require(:test)
3
- GemLoader.require(:runtime, :development)
1
+ require 'bundler/setup'
2
+ require "simplecov"
3
+ require 'coveralls'
4
+ Coveralls.wear!
5
+ # SimpleCov.start
4
6
 
5
- require File.join(File.dirname(__FILE__), '..', 'lib', 'fume')
6
- require "rails_stub"
7
+ require 'combustion'
8
+ Combustion.initialize! :all
9
+ require 'rspec/rails'
10
+ require "rspec-do_action"
7
11
 
8
- include Fume
12
+ require "fume"
13
+ require "pry-nav"
9
14
 
10
- Spec::Runner.configure do |config|
11
-
15
+ RSpec.configure do |config|
16
+ config.treat_symbols_as_metadata_keys_with_true_values = true
17
+ config.run_all_when_everything_filtered = true
18
+ config.filter_run :focus
19
+
20
+ # Run specs in random order to surface order dependencies. If you find an
21
+ # order dependency and want to debug it, you can fix the order by providing
22
+ # the seed, which is printed after each run.
23
+ # --seed 1234
24
+ config.order = 'random'
25
+ config.before(:all) { FileUtils.mkdir_p File.expand_path("../../tmp/cache", __FILE__) } # ensure tmp/cache exists
12
26
  end
metadata CHANGED
@@ -1,102 +1,210 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fume
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0a
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
- - Sunteya
7
+ - sunteya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-29 00:00:00.000000000 Z
11
+ date: 2014-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.13
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.13
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails-i18n
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.7.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.7.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hashie
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.2.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: version
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: a simple rails scaffold.
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.14.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.14.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-do_action
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.3
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry-nav
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: combustion
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.5.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.5.1
167
+ description: some simple rails extentions.
70
168
  email:
71
- - Sunteya@gmail.com
169
+ - sunteya@gmail.com
72
170
  executables: []
73
171
  extensions: []
74
172
  extra_rdoc_files: []
75
173
  files:
76
- - .gitignore
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - ".travis.yml"
77
177
  - CHANGELOG.md
78
178
  - Gemfile
179
+ - LICENSE.txt
79
180
  - README.md
80
181
  - Rakefile
81
- - VERSION
82
182
  - fume.gemspec
183
+ - gemfiles/rails3_2.gemfile
83
184
  - lib/fume.rb
84
- - lib/fume/app_setting_loader.rb
85
- - lib/fume/rails_ext.rb
185
+ - lib/fume/active_record_exts.rb
186
+ - lib/fume/controller_exts.rb
187
+ - lib/fume/helper_exts.rb
86
188
  - lib/fume/railtie.rb
87
189
  - lib/fume/render_cache.rb
88
- - lib/generators/fume/simple_scaffold/USAGE
89
- - lib/generators/fume/simple_scaffold/simple_scaffold_generator.rb
90
- - lib/generators/fume/simple_scaffold/templates/_form.html.erb
91
- - lib/generators/fume/simple_scaffold/templates/controller.rb
92
- - lib/generators/fume/simple_scaffold/templates/edit.html.erb
93
- - lib/generators/fume/simple_scaffold/templates/index.html.erb
94
- - lib/generators/fume/simple_scaffold/templates/new.html.erb
190
+ - lib/fume/require_accessor.rb
191
+ - lib/fume/version.rb
95
192
  - lib/tasks/cache.rake
96
- - spec/spec.opts
193
+ - spec/fume/controller_exts_spec.rb
194
+ - spec/fume/helper_exts_spec.rb
195
+ - spec/fume/render_cache_spec.rb
196
+ - spec/fume/require_accessor_spec.rb
197
+ - spec/internal/app/controllers/application_controller.rb
198
+ - spec/internal/app/models/page.rb
199
+ - spec/internal/config/database.yml
200
+ - spec/internal/config/routes.rb
201
+ - spec/internal/db/schema.rb
202
+ - spec/internal/log/.gitignore
203
+ - spec/internal/public/favicon.ico
97
204
  - spec/spec_helper.rb
98
- homepage: http://github.com/sunteya/fume
99
- licenses: []
205
+ homepage: https://github.com/sunteya/fume
206
+ licenses:
207
+ - MIT
100
208
  metadata: {}
101
209
  post_install_message:
102
210
  rdoc_options: []
@@ -104,20 +212,30 @@ require_paths:
104
212
  - lib
105
213
  required_ruby_version: !ruby/object:Gem::Requirement
106
214
  requirements:
107
- - - '>='
215
+ - - ">="
108
216
  - !ruby/object:Gem::Version
109
217
  version: '0'
110
218
  required_rubygems_version: !ruby/object:Gem::Requirement
111
219
  requirements:
112
- - - '>'
220
+ - - ">="
113
221
  - !ruby/object:Gem::Version
114
- version: 1.3.1
222
+ version: '0'
115
223
  requirements: []
116
224
  rubyforge_project:
117
- rubygems_version: 2.0.3
225
+ rubygems_version: 2.2.0
118
226
  signing_key:
119
227
  specification_version: 4
120
- summary: a simple rails scaffold.
228
+ summary: some simple rails extentions.
121
229
  test_files:
122
- - spec/spec.opts
230
+ - spec/fume/controller_exts_spec.rb
231
+ - spec/fume/helper_exts_spec.rb
232
+ - spec/fume/render_cache_spec.rb
233
+ - spec/fume/require_accessor_spec.rb
234
+ - spec/internal/app/controllers/application_controller.rb
235
+ - spec/internal/app/models/page.rb
236
+ - spec/internal/config/database.yml
237
+ - spec/internal/config/routes.rb
238
+ - spec/internal/db/schema.rb
239
+ - spec/internal/log/.gitignore
240
+ - spec/internal/public/favicon.ico
123
241
  - spec/spec_helper.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.10.0a
@@ -1,12 +0,0 @@
1
- module Fume
2
- class AppSettingLoader
3
-
4
- def self.init!
5
- %w[application.extra.rb application.local.rb].each do |config_filename|
6
- path = Rails.root.join("config", config_filename)
7
- require path if File.exists?(path)
8
- end
9
- end
10
-
11
- end
12
- end
@@ -1,70 +0,0 @@
1
- module Fume
2
- module RailsExt
3
-
4
- def self.init!
5
- if defined? ::ActionController::Base
6
- ::ActionController::Base.send :include, ControllerExtensions
7
- end
8
-
9
- if defined? ::ActionView::Base
10
- ::ActionView::Base.send :include, HelperExtensions
11
- end
12
- end
13
-
14
- module HelperExtensions
15
- def ok_url_tag
16
- hidden_field_tag "ok_url", params[:ok_url] if !params[:ok_url].blank?
17
- end
18
- end
19
-
20
- module ControllerExtensions
21
- extend ActiveSupport::Concern
22
-
23
- included do
24
- helper_method :public_path, :public_url
25
- end
26
-
27
- module ClassMethods
28
- def action_attr_accessor(*args)
29
- options = args.extract_options!
30
- [ args ].flatten.compact.each do |sym|
31
- class_eval(<<-EOS, __FILE__, __LINE__ + 1)
32
- def self.#{sym}(obj)
33
- before_filter { |c| c.send(:#{sym}=, obj) }
34
- end
35
-
36
- attr_accessor :#{sym}
37
- helper_method :#{sym}, :#{sym}=
38
- EOS
39
- end
40
- end
41
- end
42
-
43
- protected
44
- def redirect_to_ok_url_or_default(default)
45
- redirect_to params[:ok_url] || default
46
- end
47
-
48
- def public_url(source)
49
- if source.include?("://")
50
- source
51
- else
52
- "#{request.protocol}#{request.host_with_port}#{public_path(source)}"
53
- end
54
- end
55
-
56
- def public_path(source)
57
- url = url_for(source)
58
- return url if url.include?("://")
59
-
60
- if url.start_with?(request.script_name)
61
- url
62
- else
63
- "#{request.script_name}#{url}"
64
- end
65
- end
66
-
67
- end
68
- end
69
- end
70
-
@@ -1,10 +0,0 @@
1
- Description:
2
- scaffold controller
3
-
4
- Example:
5
- rails generate fume:simple_scaffold Admin::User name:string email:string
6
-
7
- This will create:
8
- Controller: app/controllers/admin/users_controller.rb
9
- Views: app/views/admin/users/index.html.erb [...]
10
-
@@ -1,44 +0,0 @@
1
- module Fume
2
-
3
- class SimpleScaffoldGenerator < Rails::Generators::NamedBase
4
- include Rails::Generators::ResourceHelpers
5
- source_root File.expand_path('../templates', __FILE__)
6
-
7
- argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
8
-
9
- def create_controller_files
10
- template 'controller.rb', File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb")
11
- end
12
-
13
- def copy_view_files
14
- %w(index new _form edit).each do |view|
15
- filename = "#{view}.html.erb"
16
- template filename, File.join("app/views", controller_file_path, filename)
17
- end
18
- end
19
-
20
- protected
21
- # model
22
- def plural_model_name
23
- singular_model_name.pluralize
24
- end
25
-
26
- def singular_model_name
27
- model_class_name.underscore
28
- end
29
-
30
- def model_class_name
31
- @model_class_name ||= file_name.camelize
32
- end
33
-
34
- # path
35
- def resources_path_prefix
36
- (class_path + [plural_model_name]).join('_')
37
- end
38
-
39
- def resource_path_prefix
40
- (class_path + [singular_model_name]).join('_')
41
- end
42
- end
43
-
44
- end
@@ -1,7 +0,0 @@
1
- <%%= f.inputs do %>
2
- <%- for attribute in attributes -%>
3
- <%%= f.input :<%= attribute.name %><%= ", :as => :#{attribute.type}" if %w[select radio].include?(attribute.type.to_s) %> %>
4
- <%- end -%>
5
- <%% end %>
6
-
7
- <%%= f.buttons %>
@@ -1,44 +0,0 @@
1
- class <%= controller_class_name %>Controller < ApplicationController
2
-
3
- def index
4
- @search = <%= "#{model_class_name}.search(params[:search])" %>
5
- <%= "@#{plural_model_name}" %> = @search.page(params[:page])
6
- end
7
-
8
- def new
9
- <%= "@#{singular_model_name}" %> = <%= "#{model_class_name}.new" %>
10
- end
11
-
12
- def create
13
- <%= "@#{singular_model_name}" %> = <%= "#{model_class_name}.new(params[:#{singular_model_name}])" %>
14
-
15
- if <%= "@#{singular_model_name}.save" %>
16
- flash[:notice] = '<%= human_name %> was successfully created.'
17
- redirect_to_ok_url_or_default :action => "index"
18
- else
19
- render :action => "new"
20
- end
21
- end
22
-
23
- def edit
24
- @<%= singular_model_name %> = <%= "#{model_class_name}.find(params[:id])" %>
25
- end
26
-
27
- def update
28
- <%= "@#{singular_model_name}" %> = <%= "#{model_class_name}.find(params[:id])" %>
29
-
30
- if <%= "@#{singular_model_name}.update_attributes(params[:#{singular_model_name}])" %>
31
- flash[:notice] = '<%= human_name %> was successfully updated.'
32
- redirect_to_ok_url_or_default :action => "index"
33
- else
34
- render :action => "edit"
35
- end
36
- end
37
-
38
- def destroy
39
- <%= "@#{singular_model_name}" %> = <%= "#{model_class_name}.find_by_id(params[:id])" %>
40
- <%= "@#{singular_model_name}.destroy" %> if @<%= singular_model_name %>
41
-
42
- redirect_to_ok_url_or_default :action => "index"
43
- end
44
- end
@@ -1,5 +0,0 @@
1
- <h1>Editing <%%= <%= "#{model_class_name}.human_name" %> %></h1>
2
-
3
- <%%= semantic_form_for(<%= "@#{singular_model_name}" %>, :url => <%= resource_path_prefix %>_path(<%= "@#{singular_model_name}" %>)) do |f| %>
4
- <%%= render :partial => "form", :locals => { :f => f } %>
5
- <%% end %>
@@ -1,32 +0,0 @@
1
- <h1>Listing <%%= <%= "#{model_class_name}.human_name" %> %></h1>
2
-
3
- <table>
4
- <thead>
5
- <tr>
6
- <th><%%= sort_link @search, :id %></th>
7
- <%- for attribute in attributes -%>
8
- <th><%%= sort_link @search, :<%= attribute.name %> %></th>
9
- <%- end -%>
10
- <th>Actions</th>
11
- </tr>
12
- </thead>
13
-
14
- <%% <%= "@#{plural_model_name}" %>.each do |<%= singular_model_name %>| %>
15
- <tr>
16
- <td><%%= <%= singular_model_name %>.id %></td>
17
- <%- for attribute in attributes -%>
18
- <td><%%=<%= "l" if %w[date datetime time].include?(attribute.type.to_s) %> <%= singular_model_name %>.<%= attribute.name %> %></td>
19
- <%- end -%>
20
- <td>
21
- <%%= link_to 'Edit', edit_<%= resource_path_prefix %>_path(<%= singular_model_name %>) %>
22
- <%%= link_to 'Destroy', <%= resource_path_prefix %>_path(<%= singular_model_name %>), :confirm => 'Are you sure?', :method => :delete %>
23
- </td>
24
- </tr>
25
- <%% end %>
26
- </table>
27
-
28
- <%%= paginate <%= "@#{plural_model_name}" %> %>
29
-
30
- <div class="actions">
31
- <%%= link_to 'New <%= human_name %>', new_<%= resource_path_prefix %>_path %>
32
- </div>
@@ -1,5 +0,0 @@
1
- <h1>New <%%= <%= "#{model_class_name}.human_name" %> %></h1>
2
-
3
- <%%= semantic_form_for(<%= "@#{singular_model_name}" %>, :url => <%= resources_path_prefix %>_path()) do |f| %>
4
- <%%= render :partial => "form", :locals => { :f => f } %>
5
- <%% end %>
@@ -1 +0,0 @@
1
- --colour