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 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: []