fugleman 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5ea2f49e7ee24e26864bdba6d17cb4be4ec53f1f
4
+ data.tar.gz: 9f9b1ed2344f6eeb32116ec8537b1a31a825094b
5
+ SHA512:
6
+ metadata.gz: 4a13d30e258a8de37b96b6b3c82c47e7c35d14024853fe3fdfb9b8620e59dad4d47318949052da2cb7c8a404c5238dadd797ad0414783686805223ad2e735e9e
7
+ data.tar.gz: 60b7294ad78b246b542c85f8cca684ca30ec534f1e9cfeef30ec5188ca038e1f1cb9cdd06a664477088f725fc0569e7a9829d77cf3ea72d10d848648298e0d74
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+
2
+ Copyright (c) 2014 Kaspar Schiess
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ 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
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,24 @@
1
+
2
+ # SYNOPSIS
3
+
4
+ HTML helper code. But simpler.
5
+
6
+ require 'fugleman'
7
+
8
+ # and inside your Sinatra app
9
+
10
+ helpers Fugleman::Helpers
11
+
12
+ # and then:
13
+ input_tag :text, :foo # => <input type="text" name="foo" />
14
+ ...
15
+
16
+ # LICENSING
17
+
18
+ Some of the code in here started its life out as part of padrino-helpers. It
19
+ was then copied and heavily modified. This means that we take the blame for
20
+ all the bugs and the praise for none of the features.
21
+
22
+ MIT, (c) Technology Astronauts 2014
23
+
24
+
data/fugleman.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "fugleman"
5
+ s.version = "0.1.1"
6
+ s.summary = "Helpers and stuff for working with sinatra. Really simple."
7
+ s.homepage = "https://bitbucket.org/technologyastronauts/fugleman"
8
+ s.authors = ['Kaspar Schiess']
9
+ s.email = ["kaspar.schiess@technologyastronauts.ch"]
10
+
11
+ s.description = <<-EOF
12
+ HTML and other helper functions, for working with sinatra. Except simple.
13
+
14
+ Simplistic even. Caution, this stick has a pointed end. And it might be the
15
+ one you're holding.
16
+ EOF
17
+
18
+ s.files = Dir['**/*']
19
+ s.test_files = Dir['test/**/*'] + Dir['spec/**/*']
20
+ s.executables = Dir['bin/*'].map { |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ s.add_runtime_dependency 'rack'
24
+ end
data/lib/fugleman.rb ADDED
@@ -0,0 +1,5 @@
1
+
2
+ module Fugleman
3
+ end
4
+
5
+ require 'fugleman/helpers'
@@ -0,0 +1,173 @@
1
+
2
+ # This started out life as a copy of code found in padrino, but was heavily
3
+ # simplified and then forked.
4
+ #
5
+ # NOTE This includes none of the SafeBuffer madness. Watch your escaping.
6
+ #
7
+ module Fugleman::Helpers
8
+
9
+ # ------------------------------------------------------------------ linking
10
+
11
+ # Creates a link element with given name, url and options.
12
+ #
13
+ def link_to(*args, &block)
14
+ options = args.extract_options!
15
+ name = block_given? ? '' : args.shift
16
+
17
+
18
+ url = args.first || '#'
19
+ options.reverse_merge!(:href => url)
20
+
21
+ block_given? ? content_tag(:a, options, &block) : content_tag(:a, name, options)
22
+ end
23
+
24
+ # ----------------------------------------------------------------- partials
25
+ def partial name, opts={}, &block
26
+ slim name, { layout: false }.update(opts), &block
27
+ end
28
+
29
+ # ------------------------------------------------------------ tag rendering
30
+ def input_tag(type, name=nil, options = {})
31
+ tag(
32
+ :input,
33
+ {name: name}.update(
34
+ options.reverse_merge!(:type => type)))
35
+ end
36
+ def tag(name, options = nil, open = false)
37
+ attributes = tag_attributes(options)
38
+ "<#{name}#{attributes}#{open ? '>' : ' />'}".html_safe
39
+ end
40
+ def content_tag(name, content = nil, options = nil, &block)
41
+ if block_given?
42
+ options = content if content.is_a?(Hash)
43
+ content = capture_html(&block)
44
+ end
45
+
46
+ attributes = tag_attributes(options)
47
+ output = String.new
48
+ output.concat "<#{name}#{attributes}>"
49
+ output.concat content.to_s
50
+ output.concat "</#{name}>"
51
+
52
+ output
53
+ end
54
+
55
+ # ------------------------------------------------------------------- assets
56
+ def image_tag(url, options={})
57
+ options.reverse_merge!(:src => image_path(url))
58
+ tag(:img, options)
59
+ end
60
+ def javascript_include_tag(*sources)
61
+ options = {
62
+ :type => 'text/javascript'
63
+ }.update(sources.extract_options!.symbolize_keys)
64
+ sources.flatten.inject(String.new) do |all,source|
65
+ all << content_tag(:script, nil, { :src => asset_path('javascripts/'+source+'.js') }.update(options))
66
+ end
67
+ end
68
+
69
+ def image_path(src)
70
+ asset_path("images/" + src)
71
+ end
72
+
73
+ # Formats a path to an asset, including the assets timestamp for cache
74
+ # invalidation.
75
+ #
76
+ def asset_path(source = nil)
77
+ timestamp = asset_timestamp(source)
78
+ result_path = uri_root_path(source)
79
+ "#{result_path}#{timestamp}"
80
+ end
81
+ # Returns the timestamp mtime for an asset.
82
+ #
83
+ # asset_timestamp("some/path/to/file.png") => "?154543678"
84
+ #
85
+ def asset_timestamp(file_path)
86
+ return nil if file_path =~ /\?/ || (self.class.respond_to?(:asset_stamp) && !self.class.asset_stamp)
87
+ public_path = self.class.public_folder if self.class.respond_to?(:public_folder)
88
+ public_path ||= Padrino.root("public") if Padrino.respond_to?(:root)
89
+ public_file_path = File.join(public_path, file_path) if public_path
90
+ stamp = File.mtime(public_file_path).to_i if public_file_path && File.exist?(public_file_path)
91
+ stamp ||= Time.now.to_i
92
+ "?#{stamp}"
93
+ end
94
+
95
+ # ----------------------------------------------------------------- escapism
96
+ def escape_html(text)
97
+ Rack::Utils.escape_html(text).html_safe
98
+ end
99
+ alias h escape_html
100
+
101
+ def escape_value(string)
102
+ string.to_s.gsub(ESCAPE_REGEXP) { |c| ESCAPE_VALUES[c] }
103
+ end
104
+
105
+ # -------------------------------------------------------- delayed rendering
106
+
107
+ # For content_for, etc.. please use Sinatra::ContentFor,
108
+ # part of sinatra-contrib.
109
+
110
+ # ----------------------------------------------------------------- captures
111
+
112
+ def capture_html(*args, &block)
113
+ # block.call(*args)
114
+ end
115
+
116
+ # --------------------------------------------------------- foundation stuff
117
+
118
+ # Returns the URI root of the application with optional paths appended.
119
+ #
120
+ # uri_root_path("/some/path") => "/root/some/path"
121
+ # uri_root_path("javascripts", "test.js") => "/uri/root/javascripts/test.js"
122
+ #
123
+ def uri_root_path(*paths)
124
+ root_uri = self.class.uri_root if self.class.respond_to?(:uri_root)
125
+ File.join(ENV['RACK_BASE_URI'].to_s, root_uri || '/', *paths)
126
+ end
127
+
128
+
129
+ private
130
+ ESCAPE_VALUES = {
131
+ "&" => "&amp;",
132
+ "<" => "&lt;",
133
+ ">" => "&gt;",
134
+ '"' => "&quot;"
135
+ }
136
+ ESCAPE_REGEXP = Regexp.union(*ESCAPE_VALUES.keys)
137
+
138
+ BOOLEAN_ATTRIBUTES = [
139
+ :autoplay,
140
+ :autofocus,
141
+ :formnovalidate,
142
+ :checked,
143
+ :disabled,
144
+ :hidden,
145
+ :loop,
146
+ :multiple,
147
+ :muted,
148
+ :readonly,
149
+ :required,
150
+ :selected,
151
+ :declare,
152
+ :defer,
153
+ :ismap,
154
+ :itemscope,
155
+ :noresize,
156
+ :novalidate
157
+ ]
158
+
159
+ def tag_attributes(options)
160
+ return '' if options.nil?
161
+ attributes = options.map do |k, v|
162
+ next if v.nil? || v == false
163
+ if v.is_a?(Hash)
164
+ nested_values(k, v)
165
+ elsif BOOLEAN_ATTRIBUTES.include?(k)
166
+ %(#{k}="#{k}")
167
+ else
168
+ %(#{k}="#{escape_value(v)}")
169
+ end
170
+ end.compact
171
+ attributes.empty? ? '' : " #{attributes * ' '}"
172
+ end
173
+ end
data/nyny.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "nyny"
5
+ s.version = "0.1.1"
6
+ s.summary = "Helpers and stuff for working with sinatra. Really simple."
7
+ s.homepage = "https://bitbucket.org/technologyastronauts/nyny"
8
+ s.authors = ['Kaspar Schiess']
9
+ s.email = ["kaspar.schiess@technologyastronauts.ch"]
10
+
11
+ s.description = <<-EOF
12
+ HTML and other helper functions, for working with sinatra. Except simple.
13
+
14
+ Simplistic even. Caution, this stick has a pointed end. And it might be the
15
+ one you're holding.
16
+ EOF
17
+
18
+ s.files = Dir['**/*']
19
+ s.test_files = Dir['test/**/*'] + Dir['spec/**/*']
20
+ s.executables = Dir['bin/*'].map { |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ s.add_runtime_dependency 'rack'
24
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fugleman
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Kaspar Schiess
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: "HTML and other helper functions, for working with sinatra. Except simple.
28
+ \n\nSimplistic even. Caution, this stick has a pointed end. And it might be the\none
29
+ you're holding. \n"
30
+ email:
31
+ - kaspar.schiess@technologyastronauts.ch
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - LICENSE
37
+ - README
38
+ - fugleman.gemspec
39
+ - lib/fugleman.rb
40
+ - lib/nyny/helpers.rb
41
+ - nyny.gemspec
42
+ homepage: https://bitbucket.org/technologyastronauts/fugleman
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.2.2
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Helpers and stuff for working with sinatra. Really simple.
65
+ test_files: []