ns_service_pack 0.0.15 → 0.0.16

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