cardamom 0.1.0

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: 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
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-2
7
+ install:
8
+ - gem install multi_json
9
+ - gem install cutest -v 1.1.3
10
+ - gem install codeclimate-test-reporter
11
+ script:
12
+ RUBYLIB=./lib cutest test/*_test.rb
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,9 @@
1
+ .PHONY: test
2
+
3
+ test:
4
+ @echo Running tests... && \
5
+ RUBYLIB=./lib cutest test/**/*_test.rb
6
+
7
+ console:
8
+ @echo Running tests... && \
9
+ RUBYLIB=./lib irb
@@ -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,8 @@
1
+ require 'cardamom'
2
+
3
+ if ENV["TRAVIS"]
4
+ require "codeclimate-test-reporter"
5
+ CodeClimate::TestReporter.start
6
+ end
7
+
8
+ include Cardamom
@@ -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: []