= ns_service_pack 实现部分REST架构(ROA)中Service层基础共享代码抽取 #==功能列表: * 支持自定义json格式的资源crud操作 * 提供全局字典常量/转换管理 * 提供数据库层-业务层字段自动转换 #==TODO TASK LIST * 更好用的安装使用接口,自动完成,可配置 * rake 任务的引入, 产品模式将数据文件预编译成一个数据文件 * 提供scaffold模式方法 生成一些辅助接口和方法 service_scaffold,生成需要的模板和基本方法 * fieldmapping 和 常量管理的分离 让使用者可以决定是否使用mapping,目前可以通过注释initializer中片段完成 * 用模板的方法生成initializer,以便插入一些动态数据 * application_controller_module的引入还是有问题!!! * 如何为application_controller_module中的action自动生成路由呢? 直接生成服务端和客户端基础代码 * index默认查询条件加入,传入条件的merge(目前已提供传入条件的精确搜索) #==NS Service Pack使用指南 *1 在rails3项目Gemfile中引入 gem 'ns_service_pack' *2 启动控制台 rails c,运行命令 NsServicePack.install *3 配置项目中的常量数据 config/code_hashes/**/*.yml中数据会作为CodeHash加载 可在控制台下用以下命令辅助生成: .dump_mapping 生成buz-db field_mapping, 可配置, -->/config/code_hashes/fields/*.yml .dump_new 客户new该资源时的结构,--> /data/*.yml 常量的使用: GlobalConst.ns_statuses[key_or_value] *4 配置项目的controllers和models 4.1)在ApplicationController子类,如: class AddressesController < ApplicationController ... def model_class #引用的模型类,是ActiveRecord::Base子类 end ... end 4.2)在ActiveRecord::Base子类中,如Customer class Customer < ActiveRecord::Base ... def self.get_map_value(k, v) #定制各字段值的业务显示格式 #value mapping end ... end #==============History: #==0.0.17 * 转用jeweler包来管理本gem项目, 可用bundler,rake,git来便利化相关开发 * 注释gem root变量的引用 #==0.0.16 20111119 * 由Gao发现load_code_hashes!时引入空.yml文件时出错,已修复 * 修改dump_mapping文件目录从code_hashes/fields到code_hashes/mappings #==0.0.15 20111118 * 在mapping中支持可配置的json数据(自定义属性)输出,需要: 1. 在.yml文件中增加一个自定义属性 :some_key_name: :get_key_value_method_name 2. 在model类中增加一个获取键值的方法,如下: def #give some value for the key end 另一种方式: def self.get_map_value(key, value) #add a new when branch for the key case key ... when : #get value for the key ... end end #==0.0.14 * fix bug: error==>errors #==0.0.13 * json数据打包部分增加部分成功的情况: ResultPacker.improve(ok_data, errors_hash, msg) 返回节点情况: { :status=>'imperfect', :msg=>'部分逻辑错误', :data=>your_ok_data_part, :errors=>your_error_hash_part } #==0.0.12 * Fix bug: override the original 'model_name' method, rename to '__model_clazz_name' #==0.0.11 * 文档整理 #==0.0.8 * 支持更灵活的index查询方法 直接提供子类的 #def get_page_data(start, size, params) # [10, model_class.all[0..3]] #end #==0.0.6 * 修正query_fields接口实现 * 修改方法名: 生成mapping: ModelName.dump_mapping 生成示例初始数据:ModelName.dump_new #==0.0.5 * 初步解决application controller问题 * 添加默认index精确搜索条件 #==0.0.4 * 同一版本号不能向rubygems上提交两次?那怎么更新那个版本呢? * 本地可以启用gem server,客户端通过以下指定源方式安装 gem install --source http://cao:8808 #==0.0.3 20111116 * 添加自动生成可配置的field_map,在控制台中运行: Customer.dump_field_map * 自动生成为客户端new资源时的初始结构 Customer.dump_init_hash 生成到/data/customer_field.yml中 * 统一用建立在CodeHash基础上的GlobalConst管理常量数据 /config/code_hashes/**/*.yml文件会被初始化时加载 * 将对ApplicationController和ActiveRecord::Base的扩展放在 initializers/ns_service_pack.rb中,便于项目做定制 #==0.0.2 * 增加使用指南README,测试gem更新 #==0.0.1 20111116 发布0.0.1版本,主要实现以下内容: * 建立gem包基本结构,将主要代码纳入gem中 * 更友好的CodeHash数据管理 #==20111116 根据Shang的建议,决定将共用代码抽离成gem包形式 == Contributing to ns_service_pack * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it * Fork the project * Start a feature/bugfix branch * Commit and push until you are happy with your contribution * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally. * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it. == Copyright Copyright (c) 2011 caory. See LICENSE.txt for further details.