tiny_support 0.0.1 → 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8e09694741fa8267fe679927f667b648c57ba270
4
+ data.tar.gz: 5ff8f18d6ac559638b3e38200250f696705459ff
5
+ SHA512:
6
+ metadata.gz: 03028333c2899cb8c037827b5cd069f449a1558b796e2e93ea496463f5be4bbd0b9abae7c8251f95e4c333415fe78661aedd41262538d82952bffa572e785073
7
+ data.tar.gz: 7c99eb97b044bf845f76ea25bd71733873fa90d100f9e704d0b9426e1348d910646140dcaba19d972402bd3aec64acdefd71f24e4fb761f95df7cd88b05a6596
@@ -8,12 +8,30 @@ module TinySupport
8
8
  end
9
9
 
10
10
  module ClassMethods
11
+
12
+ #
13
+ # field_name: 字段名称
14
+ # configs: 请传入一个数组
15
+ #
16
+ # ---
17
+ # 会生成方法:
18
+ # - 实例方法: # 以 field_name = status 为例
19
+ # * status_key
20
+ # * status_key=
21
+ # * status_key?(a_key)
22
+ # 类方法:
23
+ # * status_config
24
+ #
11
25
  def tiny_support_config field_name, configs=[]
12
26
  _class_config_name = :"#{field_name}_config".to_sym
13
27
  cattr_accessor _class_config_name, :instance_reader => false
14
- _configs = TinyUtil::Config.new(configs)
28
+ _configs = ::TinyUtil::Config.new(configs)
15
29
  self.class_variable_set("@@#{_class_config_name}", _configs)
16
30
 
31
+ scope :status_of, ->(key) do
32
+ where(:status => _configs.find_by_key(_key).value)
33
+ end
34
+
17
35
  define_method :"#{field_name}" do
18
36
  _configs.find_by_value(send(:"#{field_name}_value"))
19
37
  end
@@ -34,3 +52,4 @@ module TinySupport
34
52
  end
35
53
  end
36
54
  end
55
+ # *
@@ -4,15 +4,32 @@ module TinySupport
4
4
  extend ::ActiveSupport::Concern
5
5
 
6
6
  included do
7
- include ActiveModel::Model
8
- include ActiveModel::Conversion
9
- include ActiveModel::Validations
7
+ include ::ActiveModel::Model
8
+ include ::ActiveModel::Conversion
9
+ include ::ActiveModel::Validations
10
+ include ::ActiveModel::Validations::Callbacks
11
+
10
12
 
11
13
  include ::TinySupport::Configable
12
14
  end
13
15
 
16
+ module ClassMethods
17
+ def support_strip_values! *fields
18
+ before_validation do |r|
19
+ fields.each do |_field|
20
+ r.send(:"#{_field}").to_s.strip!
21
+ end
22
+ end
23
+ end
24
+ end
25
+
14
26
  public
15
27
 
28
+ def initialize *args
29
+ attrs = args.extract_options!
30
+ assign_attrs attrs
31
+ end
32
+
16
33
  def success?
17
34
  self.errors.empty?
18
35
  end
@@ -21,6 +38,12 @@ module TinySupport
21
38
  !(success?)
22
39
  end
23
40
 
41
+ def assign_attrs attrs={}
42
+ attrs.each do |field, value|
43
+ self.send(:"#{field}=", value)
44
+ end
45
+ end
46
+
24
47
  private
25
48
 
26
49
  end
@@ -0,0 +1,33 @@
1
+ <style type="text/CSS">
2
+ .tiny_captcha{padding: 5px !important;}
3
+ .tiny_captcha,
4
+ .tiny_captcha div{display: table;}
5
+ .tiny_captcha .tiny_captcha_field,
6
+ .tiny_captcha .tiny_captcha_image{
7
+ margin: 0px 0px 2px 0px !important;
8
+ padding: 0px !important;
9
+ }
10
+ .tiny_captcha .tiny_captcha_image img{
11
+ margin: 0px !important;
12
+ padding: 0px !important;
13
+ width: 110px !important;
14
+ }
15
+ .tiny_captcha .tiny_captcha_label{font-size: 12px;}
16
+ .tiny_captcha .tiny_captcha_field input{
17
+ width: 150px !important;
18
+ }
19
+ </style>
20
+
21
+ <div class='tiny_captcha'>
22
+ <div class='tiny_captcha_image'>
23
+ <%= tiny_captcha_options[:image] %>
24
+ </div>
25
+
26
+ <div class='tiny_captcha_field'>
27
+ <%= tiny_captcha_options[:field] %>
28
+ </div>
29
+
30
+ <div class='tiny_captcha_label'>
31
+ <%= tiny_captcha_options[:label] %>
32
+ </div>
33
+ </div>
@@ -0,0 +1,2 @@
1
+ en:
2
+
@@ -0,0 +1,2 @@
1
+ zh-CN:
2
+
@@ -0,0 +1,16 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class CreateTinyCaptchaData < ActiveRecord::Migration
3
+ def self.up
4
+ create_table :tiny_captcha_data do |t|
5
+ t.string :key, :limit => 40
6
+ t.string :value, :limit => 6
7
+ t.timestamps
8
+ end
9
+
10
+ add_index :tiny_captcha_data, :key
11
+ end
12
+
13
+ def self.down
14
+ drop_table :tiny_captcha_data
15
+ end
16
+ end
@@ -0,0 +1,82 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Paperclip
3
+ module Storage
4
+ # MongoDB's GridFS storage system (http://www.mongodb.org/display/DOCS/GridFS) uses
5
+ # a chunking strategy to store files in a mongodb database.
6
+ # Specific options for GridFS:
7
+ # * +gridfs_credentials+: Similar to +s3_credentials+, this can be a path, a File, or
8
+ # a Hash. Keys are as follows:
9
+ # * +database+: the name of the MongoDB database to connect to. This can also be
10
+ # a +Mongo::DB+ object, in which case that connection will be used, and other
11
+ # credentials will be ignored.
12
+ # * +host+: defaults to +localhost+
13
+ # * +username+ and +password+: optional authentication for the database server.
14
+ #
15
+ # Note that, because files stored using the +:gridfs+ storage module are stored
16
+ # within the database rather than the file system, you'll need to work out a method
17
+ # to extract the file data to serve it over HTTP. This is pretty trivial using
18
+ # Rails Metal.
19
+
20
+ module Gridfs
21
+ def self.extended base
22
+ begin
23
+ require 'mongo'
24
+ rescue LoadError => e
25
+ e.message << " (You may need to install the mongo gem)"
26
+ raise e
27
+ end
28
+
29
+ base.instance_eval do
30
+ @gridfs = ::TinySupport::GridFSClient.new(@options[:gridfs]).gridfs
31
+ end
32
+ end
33
+
34
+ def exists? style = default_style
35
+ if original_filename
36
+ !!@gridfs.exist?(:filename => _url_of_file_saved(style))
37
+ else
38
+ false
39
+ end
40
+ end
41
+
42
+ # Returns a binary representation of the data of the file assigned to the given style
43
+ def to_file style = default_style
44
+ @queued_for_write[style] || (@gridfs.open(_url_of_file_saved(style), 'r') if exists?(style))
45
+ end
46
+
47
+ def flush_writes #:nodoc:
48
+ @queued_for_write.each do |style, file|
49
+ _url = _url_of_file_saved(style)
50
+ log("saving #{_url}")
51
+ @gridfs.open(_url, 'w', :content_type => content_type) do |f|
52
+ f.write file.read
53
+ end
54
+ end
55
+ after_flush_writes # allows attachment to clean up temp files
56
+ @queued_for_write = {}
57
+ end
58
+
59
+ def flush_deletes #:nodoc:
60
+ @queued_for_delete.each do |url|
61
+ log("deleting #{url}")
62
+ @gridfs.delete(url)
63
+ end
64
+ @queued_for_delete = []
65
+ end
66
+
67
+ def after_flush_writes
68
+ @queued_for_write.each do |style, file|
69
+ file.close unless file.closed?
70
+ file.unlink if file.respond_to?(:unlink) && file.path.present? && File.exist?(file.path)
71
+ end
72
+ end
73
+
74
+ private
75
+
76
+ def _url_of_file_saved style=default_style
77
+ url(style).to_s.split('?').first
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,60 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinySupport
3
+ module ActionController
4
+ module RequestInit
5
+ def self.included base
6
+ base.class_eval do
7
+ include ControllerMethods
8
+ helper HelperMethods
9
+
10
+ before_action do |controller|
11
+ request = controller.send(:request)
12
+
13
+ # logger
14
+ if defined? Rails
15
+ Rails.logger.debug " - request logger start"
16
+ Rails.logger.debug " remote_ip: #{request.remote_ip}"
17
+ Rails.logger.debug " locale: #{I18n.locale}"
18
+ Rails.logger.debug " session:"
19
+ session.to_hash.each do |key, value|
20
+ Rails.logger.debug " - #{key}: #{value}"
21
+ end
22
+
23
+ # set locale
24
+ params_locale = params[:locale] || cookies[:locale]
25
+
26
+ if params_locale.present?
27
+ params_locale = params_locale.to_sym
28
+
29
+ if I18n.available_locales.include?(params_locale)
30
+ I18n.locale = params_locale
31
+ set_cookies('locale', :value => params_locale)
32
+ else
33
+ I18n.locale = I18n.default_locale
34
+ end
35
+ else
36
+ I18n.locale = I18n.default_locale
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ module ControllerMethods
44
+ # 设置cookies
45
+ def set_cookies cookie_name, options={}
46
+ cookies[cookie_name] = {
47
+ :expires => ::Time.now + 10.years.to_i,
48
+ :path => '/',
49
+ :domain => ::DomainName.new(request.host).domain
50
+ }.merge(options)
51
+ end
52
+ end
53
+
54
+ # helper 方法
55
+ module HelperMethods
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,12 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require "tiny_support/action_controller/request_init"
3
+
4
+ module TinySupport
5
+ module ActionController
6
+ end
7
+ end
8
+
9
+ if defined?(ActionController::Base)
10
+ ::ActionController::Base.send :include, ::TinySupport::ActionController::RequestInit
11
+ end
12
+
@@ -0,0 +1,42 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinySupport
3
+ module ActiveRecord
4
+ module DisplayAble
5
+ extend ::ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def tiny_support_display *args
9
+ options = args.extract_options!
10
+
11
+ cattr_accessor :tiny_support_display_klass, :instance_reader => false
12
+
13
+ tiny_support_display_klass_name = "#{self.name}Display"
14
+
15
+ begin
16
+ if (tiny_support_display_klass=(tiny_support_display_klass_name.constantize)).is_a?(Class)
17
+ self.class_variable_set("@@tiny_support_display_klass", tiny_support_display_klass)
18
+
19
+ args.each do |klass|
20
+ if klass.is_a?(Module)
21
+ tiny_support_display_klass.send :include, klass
22
+ else
23
+ raise "#{klass} is not a Module"
24
+ end
25
+ end
26
+ end
27
+ rescue
28
+
29
+ end
30
+
31
+ define_method :tiny_support_display do
32
+ @tiny_support_display ||= self.class.class_variable_get('@@tiny_support_display_klass').new(self)
33
+ end
34
+
35
+ define_method :display do
36
+ self.tiny_support_display
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+ module TinySupport
2
+ module ActiveRecord
3
+ class DisplayBase
4
+ attr_reader :record
5
+
6
+ def initialize record
7
+ @record = record
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinySupport
3
+ module ActiveRecord
4
+ module HasAvatarAble
5
+ extend ::ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def has_upload_avatar_able *args
9
+ options = args.extract_options!
10
+ _filed_name = args.first || :avatar
11
+
12
+ _options = ::TinySupport.config.upload_attachment_options.merge(options)
13
+ _options[:url] ||= "/#{TinySupport.config.default_upload_prefix}/:class/:attachment/:id_partition/:style/:filename"
14
+
15
+ self.has_attached_file _filed_name, _options
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end