ki 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1220ce293d5e44656dcd0de47a4dead7235fecd2
4
- data.tar.gz: 5304aed72ce2b943dbd1a29e9fab5c030876351b
3
+ metadata.gz: 15b4a578063b70b747d42d5f0326bcd79865351a
4
+ data.tar.gz: 942f6272d7b8a256cc4c469f6fa4ac82d6c4b82c
5
5
  SHA512:
6
- metadata.gz: 79ebf8cb49cbb020aaf8af5e5858bcd89b3d2188eaf747ea7db8434630f597274fcf2eec357e508973b4a617d08d5dfaa1f6d89e386012d92e493159060842ed
7
- data.tar.gz: fbe87bdd7e91000f2f00ad50e442fe56a4b79ff6019b90c3e2b71b80056fcb74618d985aa1d16e593921512b09a9fb9792fdd875a66901e50588fc58bbec1750
6
+ metadata.gz: 9ab148975be190e176f344ecbfc7ece85d79dc728730e7bc30189099ce770c054ac20fef8500ca69d409d0c9e333c58195dd0f932b4e7ad079f79c9d3b6550c4
7
+ data.tar.gz: b649dad7d5ce844da1da67df28f4e88a92702705dcb68fa123587dc64ee7297fd6b000e2ec350dd2ba4d4e069a0330b9cc960bfee1050fb6c1dadb00a3eb158b
data/.gitignore CHANGED
@@ -9,5 +9,6 @@
9
9
 
10
10
  spec/examples/*/tmp
11
11
  spec/examples/*/log
12
+ spec/examples/*/Gemfile.lock
12
13
 
13
14
  /doc/*
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ki (0.4.5)
4
+ ki (0.4.6)
5
5
  bson_ext
6
6
  bundler (~> 1.5)
7
7
  coffee-script
8
8
  haml
9
9
  mongo
10
10
  rack
11
+ rack-cors
11
12
  rack-parser
12
13
  sass
13
14
  thor
@@ -15,9 +16,8 @@ PATH
15
16
  GEM
16
17
  remote: https://rubygems.org/
17
18
  specs:
18
- bson (1.9.2)
19
- bson_ext (1.9.2)
20
- bson (~> 1.9.2)
19
+ bson (3.0.1)
20
+ bson_ext (1.5.1)
21
21
  celluloid (0.15.2)
22
22
  timers (~> 1.1.0)
23
23
  celluloid-io (0.15.0)
@@ -26,13 +26,13 @@ GEM
26
26
  codeclimate-test-reporter (0.4.7)
27
27
  simplecov (>= 0.7.1, < 1.0.0)
28
28
  coderay (1.1.0)
29
- coffee-script (2.2.0)
29
+ coffee-script (2.4.1)
30
30
  coffee-script-source
31
31
  execjs
32
- coffee-script-source (1.7.0)
32
+ coffee-script-source (1.9.1.1)
33
33
  diff-lcs (1.2.5)
34
34
  docile (1.1.5)
35
- execjs (2.0.2)
35
+ execjs (2.5.2)
36
36
  ffi (1.9.3)
37
37
  formatador (0.2.4)
38
38
  guard (2.5.1)
@@ -44,7 +44,7 @@ GEM
44
44
  guard-rspec (4.2.8)
45
45
  guard (~> 2.1)
46
46
  rspec (>= 2.14, < 4.0)
47
- haml (4.0.5)
47
+ haml (4.0.6)
48
48
  tilt
49
49
  listen (2.7.1)
50
50
  celluloid (>= 0.15.2)
@@ -53,8 +53,8 @@ GEM
53
53
  rb-inotify (>= 0.9)
54
54
  lumberjack (1.0.5)
55
55
  method_source (0.8.2)
56
- mongo (1.9.2)
57
- bson (~> 1.9.2)
56
+ mongo (2.0.2)
57
+ bson (~> 3.0)
58
58
  multi_json (1.11.0)
59
59
  nio4r (1.0.0)
60
60
  pry (0.9.12.6)
@@ -62,7 +62,8 @@ GEM
62
62
  method_source (~> 0.8)
63
63
  slop (~> 3.4)
64
64
  rack (1.5.2)
65
- rack-parser (0.6.0)
65
+ rack-cors (0.4.0)
66
+ rack-parser (0.6.1)
66
67
  rack
67
68
  rack-test (0.6.2)
68
69
  rack (>= 1.0)
@@ -78,7 +79,7 @@ GEM
78
79
  rspec-expectations (2.14.5)
79
80
  diff-lcs (>= 1.1.3, < 2.0)
80
81
  rspec-mocks (2.14.6)
81
- sass (3.3.4)
82
+ sass (3.4.13)
82
83
  simplecov (0.9.2)
83
84
  docile (~> 1.1.0)
84
85
  multi_json (~> 1.0)
data/README.md CHANGED
@@ -82,6 +82,13 @@ ki server
82
82
  *ki server* is the command which starts the webserver. By default it starts on
83
83
  port 1337.
84
84
 
85
+ For an interactive environment, you can run the *console* command. It starts a
86
+ irb session with your application context already loaded.
87
+
88
+ ```shell
89
+ ki console
90
+ ```
91
+
85
92
  ### Adding a view
86
93
 
87
94
  A view is a html page. By default, a view called 'index.haml' is created for
data/ki.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_runtime_dependency "coffee-script"
28
28
  spec.add_runtime_dependency "mongo"
29
29
  spec.add_runtime_dependency "bson_ext"
30
+ spec.add_runtime_dependency "rack-cors"
30
31
 
31
32
  spec.add_development_dependency "rake"
32
33
  spec.add_development_dependency "rack-test"
@@ -10,6 +10,10 @@ module Ki
10
10
  path == '/instadoc'
11
11
  end
12
12
 
13
+ def admin?
14
+ path == '/instadmin'
15
+ end
16
+
13
17
  def json?
14
18
  content_type == 'application/json' || format_of(path) == 'json'
15
19
  end
data/lib/ki/helpers.rb CHANGED
@@ -1,51 +1,3 @@
1
- class String
2
- # Converts a string to a class
3
- #
4
- # ==== Examples
5
- #
6
- # class User
7
- # end
8
- #
9
- # "user".to_class == User
10
- #
11
- def to_class
12
- chain = self.split "::"
13
- klass = Kernel
14
- chain.each do |klass_string|
15
- klass = klass.const_get klass_string.split('_').map{|w| w.capitalize}.join('')
16
- end
17
- klass.is_a?(Class) ? klass : nil
18
- rescue NameError
19
- nil
20
- end
21
- end
22
-
23
- class Array
24
- def stringify_ids
25
- self.collect do |e|
26
- if e['_id']
27
- e['id'] = e['_id'].to_s
28
- e.delete('_id')
29
- end
30
- if e[:_id]
31
- e['id'] = e[:_id].to_s
32
- e.delete(:_id)
33
- end
34
- e
35
- end
36
- end
37
-
38
- def present?
39
- !nil? && !empty?
40
- end
41
- end
42
-
43
- class NilClass
44
- def present?
45
- false
46
- end
47
- end
48
-
49
1
  module Ki
50
2
  module Helpers
51
3
  include Middleware::Helpers::View
data/lib/ki/ki.rb CHANGED
@@ -13,8 +13,7 @@ module Ki
13
13
  VIEWS_PATH = 'views'
14
14
 
15
15
  def initialize
16
- KiConfig.instance.read environment
17
- Orm::Db.instance.establish_connection
16
+ Ki.connect
18
17
 
19
18
  @app = Rack::Builder.new do
20
19
  use Middleware::InitMiddleware
@@ -23,12 +22,23 @@ module Ki
23
22
  KiConfig.instance.middleware.each do |middleware|
24
23
  use middleware
25
24
  end
25
+ use Rack::Cors do
26
+ allow do
27
+ origins '*'
28
+ resource '*', headers: :any, methods: :any
29
+ end
30
+ end
26
31
  run KiApp.new
27
32
  end
28
33
  end
29
34
 
30
- def environment
31
- ENV['RACK_ENV']
35
+ def self.connect
36
+ KiConfig.instance.read Ki.environment
37
+ Orm::Db.instance.establish_connection
38
+ end
39
+
40
+ def self.environment
41
+ ENV['RACK_ENV'] || 'development'
32
42
  end
33
43
 
34
44
  def call env
data/lib/ki/ki_cli.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'thor'
2
2
 
3
+ require 'ki/utils/extra_irb'
4
+
3
5
  module Ki
4
6
  module Cli #:nodoc:
5
7
  class KiGenerator < Thor::Group #:nodoc:
@@ -8,6 +10,13 @@ module Ki
8
10
  def self.source_root
9
11
  File.join(File.dirname(__FILE__), '..', '..')
10
12
  end
13
+
14
+ def self.requies_ki_directory
15
+ unless File.exists? 'config.ru'
16
+ say "Working directory should be a ki app."
17
+ exit 3
18
+ end
19
+ end
11
20
  end
12
21
 
13
22
  class AppGenerator < KiGenerator
@@ -50,18 +59,24 @@ module Ki
50
59
  desc "Starts the ki server"
51
60
 
52
61
  def start_server
53
- unless File.exists? 'config.ru'
54
- say "Working directory should be a ki app."
55
- exit 3
56
- end
57
-
62
+ KiGenerator.requies_ki_directory
58
63
  `bundle exec rackup -o 0.0.0.0 -p #{port}`
59
64
  end
60
65
  end
61
66
 
67
+ class DevConsole < KiGenerator
68
+ def start_console
69
+ KiGenerator.requies_ki_directory
70
+ require './app'
71
+ Ki.connect
72
+ IRB.start_session(nil)
73
+ end
74
+ end
75
+
62
76
  class Main < Thor
63
77
  register AppGenerator, :new, 'new [APP_NAME]', 'generate a new app'
64
78
  register DevServer, :server, 'server [PORT]', "start the ki server. Default port is #{DevServer::DEFAULT_PORT}"
79
+ register DevConsole, :console, 'console', 'start the console'
65
80
  end
66
81
  end
67
82
  end
@@ -0,0 +1,13 @@
1
+ module Ki
2
+ module Middleware
3
+ class AdminInterfaceGenerator < DocGenerator
4
+ def custom_view_path
5
+ File.join(File.dirname(__FILE__), '..', 'views', 'instadmin.haml')
6
+ end
7
+
8
+ def custom_check req
9
+ req.admin?
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,18 +5,22 @@ module Ki
5
5
 
6
6
  def call env
7
7
  req = BaseRequest.new env
8
- if req.doc?
8
+ if custom_check(req)
9
9
  if view_exists?(req)
10
10
  render_haml view_path(req)
11
11
  else
12
- render_haml doc_view_path(req)
12
+ render_haml custom_view_path
13
13
  end
14
14
  else
15
15
  @app.call env
16
16
  end
17
17
  end
18
18
 
19
- def doc_view_path path
19
+ def custom_check req
20
+ req.doc?
21
+ end
22
+
23
+ def custom_view_path
20
24
  File.join(File.dirname(__FILE__), '..', 'views', 'instadoc.haml')
21
25
  end
22
26
  end
data/lib/ki/orm.rb CHANGED
@@ -40,6 +40,15 @@ module Ki
40
40
  self
41
41
  end
42
42
 
43
+ def connection_string
44
+ db = KiConfig.instance.database
45
+ if ENV["MONGODB_URI"]
46
+ ENV["MONGODB_URI"]
47
+ else
48
+ "#{db['host']}:#{db['port']}/#{db['name']}"
49
+ end
50
+ end
51
+
43
52
  # ==== Returns
44
53
  #
45
54
  # An array of all the collection names in the database.
File without changes
@@ -0,0 +1,25 @@
1
+ # http://jasonroelofs.com/2009/04/02/embedding-irb-into-your-ruby-application/
2
+ require 'irb'
3
+
4
+ module IRB # :nodoc:
5
+ def self.start_session(binding)
6
+ unless @__initialized
7
+ args = ARGV
8
+ ARGV.replace(ARGV.dup)
9
+ IRB.setup(nil)
10
+ ARGV.replace(args)
11
+ @__initialized = true
12
+ end
13
+
14
+ workspace = WorkSpace.new(binding)
15
+
16
+ irb = Irb.new(workspace)
17
+
18
+ @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
19
+ @CONF[:MAIN_CONTEXT] = irb.context
20
+
21
+ catch(:IRB_EXIT) do
22
+ irb.eval_input
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ class String
2
+ # Converts a string to a class
3
+ #
4
+ # ==== Examples
5
+ #
6
+ # class User
7
+ # end
8
+ #
9
+ # "user".to_class == User
10
+ #
11
+ def to_class
12
+ chain = self.split "::"
13
+ klass = Kernel
14
+ chain.each do |klass_string|
15
+ klass = klass.const_get klass_string.split('_').map{|w| w.capitalize}.join('')
16
+ end
17
+ klass.is_a?(Class) ? klass : nil
18
+ rescue NameError
19
+ nil
20
+ end
21
+ end
22
+
23
+ class Array
24
+ def stringify_ids
25
+ self.collect do |e|
26
+ if e['_id']
27
+ e['id'] = e['_id'].to_s
28
+ e.delete('_id')
29
+ end
30
+ if e[:_id]
31
+ e['id'] = e[:_id].to_s
32
+ e.delete(:_id)
33
+ end
34
+ e
35
+ end
36
+ end
37
+
38
+ def present?
39
+ !nil? && !empty?
40
+ end
41
+ end
42
+
43
+ class NilClass
44
+ def present?
45
+ false
46
+ end
47
+ end
data/lib/ki/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Ki
2
- VERSION = "0.4.5"
1
+ module Ki
2
+ VERSION = "0.4.6"
3
3
  end
@@ -0,0 +1,5 @@
1
+ %h1 Ki InstAdmin
2
+
3
+ %p
4
+ Connected to
5
+ = Ki::Orm::Db.instance.connection_string
data/lib/ki.rb CHANGED
@@ -1,15 +1,20 @@
1
+ # ruby stdlib
1
2
  require 'yaml'
2
3
  require 'uri'
3
4
 
5
+ # gems
4
6
  require 'rack'
5
7
  require 'rack/parser'
8
+ require 'rack/cors'
6
9
  require 'haml'
7
10
  require 'sass'
8
11
  require 'coffee-script'
9
12
  require 'mongo'
10
13
 
11
-
12
- require 'ki/api_error'
14
+ # code
15
+ require 'ki/utils/api_error'
16
+ require 'ki/utils/extra_ruby'
17
+ require 'ki/utils/indifferent_hash'
13
18
 
14
19
  require 'ki/modules/query_interface'
15
20
  require 'ki/modules/restrictions'
@@ -19,11 +24,20 @@ require 'ki/modules/view_helper'
19
24
  require 'ki/modules/format_of'
20
25
  require 'ki/modules/public_file_helper'
21
26
 
22
- require 'ki/indifferent_hash'
27
+ require 'ki/middleware/base_middleware'
28
+ require 'ki/middleware/init_middleware'
29
+ require 'ki/middleware/api_handler'
30
+ require 'ki/middleware/public_file_server'
31
+ require 'ki/middleware/sass_compiler'
32
+ require 'ki/middleware/haml_compiler'
33
+ require 'ki/middleware/coffee_compiler'
34
+ require 'ki/middleware/doc_generator'
35
+ require 'ki/middleware/admin_interface_generator'
36
+
23
37
  require 'ki/ki_config'
24
38
  require 'ki/helpers'
25
39
  require 'ki/orm'
26
- require 'ki/middleware'
27
- require 'ki/ki'
28
40
  require 'ki/model'
29
41
  require 'ki/base_request'
42
+
43
+ require 'ki/ki'
@@ -8,6 +8,7 @@ test:
8
8
  middleware: [
9
9
  'ApiHandler',
10
10
  'DocGenerator',
11
+ 'AdminInterfaceGenerator',
11
12
  'CoffeeCompiler',
12
13
  'SassCompiler',
13
14
  'HamlCompiler',
@@ -21,14 +21,14 @@ describe Ki::Model do
21
21
  Foo.update('id' => id, 'hello' => 'universe')
22
22
  Foo.find(id).first['hello'].should == 'universe'
23
23
  Foo.delete(id)
24
- }.to change{Foo.count}.by 0
24
+ }.to change { Foo.count }.by 0
25
25
  end
26
26
 
27
27
  it 'should find or create' do
28
28
  expect {
29
- h = { 'time' => Time.now.to_i.to_s }
30
- r = Foo.find_or_create(h)
31
- r = Foo.find_or_create(h)
29
+ h = { time: Time.now.to_i.to_s, random: SecureRandom.uuid }
30
+ Foo.find_or_create(h)
31
+ Foo.find_or_create(h)
32
32
  }.to change { Foo.count }.by 1
33
33
  end
34
34
  end
@@ -9,6 +9,10 @@ describe Ki::Orm do
9
9
  @db.config['name'].should == 'np_test'
10
10
  end
11
11
 
12
+ it 'has a connection string' do
13
+ expect(@db.connection_string.class).to be String
14
+ end
15
+
12
16
  it 'should create a db object' do
13
17
  expect {
14
18
  oid = @db.insert 'foo', {hello: 'world'}
data/spec/util_spec.rb CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Ki do
4
4
  it 'should run in test env' do
5
- Ki::Ki.new.environment.should == 'test'
5
+ Ki::Ki.environment.should == 'test'
6
6
  end
7
7
 
8
8
  it 'should convert string to class corectly' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cristian Mircea Messel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2015-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rack-cors
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -229,14 +243,12 @@ files:
229
243
  - bin/ki
230
244
  - ki.gemspec
231
245
  - lib/ki.rb
232
- - lib/ki/api_error.rb
233
246
  - lib/ki/base_request.rb
234
247
  - lib/ki/helpers.rb
235
- - lib/ki/indifferent_hash.rb
236
248
  - lib/ki/ki.rb
237
249
  - lib/ki/ki_cli.rb
238
250
  - lib/ki/ki_config.rb
239
- - lib/ki/middleware.rb
251
+ - lib/ki/middleware/admin_interface_generator.rb
240
252
  - lib/ki/middleware/api_handler.rb
241
253
  - lib/ki/middleware/base_middleware.rb
242
254
  - lib/ki/middleware/coffee_compiler.rb
@@ -254,7 +266,12 @@ files:
254
266
  - lib/ki/modules/restrictions.rb
255
267
  - lib/ki/modules/view_helper.rb
256
268
  - lib/ki/orm.rb
269
+ - lib/ki/utils/api_error.rb
270
+ - lib/ki/utils/extra_irb.rb
271
+ - lib/ki/utils/extra_ruby.rb
272
+ - lib/ki/utils/indifferent_hash.rb
257
273
  - lib/ki/version.rb
274
+ - lib/ki/views/instadmin.haml
258
275
  - lib/ki/views/instadoc.haml
259
276
  - spec/config.yml.example
260
277
  - spec/examples/base/.ruby-gemset
data/lib/ki/middleware.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'ki/middleware/base_middleware'
2
-
3
- require 'ki/middleware/init_middleware'
4
- require 'ki/middleware/api_handler'
5
- require 'ki/middleware/public_file_server'
6
-
7
- require 'ki/middleware/sass_compiler'
8
- require 'ki/middleware/haml_compiler'
9
- require 'ki/middleware/coffee_compiler'
10
-
11
- require 'ki/middleware/doc_generator'