fanforce-utils 0.2
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 +15 -0
- data/.gitignore +22 -0
- data/Gemfile +2 -0
- data/README.md +4 -0
- data/Rakefile +16 -0
- data/fanforce-utils.gemspec +21 -0
- data/lib/fanforce/utils.rb +14 -0
- data/lib/fanforce/utils/utils.rb +127 -0
- data/lib/fanforce/utils/version.rb +5 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDc2ZTQyOTdlODczYTJkZjkyY2FkZWUyZWE4NjY5MmFmNjMxODIxMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YWZmNmRjMmY3NTNiODVmNDZhNGNkOTdjNjI4ZTdkMjc3MWI4NjkxNw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NjRlYzJkMTQzMWE3MzRmNzNhODM1ODVhNjI1YTk3ZTlkYTk5MTllYzAyZTIw
|
10
|
+
NGFjNDJiMmI0YmNlYWEyYmE0MThhYzVhOTE4Nzc5OGIwMzBmMmQ0MTBjYTYw
|
11
|
+
NjEzMDdkYzcwZjBiYmNiMzc5ZjJhYzU0YzFmYWEyMmYzZWU0Y2Y=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Mjc2YTk4ODdmYjFhMzA0MTUzYWM0MDViMTVjMmZkZjJhNWM5ODhlMTg5YTZj
|
14
|
+
MWFmMzU3MTM5OWJmM2RlZjFhYzE0MzE5NzRkNjUwYzM1Y2MwNWY5ZDM1N2My
|
15
|
+
MjhiNGNiNmNmMzg0OWZlMzM4MWI1ZTg5MjBjNzhkNTZmNzc4MDU=
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
|
15
|
+
# YARD artifacts
|
16
|
+
.yardoc
|
17
|
+
_yardoc
|
18
|
+
doc/
|
19
|
+
.DS_Store
|
20
|
+
.idea/
|
21
|
+
.idea/*
|
22
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
# Default Rake task is compile
|
7
|
+
#task :default => :compile
|
8
|
+
|
9
|
+
########################################################################
|
10
|
+
|
11
|
+
Rake::TestTask.new do |t|
|
12
|
+
t.libs.push "lib"
|
13
|
+
t.libs.push "test"
|
14
|
+
t.pattern = 'test/**/*_test.rb'
|
15
|
+
t.verbose = false
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'fanforce/utils/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'fanforce-utils'
|
8
|
+
gem.version = Fanforce::Utils::VERSION
|
9
|
+
gem.date = '2012-10-19'
|
10
|
+
gem.summary = %q{Internal utils library used by the Fanforce codebase.}
|
11
|
+
gem.authors = ['Caleb Clark']
|
12
|
+
gem.email = ['cclark@fanforce.com']
|
13
|
+
gem.homepage = 'http://github.com/fanforce/fanforce-utils'
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
+
gem.require_paths = ['lib']
|
18
|
+
|
19
|
+
gem.add_runtime_dependency 'rack'
|
20
|
+
gem.add_runtime_dependency 'multi_json', '>= 1.3.6'
|
21
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'rack/utils'
|
3
|
+
require 'multi_json'
|
4
|
+
|
5
|
+
module Fanforce::Utils
|
6
|
+
extend Fanforce::Utils
|
7
|
+
def self.included(base) base.extend(self) end
|
8
|
+
|
9
|
+
def is_blank?(obj)
|
10
|
+
obj.respond_to?(:empty?) ? obj.empty? : !obj
|
11
|
+
end
|
12
|
+
|
13
|
+
def is_present?(obj)
|
14
|
+
!is_blank?(obj)
|
15
|
+
end
|
16
|
+
|
17
|
+
def symbolize_keys(object) #:nodoc:
|
18
|
+
Fanforce::InternalUtils.modify_keys(object) do |key|
|
19
|
+
key.is_a?(String) ? key.to_sym : key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_url(raw_url)
|
24
|
+
return if is_blank?(raw_url)
|
25
|
+
url = URI::parse(raw_url)
|
26
|
+
query_params = Rack::Utils.parse_query(url.query).inject({}) do |result, (k,v)|
|
27
|
+
if k !~ /^ff_.+/
|
28
|
+
result[k] = v
|
29
|
+
end
|
30
|
+
result
|
31
|
+
end
|
32
|
+
query_string = to_query_string(Hash[query_params.sort]) if is_present?(query_params)
|
33
|
+
_external_id = url.host + url.path
|
34
|
+
clean_url = "#{url.scheme}://#{url.host}#{(if ![80,443].include?(url.port) then ":#{url.port}" end)}#{url.path}#{(if is_present?(query_string) then "?#{query_string}" end)}"
|
35
|
+
|
36
|
+
{ _external_id: _external_id, clean_url: clean_url, raw_url: raw_url, query_params: query_params, query_string: query_string, scheme: url.scheme, host: url.host, port: url.port, path: url.path, fragment: url.fragment }
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_query_string(obj, namespace=nil)
|
40
|
+
return '' if is_blank?(obj)
|
41
|
+
if obj.is_a?(Array)
|
42
|
+
obj.collect { |value| to_query_string(value, "#{namespace}[]") }.join '&'
|
43
|
+
elsif obj.is_a?(Hash)
|
44
|
+
obj.collect { |key, value| to_query_string(value, namespace ? "#{namespace}[#{key}]" : key) }.sort * '&'
|
45
|
+
elsif obj.is_a?(Object)
|
46
|
+
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
47
|
+
"#{CGI.escape(Fanforce::InternalUtils.to_param(namespace))}=#{CGI.escape(Fanforce::InternalUtils.to_param(obj).to_s)}"
|
48
|
+
else
|
49
|
+
raise "Argument must be an object, hash, or array; instead it was a #{obj.class}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def curl_command(method, url, req_params)
|
54
|
+
case method.to_s.downcase.to_sym
|
55
|
+
when :get
|
56
|
+
"curl \"#{url}?#{to_query_string(req_params)}\""
|
57
|
+
when :post
|
58
|
+
"curl -X POST -d \"#{to_query_string(req_params)}\" #{url}"
|
59
|
+
when :put
|
60
|
+
"curl -X PUT -d \"#{to_query_string(req_params)}\" #{url.to_json}"
|
61
|
+
when :delete
|
62
|
+
"curl --request DELETE \"#{url}?#{to_query_string(req_params)}\""
|
63
|
+
else
|
64
|
+
raise 'Unknown request method'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def decode_json(str, symbolize_keys=true)
|
69
|
+
MultiJson.load(str, :symbolize_keys => symbolize_keys)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Creates a string representation of a javascript object for $.tmpl
|
73
|
+
def compile_jquery_tmpls(options={}, &block)
|
74
|
+
begin require 'haml' rescue LoadError raise 'You must have the haml gem installed to use Fanforce.compile_jquery_templates.' end
|
75
|
+
context = Object.new
|
76
|
+
class << context
|
77
|
+
include Haml::Helpers
|
78
|
+
end
|
79
|
+
context.init_haml_helpers
|
80
|
+
|
81
|
+
format = options[:format] == 'html' ? :html : :json
|
82
|
+
|
83
|
+
return context.capture_haml(&block) if format == :html
|
84
|
+
single_line_html = context.capture_haml(&block).split(/\r?\n/).inject('') {|sl, l| sl += l.strip + ' ' }
|
85
|
+
matches = single_line_html.scan(/<script id=[\"'](.*?)[\"'](?:.*?)>(.*?)(?:<\/script>)/mi)
|
86
|
+
|
87
|
+
matches.inject({}) {|t,m| t[m[0]] = m[1]; t }.to_json
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
module Fanforce::InternalUtils
|
93
|
+
|
94
|
+
def self.modify_keys(object, &modifier) #:nodoc:
|
95
|
+
case object
|
96
|
+
when Array
|
97
|
+
object.map do |value|
|
98
|
+
modify_keys(value, &modifier)
|
99
|
+
end
|
100
|
+
when Hash
|
101
|
+
object.inject({}) do |result, (key, value)|
|
102
|
+
new_key = modifier.call(key)
|
103
|
+
new_value = modify_keys(value, &modifier)
|
104
|
+
result.merge! new_key => new_value
|
105
|
+
end
|
106
|
+
else
|
107
|
+
object
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.to_param(obj, namespace=nil)
|
112
|
+
if obj.is_a?(Array)
|
113
|
+
collect { |e| to_param(e) }.join '/'
|
114
|
+
elsif obj.is_a?(Hash)
|
115
|
+
to_query_string(obj, namespace)
|
116
|
+
elsif obj.is_a?(NilClass)
|
117
|
+
obj
|
118
|
+
elsif obj.is_a?(TrueClass)
|
119
|
+
obj
|
120
|
+
elsif obj.is_a?(FalseClass)
|
121
|
+
obj
|
122
|
+
elsif obj.is_a?(Object)
|
123
|
+
obj.to_s
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fanforce-utils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.2'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Caleb Clark
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2012-10-19 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
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: multi_json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.6
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.6
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- cclark@fanforce.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- fanforce-utils.gemspec
|
53
|
+
- lib/fanforce/utils.rb
|
54
|
+
- lib/fanforce/utils/utils.rb
|
55
|
+
- lib/fanforce/utils/version.rb
|
56
|
+
homepage: http://github.com/fanforce/fanforce-utils
|
57
|
+
licenses: []
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.0.3
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: Internal utils library used by the Fanforce codebase.
|
79
|
+
test_files: []
|