ns_service_pack 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|