cuba-contrib 3.1.0.rc1 → 3.1.0.rc2

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/cuba-contrib.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cuba-contrib"
3
- s.version = "3.1.0.rc1"
3
+ s.version = "3.1.0.rc2"
4
4
  s.summary = "Cuba plugins and utilities."
5
5
  s.description = "Includes various helper tools for Cuba."
6
6
  s.authors = ["Cyril David"]
@@ -13,11 +13,10 @@ Gem::Specification.new do |s|
13
13
  "rakefile",
14
14
  "lib/**/*.rb",
15
15
  "*.gemspec",
16
- "test/*.*",
17
- "views/*.mote"
16
+ "test/*.*"
18
17
  ]
19
18
 
20
- s.add_dependency "cuba", "3.0.1.rc3"
19
+ s.add_dependency "cuba", "3.1.0.rc2"
21
20
  s.add_development_dependency "cutest"
22
21
  s.add_development_dependency "capybara"
23
22
  end
data/lib/cuba/contrib.rb CHANGED
@@ -1,9 +1,6 @@
1
1
  class Cuba
2
- CONTRIB_ROOT = File.expand_path("../../", File.dirname(__FILE__))
3
-
4
- require "cuba/contrib/prelude"
5
- require "cuba/contrib/mote"
6
- require "cuba/contrib/text_helpers"
7
- require "cuba/contrib/form_helpers"
8
- require "cuba/contrib/with"
2
+ require "cuba/prelude"
3
+ require "cuba/mote"
4
+ require "cuba/text_helpers"
5
+ require "cuba/with"
9
6
  end
@@ -30,6 +30,8 @@ class Cuba
30
30
  File.join(settings[:mote][:views], "#{template}.mote")
31
31
  end
32
32
 
33
+ # DEPRECATED: this will be removed in a future version. Use the
34
+ # `this` context variable instead.
33
35
  def mote_vars(content)
34
36
  { content: content }
35
37
  end
File without changes
@@ -1,9 +1,7 @@
1
1
  class Cuba
2
2
  module TextHelpers
3
3
  def markdown(str)
4
- require "bluecloth"
5
-
6
- BlueCloth.new(str).to_html
4
+ Markdown.new(str).to_html
7
5
  end
8
6
 
9
7
  def truncate(str, length, ellipses = "...")
@@ -20,16 +18,23 @@ class Cuba
20
18
  "#{unit} %.2f" % amount
21
19
  end
22
20
 
23
- def titlecase(str)
24
- str.to_s.tr("_", " ").gsub(/(^|\s)([a-z])/) { |char| char.upcase }
21
+ def delimit(number, delimiter = ",")
22
+ number.to_s.gsub(%r{(\d)(?=(\d\d\d)+(?!\d))}, "\\1#{delimiter}")
25
23
  end
26
24
 
27
- def humanize(str)
28
- titlecase(str.to_s.tr("_", " ").gsub(/_id$/, ""))
25
+ def titlecase(str)
26
+ res = str.to_s.dup
27
+ res.tr!("_", " ")
28
+ res.gsub!(/(^|\s)([a-z])/) { |char| char.upcase }
29
+ res
29
30
  end
30
31
 
31
32
  def underscore(str)
32
- str.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').downcase
33
+ res = str.to_s.dup
34
+ res.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
35
+ res.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
36
+ res.downcase!
37
+ res
33
38
  end
34
39
  end
35
40
  end
@@ -1,7 +1,7 @@
1
1
  class Cuba
2
2
  module With
3
3
  def with(dict = {})
4
- old, env["cuba.vars"] = vars, dict
4
+ old, env["cuba.vars"] = vars, vars.merge(dict)
5
5
  yield
6
6
  ensure
7
7
  env["cuba.vars"] = old
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "helper"
4
+
5
+ setup do
6
+ obj = Object.new
7
+ obj.extend Cuba::TextHelpers
8
+ end
9
+
10
+ test "truncate" do |helper|
11
+ assert_equal "the q...", helper.truncate("the quick brown", 5)
12
+
13
+ assert_equal "same string", helper.truncate("same string", 11)
14
+ end
15
+
16
+ test "markdown" do |helper|
17
+ require "bluecloth"
18
+ assert_equal "<h1>Hola Mundo</h1>", helper.markdown("# Hola Mundo")
19
+ end
20
+
21
+ test "nl2br" do |helper|
22
+ assert_equal "Hi<br>there<br>Joe", helper.nl2br("Hi\nthere\r\nJoe")
23
+ end
24
+
25
+ test "currency" do |helper|
26
+ assert_equal "$ 2.22", helper.currency(2.221)
27
+ assert_equal "€ 2.22", helper.currency(2.221, "€")
28
+ end
29
+
30
+ test "delimit" do |helper|
31
+ assert_equal "2,000", helper.delimit(2000)
32
+ assert_equal "2.000", helper.delimit(2000, ".")
33
+ assert_equal "2,000,000", helper.delimit(2000000)
34
+ assert_equal "2,000,000.05", helper.delimit(2000000.05)
35
+ end
36
+
37
+ test "titlecase" do |helper|
38
+ assert_equal "Hello World", helper.titlecase("hello world")
39
+ end
40
+
41
+ test "underscore" do |helper|
42
+ assert_equal "foo_bar_baz", helper.underscore("FooBarBaz")
43
+ assert_equal "ohm_v1_foo", helper.underscore("OhmV1Foo")
44
+ assert_equal "ssl_error", helper.underscore("SSLError")
45
+ assert_equal "net_http", helper.underscore("NetHTTP")
46
+ end
data/test/with.rb ADDED
@@ -0,0 +1,45 @@
1
+ require_relative "helper"
2
+
3
+ Cuba.plugin Cuba::With
4
+
5
+ test do
6
+ class UserPhotos < Cuba
7
+ define do
8
+ on root do
9
+ res.write "uid: %d" % vars[:user_id]
10
+ res.write "site: %s" % vars[:site]
11
+ end
12
+ end
13
+ end
14
+
15
+ class Photos < Cuba
16
+ define do
17
+ on ":id/photos" do |id|
18
+ with user_id: id do
19
+ _, _, body = UserPhotos.call(req.env)
20
+
21
+ body.each do |line|
22
+ res.write line
23
+ end
24
+ end
25
+
26
+ res.write vars.inspect
27
+ end
28
+ end
29
+ end
30
+
31
+ Cuba.define do
32
+ on "users" do
33
+ with user_id: "default", site: "main" do
34
+ run Photos
35
+ end
36
+ end
37
+ end
38
+
39
+ _, _, body = Cuba.call({ "PATH_INFO" => "/users/1001/photos",
40
+ "SCRIPT_NAME" => "" })
41
+
42
+
43
+ assert_response body, ["uid: 1001", "site: main",
44
+ '{:user_id=>"default", :site=>"main"}']
45
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuba-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0.rc1
4
+ version: 3.1.0.rc2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-02 00:00:00.000000000 Z
12
+ date: 2012-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cuba
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.1.rc3
21
+ version: 3.1.0.rc2
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 3.0.1.rc3
29
+ version: 3.1.0.rc2
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: cutest
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -69,24 +69,16 @@ files:
69
69
  - LICENSE
70
70
  - README.markdown
71
71
  - rakefile
72
- - lib/cuba/contrib/form_helpers.rb
73
- - lib/cuba/contrib/mote.rb
74
- - lib/cuba/contrib/prelude.rb
75
- - lib/cuba/contrib/text_helpers.rb
76
- - lib/cuba/contrib/with.rb
77
72
  - lib/cuba/contrib.rb
73
+ - lib/cuba/mote.rb
74
+ - lib/cuba/prelude.rb
75
+ - lib/cuba/text_helpers.rb
76
+ - lib/cuba/with.rb
78
77
  - cuba-contrib.gemspec
79
78
  - test/helper.rb
80
79
  - test/mote.rb
81
- - test/text_helper.rb
82
- - test/vars.rb
83
- - views/field.mote
84
- - views/file.mote
85
- - views/option.mote
86
- - views/password.mote
87
- - views/select.mote
88
- - views/textarea.mote
89
- - views/textfield.mote
80
+ - test/text_helpers.rb
81
+ - test/with.rb
90
82
  homepage: http://github.com/cyx/cuba-contrib
91
83
  licenses: []
92
84
  post_install_message:
@@ -1,107 +0,0 @@
1
- class Cuba
2
- module FormHelpers
3
- include Cuba::Prelude
4
-
5
- def cuba_contrib_partial(template, locals = {})
6
- partial(cuba_contrib_path("%s.mote" % template), locals)
7
- end
8
-
9
- def cuba_contrib_path(*args)
10
- File.join(Cuba::CONTRIB_ROOT, "views", *args)
11
- end
12
-
13
- def cuba_contrib_form(record)
14
- view(cuba_contrib_path("form"), model: record)
15
- end
16
-
17
- def select_options(pairs, selected = nil, prompt = nil)
18
- "".tap do |ret|
19
- ret << option_tag(prompt, "") if prompt
20
-
21
- pairs.each do |label, value|
22
- ret << option_tag(label, value, selected)
23
- end
24
- end
25
- end
26
-
27
- def option_tag(label, value, selected = nil)
28
- cuba_contrib_partial("option", selected: selected, value: value, label: label)
29
- end
30
-
31
- def datefield(model, field, hint = nil)
32
- input(model, field, hint) do
33
- cuba_contrib_partial("textfield",
34
- name: field_name(model, field),
35
- value: model.send(field),
36
- class: "date"
37
- )
38
- end
39
- end
40
-
41
- def textfield(model, field, hint = nil)
42
- input(model, field, hint) do
43
- cuba_contrib_partial("textfield",
44
- name: field_name(model, field),
45
- value: model.send(field)
46
- )
47
- end
48
- end
49
-
50
- def password_field(model, field, hint = nil)
51
- input(model, field, hint) do
52
- cuba_contrib_partial("password",
53
- name: field_name(model, field)
54
- )
55
- end
56
- end
57
-
58
- def filefield(model, field, hint = nil)
59
- input(model, field, hint) do
60
- cuba_contrib_partial("file",
61
- name: field_name(model, field)
62
- )
63
- end
64
- end
65
-
66
- def textarea(model, field, hint = nil)
67
- input(model, field, hint) do
68
- cuba_contrib_partial("textarea",
69
- name: field_name(model, field),
70
- value: model.send(field)
71
- )
72
- end
73
- end
74
-
75
- def dropdown(model, field, options, hint = nil)
76
- input(model, field, hint) do
77
- cuba_contrib_partial("select",
78
- name: field_name(model, field),
79
- options: select_options(options, model.send(field))
80
- )
81
- end
82
- end
83
-
84
- def input(model, field, hint)
85
- cuba_contrib_partial("field",
86
- label: humanize(field),
87
- input: yield,
88
- hint: hint,
89
- error: localize_errors(model, field).join(", ")
90
- )
91
- end
92
-
93
- def localize_errors(model, field)
94
- model.errors[field].map do |err|
95
- unless settings.localized_errors[err]
96
- raise "No localized error defined for: #{err}"
97
- end
98
-
99
- settings.localized_errors[err] % { field: humanize(field) }
100
- end
101
- end
102
-
103
- def field_name(model, field)
104
- "#{underscore(model.class.name)}[#{field}]"
105
- end
106
- end
107
- end
data/test/text_helper.rb DELETED
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative "helper"
4
-
5
- setup do
6
- obj = Object.new
7
- obj.extend Cuba::TextHelpers
8
- end
9
-
10
- test "truncate" do |helper|
11
- assert_equal "the q...", helper.truncate("the quick brown", 5)
12
-
13
- assert_equal "same string", helper.truncate("same string", 11)
14
- end
15
-
16
- test "markdown" do |helper|
17
- assert_equal "<h1>Hola Mundo</h1>", helper.markdown("# Hola Mundo")
18
- end
19
-
20
- test "nl2br" do |helper|
21
- assert_equal "Hi<br>there<br>Joe", helper.nl2br("Hi\nthere\r\nJoe")
22
- end
23
-
24
- test "currency" do |helper|
25
- assert_equal "$ 2.22", helper.currency(2.221)
26
- assert_equal "€ 2.22", helper.currency(2.221, "€")
27
- end
data/test/vars.rb DELETED
@@ -1,32 +0,0 @@
1
- require_relative "helper"
2
-
3
- Cuba.plugin Cuba::With
4
-
5
- class UserPhotos < Cuba
6
- define do
7
- on root do
8
- res.write "uid: %d" % vars[:user_id]
9
- end
10
- end
11
- end
12
-
13
- test do
14
- Cuba.define do
15
- on "users/:id/photos" do |id|
16
- with user_id: id do
17
- _, _, body = UserPhotos.call(req.env)
18
-
19
- body.each do |line|
20
- res.write line
21
- end
22
- end
23
-
24
- res.write vars.inspect
25
- end
26
- end
27
-
28
- _, _, body = Cuba.call({ "PATH_INFO" => "/users/1001/photos",
29
- "SCRIPT_NAME" => "" })
30
-
31
- assert_response body, ["uid: 1001", "{}"]
32
- end
data/views/field.mote DELETED
@@ -1,13 +0,0 @@
1
- <label>
2
- <span>{{ label }}</span>
3
-
4
- {{ input }}
5
-
6
- % if hint
7
- <em class="hint">{{ hint }}</em>
8
- % end
9
-
10
- % if not error.to_s.empty?
11
- <span class="error"><em>{{ error}}</em></span>
12
- % end
13
- </label>
data/views/file.mote DELETED
@@ -1 +0,0 @@
1
- <input type="file" name="{{ name }}">
data/views/option.mote DELETED
@@ -1 +0,0 @@
1
- <option {{ 'selected="selected"' if selected == value }} value="{{ h(value) }}">{{ h(label) }}</option>
data/views/password.mote DELETED
@@ -1 +0,0 @@
1
- <input type="password" name="{{ name }}" value="">
data/views/select.mote DELETED
@@ -1,3 +0,0 @@
1
- <select name="{{ name }}">
2
- {{ options }}
3
- </select>
data/views/textarea.mote DELETED
@@ -1 +0,0 @@
1
- <textarea rows=10 cols=50 name="{{ name }}">{{ value }}</textarea>
data/views/textfield.mote DELETED
@@ -1 +0,0 @@
1
- <input type="text" {{ 'class="%s"' % params[:class] if params[:class] }} name="{{ name }}" value="{{ value }}">