javy_tool 0.0.1
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.md +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/javy_tool.gemspec +21 -0
- data/lib/javy_tool/breadcrumb.rb +174 -0
- data/lib/javy_tool/utils.rb +51 -0
- data/lib/javy_tool/version.rb +3 -0
- data/lib/javy_tool.rb +18 -0
- metadata +56 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 qmliu
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# JavyTool
|
2
|
+
|
3
|
+
Just pack some methods that ofen used to a gem,ex:h2o,truncate etc..
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'javy_tool'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install javy_tool
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
JavyTool.h2o(aHash)
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/javy_tool.gemspec
ADDED
@@ -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 'javy_tool/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "javy_tool"
|
8
|
+
gem.version = JavyTool::VERSION
|
9
|
+
gem.authors = ["javy_liu"]
|
10
|
+
gem.email = ["javy_liu@163.com"]
|
11
|
+
gem.description = %q{pack some used methods}
|
12
|
+
gem.summary = %q{some methods ofen used in my projects}
|
13
|
+
gem.homepage = "https://github.com/javyliu/javy_tool"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
#s.add_dependency "rails", "~> 3.2.6"
|
21
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module JavyTool
|
2
|
+
module Breadcrumb
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
protected
|
9
|
+
|
10
|
+
def set_breadcrumbs
|
11
|
+
#@breadcrumbs = ["#{I18n.t("common.locate_des")}<a href='/wb/'>#{I18n.t("common.forum_home")}</a>".html_safe]
|
12
|
+
end
|
13
|
+
|
14
|
+
def drop_breadcrumb(title=nil, url=nil)
|
15
|
+
title ||= @page_title
|
16
|
+
#url ||= url_for
|
17
|
+
if title
|
18
|
+
if url
|
19
|
+
@breadcrumbs.push("<a href=\"#{url}\">#{title}</a>".html_safe)
|
20
|
+
else
|
21
|
+
@breadcrumbs.push("#{title}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def drop_page_title(title)
|
27
|
+
@page_title = title
|
28
|
+
return @page_title
|
29
|
+
end
|
30
|
+
|
31
|
+
def no_breadcrumbs
|
32
|
+
@breadcrumbs = []
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module Helpers
|
37
|
+
def yield_or_default(message, default_message = "")
|
38
|
+
message.nil? ? default_message : message
|
39
|
+
end
|
40
|
+
# set SITE_NAME in enviroment.rb
|
41
|
+
# set @page_title in controller respectively
|
42
|
+
# add<%= render_page_title %> in head
|
43
|
+
def render_page_title
|
44
|
+
title = @page_title ? "#{@page_title}_#{SITE_NAME}" : SITE_NAME rescue "SITE_NAME"
|
45
|
+
content_tag("title", title, nil, false)
|
46
|
+
end
|
47
|
+
|
48
|
+
def render_body_tag
|
49
|
+
class_attribute = ["#{controller_name}-controller","#{action_name}-action"].join(" ")
|
50
|
+
id_attribute = (@body_id)? " id=\"#{@body_id}-page\"" : ""
|
51
|
+
|
52
|
+
raw(%Q|<!--[if lt IE 7 ]>
|
53
|
+
<body class="#{class_attribute} ie6"><![endif]-->
|
54
|
+
<!--[if gte IE 7 ]>
|
55
|
+
<body class="#{class_attribute} ie"><![endif]-->
|
56
|
+
<!--[if !IE]>-->
|
57
|
+
<body#{id_attribute} class="#{class_attribute}">
|
58
|
+
<!--<![endif]-->|)
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
# display the flash messages
|
64
|
+
def notice_message
|
65
|
+
flash_messages = []
|
66
|
+
flash.each do |type, message|
|
67
|
+
type = :success if type == :notice
|
68
|
+
type = :alert if type == :error
|
69
|
+
text = content_tag(:div, message, :class => "alert-#{type} alert-box")
|
70
|
+
flash_messages << text if message
|
71
|
+
end
|
72
|
+
flash_messages.join("\n").html_safe
|
73
|
+
end
|
74
|
+
|
75
|
+
def s(html)
|
76
|
+
sanitize( html, :tags => %w(table thead tbody tr td th ol ul li div span font img sup sub br hr a pre p h1 h2 h3 h4 h5 h6), :attributes => %w(id class style src href size color) )
|
77
|
+
end
|
78
|
+
|
79
|
+
def render_breadcrumb
|
80
|
+
return "" if @breadcrumbs.nil? || @breadcrumbs.size <= 0
|
81
|
+
prefix = "".html_safe
|
82
|
+
crumb = "".html_safe
|
83
|
+
|
84
|
+
@breadcrumbs.each_with_index do |c, i|
|
85
|
+
breadcrumb_class = []
|
86
|
+
breadcrumb_class << "active" if i == (@breadcrumbs.length - 1)
|
87
|
+
if i == (@breadcrumbs.length - 1)
|
88
|
+
breadcrumb_content = c
|
89
|
+
else
|
90
|
+
breadcrumb_content = c + content_tag(:span, ">", :class => "divider")
|
91
|
+
end
|
92
|
+
|
93
|
+
crumb += content_tag(:li, breadcrumb_content ,:class => breadcrumb_class )
|
94
|
+
end
|
95
|
+
return prefix + content_tag(:ul, crumb, :class => "breadcrumb")
|
96
|
+
end
|
97
|
+
|
98
|
+
# add nested object to the parent form by ajax
|
99
|
+
# parameters:
|
100
|
+
# name: link title
|
101
|
+
# f: form_for's f
|
102
|
+
# association: association object
|
103
|
+
# example:
|
104
|
+
# <%=link_to_add_fields("Add Cycle",f,:pipgame_cycles,f.object.pipgame_cycles.new(:item_type => "App",:position => "cycle_img")) %>
|
105
|
+
# this method will render _pipgame_cycle_fields.html.erb file like
|
106
|
+
#
|
107
|
+
# <div class="fields" rel="need_upload">
|
108
|
+
# <p>
|
109
|
+
# <%= f.label :img_src %><br />
|
110
|
+
# <%= f.hidden_field :img_src,:class=>"web_img_src" %>
|
111
|
+
# <%= f.hidden_field :item_type %>
|
112
|
+
# <%= f.hidden_field :position %>
|
113
|
+
# <%= f.hidden_field :_destroy %>
|
114
|
+
# <%= link_to_function "remove", "remove_fields(this)" %>
|
115
|
+
# </p>
|
116
|
+
# </div>
|
117
|
+
#
|
118
|
+
# and you need add javascript like following:
|
119
|
+
#
|
120
|
+
# function remove_fields(link) {
|
121
|
+
# $(link).prev("input[type=hidden]").val("1");
|
122
|
+
# $(link).closest(".fields").hide();
|
123
|
+
# }
|
124
|
+
# function add_fields(link, association, content) {
|
125
|
+
# var new_id = new Date().getTime();
|
126
|
+
# var regexp = new RegExp("new_" + association, "g");
|
127
|
+
# var con = content.replace(regexp, new_id);
|
128
|
+
# //console.log(con);
|
129
|
+
# $(link).parent().before(con);
|
130
|
+
# }
|
131
|
+
#
|
132
|
+
# deprecated in rails4 need to fix the link_to_founction
|
133
|
+
def link_to_add_fields(name, f, association,new_object=nil)
|
134
|
+
new_object ||= f.object.class.reflect_on_association(association).klass.new()
|
135
|
+
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
|
136
|
+
render(association.to_s.singularize + "_fields", :f => builder)
|
137
|
+
end
|
138
|
+
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields.html_safe)}\")")
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
#set head description,keywords etc
|
143
|
+
def head(head_identity=nil)
|
144
|
+
content_for(:head) do
|
145
|
+
case head_identity
|
146
|
+
when "description"
|
147
|
+
"<meta name=\"description\" content=\"#{yield}\" />\n"
|
148
|
+
when "keywords"
|
149
|
+
"<meta name=\"keywords\" content=\"#{yield}\" />\n"
|
150
|
+
else
|
151
|
+
yield
|
152
|
+
end.html_safe
|
153
|
+
end
|
154
|
+
end
|
155
|
+
#add javascript to foot
|
156
|
+
def foot
|
157
|
+
content_for(:foot) do
|
158
|
+
yield.html_safe
|
159
|
+
end
|
160
|
+
end
|
161
|
+
#format time
|
162
|
+
def format_timestamp(ts,format='%Y-%m-%d %H:%M')
|
163
|
+
ts.strftime(format)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.included(receiver)
|
168
|
+
receiver.extend ClassMethods
|
169
|
+
receiver.send :include, InstanceMethods
|
170
|
+
receiver.send :helper, Helpers
|
171
|
+
receiver.send :before_filter, :set_breadcrumbs
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module JavyTool
|
2
|
+
module Utils
|
3
|
+
require "ostruct"
|
4
|
+
module_function
|
5
|
+
# translate a Hash object to a OpenStruct object
|
6
|
+
# parameter:
|
7
|
+
# ahash => Hash
|
8
|
+
# return: a OpenStruct object
|
9
|
+
def h2o( ahash )
|
10
|
+
return ahash unless Hash === ahash
|
11
|
+
OpenStruct.new( Hash[ *ahash.inject( [] ) { |a, (k, v)| a.push(k, h2o(v)) } ] )
|
12
|
+
end
|
13
|
+
|
14
|
+
# truncate string with utf-8 encoding
|
15
|
+
def truncate_u(text, length = 30, truncate_string = "...")
|
16
|
+
l=0
|
17
|
+
char_array=text.unpack("U*")
|
18
|
+
char_array.each_with_index do |c,i|
|
19
|
+
l = l+ (c<127 ? 0.5 : 1)
|
20
|
+
if l>=length
|
21
|
+
return char_array[0..i].pack("U*")+(i<char_array.length-1 ? truncate_string : "")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return text
|
25
|
+
end
|
26
|
+
|
27
|
+
# truncate string and chinese is two chars
|
28
|
+
def truncate_o(text,length=16)
|
29
|
+
text = Iconv.conv("gb2312","utf8",text)[0,length]
|
30
|
+
Iconv.conv("utf8","gb2312",text)
|
31
|
+
end
|
32
|
+
|
33
|
+
# upload file,default to /tmp
|
34
|
+
# return filename
|
35
|
+
def upload_file(file,path=nil)
|
36
|
+
path ||= JavyTool.options[:upload_path]
|
37
|
+
unless file.original_filename.empty?
|
38
|
+
filename = if block_given?
|
39
|
+
yield file.original_filename
|
40
|
+
else
|
41
|
+
Time.now.strftime("%Y%m%d%H%M%S") + rand(10000).to_s + File.extname(file.original_filename)
|
42
|
+
# if File.extname(file.original_filename).downcase == ".apk"
|
43
|
+
# file.original_filename.gsub(/[^\w]/,'') #
|
44
|
+
# end
|
45
|
+
end
|
46
|
+
File.open(path+filename, "wb") { |f| f.write(file.read) }
|
47
|
+
filename
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/javy_tool.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "javy_tool/version"
|
2
|
+
|
3
|
+
module JavyTool
|
4
|
+
autoload :Utils, "javy_tool/utils"
|
5
|
+
autoload :Breadcrumb, "javy_tool/breadcrumb"
|
6
|
+
mattr_accessor :tool_config
|
7
|
+
mattr_accessor :upload_path
|
8
|
+
@@upload_path = "/tmp"
|
9
|
+
|
10
|
+
def self.setup
|
11
|
+
yield self
|
12
|
+
end
|
13
|
+
def self.options
|
14
|
+
@@options ||= {
|
15
|
+
:upload_path => upload_path
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: javy_tool
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- javy_liu
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-12-20 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: pack some used methods
|
15
|
+
email:
|
16
|
+
- javy_liu@163.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- LICENSE.md
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- javy_tool.gemspec
|
27
|
+
- lib/javy_tool.rb
|
28
|
+
- lib/javy_tool/breadcrumb.rb
|
29
|
+
- lib/javy_tool/utils.rb
|
30
|
+
- lib/javy_tool/version.rb
|
31
|
+
homepage: https://github.com/javyliu/javy_tool
|
32
|
+
licenses: []
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 1.8.24
|
52
|
+
signing_key:
|
53
|
+
specification_version: 3
|
54
|
+
summary: some methods ofen used in my projects
|
55
|
+
test_files: []
|
56
|
+
has_rdoc:
|