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 CHANGED
@@ -1,8 +1,13 @@
1
1
  #==============History:
2
- * 增加service scaffold generator
2
+
3
+ #==0.1.1
4
+ * 将该gem升级为rails项目中的engine
5
+ * 增加了一个默认的info_controller,反射出当前应用发布的api接口(仅可在非产品模式访问)
6
+
3
7
 
4
8
  #==0.1.0[Note: 重大变更!]
5
- * 初始化配置文件copy由thor任务完成: ns_service_pack init (在rails根目录下)
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
@@ -9,10 +9,10 @@
9
9
  * 提供数据库层-业务层字段自动转换
10
10
 
11
11
  == TODO TASK LIST
12
- * 添加一个默认controller用于展现interface等信息
13
12
  * 规划文档和内容调整
14
13
  * 写完整测试
15
14
  * index默认查询条件加入,传入条件的merge(目前已提供传入条件的精确搜索)
15
+ * 如何用get请求模拟post请求
16
16
 
17
17
  #==NS Service Pack使用指南
18
18
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
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> &nbsp; </td>
18
+ </tr>
19
+ <%end%>
20
+ <%end%>
21
+ </table>
data/config/routes.rb ADDED
@@ -0,0 +1,10 @@
1
+ #encoding: utf-8
2
+
3
+ # 发布的接口仅在非生产模式可访问
4
+ unless Rails.env.production?
5
+ Rails.application.routes.draw do
6
+ get 'interfaces', :to=>"ns/info#interfaces"
7
+ get 'constants', :to=>"ns/info#constants"
8
+ get 'mappings', :to=>"ns/info#mappings"
9
+ end
10
+ end
@@ -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 interfaces
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=>[:new, :edit, :destroy] do
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
@@ -0,0 +1,9 @@
1
+ #encoding: utf-8
2
+
3
+ require 'rails'
4
+ module Ns
5
+ class Engine < Rails::Engine
6
+ engine_name :ns_service_pack
7
+ end
8
+ end
9
+
@@ -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 is your need!"
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
@@ -15,3 +15,7 @@ require 'ns_service_pack/controller_servicable'
15
15
  require 'ns_service_pack/client'
16
16
  require 'ns_service_pack/service_config'
17
17
  # TODO FOR optimize
18
+
19
+ # 将本应用作为一个engine
20
+ require 'ns_service_pack/engine' if defined?(Rails)
21
+
@@ -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.0"
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-11-30"
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.0
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-11-30 00:00:00.000000000Z
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: &78640940 !ruby/object:Gem::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: *78640940
24
+ version_requirements: *80545720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &78640700 !ruby/object:Gem::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: *78640700
35
+ version_requirements: *80545480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &78640460 !ruby/object:Gem::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: *78640460
46
+ version_requirements: *80545240
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &78640220 !ruby/object:Gem::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: *78640220
57
+ version_requirements: *80545000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &78639980 !ruby/object:Gem::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: *78639980
68
+ version_requirements: *80544760
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &78639740 !ruby/object:Gem::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: *78639740
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: -733976717
142
+ hash: 373915261
138
143
  required_rubygems_version: !ruby/object:Gem::Requirement
139
144
  none: false
140
145
  requirements: