ns_service_pack 0.1.0 → 0.1.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/CHANGELOG +7 -2
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/app/controllers/ns/info_controller.rb +37 -0
- data/app/views/ns/info/interfaces.html.erb +42 -0
- data/app/views/ns/info/mappings.html.erb +21 -0
- data/config/routes.rb +10 -0
- data/lib/generators/ns/scaffold/scaffold_generator.rb +3 -9
- data/lib/ns_service_pack/controller_servicable.rb +7 -23
- data/lib/ns_service_pack/engine.rb +9 -0
- data/lib/ns_service_pack/field_mapping.rb +0 -17
- data/lib/ns_service_pack/global_const.rb +20 -3
- data/lib/ns_service_pack.rb +4 -0
- data/ns_service_pack.gemspec +7 -2
- metadata +20 -15
data/CHANGELOG
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
#==============History:
|
2
|
-
|
2
|
+
|
3
|
+
#==0.1.1
|
4
|
+
* 将该gem升级为rails项目中的engine
|
5
|
+
* 增加了一个默认的info_controller,反射出当前应用发布的api接口(仅可在非产品模式访问)
|
6
|
+
|
3
7
|
|
4
8
|
#==0.1.0[Note: 重大变更!]
|
5
|
-
*
|
9
|
+
* 增加service scaffold generator: rake generator ns:scaffold
|
10
|
+
* 初始化配置文件copy由thor任务完成: ns_service_pack install (在rails根目录下)
|
6
11
|
* 将ApplicationControllerModule重命名为:Ns::ControllerServicable
|
7
12
|
* 在initializers/ns_service_pack.rb中默认只加载配置信息,不再为controller和model包含mapping的功能,由最终用户
|
8
13
|
决定是否使用,这样做性能和可定制性更好(后来加上scaffold功能,减少人为操作!)
|
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
class Ns::InfoController < ApplicationController
|
3
|
+
unloadable #??? 什么意思?
|
4
|
+
#动态查看该模块发布接口列表
|
5
|
+
def interfaces
|
6
|
+
@routes = Rails.application.routes.routes
|
7
|
+
#删除一些无需关注的路由: /assets, /rails/info/properties, /interfaces
|
8
|
+
@routes.delete_if{|r| r.path =~ /\/assets|\/rails\/info|\/interfaces/}
|
9
|
+
#验证接口是否改变的校验码
|
10
|
+
@version_code = @routes.join(';').hash
|
11
|
+
respond_to do |format|
|
12
|
+
format.html #interfaces.html.erb
|
13
|
+
format.json {render json: @routes.map{|r| r.path}}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#获取字段映射对照表
|
18
|
+
def mappings
|
19
|
+
@data = GlobalConst.mappings
|
20
|
+
#验证接口是否改变的校验码
|
21
|
+
@version_code = @data.hash
|
22
|
+
respond_to do |format|
|
23
|
+
format.html
|
24
|
+
format.json {render json: @data}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def constants
|
29
|
+
@data = GlobalConst.constants
|
30
|
+
#验证接口是否改变的校验码
|
31
|
+
@version_code = @data.hash
|
32
|
+
respond_to do |format|
|
33
|
+
format.html {render :action=>:mappings}
|
34
|
+
format.json {render json: @data}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<p>模块发布接口列表(版本码:<%=@version_code%> 获取日期:<%= Time.now.to_s(:db)%>):</p>
|
2
|
+
|
3
|
+
<table border='1'>
|
4
|
+
<tr>
|
5
|
+
<th>No.</th>
|
6
|
+
<th>HttpMethod</th>
|
7
|
+
<th>Path</th>
|
8
|
+
<th>Sample</th>
|
9
|
+
<th>Requirements </th>
|
10
|
+
</tr>
|
11
|
+
<%@routes.each_with_index do |r, i|%>
|
12
|
+
<tr>
|
13
|
+
<td>
|
14
|
+
<%= i+1 %>
|
15
|
+
</td>
|
16
|
+
<td>
|
17
|
+
<%= r.verb%>
|
18
|
+
</td>
|
19
|
+
<td>
|
20
|
+
<%= r.path%>
|
21
|
+
</td>
|
22
|
+
<td>
|
23
|
+
<%#= link_to r.name || "示例", "#{r.path.sub('(.:format)', '.json').sub(':id', '1')}}" %>
|
24
|
+
<%if r.verb.to_s.upcase == 'GET' %>
|
25
|
+
<%=link_to r.name || "示例", "#{r.path.sub('(.:format)', '.json').sub(':id', '1')}" %>
|
26
|
+
<%else%>
|
27
|
+
<%= "#{r.path.sub('(.:format)', '').sub(':id', '1')}" %>
|
28
|
+
<%end%>
|
29
|
+
</td>
|
30
|
+
<td>
|
31
|
+
<%= r.requirements%>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<%end%>
|
35
|
+
</table>
|
36
|
+
|
37
|
+
<div>
|
38
|
+
<span>注:</span>
|
39
|
+
<ul>
|
40
|
+
<li>:format 一般为 json</li>
|
41
|
+
</ul>
|
42
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<p>业务-数据库字段对照表(版本码:<%=@version_code%> 获取日期:<%= Time.now.to_s(:db)%>):</p>
|
2
|
+
|
3
|
+
<table border='1'>
|
4
|
+
<%@data.each do |k, v|%>
|
5
|
+
<%if v.is_a?(Hash)%>
|
6
|
+
<%v.each_with_index do |e1, i|%>
|
7
|
+
<tr>
|
8
|
+
<td> <%= i==0 ? k : ''%></td>
|
9
|
+
<td> <%= e1[0]%> </td>
|
10
|
+
<td> <%= e1[1]%> </td>
|
11
|
+
</tr>
|
12
|
+
<%end%>
|
13
|
+
<%else%>
|
14
|
+
<tr>
|
15
|
+
<td> <%= k%> </td>
|
16
|
+
<td> <%= v%> </td>
|
17
|
+
<td> </td>
|
18
|
+
</tr>
|
19
|
+
<%end%>
|
20
|
+
<%end%>
|
21
|
+
</table>
|
data/config/routes.rb
ADDED
@@ -25,17 +25,11 @@ class Ns::ScaffoldGenerator < Rails::Generators::ScaffoldGenerator
|
|
25
25
|
end
|
26
26
|
|
27
27
|
desc "Modify the route to add some action support"
|
28
|
-
def
|
28
|
+
def reroute
|
29
|
+
#TODO MOVE dev interface TO this gem controller
|
29
30
|
gsub_file('config/routes.rb', /^\s*resources :#{plural_name}$/) do
|
30
31
|
<<-Doc
|
31
|
-
resources :#{plural_name}, :except=>[:
|
32
|
-
collection do
|
33
|
-
get 'new_buz_obj'
|
34
|
-
#TODO MOVE INTO THE GEM
|
35
|
-
get 'field_mapping'
|
36
|
-
get 'interfaces'
|
37
|
-
end
|
38
|
-
end
|
32
|
+
resources :#{plural_name}, :except=>[:edit, :destroy]
|
39
33
|
Doc
|
40
34
|
end
|
41
35
|
end
|
@@ -52,6 +52,12 @@ module Ns
|
|
52
52
|
}
|
53
53
|
end
|
54
54
|
|
55
|
+
#get a new buz obj with db default value
|
56
|
+
def new
|
57
|
+
@_data = model_class.buz_hashize
|
58
|
+
render :json=>ResultPacker.data(model_class.name.underscore.to_sym=>@_data)
|
59
|
+
end
|
60
|
+
|
55
61
|
#查找单条记录
|
56
62
|
def show
|
57
63
|
@_obj = model_class.find(params[:id])
|
@@ -77,32 +83,10 @@ module Ns
|
|
77
83
|
render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
|
78
84
|
end
|
79
85
|
end
|
80
|
-
|
81
|
-
#get a new buz obj with db default value
|
82
|
-
def new_buz_obj
|
83
|
-
@_data = model_class.buz_hashize
|
84
|
-
render :json=>ResultPacker.data(model_class.name.underscore.to_sym=>@_data)
|
85
|
-
end
|
86
|
-
|
87
|
-
#get the mapping info
|
88
|
-
def field_mapping
|
89
|
-
@_data = model_class.mapping.data
|
90
|
-
render :json=>ResultPacker.data(:field_mapping=>@_data)
|
91
|
-
end
|
92
|
-
|
93
|
-
#动态查看该模块发布接口列表
|
94
|
-
def interfaces
|
95
|
-
@routes = Rails.application.routes.routes
|
96
|
-
#TODO 写一个像rails info一样的那种内置controller
|
97
|
-
respond_to do |format|
|
98
|
-
format.html #interfaces.html.erb
|
99
|
-
format.json {render json: @routes.map{|r| r.path}}
|
100
|
-
end
|
101
|
-
end
|
102
86
|
|
103
87
|
protected
|
104
88
|
#验证错误回传
|
105
|
-
def valid_errors(error_hash={})
|
89
|
+
def valid_errors(error_hash = {})
|
106
90
|
(error_hash||{}).each{|k, v| error_hash[k] = v.join(', ') if v.is_a? Array }
|
107
91
|
end
|
108
92
|
end
|
@@ -65,23 +65,6 @@ module Ns
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
def dump_new(force=true)
|
69
|
-
if defined?(Rails)
|
70
|
-
file = "#{Rails.root}/data/#{model_key}.yml.#{Time.now.to_i}"
|
71
|
-
path = File.dirname(file)
|
72
|
-
FileUtils.mkpath(path) unless File.directory?(path)
|
73
|
-
existed = File.exists?(file)
|
74
|
-
if existed
|
75
|
-
puts "Warning: #{file} has existed! check it! Default override it!"
|
76
|
-
end
|
77
|
-
if !existed || force
|
78
|
-
File.open(file, 'w+') do |f|
|
79
|
-
f.puts YAML.dump(buz_hashize)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
68
|
#辅助方法
|
86
69
|
def new_from_buz(params = {})
|
87
70
|
new(db_hashize(params))
|
@@ -3,6 +3,9 @@
|
|
3
3
|
* 20111115 find bug
|
4
4
|
避免每次重新生成CodeHash的对象
|
5
5
|
* TODO 在项目中要分自己用的还是提供给外边的
|
6
|
+
* 将常量部分和mapping部分进行分离 TODO
|
7
|
+
常量在宿主应用中要引用
|
8
|
+
mapping只在插件内部使用,用户只需按要求进行配置
|
6
9
|
=end
|
7
10
|
require 'fileutils'
|
8
11
|
module GlobalConst
|
@@ -10,12 +13,26 @@ module GlobalConst
|
|
10
13
|
|
11
14
|
mattr_accessor :global_data
|
12
15
|
@@global_data = {}
|
13
|
-
|
16
|
+
|
17
|
+
#TODO 加载的时候直接生成方法,而不用这样动态查找,效率会更好吗?
|
14
18
|
def self.method_missing(method_name, *args, &block)
|
15
19
|
ms = method_name.to_sym
|
16
20
|
return @@global_data[ms] if @@global_data.key?(ms)
|
17
21
|
raise "Method name: #{method_name}(#{args.inspect}) is not defined!"
|
18
22
|
end
|
23
|
+
|
24
|
+
def self.constants
|
25
|
+
data = @@global_data.select{|k| k.to_s !~ /\w+_mapping$/}.dup
|
26
|
+
data.map{|k, v| data[k] = v.data}
|
27
|
+
data
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO 考虑在数据结构和设置时优化
|
31
|
+
def self.mappings
|
32
|
+
data = @@global_data.select{|k| k.to_s =~ /\w+_mapping$/}.dup
|
33
|
+
data.map{|k, v| data[k] = v.data}
|
34
|
+
data
|
35
|
+
end
|
19
36
|
|
20
37
|
def self.load_code_hashes!(hash_or_file = {})
|
21
38
|
if hash_or_file.is_a?(Hash)
|
@@ -24,14 +41,14 @@ module GlobalConst
|
|
24
41
|
h = YAML.load(File.open(hash_or_file))
|
25
42
|
unless h.is_a?(Hash)
|
26
43
|
#格式异常检查,过滤掉空和无效文件
|
27
|
-
puts "==>Warning: Invalid arguments: #{hash_or_file}, it does not evalute to a Hash
|
44
|
+
puts "==>Warning: Invalid arguments: #{hash_or_file}, it does not evalute to a Hash!你自己去看,别找我!"
|
28
45
|
return
|
29
46
|
end
|
30
47
|
end
|
31
48
|
nh = h.symbolize_keys
|
32
49
|
nh.keys.each do |k|
|
33
50
|
if @@global_data.key?(k)
|
34
|
-
puts "==>Warning: new value(from #{hash_or_file.inspect}) is set for key:#{k}! Please check that
|
51
|
+
puts "==>Warning: new value(from #{hash_or_file.inspect}) is set for key:#{k}! Please check that!"
|
35
52
|
end
|
36
53
|
@@global_data[k] = CodeHash.new(nh[k])
|
37
54
|
end
|
data/lib/ns_service_pack.rb
CHANGED
data/ns_service_pack.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ns_service_pack"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Caory, Shang, Geogeous"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-12-01"
|
13
13
|
s.description = "abstract some common pattern to service pack"
|
14
14
|
s.email = "cao7113@hotmail.com"
|
15
15
|
s.executables = ["nsp"]
|
@@ -26,7 +26,11 @@ Gem::Specification.new do |s|
|
|
26
26
|
"README.rdoc",
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
|
+
"app/controllers/ns/info_controller.rb",
|
30
|
+
"app/views/ns/info/interfaces.html.erb",
|
31
|
+
"app/views/ns/info/mappings.html.erb",
|
29
32
|
"bin/nsp",
|
33
|
+
"config/routes.rb",
|
30
34
|
"lib/generators/ns/scaffold/scaffold_generator.rb",
|
31
35
|
"lib/generators/ns/scaffold/templates/active_record/model/model.rb",
|
32
36
|
"lib/generators/ns/scaffold/templates/rails/scaffold_controller/controller.rb",
|
@@ -36,6 +40,7 @@ Gem::Specification.new do |s|
|
|
36
40
|
"lib/ns_service_pack/client.rb",
|
37
41
|
"lib/ns_service_pack/code_hash.rb",
|
38
42
|
"lib/ns_service_pack/controller_servicable.rb",
|
43
|
+
"lib/ns_service_pack/engine.rb",
|
39
44
|
"lib/ns_service_pack/field_mapping.rb",
|
40
45
|
"lib/ns_service_pack/global_const.rb",
|
41
46
|
"lib/ns_service_pack/result.rb",
|
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.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &80545720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *80545720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: thor
|
27
|
-
requirement: &
|
27
|
+
requirement: &80545480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.14.6
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *80545480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shoulda
|
38
|
-
requirement: &
|
38
|
+
requirement: &80545240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *80545240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &80545000 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *80545000
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &80544760 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *80544760
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &80544520 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *80544520
|
80
80
|
description: abstract some common pattern to service pack
|
81
81
|
email: cao7113@hotmail.com
|
82
82
|
executables:
|
@@ -94,7 +94,11 @@ files:
|
|
94
94
|
- README.rdoc
|
95
95
|
- Rakefile
|
96
96
|
- VERSION
|
97
|
+
- app/controllers/ns/info_controller.rb
|
98
|
+
- app/views/ns/info/interfaces.html.erb
|
99
|
+
- app/views/ns/info/mappings.html.erb
|
97
100
|
- bin/nsp
|
101
|
+
- config/routes.rb
|
98
102
|
- lib/generators/ns/scaffold/scaffold_generator.rb
|
99
103
|
- lib/generators/ns/scaffold/templates/active_record/model/model.rb
|
100
104
|
- lib/generators/ns/scaffold/templates/rails/scaffold_controller/controller.rb
|
@@ -104,6 +108,7 @@ files:
|
|
104
108
|
- lib/ns_service_pack/client.rb
|
105
109
|
- lib/ns_service_pack/code_hash.rb
|
106
110
|
- lib/ns_service_pack/controller_servicable.rb
|
111
|
+
- lib/ns_service_pack/engine.rb
|
107
112
|
- lib/ns_service_pack/field_mapping.rb
|
108
113
|
- lib/ns_service_pack/global_const.rb
|
109
114
|
- lib/ns_service_pack/result.rb
|
@@ -134,7 +139,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
139
|
version: '0'
|
135
140
|
segments:
|
136
141
|
- 0
|
137
|
-
hash:
|
142
|
+
hash: 373915261
|
138
143
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
144
|
none: false
|
140
145
|
requirements:
|