ns_service_pack 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,6 +1,6 @@
1
- ##===========README
1
+ ##======:==========README
2
2
 
3
- Service层基础共享代码模式抽取
3
+ 实现部分REST架构(ROA)中Service层基础共享代码抽取
4
4
 
5
5
  #==功能列表:
6
6
 
@@ -12,11 +12,13 @@
12
12
 
13
13
  * 更好用的安装使用接口,自动完成,可配置
14
14
  * rake 任务的引入, 产品模式将数据文件预编译成一个数据文件
15
+ * 提供scaffold模式方法
16
+ 生成一些辅助接口和方法
17
+ service_scaffold,生成需要的模板和基本方法
18
+
15
19
  * fieldmapping 和 常量管理的分离
16
20
  让使用者可以决定是否使用mapping,目前可以通过注释initializer中片段完成
17
21
  * 用模板的方法生成initializer,以便插入一些动态数据
18
- * 提供scaffold模式方法
19
- 生成一些辅助的接口和方法
20
22
  * application_controller_module的引入还是有问题!!!
21
23
  * 如何为application_controller_module中的action自动生成路由呢?
22
24
  直接生成服务端和客户端基础代码
@@ -65,18 +67,28 @@ end
65
67
 
66
68
 
67
69
  #==============History:
68
- #==0.0.15
69
- * 在mapping中支持可配置的json数据输出格式,需要:
70
+ #==0.0.16 20111119
71
+ * 由Gao发现load_code_hashes!时引入空.yml文件时出错,已修复
72
+ * 修改dump_mapping文件目录从code_hashes/fields到code_hashes/mappings
73
+
74
+ #==0.0.15 20111118
75
+ * 在mapping中支持可配置的json数据(自定义属性)输出,需要:
70
76
  1. 在<mapping>.yml文件中增加一个自定义属性
71
- :some_key_name: :get_key_value_method
72
- 2. 在model类中增加一个该键的方法,如下:
73
- def get_key_value_method
77
+ :some_key_name: :get_key_value_method_name
78
+
79
+ 2. 在model类中增加一个获取键值的方法,如下:
80
+ def <get_key_value_method_name>
74
81
  #give some value for the key
75
82
  end
76
83
  另一种方式:
77
84
  def self.get_map_value(key, value)
78
- #ref implemented else where!
79
- #add a when branch
85
+ #add a new when branch for the key
86
+ case key
87
+ ...
88
+ when :<some_key_name>
89
+ #get value for the key
90
+ ...
91
+ end
80
92
  end
81
93
 
82
94
  #==0.0.14
@@ -24,4 +24,3 @@ module NsServicePack
24
24
  end
25
25
  end
26
26
  end
27
-
@@ -1,10 +1,10 @@
1
1
  #coding: utf-8
2
2
  module ApplicationControllerModule
3
3
  def index
4
- result = paginate(params) do |start, page_size|
4
+ @result = paginate(params) do |start, page_size|
5
5
  get_page_data(start, page_size, params)
6
6
  end
7
- render :json=>ResultPacker.data(result.as_json)
7
+ render :json=>ResultPacker.data(@result.as_json)
8
8
  end
9
9
 
10
10
  #return [total_count, page_data]
@@ -51,27 +51,27 @@ module ApplicationControllerModule
51
51
 
52
52
  #查找单条记录
53
53
  def show
54
- result = model_class.find(params[:id])
55
- render :json=>ResultPacker.data(result.as_json)
54
+ @_obj = model_class.find(params[:id])
55
+ render :json=>ResultPacker.data(@_obj.as_json)
56
56
  end
57
57
 
58
58
  #创建记录
59
59
  def create
60
- c = model_class.new_from_buz(params[:data])
61
- if c.save
62
- render :json=>ResultPacker.data(c)
60
+ @_obj = model_class.new_from_buz(params[:data])
61
+ if @_obj.save
62
+ render :json=>ResultPacker.data(@_obj)
63
63
  else
64
- render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(c.errors.to_hash)))
64
+ render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
65
65
  end
66
66
  end
67
67
 
68
68
  #更新记录
69
69
  def update
70
- c = model_class.find(params[:id])
71
- if c.update_from_buz(params[:data])
72
- render :json=>ResultPacker.data(c)
70
+ @_obj = model_class.find(params[:id])
71
+ if @_obj.update_from_buz(params[:data])
72
+ render :json=>ResultPacker.data(@_obj)
73
73
  else
74
- render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(c.errors.to_hash)))
74
+ render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
75
75
  end
76
76
  end
77
77
 
@@ -82,8 +82,8 @@ module ApplicationControllerModule
82
82
 
83
83
  #ABORTED NOW, keep here
84
84
  def query_fields
85
- data = model_class.buz_hashize
86
- render :json=>ResultPacker.data(:fields=>data)
85
+ @_data = model_class.buz_hashize
86
+ render :json=>ResultPacker.data(:fields=>@_data)
87
87
  end
88
88
 
89
89
  #动态查看该模块发布接口列表
@@ -8,7 +8,10 @@ module FieldMapping
8
8
  base.extend(ClassMethods)
9
9
  end
10
10
 
11
+ #在将model转成json数据时会自动调用该方法
11
12
  def as_json(options={})
13
+ #获取数据库属性数据
14
+ #TODO 想到的一个改进点:数据库查的时候根据mapping来选字段,而非全查出来,影响效率,影响较大,先不改!
12
15
  default_attrs = self.class.buz_hashize(self.attributes)
13
16
  #支持自定义方法的传入 20111118 for gao
14
17
  add_virtual_buz_attributes!(default_attrs)
@@ -17,13 +20,14 @@ module FieldMapping
17
20
  #TODO check add some notes
18
21
  def add_virtual_buz_attributes!(db_buz_attrs = {})
19
22
  the_mapping = self.class.mapping
23
+ #获取非数据库属性,称为业务虚拟属性
20
24
  delta_attrs = the_mapping.keys - db_buz_attrs.keys
21
25
  delta_attrs.each do |key|
22
26
  method_name = the_mapping[key]
23
27
  db_buz_attrs[key] = if self.respond_to?(method_name)
24
28
  self.send(method_name)
25
29
  else
26
- self.class.get_map_value(key, nil)
30
+ self.class.get_map_value(key, nil)#给出默认实现
27
31
  end
28
32
  end
29
33
  db_buz_attrs
@@ -34,12 +38,12 @@ module FieldMapping
34
38
  end
35
39
 
36
40
  module ClassMethods
37
- #Fix a bug on 20111117 by shang
41
+ #Fix a bug on 20111117 by shang, this override the original method name
38
42
  def __model_clazz_name
39
43
  self.name.underscore
40
44
  end
41
45
  def model_key
42
- "#{__model_clazz_name}_fields"
46
+ "#{__model_clazz_name}_mapping"
43
47
  end
44
48
 
45
49
  def mapping
@@ -48,8 +52,7 @@ module FieldMapping
48
52
 
49
53
  def get_map_value(k, value)
50
54
  #raise "Not implemented!"
51
- #提供默认处理
52
- #TODO 根据数据类型做些更好的转换
55
+ #提供默认处理 #TODO 根据数据类型做些更好的转换
53
56
  case k
54
57
  when :created_at, :updated_at
55
58
  value.try(:to_s, :db)
@@ -86,7 +89,7 @@ module FieldMapping
86
89
  #生成field mapping,dump到指定的yaml文件中
87
90
  def dump_mapping(attr_prefix = nil, force = true)
88
91
  if defined?(Rails)
89
- file = "#{Rails.root}/#{GlobalConst::APP_CODE_HASHES}fields/#{model_key}_#{Time.now.to_i}.yml"
92
+ file = "#{Rails.root}/#{GlobalConst::APP_CODE_HASHES}mappings/#{model_key}_#{Time.now.to_i}.yml"
90
93
  path = File.dirname(file)
91
94
  FileUtils.mkpath(path) unless File.directory?(path)
92
95
  existed = File.exists?(file)
@@ -23,6 +23,11 @@ module GlobalConst
23
23
  h = hash_or_file
24
24
  else
25
25
  h = YAML.load(File.open(hash_or_file))
26
+ unless h.is_a?(Hash)
27
+ #格式异常检查,过滤掉空和无效文件
28
+ puts "==>Warning: Invalid arguments: #{hash_or_file}, it does not evalute to a Hash!你自己去看看,别找我!"
29
+ return
30
+ end
26
31
  end
27
32
  nh = h.symbolize_keys
28
33
  nh.keys.each do |k|
@@ -39,7 +44,6 @@ module GlobalConst
39
44
  if File.directory?(target)
40
45
  hfiles = Dir.glob("#{target}**/*.yml")
41
46
  hfiles.each do |f|
42
- puts "==>loading: #{f} ..."
43
47
  load_code_hashes!(f)
44
48
  end
45
49
  end
@@ -19,7 +19,7 @@ class ResultPacker
19
19
  end
20
20
 
21
21
  #前台验证错误
22
- def self.help(hint_hash={}, msg='数据逻辑有误,请查看错误提示!')
22
+ def self.help(hint_hash={}, msg='数据逻辑有误,请查看错误明细!')
23
23
  {:status=>'illegal',:msg=>msg, :errors=>hint_hash}
24
24
  end
25
25
 
@@ -1,4 +1,4 @@
1
1
  #coding: utf-8
2
2
  module NsServicePack
3
- VERSION = '0.0.15'
3
+ VERSION = '0.0.16'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ns_service_pack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-11-18 00:00:00.000000000Z
14
+ date: 2011-11-23 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
18
- requirement: &78102970 !ruby/object:Gem::Requirement
18
+ requirement: &69782970 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,7 +23,7 @@ dependencies:
23
23
  version: 3.1.0
24
24
  type: :development
25
25
  prerelease: false
26
- version_requirements: *78102970
26
+ version_requirements: *69782970
27
27
  description: Service package for our service lier
28
28
  email: cao7113@gmail.com
29
29
  executables: []