ki 0.4.5 → 0.4.6

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: 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'