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 +23 -11
- data/lib/ns_service_pack.rb +0 -1
- data/lib/ns_service_pack/application_controller_module.rb +14 -14
- data/lib/ns_service_pack/field_mapping.rb +9 -6
- data/lib/ns_service_pack/global_const.rb +5 -1
- data/lib/ns_service_pack/result_packer.rb +1 -1
- data/lib/ns_service_pack/version.rb +1 -1
- metadata +4 -4
data/README
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
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.
|
69
|
-
*
|
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: :
|
72
|
-
|
73
|
-
|
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
|
-
#
|
79
|
-
|
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
|
data/lib/ns_service_pack.rb
CHANGED
@@ -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
|
-
|
55
|
-
render :json=>ResultPacker.data(
|
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
|
-
|
61
|
-
if
|
62
|
-
render :json=>ResultPacker.data(
|
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(
|
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
|
-
|
71
|
-
if
|
72
|
-
render :json=>ResultPacker.data(
|
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(
|
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
|
-
|
86
|
-
render :json=>ResultPacker.data(:fields
|
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}
|
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}
|
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
|
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.
|
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-
|
14
|
+
date: 2011-11-23 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
18
|
-
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: *
|
26
|
+
version_requirements: *69782970
|
27
27
|
description: Service package for our service lier
|
28
28
|
email: cao7113@gmail.com
|
29
29
|
executables: []
|