ways-and-means 0.0.1
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/lib/ways-and-means.rb +5 -0
- data/lib/ways-and-means/sinatra/ways-and-means.rb +117 -0
- data/lib/ways-and-means/version.rb +3 -0
- metadata +97 -0
@@ -0,0 +1,117 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'sinatra/base'
|
4
|
+
|
5
|
+
module Sinatra
|
6
|
+
|
7
|
+
module WaysAndMeans
|
8
|
+
|
9
|
+
# reserved configuration keys
|
10
|
+
# i allow people to be less funky than i am
|
11
|
+
# with key names, hence 'routes'
|
12
|
+
WAYS_KEYS = %w|ways routes|.freeze
|
13
|
+
|
14
|
+
# HTTP verbs list
|
15
|
+
VERBS = %w|get post patch put delete head options|.freeze
|
16
|
+
|
17
|
+
def ways_and_means!(ways_and_means=nil)
|
18
|
+
# Pfff'... Should probably be more tyrannical here...
|
19
|
+
# if you registered, you should know what you're doing, right ?
|
20
|
+
return unless @config = ways_and_means || config
|
21
|
+
|
22
|
+
# the verb
|
23
|
+
# the endpoint to string prefixed by '/'
|
24
|
+
# the callback
|
25
|
+
#
|
26
|
+
# get '/plop' do
|
27
|
+
# callback
|
28
|
+
# end
|
29
|
+
ways do |endpoint, dispatch|
|
30
|
+
# if ever you wanna do something
|
31
|
+
# with dispatch info' set right
|
32
|
+
yield endpoint, dispatch if block_given?
|
33
|
+
|
34
|
+
send dispatch[:verb], "/#{endpoint}" do
|
35
|
+
send dispatch[:to]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# settings
|
40
|
+
means
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def ways
|
46
|
+
ways_config.each do |endpoint, dispatch|
|
47
|
+
# home: { get: { to: 'home', other_params: "plop" }, patch: { to: 'patch_home', other_params: "plip" } }
|
48
|
+
# get '/home' do
|
49
|
+
# home
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# patch '/home' do
|
53
|
+
# patch_home
|
54
|
+
# end
|
55
|
+
if dispatch.is_a?(Hash) && dispatch.keys.any? { |k| VERBS.include? k.to_s }
|
56
|
+
dispatch.each do |k, v|
|
57
|
+
yield endpoint, v.merge(verb: k)
|
58
|
+
end
|
59
|
+
|
60
|
+
# index: { to: 'show_index', other_params: "plop" }
|
61
|
+
# get '/index' do ## no verb specified, defaulted to 'get'
|
62
|
+
# show_index
|
63
|
+
# end
|
64
|
+
elsif dispatch.is_a?(Hash)
|
65
|
+
yield endpoint, { verb: 'get' }.merge!(dispatch)
|
66
|
+
|
67
|
+
# show: nil
|
68
|
+
# get '/show' do ## no verb specified, defaulted to 'get'
|
69
|
+
# show
|
70
|
+
# end
|
71
|
+
#
|
72
|
+
# 'show/:person_id': "show_person"
|
73
|
+
# get '/show/:person_id' do ## no verb specified, defaulted to 'get'
|
74
|
+
# show_person
|
75
|
+
# end
|
76
|
+
else
|
77
|
+
yield endpoint, { verb: 'get', to: (dispatch || endpoint) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def ways_config
|
83
|
+
# hash.slice, i miss you...
|
84
|
+
# at least this is safe and very explicit
|
85
|
+
config['ways'] || config[:ways] || config['routes'] || config[:routes] || {}
|
86
|
+
|
87
|
+
# while this is not
|
88
|
+
# WAYS_KEYS.inject({}) { |w, k| w.merge!(config[k] || config[k.to_sym] || {}) }
|
89
|
+
|
90
|
+
# and this is ruby-coated Perl
|
91
|
+
# WAYS_KEYS.map { |k| [k, k.to_sym] }.flatten.map { |k| config[k] }.compact.first
|
92
|
+
end
|
93
|
+
|
94
|
+
def means
|
95
|
+
# set key / values in App.settings
|
96
|
+
means_config do |mean, it|
|
97
|
+
set mean, it
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def means_config
|
102
|
+
# key / values except reserved space for routes
|
103
|
+
config.reject { |k, v| WAYS_KEYS.include? k.to_s }.each do |k, v|
|
104
|
+
yield k.to_sym, v
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Well... What can i say now ...? Oh, i know : too many parentheses !
|
109
|
+
def config
|
110
|
+
@config ||= YAML.load(open(File.join('config', 'ways-and-means.yml'))) rescue nil
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
register WaysAndMeans
|
116
|
+
|
117
|
+
end
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ways-and-means
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- lacravate
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rack-test
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Sinatra routes and Sinatra settings through configuration data, hash
|
63
|
+
or yaml file
|
64
|
+
email:
|
65
|
+
- lacravate@lacravate.fr
|
66
|
+
executables: []
|
67
|
+
extensions: []
|
68
|
+
extra_rdoc_files: []
|
69
|
+
files:
|
70
|
+
- lib/ways-and-means.rb
|
71
|
+
- lib/ways-and-means/sinatra/ways-and-means.rb
|
72
|
+
- lib/ways-and-means/version.rb
|
73
|
+
homepage: https://github.com/lacravate/ways-and-means
|
74
|
+
licenses: []
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubyforge_project: ! '[none]'
|
93
|
+
rubygems_version: 1.8.24
|
94
|
+
signing_key:
|
95
|
+
specification_version: 3
|
96
|
+
summary: Sinatra routes and Sinatra settings from configuration data
|
97
|
+
test_files: []
|