diff --git a/example/app/retro_games.rb b/example/app/retro_games.rb index ef01883a..b0d9f5da 100644 --- a/example/app/retro_games.rb +++ b/example/app/retro_games.rb @@ -19,7 +19,7 @@ def index end def create - STORE[request[:name]] ||= 0 if request.post? + STORE[request['name']] ||= 0 if request.post? redirect_referrer end diff --git a/innate.gemspec b/innate.gemspec index 665b46dd..113824fe 100644 --- a/innate.gemspec +++ b/innate.gemspec @@ -1,18 +1,20 @@ # -*- encoding: utf-8 -*- -# stub: innate 2023.01.06 ruby lib +# stub: innate 2025.03.13 ruby lib Gem::Specification.new do |s| s.name = "innate".freeze - s.version = "2023.01.06" + s.version = "2025.03.13" s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= s.require_paths = ["lib".freeze] s.authors = ["Michael 'manveru' Fellinger".freeze] - s.date = "2023-01-06" + s.date = "2025-03-13" s.description = "Simple, straight-forward base for web-frameworks.".freeze s.email = "m.fellinger@gmail.com".freeze s.files = [".gems".freeze, ".gitignore".freeze, ".load_gemset".freeze, ".rvmrc".freeze, ".travis.yml".freeze, "AUTHORS".freeze, "CHANGELOG".freeze, "COPYING".freeze, "MANIFEST".freeze, "README.md".freeze, "Rakefile".freeze, "example/app/retro_games.rb".freeze, "example/app/todo/layout/default.xhtml".freeze, "example/app/todo/spec/todo.rb".freeze, "example/app/todo/start.rb".freeze, "example/app/todo/view/index.xhtml".freeze, "example/app/whywiki_erb/layout/wiki.html.erb".freeze, "example/app/whywiki_erb/spec/wiki.rb".freeze, "example/app/whywiki_erb/start.rb".freeze, "example/app/whywiki_erb/view/edit.erb".freeze, "example/app/whywiki_erb/view/index.erb".freeze, "example/custom_middleware.rb".freeze, "example/hello.rb".freeze, "example/howto_spec.rb".freeze, "example/link.rb".freeze, "example/provides.rb".freeze, "example/session.rb".freeze, "innate.gemspec".freeze, "lib/innate.rb".freeze, "lib/innate/action.rb".freeze, "lib/innate/adapter.rb".freeze, "lib/innate/cache.rb".freeze, "lib/innate/cache/api.rb".freeze, "lib/innate/cache/drb.rb".freeze, "lib/innate/cache/file_based.rb".freeze, "lib/innate/cache/marshal.rb".freeze, "lib/innate/cache/memory.rb".freeze, "lib/innate/cache/yaml.rb".freeze, "lib/innate/current.rb".freeze, "lib/innate/default_middleware.rb".freeze, "lib/innate/dynamap.rb".freeze, "lib/innate/helper.rb".freeze, "lib/innate/helper/aspect.rb".freeze, "lib/innate/helper/cgi.rb".freeze, "lib/innate/helper/flash.rb".freeze, "lib/innate/helper/link.rb".freeze, "lib/innate/helper/redirect.rb".freeze, "lib/innate/helper/render.rb".freeze, "lib/innate/log.rb".freeze, "lib/innate/log/color_formatter.rb".freeze, "lib/innate/log/hub.rb".freeze, "lib/innate/lru_hash.rb".freeze, "lib/innate/mock.rb".freeze, "lib/innate/node.rb".freeze, "lib/innate/options.rb".freeze, "lib/innate/options/dsl.rb".freeze, "lib/innate/options/stub.rb".freeze, "lib/innate/request.rb".freeze, "lib/innate/response.rb".freeze, "lib/innate/route.rb".freeze, "lib/innate/session.rb".freeze, "lib/innate/session/flash.rb".freeze, "lib/innate/spec.rb".freeze, "lib/innate/spec/bacon.rb".freeze, "lib/innate/state.rb".freeze, "lib/innate/state/accessor.rb".freeze, "lib/innate/traited.rb".freeze, "lib/innate/trinity.rb".freeze, "lib/innate/version.rb".freeze, "lib/innate/view.rb".freeze, "lib/innate/view/erb.rb".freeze, "lib/innate/view/etanni.rb".freeze, "lib/innate/view/none.rb".freeze, "spec/example/app/retro_games.rb".freeze, "spec/example/hello.rb".freeze, "spec/example/link.rb".freeze, "spec/example/provides.rb".freeze, "spec/example/session.rb".freeze, "spec/helper.rb".freeze, "spec/innate/action/layout.rb".freeze, "spec/innate/action/layout/file_layout.xhtml".freeze, "spec/innate/cache/common.rb".freeze, "spec/innate/cache/marshal.rb".freeze, "spec/innate/cache/memory.rb".freeze, "spec/innate/cache/yaml.rb".freeze, "spec/innate/dynamap.rb".freeze, "spec/innate/etanni.rb".freeze, "spec/innate/helper.rb".freeze, "spec/innate/helper/aspect.rb".freeze, "spec/innate/helper/cgi.rb".freeze, "spec/innate/helper/flash.rb".freeze, "spec/innate/helper/link.rb".freeze, "spec/innate/helper/redirect.rb".freeze, "spec/innate/helper/render.rb".freeze, "spec/innate/helper/view/aspect_hello.xhtml".freeze, "spec/innate/helper/view/locals.xhtml".freeze, "spec/innate/helper/view/loop.xhtml".freeze, "spec/innate/helper/view/num.xhtml".freeze, "spec/innate/helper/view/partial.xhtml".freeze, "spec/innate/helper/view/recursive.xhtml".freeze, "spec/innate/mock.rb".freeze, "spec/innate/modes.rb".freeze, "spec/innate/node/mapping.rb".freeze, "spec/innate/node/node.rb".freeze, "spec/innate/node/resolve.rb".freeze, "spec/innate/node/view/another_layout/another_layout.xhtml".freeze, "spec/innate/node/view/bar.xhtml".freeze, "spec/innate/node/view/cat2/cat22.xhtml".freeze, "spec/innate/node/view/cat3/cat33.xhtml".freeze, "spec/innate/node/view/foo.html.xhtml".freeze, "spec/innate/node/view/only_view.xhtml".freeze, "spec/innate/node/view/sub/baz.xhtml".freeze, "spec/innate/node/view/sub/foo/baz.xhtml".freeze, "spec/innate/node/view/with_layout.xhtml".freeze, "spec/innate/node/wrap_action_call.rb".freeze, "spec/innate/options.rb".freeze, "spec/innate/parameter.rb".freeze, "spec/innate/provides.rb".freeze, "spec/innate/provides/list.html.xhtml".freeze, "spec/innate/provides/list.txt.xhtml".freeze, "spec/innate/request.rb".freeze, "spec/innate/response.rb".freeze, "spec/innate/route.rb".freeze, "spec/innate/session.rb".freeze, "spec/innate/traited.rb".freeze, "tasks/authors.rake".freeze, "tasks/bacon.rake".freeze, "tasks/changelog.rake".freeze, "tasks/gem.rake".freeze, "tasks/gem_setup.rake".freeze, "tasks/grancher.rake".freeze, "tasks/manifest.rake".freeze, "tasks/rcov.rake".freeze, "tasks/release.rake".freeze, "tasks/reversion.rake".freeze, "tasks/setup.rake".freeze, "tasks/ycov.rake".freeze] s.homepage = "http://github.com/manveru/innate".freeze + s.licenses = ['MIT'] + s.required_ruby_version = ">= 3.0" s.rubygems_version = "3.3.20".freeze s.summary = "Powerful web-framework wrapper for Rack.".freeze @@ -20,13 +22,11 @@ Gem::Specification.new do |s| s.specification_version = 4 end - if s.respond_to? :add_runtime_dependency then - s.add_runtime_dependency(%q.freeze, ["~> 3.0"]) - s.add_development_dependency(%q.freeze, ["~> 1.2.0"]) - s.add_development_dependency(%q.freeze, ["~> 0.6.3"]) - else - s.add_dependency(%q.freeze, ["~> 3.0"]) - s.add_dependency(%q.freeze, ["~> 1.2.0"]) - s.add_dependency(%q.freeze, ["~> 0.6.3"]) - end + s.add_runtime_dependency(%q.freeze, ["~> 3.0"]) + s.add_runtime_dependency(%q.freeze, ["~> 2.2.1"]) + s.add_runtime_dependency(%q.freeze, ["~> 1.0.0"]) + s.add_runtime_dependency(%q.freeze, ["~> 1.0.0"]) + + s.add_development_dependency(%q.freeze, ["~> 1.2.0"]) + s.add_development_dependency(%q.freeze, ["~> 0.6.3"]) end diff --git a/lib/innate/action.rb b/lib/innate/action.rb index 75a2797a..085cdb98 100644 --- a/lib/innate/action.rb +++ b/lib/innate/action.rb @@ -92,7 +92,13 @@ def render end def wrap_in_layout - layout ? dup.render_in_layout(&Proc.new) : yield + if layout + dup.render_in_layout( + &Proc.new { yield } + ) + else + yield + end end def render_in_layout diff --git a/lib/innate/cache/file_based.rb b/lib/innate/cache/file_based.rb index 1604bc39..d272cc16 100644 --- a/lib/innate/cache/file_based.rb +++ b/lib/innate/cache/file_based.rb @@ -15,7 +15,10 @@ def cache_setup(*args) FileUtils.mkdir_p(@dir) @filename = File.join(@dir, @prefix + self.class::EXT) - @store = self.class::STORE.new(@filename) + @store = self.class::STORE.new( + @filename, + other_permitted_classes: [Time] + ) end def cache_clear diff --git a/lib/innate/cache/yaml.rb b/lib/innate/cache/yaml.rb index d74ff5e2..0f6ba4e5 100644 --- a/lib/innate/cache/yaml.rb +++ b/lib/innate/cache/yaml.rb @@ -1,4 +1,4 @@ -require 'yaml/store' +require 'innate/yaml/store' module Innate class Cache @@ -12,7 +12,7 @@ class YAML include Cache::API include Cache::FileBased - STORE = ::YAML::Store + STORE = Innate::YAML::Store DIR = 'innate-cache-yaml' EXT = '.yaml' end diff --git a/lib/innate/helper/aspect.rb b/lib/innate/helper/aspect.rb index 41f03abc..92d40187 100644 --- a/lib/innate/helper/aspect.rb +++ b/lib/innate/helper/aspect.rb @@ -1,3 +1,5 @@ +require 'sorted_set' + module Innate module Helper ## diff --git a/lib/innate/node.rb b/lib/innate/node.rb index 185797f1..062febe4 100644 --- a/lib/innate/node.rb +++ b/lib/innate/node.rb @@ -1,3 +1,5 @@ +require 'sorted_set' + module Innate # The nervous system of {Innate}, so you can relax. diff --git a/lib/innate/request.rb b/lib/innate/request.rb index eac89fa1..fa127a37 100644 --- a/lib/innate/request.rb +++ b/lib/innate/request.rb @@ -70,8 +70,8 @@ def self.current # # Both +value+ and the elements of +keys+ will be turned into String by #to_s. def [](value, *keys) - return super(value) if keys.empty? - [value, *keys].map{|key| super(key) } + return params[value] if keys.empty? + [value, *keys].map{|key| params[key] } end # the full request URI provided by Rack::Request diff --git a/lib/innate/yaml/store.rb b/lib/innate/yaml/store.rb new file mode 100644 index 00000000..2f09eabd --- /dev/null +++ b/lib/innate/yaml/store.rb @@ -0,0 +1,45 @@ +require 'yaml/store' + +module Innate + module YAML + # Just to allow some permitted_classes, because this list of classes + # is hard-coded in stdlib ::YAML::Store + class Store < ::YAML::Store + def initialize(*o) + @permitted_classes = [Symbol] # Default in stdlib + @use_permitted_classes = ::YAML.respond_to?(:safe_load) + + if o.last.is_a? Hash + other_permitted_classes = Array(o.last[:other_permitted_classes]) + + if ! @use_permitted_classes && other_permitted_classes.any? + raise ArgumentError.new("::YAML module does not support permitted_classes") + else + @permitted_classes += other_permitted_classes + end + end + + super(*o) + end + + # Based on Ruby 3.4.2 lib/ruby/3.4.0/yaml/store.rb + def load(content) + table = if @use_permitted_classes + if Psych::VERSION >= "3.1" + ::YAML.safe_load(content, permitted_classes: @permitted_classes) + else + ::YAML.safe_load(content, @permitted_classes) + end + else + ::YAML.load(content) + end + + if table == false || table == nil + {} + else + table + end + end + end + end +end diff --git a/spec/example/app/retro_games.rb b/spec/example/app/retro_games.rb index 4499e0e5..90546494 100644 --- a/spec/example/app/retro_games.rb +++ b/spec/example/app/retro_games.rb @@ -15,7 +15,7 @@ end it 'allows you to add another game' do - response = post('/create', :name => 'Street Fighter II') + response = post('/create', 'name' => 'Street Fighter II') response.status.should == 302 follow_redirect! diff --git a/spec/innate/helper.rb b/spec/innate/helper.rb index f26ff2fc..f11a9196 100644 --- a/spec/innate/helper.rb +++ b/spec/innate/helper.rb @@ -66,7 +66,7 @@ class FooNodeLink should 'construct link from ::a' do FNL.a(:index).should == 'index' FNL.a('index', :index, :x => :y).should == 'index' - FNL.a('duh/bar', 'duh/bar', :x => :y).should == "duh/bar" + FNL.a('duh/bar', 'duh/bar', :x => :y).should == "duh/bar" FNL.a('foo', :/, :x => :y).should == 'foo' end diff --git a/spec/innate/options.rb b/spec/innate/options.rb index 9bc5b425..f1db30fa 100644 --- a/spec/innate/options.rb +++ b/spec/innate/options.rb @@ -106,8 +106,8 @@ require 'pp' lines = @options.pretty_inspect.split(/\n/) lines.find_all{|l| - /:doc/ === l && - /:value/ === l + /doc:/ === l && + /value:/ === l }.size.should > 3 end diff --git a/spec/innate/route.rb b/spec/innate/route.rb index b625cc85..d86ced98 100644 --- a/spec/innate/route.rb +++ b/spec/innate/route.rb @@ -40,15 +40,15 @@ def check(uri, status, body = nil) Route['string'].class.should == Proc Route['calc sum'] = lambda{|path, req| - if req[:do_calc] - lval, rval = req[:a, :b] + if req['do_calc'] + lval, rval = req['a', 'b'] rval = rval.to_i * 10 "/sum/#{lval}/#{rval}" end } Innate::Route('foo') do |path, req| - '/bar' if req[:bar] + '/bar' if req['bar'] end end