cardamom 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.travis.yml +12 -0
- data/README.md +0 -0
- data/cardamom.gemspec +18 -0
- data/lib/cardamom.rb +11 -0
- data/lib/cardamom/hash_helpers.rb +39 -0
- data/lib/cardamom/json_helpers.rb +18 -0
- data/lib/cardamom/response_helpers.rb +21 -0
- data/lib/cardamom/string_helpers.rb +58 -0
- data/makefile +9 -0
- data/test/hash_helpers_test.rb +39 -0
- data/test/helper.rb +8 -0
- data/test/json_helpers_test.rb +22 -0
- data/test/response_helpers_test.rb +0 -0
- data/test/string_helpers_test.rb +25 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 47f121c8431557e73d4367941f81ce57fde1b666
|
4
|
+
data.tar.gz: 8ae94369ac7bd26787931839b3129abb98b38218
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 58562ba79444bffbfd034906d54c4e02b2376b0fb541dbf97c9edf176c915155fd7ad8fdc136e0028aefb24c31c0f040ec41bd6e47f43861db066f209b26ab65
|
7
|
+
data.tar.gz: 3569a8910a70dd7acb62dbb8a1c9c763156a856216d5d0a66604229fc0a613a3c39b2f5e270d2d2bce222af3d6f5c50a4cea2ccd0ac8660fb343cb3d85d8ed21
|
data/.gitignore
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
.gitignore
|
2
|
+
*.gem
|
3
|
+
*.gs
|
4
|
+
*.rbc
|
5
|
+
/.config
|
6
|
+
/coverage/
|
7
|
+
/InstalledFiles
|
8
|
+
/pkg/
|
9
|
+
/spec/reports/
|
10
|
+
/test/tmp/
|
11
|
+
/test/version_tmp/
|
12
|
+
/tmp/
|
13
|
+
|
14
|
+
## Specific to RubyMotion:
|
15
|
+
.dat*
|
16
|
+
.repl_history
|
17
|
+
build/
|
18
|
+
|
19
|
+
## Documentation cache and generated files:
|
20
|
+
/.yardoc/
|
21
|
+
/_yardoc/
|
22
|
+
/doc/
|
23
|
+
/rdoc/
|
24
|
+
|
25
|
+
## Environment normalisation:
|
26
|
+
/.bundle/
|
27
|
+
/lib/bundler/man/
|
28
|
+
|
29
|
+
# for a library or gem, you might want to ignore these files since the code is
|
30
|
+
# intended to run in multiple environments; otherwise, check them in:
|
31
|
+
# Gemfile.lock
|
32
|
+
# .ruby-version
|
33
|
+
# .ruby-gemset
|
34
|
+
|
35
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
36
|
+
.rvmrc
|
data/.travis.yml
ADDED
data/README.md
ADDED
File without changes
|
data/cardamom.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "cardamom"
|
3
|
+
s.version = "0.1.0"
|
4
|
+
s.summary = "Cardamom: Spice up your Cuba app!"
|
5
|
+
s.description = "Ruby helpers for Cuba apps"
|
6
|
+
s.authors = ["matiasow"]
|
7
|
+
s.email = ["matiasow@gmail.com"]
|
8
|
+
s.homepage = "http://github.com/matiasow/cardamom"
|
9
|
+
s.license = 'MIT'
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
|
13
|
+
s.add_dependency "cuba", '~> 3.0', '>= 3.0.0'
|
14
|
+
s.add_dependency "multi_json", '~> 1.11', '>= 1.11.0'
|
15
|
+
s.add_dependency "unicode_utils", '~> 1.4', '>= 1.4.0'
|
16
|
+
|
17
|
+
s.add_development_dependency "cutest", '~> 0'
|
18
|
+
end
|
data/lib/cardamom.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'cardamom/string_helpers.rb'
|
2
|
+
require 'cardamom/hash_helpers.rb'
|
3
|
+
require 'cardamom/json_helpers.rb'
|
4
|
+
require 'cardamom/response_helpers.rb'
|
5
|
+
|
6
|
+
module Cardamom
|
7
|
+
include StringHelpers
|
8
|
+
include HashHelpers
|
9
|
+
include JsonHelpers
|
10
|
+
include ResponseHelpers
|
11
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'cardamom/string_helpers'
|
2
|
+
|
3
|
+
module HashHelpers
|
4
|
+
def symbolize_keys(hash)
|
5
|
+
result = {}
|
6
|
+
hash.each do |k, v|
|
7
|
+
new_k = ( k.is_a?(String) && k.to_sym ) || k
|
8
|
+
new_v = ( v.is_a?(Hash) && symbolize_keys(v) ) || v
|
9
|
+
result[new_k] = new_v
|
10
|
+
end
|
11
|
+
result
|
12
|
+
end
|
13
|
+
|
14
|
+
def underscore_keys(hash)
|
15
|
+
transform_keys(hash){ |k| underscore(k.to_s) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def camelize_keys(hash)
|
19
|
+
transform_keys(hash){ |k| camelize(k.to_s) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def stringify_keys(hash)
|
23
|
+
transform_keys(hash){ |k| k.to_s }
|
24
|
+
end
|
25
|
+
|
26
|
+
def select_keys(hash, *args)
|
27
|
+
hash.select {|k,v| args.include?(k) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def transform_keys(hash, &block)
|
31
|
+
result = {}
|
32
|
+
hash.each do |k, v|
|
33
|
+
new_k = k.is_a?(String) || k.is_a?(Symbol) ? block.call(k.to_s) : k
|
34
|
+
new_v = v.is_a?(Hash) ? transform_keys(v, &block) : v
|
35
|
+
result[new_k] = new_v
|
36
|
+
end
|
37
|
+
result
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'cuba'
|
2
|
+
|
3
|
+
module JsonHelpers
|
4
|
+
def json_payload
|
5
|
+
body = req.body.read
|
6
|
+
body && MultiJson.load(body)
|
7
|
+
end
|
8
|
+
|
9
|
+
def parse_json(json)
|
10
|
+
MultiJson.load(json, symbolize_keys: true)
|
11
|
+
end
|
12
|
+
|
13
|
+
def json(status, data)
|
14
|
+
res.status = status
|
15
|
+
res.headers["Content-Type"] = "application/json"
|
16
|
+
res.write MultiJson.dump(data)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'cuba'
|
2
|
+
|
3
|
+
module ResponseHelpers
|
4
|
+
def bad_request(message)
|
5
|
+
res.status = 400
|
6
|
+
res.write message
|
7
|
+
halt res.finish
|
8
|
+
end
|
9
|
+
|
10
|
+
def unauthorized_request(message = nil)
|
11
|
+
res.status = 401
|
12
|
+
res.write (message || '401 Unauthorized')
|
13
|
+
halt res.finish
|
14
|
+
end
|
15
|
+
|
16
|
+
def not_found_request(message = nil)
|
17
|
+
res.status = 404
|
18
|
+
res.write (message || '404 Not found')
|
19
|
+
halt res.finish
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'unicode_utils'
|
2
|
+
|
3
|
+
module StringHelpers
|
4
|
+
# Upcase unicode string
|
5
|
+
def upcase(str)
|
6
|
+
UnicodeUtils.upcase(str)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Downcase unicode string
|
10
|
+
def downcase(str)
|
11
|
+
UnicodeUtils.downcase(str)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Camelize string
|
15
|
+
#
|
16
|
+
# Example:
|
17
|
+
# camelize 'camelize_this_string'
|
18
|
+
# => 'CamelizeThisString'
|
19
|
+
def camelize(str)
|
20
|
+
s = str.to_s.dup
|
21
|
+
s.sub!(/^[a-z\d]*/) { $&.capitalize }
|
22
|
+
s.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
|
23
|
+
s.gsub!(/\//, '::')
|
24
|
+
s
|
25
|
+
end
|
26
|
+
|
27
|
+
# Underscore string
|
28
|
+
#
|
29
|
+
# Example:
|
30
|
+
# underscore 'UnderscoreThisString'
|
31
|
+
# => 'underscore_this_string'
|
32
|
+
def underscore(str)
|
33
|
+
s = str.to_s.dup
|
34
|
+
return s unless s =~ /[A-Z-]|::/
|
35
|
+
s.gsub!(/::/, '/')
|
36
|
+
s.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(?=\b|[^a-z])/) { "#{$1 && '_'}#{$2.to_s.downcase}" }
|
37
|
+
s.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
38
|
+
s.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
39
|
+
s.tr!("-", "_")
|
40
|
+
s.downcase!
|
41
|
+
s[0..-2]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Sanitize a "dirty" string by removing dots, dashes, slashes, apostrophes, multiple spaces, etc.
|
45
|
+
# Specially useful for data cleansing routines
|
46
|
+
#
|
47
|
+
# Example:
|
48
|
+
# sanitize_dirty_string "Ge-o/rg.e O'Hara"
|
49
|
+
# => "George O Hara"
|
50
|
+
def sanitize_dirty_string(str)
|
51
|
+
str.strip.gsub(".", "")
|
52
|
+
.gsub("-", "")
|
53
|
+
.gsub("_", "")
|
54
|
+
.gsub("/", "")
|
55
|
+
.gsub("'", " ")
|
56
|
+
.gsub(/\s+/, ' ')
|
57
|
+
end
|
58
|
+
end
|
data/makefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
module HashHelpersTest
|
4
|
+
|
5
|
+
test "symbolize_keys" do
|
6
|
+
hash = { "key" => "value", "other_key" => {"nested_key" => "nested_value"} }
|
7
|
+
expected = { key: "value", other_key: {nested_key: "nested_value"} }
|
8
|
+
|
9
|
+
assert_equal symbolize_keys(hash), expected
|
10
|
+
end
|
11
|
+
|
12
|
+
test "underscore_keys" do
|
13
|
+
hash = { "Key" => "value", "OtherKey" => {"NestedKey" => "nested_value"} }
|
14
|
+
expected = { "key" => "value", "other_key" => {"nested_key" => "nested_value"} }
|
15
|
+
|
16
|
+
assert_equal underscore_keys(hash), expected
|
17
|
+
end
|
18
|
+
|
19
|
+
test "camelize_keys" do
|
20
|
+
hash = { "key" => "value", "other_key" => {"nested_key" => "nested_value"} }
|
21
|
+
expected = { "Key" => "value", "OtherKey" => {"NestedKey" => "nested_value"} }
|
22
|
+
|
23
|
+
assert_equal camelize_keys(hash), expected
|
24
|
+
end
|
25
|
+
|
26
|
+
test "stringify_keys" do
|
27
|
+
hash = { key: "value", other_key: {nested_key: "nested_value"} }
|
28
|
+
expected = { "key" => "value", "other_key" => {"nested_key" => "nested_value"} }
|
29
|
+
|
30
|
+
assert_equal stringify_keys(hash), expected
|
31
|
+
end
|
32
|
+
|
33
|
+
test "select_keys" do
|
34
|
+
hash = { alpha: 1, beta: 2, delta: 3, gamma: 4 }
|
35
|
+
expected = { alpha: 1, delta: 3 }
|
36
|
+
assert_equal select_keys(hash, :alpha, :delta), expected
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
module JsonHelpersTest
|
4
|
+
|
5
|
+
# test "json_payload" do
|
6
|
+
# body = req.body.read
|
7
|
+
# body && MultiJson.load(body)
|
8
|
+
# end
|
9
|
+
|
10
|
+
# test "parse_json" do
|
11
|
+
# MultiJson.load(json, symbolize_keys: true)
|
12
|
+
# end
|
13
|
+
|
14
|
+
# test "json" do
|
15
|
+
# json 200, {some_data: 'some_value'}
|
16
|
+
|
17
|
+
# assert_equal res.status, 200
|
18
|
+
# assert_equal res.headers["Content-Type"], "application/json"
|
19
|
+
# assert_equal res.body, "{\"some_data\": \"some_value\"}
|
20
|
+
# end
|
21
|
+
|
22
|
+
end
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
module StringHelpersTest
|
4
|
+
|
5
|
+
test "upcase" do
|
6
|
+
assert_equal upcase("áéíóú"), "ÁÉÍÓÚ"
|
7
|
+
end
|
8
|
+
|
9
|
+
test "downcase" do
|
10
|
+
assert_equal downcase("ÁÉÍÓÚ"), "áéíóú"
|
11
|
+
end
|
12
|
+
|
13
|
+
test "camelize" do
|
14
|
+
assert_equal camelize('camelize_this_string'), "CamelizeThisString"
|
15
|
+
end
|
16
|
+
|
17
|
+
test "underscore" do
|
18
|
+
assert_equal underscore('CamelizeThisString'), "camelize_this_string"
|
19
|
+
end
|
20
|
+
|
21
|
+
test "sanitize_dirty_string" do
|
22
|
+
assert_equal sanitize_dirty_string("Ge-o/rg.e O'Hara"), "George O Hara"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cardamom
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- matiasow
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: cuba
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: multi_json
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.11'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.11.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.11'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.11.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: unicode_utils
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.4'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.4.0
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.4'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.4.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: cutest
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
type: :development
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
description: Ruby helpers for Cuba apps
|
88
|
+
email:
|
89
|
+
- matiasow@gmail.com
|
90
|
+
executables: []
|
91
|
+
extensions: []
|
92
|
+
extra_rdoc_files: []
|
93
|
+
files:
|
94
|
+
- ".gitignore"
|
95
|
+
- ".travis.yml"
|
96
|
+
- README.md
|
97
|
+
- cardamom.gemspec
|
98
|
+
- lib/cardamom.rb
|
99
|
+
- lib/cardamom/hash_helpers.rb
|
100
|
+
- lib/cardamom/json_helpers.rb
|
101
|
+
- lib/cardamom/response_helpers.rb
|
102
|
+
- lib/cardamom/string_helpers.rb
|
103
|
+
- makefile
|
104
|
+
- test/hash_helpers_test.rb
|
105
|
+
- test/helper.rb
|
106
|
+
- test/json_helpers_test.rb
|
107
|
+
- test/response_helpers_test.rb
|
108
|
+
- test/string_helpers_test.rb
|
109
|
+
homepage: http://github.com/matiasow/cardamom
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.4.4
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: 'Cardamom: Spice up your Cuba app!'
|
133
|
+
test_files: []
|