sana-mvcbase 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: efe4c405cdfefbb65ab2f1427c8c5a45314c5093
4
+ data.tar.gz: 1943f8d1f3b6ecc1b6f80432998b16b25f6e24c5
5
+ SHA512:
6
+ metadata.gz: f2fe133feed6724c3da90e40fe95a33f326b87cc8a541e9e1be11d108693e2f47f69c172f6930a0ed7934c9db46e686865a9ce5cdd5576720fe1c9673463db01
7
+ data.tar.gz: a6411dbaed1a53790453d32e43662148f3dbb20667fad091c7442f4ab5bb04b69493dd85017461416e4f6f91259edb502e6e50df58d161eb61ec629bc4c73024
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /doc/
6
+ /coverage/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .*.sw?
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format doc
3
+ --require ./spec/spec_helper.rb
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ os:
5
+ - linux
6
+ - osx
7
+ script: bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in shioruby.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # [Sanae MVC Base](https://github.com/Narazaka/sana-mvcbase)
2
+
3
+ [![Gem](https://img.shields.io/gem/v/sana-mvcbase.svg)](https://rubygems.org/gems/sana-mvcbase)
4
+ [![Gem](https://img.shields.io/gem/dtv/sana-mvcbase.svg)](https://rubygems.org/gems/sana-mvcbase)
5
+ [![Gemnasium](https://gemnasium.com/Narazaka/sana-mvcbase.svg)](https://gemnasium.com/Narazaka/sana-mvcbase)
6
+ [![Inch CI](http://inch-ci.org/github/Narazaka/sana-mvcbase.svg)](http://inch-ci.org/github/Narazaka/sana-mvcbase)
7
+ [![Travis Build Status](https://travis-ci.org/Narazaka/sana-mvcbase.svg)](https://travis-ci.org/Narazaka/sana-mvcbase)
8
+ [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/Narazaka/sana-mvcbase?svg=true)](https://ci.appveyor.com/project/Narazaka/sana-mvcbase)
9
+ [![codecov.io](https://codecov.io/github/Narazaka/sana-mvcbase/coverage.svg?branch=master)](https://codecov.io/github/Narazaka/sana-mvcbase?branch=master)
10
+ [![Code Climate](https://codeclimate.com/github/Narazaka/sana-mvcbase/badges/gpa.svg)](https://codeclimate.com/github/Narazaka/sana-mvcbase)
11
+
12
+ Ukagaka SHIORI subsystem 'Sana' MVC Helper
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ ```ruby
19
+ gem 'sana-mvcbase'
20
+ ```
21
+
22
+ And then execute:
23
+
24
+ $ bundle
25
+
26
+ Or install it yourself as:
27
+
28
+ $ gem install sana-mvcbase
29
+
30
+ ## Usage
31
+
32
+ ```ruby
33
+ require 'sana-mvcbase'
34
+ require 'shiolink'
35
+
36
+ # define controllers
37
+
38
+ # for load(), unload()
39
+ class DLController < SanaController
40
+ def _load(dirpath)
41
+ MySave.load
42
+ p dirpath
43
+ end
44
+
45
+ def _unload
46
+ p :unload
47
+ end
48
+ end
49
+
50
+ # view rendering module
51
+ module MyViewModule
52
+ def render_response(name)
53
+ MyView.talk(name || event_id)
54
+ end
55
+ end
56
+
57
+ # view rendering base controller
58
+ class MyWithViewController < SanaAnyEventController
59
+ include MyViewModule
60
+ end
61
+
62
+ # normal talk controller
63
+ class TalkEventsController < MyWithViewController
64
+ def OnBoot
65
+ @foo = MySave.foo_flag
66
+ @bar = MyModel.bar(params.shell_name)
67
+ end
68
+
69
+ def OnFirstBoot
70
+ @foo = MySave.foo_flag
71
+ render :OnBoot
72
+ end
73
+ end
74
+
75
+ # resource controller
76
+ class ResourcesController < SanaController
77
+ def homeurl
78
+ "http://www.example.com/foo/"
79
+ end
80
+ end
81
+
82
+ # register routing
83
+
84
+ router = SanaRouter.new(TalkEventsController)
85
+ router.draw do
86
+ controller DLController do
87
+ load
88
+ unload
89
+ end
90
+
91
+ controller ResourcesController do
92
+ route :homeurl
93
+ end
94
+
95
+ route :OnBoot, {shell_name: 0, halted: 6, halted_ghost_name: 7}
96
+
97
+ # OnFirstBoot is not registered but will called with default controller (= TalkEventsController)
98
+ end
99
+
100
+ # app start
101
+
102
+ sana = Sana.new(router.events)
103
+ shiolink = Shiolink.new(sana.method(:load), sana.method(:unload), sana.method(:request))
104
+ shiolink.start
105
+ ```
106
+
107
+ ## API
108
+
109
+ [API Document](http://www.rubydoc.info/github/Narazaka/sana-mvcbase)
110
+
111
+ ## License
112
+
113
+ This is released under [MIT License](http://narazaka.net/license/MIT?2016).
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'yard'
4
+ require 'yard/rake/yardoc_task'
5
+
6
+ task :default => :spec
7
+
8
+ RSpec::Core::RakeTask.new
9
+ YARD::Rake::YardocTask.new do |t|
10
+ t.options = ["--private"]
11
+ end
data/appveyor.yml ADDED
@@ -0,0 +1,20 @@
1
+ version: "{build}"
2
+ branches:
3
+ except:
4
+ - gh-pages
5
+ install:
6
+ - set RUBY_HOME=C:\Ruby%ruby_version%
7
+ - set PATH=%RUBY_HOME%\bin;%PATH%
8
+ - ruby --version
9
+ - gem --version
10
+ - gem install bundler --no-document
11
+ - bundle --version
12
+ - bundle install
13
+ test_script:
14
+ - bundle exec rake spec
15
+ build: off
16
+ deploy: off
17
+ environment:
18
+ matrix:
19
+ - ruby_version: 22
20
+ - ruby_version: 22-x64
@@ -0,0 +1,2 @@
1
+ require 'sana_router'
2
+ require 'sana_controller'
@@ -0,0 +1,96 @@
1
+ # Sana Controller
2
+ class SanaController
3
+ # constructor
4
+ # @param [SanaRouter::Events] events events
5
+ # @param [Symbol] event_id event id
6
+ # @param [OpenStruct] request request
7
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
8
+ def initialize(events, event_id, request, mapping = {})
9
+ @events = events
10
+ @event_id = event_id
11
+ @request = request
12
+ @mapping = mapping
13
+ end
14
+
15
+ # events
16
+ # @return [SanaRouter::Events]
17
+ attr_reader :events
18
+ # event id
19
+ # @return [Symbol]
20
+ attr_reader :event_id
21
+ # request
22
+ # @return [OpenStruct]
23
+ attr_reader :request
24
+
25
+ # named access to request headers
26
+ # @return [SanaController::Params] params
27
+ def params
28
+ @params ||= Params.new(request, @mapping)
29
+ end
30
+
31
+ # exec action and get response
32
+ # @return [String, Openstruct] response
33
+ def action
34
+ @return_value = public_send(@event_id)
35
+ if @response
36
+ @response
37
+ else
38
+ render
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # render result
45
+ # @param args various result options
46
+ # @return [String, Openstruct] response
47
+ def render(*args)
48
+ @response = render_response(*args)
49
+ end
50
+
51
+ # make result by given options
52
+ # @param args various result options
53
+ # @return [String, Openstruct] response
54
+ # @note this method should be overridden for convenient view rendering
55
+ # @example override
56
+ # class HogeViewController < SanaController
57
+ # def render_response(value = nil)
58
+ # # @return_value is event method's return value
59
+ # eval (value || @return_value)
60
+ # end
61
+ # end
62
+ def render_response(*args)
63
+ args[0] || @return_value
64
+ end
65
+
66
+ # named access to request headers
67
+ class Params
68
+ # constructor
69
+ # @param [OpenStruct] request request
70
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
71
+ # @example mapping
72
+ # params = SanaController::Params.new(request, {shell_name: 0, halted: 6, halted_ghost_name: 7}) # mapping for Reference0, 6 and 7
73
+ def initialize(request, mapping = {})
74
+ @request = request
75
+ @mapping = mapping
76
+ end
77
+
78
+ # named access to the header
79
+ # @example named access
80
+ # params.shell_name == params.Reference0
81
+ # @param [Symbol] method param name
82
+ # @return [String] header value
83
+ def method_missing(method)
84
+ @request[method] || @request["Reference#{@mapping[method]}".to_sym]
85
+ end
86
+ end
87
+ end
88
+
89
+ # Sana Controller (any event accepted)
90
+ class SanaAnyEventController < SanaController
91
+ # SHIORI request()
92
+ # @param [Symbol] method method name = event id
93
+ def method_missing(method)
94
+ render
95
+ end
96
+ end
@@ -0,0 +1,126 @@
1
+ require 'sana'
2
+ # Sana Router
3
+ class SanaRouter
4
+ # constructor
5
+ # @param [SanaController] default_controller default scope controller
6
+ def initialize(default_controller = nil)
7
+ @default_controller = default_controller
8
+ @controller = @default_controller
9
+ @route = {}
10
+ @mapping = {}
11
+ end
12
+
13
+ # register event route to controller
14
+ # @param [Symbol, Array<Symbol>] events event names
15
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
16
+ # @example register to various controllers
17
+ # router.draw do
18
+ # # register to specific controller
19
+ # controller BootController do
20
+ # route [:OnBoot, :OnFirstBoot]
21
+ # end
22
+ # controller CloseController do
23
+ # route [:OnClose, :OnCloseAll]
24
+ # end
25
+ # # register to default controller
26
+ # route :OnSecondChange
27
+ # end
28
+ # @example mapping usage
29
+ # route :OnBoot, {shell_name: 0, halted: 6, halted_ghost_name: 7} # mapping for Reference0, 6 and 7
30
+ def route(events, mapping = {})
31
+ Array(events).each do |method|
32
+ @route[method.to_sym] = @controller
33
+ @mapping[method.to_sym] = mapping
34
+ end
35
+ return
36
+ end
37
+
38
+ alias_method :r, :route
39
+
40
+ # register SHIORI load() route to controller
41
+ # @example register to specific controller
42
+ # router.draw do
43
+ # controller DLController do
44
+ # load
45
+ # end
46
+ # end
47
+ def load
48
+ @load_controller = @controller
49
+ end
50
+
51
+ # register SHIORI unload() route to controller
52
+ # @example register to specific controller
53
+ # router.draw do
54
+ # controller DLController do
55
+ # unload
56
+ # end
57
+ # end
58
+ def unload
59
+ @unload_controller = @controller
60
+ end
61
+
62
+ # execute register methods in instance context
63
+ # @yield instance_exec context
64
+ def draw(&block)
65
+ instance_exec &block
66
+ end
67
+
68
+ # set controller context
69
+ # @param [SanaController] controller target controller
70
+ # @yield controller context block
71
+ def controller(controller)
72
+ @controller = controller
73
+ yield if block_given?
74
+ @controller = @default_controller
75
+ end
76
+
77
+ # router events
78
+ # @example with Sana
79
+ # sana = Sana.new(router.events)
80
+ # @return [SanaRouter::Events] events
81
+ def events
82
+ @events ||= Events.new(@route, @mapping, @load_controller, @unload_controller, @default_controller)
83
+ end
84
+
85
+ # router events
86
+ class Events
87
+ # constructor
88
+ # @param [Hash<Symbol, SanaController>] route route hash
89
+ # @param [Hash<Symbol, Hash<Symbol, Integer>>] mapping mapping hash
90
+ # @param [SanaController] load_controller load controller
91
+ # @param [SanaController] unload_controller unload controller
92
+ # @param [SanaController] default_controller default controller
93
+ def initialize(route, mapping, load_controller, unload_controller, default_controller = nil)
94
+ @route = route
95
+ @mapping = mapping
96
+ @load_controller = load_controller
97
+ @unload_controller = unload_controller
98
+ @default_controller = default_controller
99
+ end
100
+
101
+ # SHIORI request()
102
+ # @param [Symbol] method method name = event id
103
+ # @param [OpenStruct] request request
104
+ # @return [String, Openstruct] response
105
+ # @example request()
106
+ # events.OnBoot(request)
107
+ def method_missing(method, request)
108
+ if controller = @route[method] || @default_controller
109
+ controller.new(self, method, request, @mapping[method]).action
110
+ else
111
+ super
112
+ end
113
+ end
114
+
115
+ # SHIORI load()
116
+ # @param [String] dirpath "ghost/master" path
117
+ def _load(dirpath)
118
+ @load_controller.new(self, __method__, nil, nil)._load(dirpath)
119
+ end
120
+
121
+ # SHIORI unload()
122
+ def _unload
123
+ @load_controller.new(self, __method__, nil, nil)._unload
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "sana-mvcbase"
6
+ spec.version = "0.0.1"
7
+ spec.authors = ["Narazaka"]
8
+ spec.email = ["info@narazaka.net"]
9
+
10
+ spec.summary = %q{Ukagaka SHIORI subsystem 'Sana' MVC Helper}
11
+ spec.description = %q{Ukagaka SHIORI subsystem 'Sana' MVC Helper}
12
+ spec.homepage = "https://github.com/Narazaka/sana-mvcbase"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler", ">= 1.7.9"
19
+ spec.add_development_dependency "rake", "~> 10.0"
20
+ spec.add_development_dependency "rspec", "~> 3.4"
21
+ spec.add_development_dependency "yard", "~> 0.8.7"
22
+ spec.add_development_dependency "simplecov", "~> 0.11"
23
+ spec.add_development_dependency "codecov", "~> 0.1"
24
+ spec.add_dependency "shioruby", ">= 0.0.3"
25
+ spec.add_dependency "sana", ">= 0.0.4"
26
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sana-mvcbase
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Narazaka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.7.9
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.7.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.8.7
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.11'
83
+ - !ruby/object:Gem::Dependency
84
+ name: codecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: shioruby
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.3
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: sana
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 0.0.4
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 0.0.4
125
+ description: Ukagaka SHIORI subsystem 'Sana' MVC Helper
126
+ email:
127
+ - info@narazaka.net
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".travis.yml"
135
+ - Gemfile
136
+ - README.md
137
+ - Rakefile
138
+ - appveyor.yml
139
+ - lib/sana-mvcbase.rb
140
+ - lib/sana_controller.rb
141
+ - lib/sana_router.rb
142
+ - sana-mvcbase.gemspec
143
+ homepage: https://github.com/Narazaka/sana-mvcbase
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.4.5.1
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Ukagaka SHIORI subsystem 'Sana' MVC Helper
167
+ test_files: []
168
+ has_rdoc: