appril-cli 0.2.7 → 0.2.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aaf51693e976f3705b533a067f6c78f7fd9e6c20
4
- data.tar.gz: 7c0f82b8545055cc268cba2ec510cac3a9611441
3
+ metadata.gz: 39c148a207991873f601d0278b707baa497b5db3
4
+ data.tar.gz: 5ac6342115df0ecf940e2f0b130cc8294fd7e6cd
5
5
  SHA512:
6
- metadata.gz: 5ef58942e1a8397f0ffbffa97f0a32598beec89c67558ebdbc7fde090e60e794a5e371d2d4ca09665533c14161251351244f203c1c8229ded95e649bcfc3f142
7
- data.tar.gz: d8598cb33bd2bb245e744225b1edca5e2adb46e32e03f6d14e077a9a57e7f09ccda4a08af4260b042e97b5c896612c0a5a153110474d93c2729419fb8929a923
6
+ metadata.gz: a03831c158147e7a45362d762c94842aeb6b8d076422fb2a8a73a35e4f78db9a2bf93746152ffb378588f8b5948d67ad02a3e474257bc4261bd86cc609697f61
7
+ data.tar.gz: 6eb8180050fe5c1ea1de2014822d06734ec5c5ef969b20ebdb5882291ebbaab2acd42a497b1c8d67be7c5ad39e6de7b6f7635a429b9e4539339b89da668d63eb
data/app/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  begin # keep these gems
4
- gem 'appril', '~> 0.2', '>= 0.2.5'
4
+ gem 'appril', '~> 0.2', '>= 0.2.7'
5
5
  gem 'rocketio', '~> 0.4', '>= 0.4.3'
6
6
  gem 'rocketio-views', '~> 0.4'
7
7
  gem 'tubesock', '~> 0.2'
data/app/base/app.js CHANGED
@@ -1,100 +1,18 @@
1
-
2
1
  const DEVELOPMENT = APP_ENV === 'development'
3
2
 
4
- import {merge, map, reduce, filter, cloneDeep} from 'lodash'
5
3
  import Vue from 'vue'
6
- import VueRouter from 'vue-router'
7
- import Vuex from 'vuex'
8
- import VuexLogger from 'vuex/logger'
9
- import Alert from 'appril-alert'
10
- import {vue_plugin, vuex_plugins} from 'appril/plugins'
11
- import {state, mutations} from 'appril/store'
12
- import config from 'app/appril.json'
13
-
14
- /** delete or comment this line if your components piped through Crudle
15
- import {state as crudle_state, mutations as crudle_mutations} from 'crudle/store'
16
- merge(state, crudle_state)
17
- merge(mutations, crudle_mutations) /* */
18
-
19
- Vue.use(VueRouter)
20
- Vue.use(Vuex)
4
+ import components from './bootstrap/components'
5
+ import store from './bootstrap/store'
6
+ import router from './bootstrap/router'
7
+ import vue_plugins from './bootstrap/vue_plugins'
8
+ import './assets/app.css'
21
9
 
22
- if (DEVELOPMENT) {
23
- Vue.config.devtools = true
24
- vuex_plugins.push(VuexLogger())
25
- }
26
-
27
- const store = new Vuex.Store({
28
- state: cloneDeep(state),
29
- mutations,
30
- strict: DEVELOPMENT,
31
- plugins: vuex_plugins
32
- })
10
+ Vue.config.devtools = DEVELOPMENT
33
11
 
34
- const api_callbacks = {
35
- // do whatever with params Object just before sending to server
36
- on_request(params) {},
37
-
38
- // do whatever with data received from server just before entering success callback
39
- on_response(response) {},
40
-
41
- // to be used for requests that does not define a error handler
42
- on_error(error) {
43
- Alert.error(error)
44
- }
45
- }
46
-
47
- // RealTime Communication Protocol
48
- import RTCP from 'appril/rtcp'
49
- const rtcp = new RTCP(api_callbacks)
50
-
51
- rtcp.connect({
52
- // make sure this URL is matching RTCPController URL
53
- path: config.server_url + '__rtcp__',
54
- // disconnect if user is idle for N seconds (it will reconnect on user activity)
55
- disconnect_after: 60
56
- })
57
-
58
- import {urlify} from 'appril-utils'
59
- import api_builder from 'appril/api'
60
-
61
- const components = reduce(config.components, function(map,component) {
62
- component.url = urlify(component.url)
63
- component.xhr = api_builder.xhr(component, api_callbacks)
64
- component.rtcp = api_builder.rtcp(component, rtcp)
65
- Object.defineProperty(component, 'api', {get() {return component[config.default_api]}})
66
- map[component.name] = component
67
- return map
68
- }, {})
69
-
70
- import deploy_component from './component'
71
-
72
- const router = new VueRouter({
73
- mode: 'history',
74
- base: __dirname,
75
- routes: map(filter(components, 'entry_path'), function(component) {
76
- return {
77
- name: component.name,
78
- path: component.url_pattern,
79
- component: (resolve) => System.import(`components/${component.entry_path}/index.js`).then(function(constructor) {
80
- if (component.api._env) {
81
- component.api._env().get({
82
- success(env) {
83
- store.commit('__SET_ENV__', {component: component.name, env})
84
- resolve(deploy_component(components, component, constructor.default))
85
- }
86
- })
87
- } else {
88
- resolve(deploy_component(components, component, constructor.default))
89
- }
90
- })
91
- }
92
- })
93
- })
12
+ for (let plugin of vue_plugins)
13
+ Vue.use(plugin)
94
14
 
95
15
  document.addEventListener('DOMContentLoaded', function() {
96
- Vue.use(vue_plugin({components, rtcp}))
97
-
98
16
  new Vue({
99
17
  router,
100
18
  store,
@@ -0,0 +1,14 @@
1
+ import Alert from 'appril-alert'
2
+
3
+ // do whatever with params Object just before sending to server
4
+ export function on_request(params) {
5
+ }
6
+
7
+ // do whatever with data received from server just before entering success callback
8
+ export function on_response(response) {
9
+ }
10
+
11
+ // used on requests that does not define own error handler
12
+ export function on_error(error) {
13
+ Alert.error(error)
14
+ }
@@ -1,5 +1,4 @@
1
1
  import {find} from 'lodash'
2
- import 'assets/app'
3
2
 
4
3
  // /** default deployer
5
4
  export default function(components, component, constructor) {
@@ -0,0 +1,15 @@
1
+ import {reduce} from 'lodash'
2
+ import {urlify} from 'appril-utils'
3
+ import api_builder from 'appril/api'
4
+ import * as callbacks from './api_callbacks'
5
+ import rtcp from './rtcp'
6
+ import {components, default_api} from 'app/appril.json'
7
+
8
+ export default reduce(components, function(map,component) {
9
+ component.url = urlify(component.url)
10
+ component.xhr = api_builder.xhr(component, callbacks)
11
+ component.rtcp = api_builder.rtcp(component, rtcp)
12
+ Object.defineProperty(component, 'api', {get() {return component[default_api]}})
13
+ map[component.name] = component
14
+ return map
15
+ }, {})
@@ -0,0 +1,32 @@
1
+ import {map, filter} from 'lodash'
2
+ import Vue from 'vue'
3
+ import VueRouter from 'vue-router'
4
+
5
+ import components from './components'
6
+ import store from './store'
7
+ import componentify from './component'
8
+
9
+ Vue.use(VueRouter)
10
+
11
+ export default new VueRouter({
12
+ mode: 'history',
13
+ base: __dirname,
14
+ routes: map(filter(components, 'entry_path'), function(component) {
15
+ return {
16
+ name: component.name,
17
+ path: component.url_pattern,
18
+ component: (resolve) => System.import(`components/${component.entry_path}/index.js`).then(function(constructor) {
19
+ if (component.api._env) {
20
+ component.api._env().get({
21
+ success(env) {
22
+ store.commit('__SET_ENV__', {component: component.name, env})
23
+ resolve(componentify(components, component, constructor.default))
24
+ }
25
+ })
26
+ } else {
27
+ resolve(componentify(components, component, constructor.default))
28
+ }
29
+ })
30
+ }
31
+ })
32
+ })
@@ -0,0 +1,14 @@
1
+ import RTCP from 'appril/rtcp'
2
+ import * as callbacks from './api_callbacks'
3
+ import {server_url} from 'app/appril.json'
4
+
5
+ const rtcp = new RTCP(callbacks)
6
+
7
+ rtcp.connect({
8
+ // make sure this URL is matching RTCPController URL
9
+ path: server_url + '__rtcp__',
10
+ // disconnect if user is idle for N seconds (it will reconnect on user activity)
11
+ disconnect_after: 60
12
+ })
13
+
14
+ export default rtcp
@@ -0,0 +1,27 @@
1
+ const DEVELOPMENT = APP_ENV === 'development'
2
+
3
+ import {forEach, merge} from 'lodash'
4
+ import Vue from 'vue'
5
+ import Vuex from 'vuex'
6
+ import VuexLogger from 'vuex/logger'
7
+
8
+ import state from 'base/store/state'
9
+ import * as mutations from 'base/store/mutations'
10
+
11
+ forEach(require('base/store/components'), function(s,n) {
12
+ state[n] = s.state
13
+ merge(mutations, s.mutations)
14
+ })
15
+
16
+ /** delete or comment this line if your components piped through Crudle
17
+ import {state as crudle_state, mutations as crudle_mutations} from 'crudle/store'
18
+ merge(state, crudle_state)
19
+ merge(mutations, crudle_mutations) /* */
20
+
21
+ Vue.use(Vuex)
22
+ export default new Vuex.Store({
23
+ state,
24
+ mutations,
25
+ strict: DEVELOPMENT,
26
+ plugins: DEVELOPMENT ? [VuexLogger()] : []
27
+ })
@@ -0,0 +1,27 @@
1
+ import components from './components'
2
+ import rtcp from './rtcp'
3
+
4
+ export default [
5
+
6
+ function(vue) {
7
+
8
+ vue.prototype.rtcp = rtcp
9
+
10
+ Object.defineProperty(vue.prototype, 'env', {
11
+ get() {return this.$store ? this.$store.state.__ENV__[this.$router.currentRoute.name] || {} : {}}
12
+ })
13
+
14
+ Object.defineProperty(vue.prototype, 'components', {
15
+ get() {return components}
16
+ })
17
+
18
+ Object.defineProperty(vue.prototype, 'component', {
19
+ get() {return components[this.$router.currentRoute.name]}
20
+ })
21
+
22
+ Object.defineProperty(vue.prototype, 'api', {
23
+ get() {return components[this.$router.currentRoute.name].api}
24
+ })
25
+ }
26
+
27
+ ]
data/app/config/config.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # loading .yml configs from current directory (config.yml will be loaded first)
2
- Cfg = Appril.load_configs(File.expand_path('..', __FILE__))
2
+ Cfg = Appril::Configs.load(File.expand_path('..', __FILE__))
3
3
 
4
4
  # it is highly recommended to freeze configs so they stay unaltered on runtime
5
5
  Cfg.freeze
6
6
 
7
- # loading all .rb files in current dir (this one will be skipped automatically)
7
+ # loading all .rb files in current dir (this one will be skipped)
8
8
  %w[
9
9
  ../*.rb
10
10
  ../**/*.rb
data/app/core/boot.rb CHANGED
@@ -1,14 +1,10 @@
1
1
  # do NOT edit this file, edit base/boot.rb instead
2
2
 
3
- require 'appril'
4
- require 'appril/load_configs'
5
-
6
3
  Dir.chdir File.expand_path('../..', __FILE__) do
4
+ require './core/load_configs'
7
5
  require './base/boot'
8
-
9
6
  require 'bundler/setup'
10
7
  Bundler.require(:default)
11
8
  Bundler.require(RocketIO.environment)
12
-
13
9
  require './config/config'
14
10
  end
@@ -2,6 +2,83 @@
2
2
 
3
3
  # do NOT edit this file
4
4
 
5
- require 'appril/generate_configs'
5
+ require 'fileutils'
6
+
7
+ module Appril
8
+ module Configs
9
+ extend self
10
+
11
+ def generate dir
12
+ components = self.components(dir)
13
+ generate_config_file(dir, components)
14
+ generate_store_modules_file(dir, components)
15
+ end
16
+
17
+ def generate_config_file dir, components
18
+ config = Configs.load("#{dir}/config", env: :development)
19
+ File.open File.expand_path('appril.json', dir), 'w' do |f|
20
+ f << JSON.pretty_generate({
21
+ build_path: config[:build_path],
22
+ client_url: config[:client_url],
23
+ server_url: config[:server_url],
24
+ default_api: config[:default_api],
25
+ components: components
26
+ })
27
+ end
28
+ end
29
+
30
+ def generate_store_modules_file dir, components
31
+
32
+ lines = components.each_with_object([
33
+ '// auto-generated file, do not edit',
34
+ ]) do |c,o|
35
+ next unless c[:name] # skip anonymous controllers
36
+ pattern = "base/components/#{c[:entry_path]}/store.*"
37
+ next unless file = Dir[File.expand_path(pattern, dir)].find {|e| File.file?(e)}
38
+ path = file.sub(dir, 'app')
39
+ o << "
40
+ import #{c[:name]} from '#{path}'
41
+ export {#{c[:name]}}
42
+ "
43
+ end
44
+
45
+ file = File.expand_path('base/store/components.js', dir)
46
+ FileUtils.mkdir_p(File.dirname(file))
47
+ File.open(file, 'w') {|f| f << lines.join("\n")}
48
+ end
49
+
50
+ def components dir
51
+ components_root = File.expand_path('base/components', dir) + '/'
52
+ RocketIO.controllers.each_with_object([]) do |controller,o|
53
+ next if controller.to_s =~ /BaseController|RTCPController/
54
+ entry = Dir["#{controller.dirname}/index.*"].find {|e| File.file?(e)}
55
+ o << {
56
+ entry_path: entry && File.dirname(entry.sub(components_root, '')),
57
+ url: controller.url,
58
+ url_pattern: url_pattern(controller),
59
+ name: controller.name.gsub('::', '__'),
60
+ controller_name: controller.name,
61
+ api: controller.api.keys
62
+ }
63
+ end.sort do |a,b|
64
+ b[:url].split('/').size <=> a[:url].split('/').size
65
+ end
66
+ end
67
+
68
+ def url_pattern controller
69
+ controller.url *controller.instance_method(:index).parameters.each_with_object([]) {|param,o|
70
+ pattern = if param[0] == :rest
71
+ "*"
72
+ elsif param[0] == :req
73
+ ":#{param[1]}"
74
+ elsif param[0] == :opt
75
+ ":#{param[1]}?"
76
+ end
77
+ o << pattern if pattern
78
+ }
79
+ end
80
+ end
81
+ end
82
+
6
83
  require File.expand_path('../load', __FILE__)
7
- Appril.generate_configs(File.expand_path('../..', __FILE__))
84
+ Appril::Configs.generate(File.expand_path('../..', __FILE__))
@@ -0,0 +1,63 @@
1
+ # do NOT edit this file, edit base/boot.rb instead
2
+
3
+ require 'yaml'
4
+
5
+ module Appril
6
+ module Configs
7
+ extend self
8
+
9
+ def load *dirs, env: RocketIO.environment
10
+
11
+ config = RocketIO.indifferent_params({environment: env.to_s.freeze})
12
+
13
+ dirs.each do |dir|
14
+ config.update(load_file("#{dir}/config.yml"))
15
+ config.update(load_file("#{dir}/env/#{env}.yml"))
16
+
17
+ loaded = [
18
+ File.expand_path("config.yml", dir),
19
+ File.expand_path("env/#{env}.yml", dir)
20
+ ]
21
+
22
+ %w[
23
+ *.yml
24
+ **/*.yml
25
+ ].each do |pattern|
26
+ Dir[File.join(dir, pattern)].each do |file|
27
+
28
+ path = File.expand_path(file, dir)
29
+ next if loaded.include?(path)
30
+ loaded << path
31
+
32
+ key = File.basename(file, '.yml')
33
+ key_config = load_file(file)
34
+ key_config_keys = key_config.keys.map(&:to_s)
35
+
36
+ config[key] = if key_config_keys.include?(config[:environment])
37
+ # current environment found, use it
38
+ key_config[config[:environment]]
39
+ else
40
+ if RocketIO::ENVIRONMENTS.keys.find {|k| key_config_keys.include?(k)}
41
+ # there are some environment(s), but current one is missing, so set current environment to nil
42
+ nil
43
+ else
44
+ # there are no environments, so this config is available on any environment
45
+ key_config
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def config.method_missing key
53
+ self[key]
54
+ end
55
+
56
+ config
57
+ end
58
+
59
+ def load_file file
60
+ RocketIO.indifferent_params(YAML.load(File.read(file)) || {})
61
+ end
62
+ end
63
+ end
data/app/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "version": "0.0.0",
4
4
  "description": "...",
5
5
  "devDependencies": {
6
- "appril": ">= 0.5.4",
6
+ "appril": ">= 0.5.6",
7
7
  "appril-alert": ">= 0.0.5",
8
8
  "appril-polyfills": ">= 0.0.2",
9
9
  "appril-url": ">= 0.0.5",
@@ -1,5 +1,5 @@
1
1
  module Appril
2
2
  class CLI
3
- VERSION = '0.2.7'.freeze
3
+ VERSION = '0.2.8'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appril-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Slee Woo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-15 00:00:00.000000000 Z
11
+ date: 2016-08-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Appril CLI
14
14
  email:
@@ -27,7 +27,13 @@ files:
27
27
  - app/base/app.js
28
28
  - app/base/assets/app.css
29
29
  - app/base/boot.rb
30
- - app/base/component.js
30
+ - app/base/bootstrap/api_callbacks.js
31
+ - app/base/bootstrap/component.js
32
+ - app/base/bootstrap/components.js
33
+ - app/base/bootstrap/router.js
34
+ - app/base/bootstrap/rtcp.js
35
+ - app/base/bootstrap/store.js
36
+ - app/base/bootstrap/vue_plugins.js
31
37
  - app/base/components/base_controller.rb
32
38
  - app/base/components/index/index.js
33
39
  - app/base/components/index/server.rb
@@ -38,7 +44,7 @@ files:
38
44
  - app/base/helpers/user.rb
39
45
  - app/base/load.rb
40
46
  - app/base/models/base_model.rb
41
- - app/base/store/modules.js
47
+ - app/base/store/components.js
42
48
  - app/base/store/mutations.js
43
49
  - app/base/store/state.js
44
50
  - app/base/templates/layout.liquid
@@ -55,6 +61,7 @@ files:
55
61
  - app/core/generate_configs.rb
56
62
  - app/core/load.rb
57
63
  - app/core/load_components.rb
64
+ - app/core/load_configs.rb
58
65
  - app/core/load_helpers.rb
59
66
  - app/core/load_models.rb
60
67
  - app/generators/_component/index.js
@@ -114,5 +121,5 @@ rubyforge_project:
114
121
  rubygems_version: 2.5.1
115
122
  signing_key:
116
123
  specification_version: 4
117
- summary: '["appril-cli-0.2.7", "Appril CLI"]'
124
+ summary: '["appril-cli-0.2.8", "Appril CLI"]'
118
125
  test_files: []
File without changes