ns_service_pack 0.0.21 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +14 -52
- data/VERSION +1 -1
- data/bin/{ns_service_pack → nsp} +1 -2
- data/lib/generators/ns/scaffold/scaffold_generator.rb +34 -4
- data/lib/{templates → generators/ns/scaffold/templates}/active_record/model/model.rb +0 -0
- data/lib/{templates → generators/ns/scaffold/templates}/rails/scaffold_controller/controller.rb +0 -0
- data/lib/generators/try/try_generator.rb +0 -2
- data/lib/ns_service_pack.rb +0 -9
- data/lib/ns_service_pack/controller_servicable.rb +21 -9
- data/lib/ns_service_pack/field_mapping.rb +4 -3
- data/ns_service_pack.gemspec +6 -7
- metadata +19 -20
- data/lib/templates/config/database.yml.sample +0 -44
data/README.rdoc
CHANGED
@@ -1,69 +1,31 @@
|
|
1
1
|
= ns_service_pack
|
2
2
|
|
3
|
-
|
3
|
+
实现REST架构(ROA)中Service层部分基础代码抽取
|
4
4
|
|
5
|
-
|
5
|
+
== 功能列表:
|
6
6
|
|
7
7
|
* 支持自定义json格式的资源crud操作
|
8
8
|
* 提供全局字典常量/转换管理
|
9
9
|
* 提供数据库层-业务层字段自动转换
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
*
|
14
|
-
*
|
15
|
-
* 提供scaffold模式方法
|
16
|
-
生成一些辅助接口和方法
|
17
|
-
service_scaffold,生成需要的模板和基本方法
|
18
|
-
|
19
|
-
* fieldmapping 和 常量管理的分离
|
20
|
-
让使用者可以决定是否使用mapping,目前可以通过注释initializer中片段完成
|
21
|
-
* 用模板的方法生成initializer,以便插入一些动态数据
|
22
|
-
* application_controller_module的引入还是有问题!!!
|
23
|
-
* 如何为application_controller_module中的action自动生成路由呢?
|
24
|
-
直接生成服务端和客户端基础代码
|
11
|
+
== TODO TASK LIST
|
12
|
+
* 添加一个默认controller用于展现interface等信息
|
13
|
+
* 规划文档和内容调整
|
14
|
+
* 写完整测试
|
25
15
|
* index默认查询条件加入,传入条件的merge(目前已提供传入条件的精确搜索)
|
26
16
|
|
27
17
|
#==NS Service Pack使用指南
|
28
18
|
|
29
|
-
*1 在rails3
|
30
|
-
gem
|
19
|
+
*1 在rails3项目中使用,命令行执行:
|
20
|
+
gem install ns_service_pack
|
21
|
+
ns_service_pack install
|
22
|
+
bundle install
|
31
23
|
|
32
|
-
*2
|
33
|
-
|
34
|
-
|
35
|
-
*3 配置项目中的常量数据
|
36
|
-
config/code_hashes/**/*.yml中数据会作为CodeHash加载
|
37
|
-
可在控制台下用以下命令辅助生成:
|
38
|
-
<ModelName>.dump_mapping
|
39
|
-
生成buz-db field_mapping, 可配置, --><app>/config/code_hashes/fields/*.yml
|
40
|
-
|
41
|
-
<ModelName>.dump_new
|
42
|
-
客户new该资源时的结构,--> <app>/data/*.yml
|
43
|
-
|
44
|
-
常量的使用:
|
45
|
-
GlobalConst.ns_statuses[key_or_value]
|
46
|
-
|
47
|
-
*4 配置项目的controllers和models
|
48
|
-
4.1)在ApplicationController子类,如:
|
49
|
-
class AddressesController < ApplicationController
|
50
|
-
...
|
51
|
-
def model_class
|
52
|
-
#引用的模型类,是ActiveRecord::Base子类
|
53
|
-
end
|
54
|
-
|
55
|
-
...
|
56
|
-
end
|
24
|
+
*2 为某资源生成有service支持的scaffold,命令行:
|
25
|
+
rake g ns:scaffold
|
57
26
|
|
58
|
-
|
59
|
-
|
60
|
-
...
|
61
|
-
def self.get_map_value(k, v)
|
62
|
-
#定制各字段值的业务显示格式
|
63
|
-
#value mapping
|
64
|
-
end
|
65
|
-
...
|
66
|
-
end
|
27
|
+
*3 提示:
|
28
|
+
常量的使用:GlobalConst.ns_statuses[key_or_value]
|
67
29
|
|
68
30
|
== Contributing to ns_service_pack
|
69
31
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/bin/{ns_service_pack → nsp}
RENAMED
@@ -13,7 +13,7 @@ class Cli < Thor
|
|
13
13
|
method_options :force=>:boolean#, :aliases=>'-f'
|
14
14
|
def install
|
15
15
|
unless rails_root?
|
16
|
-
say(" Error: current
|
16
|
+
say(" Error: current directory:#{cwd} is not a rails app root!", :red)
|
17
17
|
return
|
18
18
|
end
|
19
19
|
unless use_bundler?
|
@@ -81,7 +81,6 @@ gem 'ns_service_pack' #use our service pack
|
|
81
81
|
[ 'config/code_hashes/code_hash.yml.sample',
|
82
82
|
'config/initializers/ns_service_pack.rb',
|
83
83
|
'config/initializers/oracle_db_config.rb',
|
84
|
-
'config/database.yml.sample',
|
85
84
|
'config/ns_services.yml'
|
86
85
|
]
|
87
86
|
end
|
@@ -1,12 +1,42 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
require 'rails/generators/rails/scaffold/scaffold_generator'
|
3
|
+
|
4
|
+
#Let this templates selected firstly! Just apply this default temmplate overriding to ns:scaffold
|
5
|
+
#Don't pollute the rails default generators in user's projects!
|
6
|
+
Rails::Generators.templates_path.unshift File::expand_path('../templates', __FILE__)
|
7
|
+
#默认设置如下选项 --no-migration --no-template_engine
|
8
|
+
Rails::Generators.options[:active_record][:migration] = false
|
9
|
+
Rails::Generators.options[:rails][:template_engine] = false
|
10
|
+
#puts "====options: #{Rails::Generators.options.inspect}"
|
11
|
+
|
3
12
|
class Ns::ScaffoldGenerator < Rails::Generators::ScaffoldGenerator
|
4
|
-
|
13
|
+
#移除一些不必要的generator引用
|
14
|
+
remove_hook_for :assets
|
15
|
+
remove_hook_for :stylesheet_engine
|
16
|
+
remove_class_option :stylesheet_engine
|
17
|
+
remove_class_option :stylesheets
|
18
|
+
|
19
|
+
desc "Dump field mapping to a yml file..."
|
5
20
|
def dump_field_mapping
|
6
|
-
say(" Generating fieldmapping for model: #{name}...", :green)
|
7
21
|
the_model = Object.const_get(class_name)
|
8
22
|
mapping_file = the_model.dump_mapping
|
9
|
-
say("
|
10
|
-
say("
|
23
|
+
say(" Generated field mapping for model: #{name}...", :green)
|
24
|
+
say(" You can configure it in #{mapping_file}.", :green)
|
11
25
|
end
|
26
|
+
|
27
|
+
desc "Modify the route to add some action support"
|
28
|
+
def interfaces
|
29
|
+
gsub_file('config/routes.rb', /^\s*resources :#{plural_name}$/) do
|
30
|
+
<<-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
|
39
|
+
Doc
|
40
|
+
end
|
41
|
+
end
|
12
42
|
end
|
File without changes
|
data/lib/{templates → generators/ns/scaffold/templates}/rails/scaffold_controller/controller.rb
RENAMED
File without changes
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#encoding: utf-8
|
2
|
-
|
3
2
|
class TryGenerator < Rails::Generators::NamedBase
|
4
3
|
#source_root File.expand_path("../templates", __FILE__)
|
5
4
|
#def copy_test_file
|
@@ -12,6 +11,5 @@ class TryGenerator < Rails::Generators::NamedBase
|
|
12
11
|
puts "plural_name:#{plural_name}, thor camel: #{Thor::Util.camel_case(name)}"
|
13
12
|
puts "==get model info: #{Object.const_get(class_name).new.attributes}"
|
14
13
|
end
|
15
|
-
|
16
14
|
end
|
17
15
|
|
data/lib/ns_service_pack.rb
CHANGED
@@ -15,12 +15,3 @@ 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
|
-
# customize deeply TODO
|
20
|
-
module Ns
|
21
|
-
class Railtie < Rails::Railtie
|
22
|
-
config.app_generators do |g|
|
23
|
-
g.templates.unshift File::expand_path('../templates', __FILE__)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -32,7 +32,7 @@ module Ns
|
|
32
32
|
conds = model_class.db_hashize(params)
|
33
33
|
end
|
34
34
|
|
35
|
-
#分页方法
|
35
|
+
#分页方法 # 加入文档说明
|
36
36
|
def paginate(params = {})
|
37
37
|
current_page = params[:current_page].to_i
|
38
38
|
current_page = current_page < 1 ? 1 : current_page
|
@@ -78,20 +78,32 @@ module Ns
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
|
82
|
-
def
|
83
|
-
(error_hash||{}).each{|k, v| error_hash[k] = v.join(', ') if v.is_a? Array }
|
84
|
-
end
|
85
|
-
|
86
|
-
#ABORTED NOW, keep here
|
87
|
-
def query_fields
|
81
|
+
#get a new buz obj with db default value
|
82
|
+
def new_buz_obj
|
88
83
|
@_data = model_class.buz_hashize
|
89
|
-
render :json=>ResultPacker.data(
|
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)
|
90
91
|
end
|
91
92
|
|
92
93
|
#动态查看该模块发布接口列表
|
93
94
|
def interfaces
|
94
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
|
95
101
|
end
|
102
|
+
|
103
|
+
protected
|
104
|
+
#验证错误回传
|
105
|
+
def valid_errors(error_hash={})
|
106
|
+
(error_hash||{}).each{|k, v| error_hash[k] = v.join(', ') if v.is_a? Array }
|
107
|
+
end
|
96
108
|
end
|
97
109
|
end
|
@@ -2,7 +2,8 @@
|
|
2
2
|
=begin
|
3
3
|
字段映射,业务字段-数据库字段对应
|
4
4
|
|
5
|
-
TODO:
|
5
|
+
TODO:
|
6
|
+
将不需进行字段装换的功能玻璃出来
|
6
7
|
=end
|
7
8
|
require 'fileutils'
|
8
9
|
module Ns
|
@@ -90,7 +91,7 @@ module Ns
|
|
90
91
|
end
|
91
92
|
|
92
93
|
#生成field mapping,dump到指定的yaml文件中
|
93
|
-
def dump_mapping(attr_prefix = nil, force =
|
94
|
+
def dump_mapping(attr_prefix = nil, force = false, with_timestamp = false)
|
94
95
|
file = nil
|
95
96
|
if defined?(Rails)
|
96
97
|
tstamp = with_timestamp ? ".#{Time.now.to_i}" : ""
|
@@ -99,7 +100,7 @@ module Ns
|
|
99
100
|
FileUtils.mkpath(path) unless File.directory?(path)
|
100
101
|
existed = File.exists?(file)
|
101
102
|
if existed
|
102
|
-
puts "Warning: #{file} has existed! check it!
|
103
|
+
puts "Warning: #{file} has existed! check it!"
|
103
104
|
end
|
104
105
|
if !existed || force
|
105
106
|
#获取数据库字段列表,屏蔽掉自动维护的created_at/updated_at,也可在生成的文件中配上
|
data/ns_service_pack.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ns_service_pack"
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
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-
|
12
|
+
s.date = "2011-11-30"
|
13
13
|
s.description = "abstract some common pattern to service pack"
|
14
14
|
s.email = "cao7113@hotmail.com"
|
15
|
-
s.executables = ["
|
15
|
+
s.executables = ["nsp"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
18
18
|
"README.rdoc"
|
@@ -26,8 +26,10 @@ Gem::Specification.new do |s|
|
|
26
26
|
"README.rdoc",
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
|
-
"bin/
|
29
|
+
"bin/nsp",
|
30
30
|
"lib/generators/ns/scaffold/scaffold_generator.rb",
|
31
|
+
"lib/generators/ns/scaffold/templates/active_record/model/model.rb",
|
32
|
+
"lib/generators/ns/scaffold/templates/rails/scaffold_controller/controller.rb",
|
31
33
|
"lib/generators/try/templates/test.rb",
|
32
34
|
"lib/generators/try/try_generator.rb",
|
33
35
|
"lib/ns_service_pack.rb",
|
@@ -42,13 +44,10 @@ Gem::Specification.new do |s|
|
|
42
44
|
"lib/ns_service_pack/service_config.rb",
|
43
45
|
"lib/ns_service_pack/util.rb",
|
44
46
|
"lib/ns_service_pack/version.rb",
|
45
|
-
"lib/templates/active_record/model/model.rb",
|
46
47
|
"lib/templates/config/code_hashes/code_hash.yml.sample",
|
47
|
-
"lib/templates/config/database.yml.sample",
|
48
48
|
"lib/templates/config/initializers/ns_service_pack.rb",
|
49
49
|
"lib/templates/config/initializers/oracle_db_config.rb",
|
50
50
|
"lib/templates/config/ns_services.yml",
|
51
|
-
"lib/templates/rails/scaffold_controller/controller.rb",
|
52
51
|
"ns_service_pack.gemspec",
|
53
52
|
"test/helper.rb",
|
54
53
|
"test/test_ns_service_pack.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.0
|
4
|
+
version: 0.1.0
|
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-
|
12
|
+
date: 2011-11-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &78640940 !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: *78640940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: thor
|
27
|
-
requirement: &
|
27
|
+
requirement: &78640700 !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: *78640700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shoulda
|
38
|
-
requirement: &
|
38
|
+
requirement: &78640460 !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: *78640460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &78640220 !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: *78640220
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &78639980 !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: *78639980
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &78639740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,11 +76,11 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *78639740
|
80
80
|
description: abstract some common pattern to service pack
|
81
81
|
email: cao7113@hotmail.com
|
82
82
|
executables:
|
83
|
-
-
|
83
|
+
- nsp
|
84
84
|
extensions: []
|
85
85
|
extra_rdoc_files:
|
86
86
|
- LICENSE.txt
|
@@ -94,8 +94,10 @@ files:
|
|
94
94
|
- README.rdoc
|
95
95
|
- Rakefile
|
96
96
|
- VERSION
|
97
|
-
- bin/
|
97
|
+
- bin/nsp
|
98
98
|
- lib/generators/ns/scaffold/scaffold_generator.rb
|
99
|
+
- lib/generators/ns/scaffold/templates/active_record/model/model.rb
|
100
|
+
- lib/generators/ns/scaffold/templates/rails/scaffold_controller/controller.rb
|
99
101
|
- lib/generators/try/templates/test.rb
|
100
102
|
- lib/generators/try/try_generator.rb
|
101
103
|
- lib/ns_service_pack.rb
|
@@ -110,13 +112,10 @@ files:
|
|
110
112
|
- lib/ns_service_pack/service_config.rb
|
111
113
|
- lib/ns_service_pack/util.rb
|
112
114
|
- lib/ns_service_pack/version.rb
|
113
|
-
- lib/templates/active_record/model/model.rb
|
114
115
|
- lib/templates/config/code_hashes/code_hash.yml.sample
|
115
|
-
- lib/templates/config/database.yml.sample
|
116
116
|
- lib/templates/config/initializers/ns_service_pack.rb
|
117
117
|
- lib/templates/config/initializers/oracle_db_config.rb
|
118
118
|
- lib/templates/config/ns_services.yml
|
119
|
-
- lib/templates/rails/scaffold_controller/controller.rb
|
120
119
|
- ns_service_pack.gemspec
|
121
120
|
- test/helper.rb
|
122
121
|
- test/test_ns_service_pack.rb
|
@@ -135,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
134
|
version: '0'
|
136
135
|
segments:
|
137
136
|
- 0
|
138
|
-
hash:
|
137
|
+
hash: -733976717
|
139
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
139
|
none: false
|
141
140
|
requirements:
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# Oracle/OCI 8i, 9, 10g
|
2
|
-
#
|
3
|
-
# Requires Ruby/OCI8:
|
4
|
-
# http://rubyforge.org/projects/ruby-oci8/
|
5
|
-
#
|
6
|
-
# Specify your database using any valid connection syntax, such as a
|
7
|
-
# tnsnames.ora service name, or an SQL connect string of the form:
|
8
|
-
#
|
9
|
-
# //host:[port][/service name]
|
10
|
-
#
|
11
|
-
# By default prefetch_rows (OCI_ATTR_PREFETCH_ROWS) is set to 100. And
|
12
|
-
# until true bind variables are supported, cursor_sharing is set by default
|
13
|
-
# to 'similar'. Both can be changed in the configuration below; the defaults
|
14
|
-
# are equivalent to specifying:
|
15
|
-
#
|
16
|
-
# prefetch_rows: 100
|
17
|
-
# cursor_sharing: similar
|
18
|
-
#
|
19
|
-
|
20
|
-
development:
|
21
|
-
adapter: mysql2
|
22
|
-
encoding: utf8
|
23
|
-
reconnect: false
|
24
|
-
pool: 5
|
25
|
-
host: localhost
|
26
|
-
database: ningshangOracle
|
27
|
-
username: root
|
28
|
-
password: root
|
29
|
-
socket: /var/run/mysqld/mysqld.sock
|
30
|
-
|
31
|
-
# Warning: The database defined as "test" will be erased and
|
32
|
-
# re-generated from your development database when you run "rake".
|
33
|
-
# Do not set this db to the same as development or production.
|
34
|
-
test:
|
35
|
-
adapter: oracle_enhanced
|
36
|
-
database: oradb.ningshang.me/ningshang
|
37
|
-
username: xxx
|
38
|
-
password: utf8
|
39
|
-
|
40
|
-
production:
|
41
|
-
adapter: oracle_enhanced
|
42
|
-
database: oradb.ningshang.me/ningshang
|
43
|
-
username: xxx
|
44
|
-
password: utf8
|