r_kit 0.3.2 → 0.4.2

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: 37ae0ce25844d771e435d1448bb7b18733cbec45
4
- data.tar.gz: 900e39cc2b92494cedbbdce9f58556622df4da8b
3
+ metadata.gz: d98f71dcaea265f716ff792fad147279f44b4287
4
+ data.tar.gz: 217d736a30a4f845b3d976b1c2c2ca1fbbb7df6b
5
5
  SHA512:
6
- metadata.gz: 1d7db4ae33a413c6c2b5582b041f16fd151c32d3219da1ea70a802f6a2c9abe34a9c216b4aa690731d97d99d9f00ac2e3deb21fd531abf0768cc9d2371115275
7
- data.tar.gz: 7fee02dc77b0845b938d2dabb911752cbd51a950dfe2767bbbf562369c804e912da7189dc32c7518646e83df863899a6662f59620d872fde24fa5653b12b3a4a
6
+ metadata.gz: 1ecb5dd37f794116e6128d7376b8ede61fb06e6d1f4cb41aa4285d894581d472cf0655477108841299b37a936bd2eadcf001f08eb46b7eb104002b1ffe3e6782
7
+ data.tar.gz: f5da4ecd90a62e5256d531a2a5fad1b543478bfb7a0c8116c12624af626a19258ea773176df1ae401e61d081785ea21c5543c5cca2fbfc858b143f2e7d2e2a7f
@@ -0,0 +1,18 @@
1
+ module RKit::ActiveRecordUtility::ActiveRecordExtend
2
+
3
+ RKit::ActiveRecordUtility::UTILITIES.each do |utility, method_name|
4
+
5
+ define_method method_name do
6
+ RKit::ActiveRecordUtility::Utility.const_get(utility.classify).new(self, method: __method__).interfere
7
+ end
8
+
9
+ end
10
+
11
+ def interfered? utility
12
+ RKit::ActiveRecordUtility::Utility.const_get(utility.classify).interfered? model_klass
13
+ rescue NameError
14
+ false
15
+ end
16
+
17
+ ActiveRecord::Base.extend self
18
+ end
@@ -0,0 +1,9 @@
1
+ class DatabaseSchemaError < StandardError
2
+ def initialize base, method:;
3
+ super %Q{
4
+ WARNING - You tried to use the '#{ method }' DSL on '#{ base }',
5
+ You may want to create a 'tag' column first.
6
+ To do so, please refer to the 'RKit::ActiveRecordUtlity' documentation.
7
+ }
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ class RKit::ActiveRecordUtility::Utility::Tag < RKit::ActiveRecordUtility::Utility
2
+
3
+ def can_interfere?
4
+ base.table_exists? && base.column_names.include?("tag")
5
+ end
6
+
7
+ def interfere!
8
+ base.validates_presence_of :tag
9
+ base.validates_uniqueness_of :tag
10
+
11
+ base.send :define_method, :to_param, ->{ tag }
12
+ base.send :define_singleton_method, :tagged, ->(tag){ find_by tag: tag }
13
+ end
14
+ end
@@ -0,0 +1,53 @@
1
+ class RKit::ActiveRecordUtility::Utility
2
+
3
+ attr_accessor :base, :method
4
+
5
+ def initialize base, method:;
6
+ @base = base
7
+ @method = method
8
+ end
9
+
10
+
11
+ def interfere
12
+ if can_interfere?
13
+ interfere!
14
+ interfered!
15
+ else
16
+ raise DatabaseSchemaError.new(base, method: method) unless running_script? /^rake db:/
17
+ end
18
+ end
19
+
20
+
21
+ # TODO: private/protected ?
22
+ def can_interfere?
23
+ raise NotImplementedError, 'Subclasses must implement this method'
24
+ end
25
+
26
+ def interfere!
27
+ raise NotImplementedError, 'Subclasses must implement this method'
28
+ end
29
+
30
+ def interfered!
31
+ __class__.interfered base
32
+ end
33
+
34
+
35
+ module SingletonInheritance
36
+ def self.extended base
37
+ base.instance_variable_set :@extended, []
38
+ end
39
+
40
+ def interfered? base
41
+ @extended.include? base
42
+ end
43
+
44
+ def interfered base
45
+ @extended << base
46
+ end
47
+ end
48
+
49
+ def self.inherited(subclass)
50
+ subclass.extend SingletonInheritance
51
+ super
52
+ end
53
+ end
@@ -0,0 +1,15 @@
1
+ class RKit::ActiveRecordUtility
2
+ dependency :utilities
3
+
4
+ load_path __FILE__, 'active_record_extend.rb'
5
+ load_path __FILE__, 'database_schema_error.rb'
6
+ load_path __FILE__, 'utility.rb'
7
+
8
+ UTILITIES = {
9
+ tag: :acts_as_taggables,
10
+ }
11
+
12
+ UTILITIES.each do |utility, _|
13
+ load_path __FILE__, "utility/#{ utility }.rb"
14
+ end
15
+ end
@@ -34,7 +34,7 @@ module Kernel
34
34
  end
35
35
 
36
36
 
37
- if RubyVM.const_defined? "DebugInspector"
37
+ if RubyVM.const_defined? 'DebugInspector'
38
38
  alias :backtrace :_backtrace_from_ruby_vm
39
39
  else
40
40
  require 'continuation'
@@ -1,4 +1,4 @@
1
- class RKit::Backtrace < RKit::Core
1
+ class RKit::Backtrace
2
2
 
3
3
  load_path __FILE__, 'kernel_extend.rb'
4
4
 
@@ -19,7 +19,7 @@ class RKit::Core::Configurer
19
19
 
20
20
 
21
21
  def config *name, default
22
- _config.deep_merge! [*name, default].reverse.inject{ |nested, key| Hash[key, nested] }
22
+ _config.deep_merge! [*name, default].reverse.reduce{ |nested, key| Hash[key, nested] }
23
23
  end
24
24
 
25
25
  def load_config! config_options
@@ -33,7 +33,7 @@ class RKit::Core::Configurer
33
33
 
34
34
  def alias *name, old_name
35
35
  new_name = name.pop
36
- config = name.inject(_config){ |config, nested| config = config[nested] }
36
+ config = name.reduce(_config){ |config, nested| config = config[nested] }
37
37
 
38
38
  config[new_name] = config[old_name] if config[new_name].blank?
39
39
  end
@@ -47,7 +47,7 @@ class RKit::Core::Configurer
47
47
 
48
48
  def load_public_accessor!
49
49
  _base.const_set :CONFIG, OpenStruct.new(_config)
50
- _base.define_singleton_method("config"){ self::CONFIG }
50
+ _base.define_singleton_method('config'){ self::CONFIG }
51
51
  end
52
52
 
53
53
 
@@ -26,7 +26,7 @@ class RKit::Core::Engineer
26
26
  def load_sprockets!
27
27
  digest = _base.digest
28
28
  sprockets_extend = Module.new do
29
- define_method "digest" do
29
+ define_method 'digest' do
30
30
  super().update(digest)
31
31
  end
32
32
  end
@@ -3,6 +3,15 @@ class RKit::Core::Loader
3
3
 
4
4
  @@loaded = []
5
5
 
6
+ def self.loaded
7
+ @@loaded.map{ |name| name.demodulize.underscore }
8
+ end
9
+
10
+ def self.loaded? name
11
+ @@loaded.include? name
12
+ end
13
+
14
+
6
15
  def initialize base
7
16
  @_base = base
8
17
  @load_paths = []
@@ -11,7 +20,7 @@ class RKit::Core::Loader
11
20
 
12
21
 
13
22
  def dependency dependency
14
- dependencies << Dependency.new(_base, str: dependency)
23
+ dependencies << Dependency.new(_base, service: dependency)
15
24
  end
16
25
 
17
26
  def dependencies!
@@ -32,7 +41,7 @@ class RKit::Core::Loader
32
41
 
33
42
 
34
43
  def loaded!
35
- @@loaded << _base.name.demodulize.underscore
44
+ @@loaded << _base.name
36
45
  end
37
46
 
38
47
 
@@ -102,26 +111,25 @@ class RKit::Core::Loader
102
111
  end
103
112
 
104
113
 
105
- class Dependency < String
106
- attr_accessor :_base
107
-
108
- def initialize base, str: ""
109
- @_base = base
114
+ class Dependency
115
+ attr_accessor :base, :service
110
116
 
111
- super str.to_s
117
+ def initialize base, service:;
118
+ @base = base
119
+ @service = RKit.const_get(service.to_s.classify)
112
120
  end
113
121
 
114
122
  def should_load?
115
- !RKit::Core::Loader.class_variable_get(:@@loaded).include? self
123
+ !RKit::Core::Loader.class_variable_get(:@@loaded).include? @service.name
116
124
  end
117
125
 
118
126
  def dependency!
119
127
  warn %Q{
120
- WARNING - RKit::#{ classify } was implicitly loaded,
121
- As a dependency for #{ _base }.
128
+ WARNING - #{ @service.name } was implicitly loaded,
129
+ As a dependency for #{ base }.
122
130
  You may want to load it explicitly.
123
131
  }
124
- RKit.const_get(classify).load
132
+ @service.load
125
133
  end
126
134
 
127
135
  def load!
data/lib/r_kit/core.rb CHANGED
@@ -7,8 +7,8 @@ class RKit::Core
7
7
  @_load = Loader.new self
8
8
  end
9
9
 
10
- def inherited base
11
- base.init!
10
+ def inherited subclass
11
+ subclass.init!
12
12
  super
13
13
  end
14
14
 
@@ -31,16 +31,25 @@ class RKit::Core
31
31
  to: :@_load
32
32
 
33
33
 
34
- def load config = {}
34
+ def loaded?
35
+ RKit::Core::Loader.loaded? name
36
+ end
37
+
38
+ def load! config
39
+ require "#{ name.underscore }.rb"
40
+
35
41
  @_config.load! config
36
42
  @_engine.load!
37
43
  @_load.load!
38
44
  end
39
45
 
46
+ def load config = {}
47
+ load! config if !loaded?
48
+ end
40
49
 
41
50
 
42
51
  def inspect
43
- "#{ name } config_w/#{ @_config.inspect }"
52
+ "#{ name } config_w/#{ @_config.inspect } loaded/#{ loaded? }"
44
53
  # TODO: add link to doc
45
54
  end
46
55
 
@@ -54,9 +63,4 @@ class RKit::Core
54
63
  require 'r_kit/core/engineer.rb'
55
64
  require 'r_kit/core/loader.rb'
56
65
 
57
- require 'r_kit/backtrace.rb'
58
- require 'r_kit/css.rb'
59
- require 'r_kit/decorator.rb'
60
- require 'r_kit/grid.rb'
61
-
62
66
  end
@@ -1,5 +1,9 @@
1
+ html,
2
+ body{
3
+ height: 100%;
4
+ }
5
+
1
6
  html{
2
- min-height: 100%;
3
7
  font: 16px "Helvetica Neue","Helvetica","Arial", sans-serif;
4
8
  -webkit-transform: translateZ(0); /* using GPU for render - webkit only */
5
9
  }
@@ -8,5 +12,8 @@ body{
8
12
  background-color: background-color();
9
13
  color: text-color();
10
14
 
11
- margin: 0 0 1em;
15
+ padding-top: 1em;
16
+ margin: 0 {
17
+ top: -1em;
18
+ };
12
19
  }
data/lib/r_kit/css.rb CHANGED
@@ -1,4 +1,4 @@
1
- class RKit::Css < RKit::Core
1
+ class RKit::Css
2
2
 
3
3
  with_engine __FILE__
4
4
  with_sprockets __FILE__
@@ -6,7 +6,7 @@ module RKit::Decorator::ActiveRecordExtend
6
6
  define_instance_methods
7
7
  end
8
8
 
9
-
9
+ # TODO: all the methods below this comment should be private, even more, they should be in a "decorator_finder_creator_definer", and not included in active_record. SRP guys !
10
10
  def define_decorator arg
11
11
  @decorator_klass = decorator_klass_from arg
12
12
  end
@@ -24,12 +24,17 @@ module RKit::Decorator::ActiveRecordExtend
24
24
  if base <=> RKit::Decorator::Base
25
25
  base
26
26
  else
27
- base.send :include, Module.new{ include refine(RKit::Decorator::Base){} }
27
+ base.tap do |base|
28
+ base.send :include, Module.new{ include refine(RKit::Decorator::Base){} }
29
+ base.extend Module.new{ include refine(RKit::Decorator::Base.singleton_class){} }
30
+
31
+ RKit::Decorator::Base.inherited base
32
+ end
28
33
  end
29
34
  end
30
35
 
31
36
  def decorator_klass_from_module mod
32
- namespace = (mod.name.deconstantize.presence || "Object").constantize
37
+ namespace = (mod.name.deconstantize.presence || 'Object').constantize
33
38
  const_name = mod.name.demodulize
34
39
 
35
40
  namespace.send :remove_const, const_name
@@ -37,7 +42,7 @@ module RKit::Decorator::ActiveRecordExtend
37
42
  end
38
43
 
39
44
  def decorator_klass_from_proc block
40
- (name.deconstantize.presence || "Object")
45
+ (name.deconstantize.presence || 'Object')
41
46
  .constantize
42
47
  .const_set "#{ name.demodulize }Decorator", Class.new(RKit::Decorator::Base, &block)
43
48
  end
@@ -49,7 +54,7 @@ module RKit::Decorator::ActiveRecordExtend
49
54
 
50
55
 
51
56
  def define_instance_methods
52
- define_method "decorate" do |view_context: nil|
57
+ define_method 'decorate' do |view_context: nil|
53
58
  self.class.decorator_klass.new self, view_context: view_context
54
59
  end
55
60
  end
@@ -1,7 +1,17 @@
1
1
  require 'delegate'
2
2
 
3
3
  class RKit::Decorator::Base < SimpleDelegator
4
- alias :_obj :__getobj__
4
+ def self.decorator_name
5
+ name.demodulize.sub(/Decorator$/, '').underscore
6
+ end
7
+
8
+ def self.inherited subclass
9
+ subclass.class_eval do
10
+ alias :"#{ decorator_name }" :__getobj__
11
+ end
12
+ super
13
+ end
14
+
5
15
 
6
16
  def initialize obj, view_context: nil
7
17
  @_view_context = view_context
@@ -1,4 +1,4 @@
1
- class RKit::Decorator < RKit::Core
1
+ class RKit::Decorator
2
2
 
3
3
  dependency :backtrace
4
4
 
@@ -16,7 +16,7 @@ class RKit::Grid::Base
16
16
  end
17
17
 
18
18
  def _attributes
19
- _binding.col_attributes
19
+ _binding.col_attributes object
20
20
  end
21
21
 
22
22
  def capture
@@ -7,7 +7,7 @@ class RKit::Grid::Base
7
7
  end
8
8
 
9
9
  def required_bindings
10
- raise NotImplemented, "Subclasses must implement this method"
10
+ raise NotImplementedError, 'Subclasses must implement this method'
11
11
  end
12
12
 
13
13
 
@@ -16,7 +16,7 @@ class RKit::Grid::Base
16
16
  end
17
17
 
18
18
  def _attributes
19
- raise NotImplemented, "Subclasses must implement this method"
19
+ raise NotImplementedError, 'Subclasses must implement this method'
20
20
  end
21
21
 
22
22
 
@@ -38,7 +38,7 @@ class RKit::Grid::Base
38
38
 
39
39
 
40
40
  def capture
41
- raise NotImplemented, "Subclasses must implement this method"
41
+ raise NotImplementedError, 'Subclasses must implement this method'
42
42
  end
43
43
 
44
44
  def to_s
@@ -14,7 +14,7 @@ class RKit::Grid::Binding
14
14
 
15
15
  def block= block
16
16
  if block
17
- @view_context = block.binding.eval("self")
17
+ @view_context = block.binding.eval('self')
18
18
  @block = block
19
19
  end
20
20
  end
@@ -51,29 +51,38 @@ class RKit::Grid::Binding
51
51
  end
52
52
 
53
53
 
54
+ # TODO: Allow to take only a proc (so not a hash)
55
+ # TODO: OR a single symbol (and we use that to send a method on the object)
56
+ # TODO: Tha last one can be replaced (or duplicated) by a "respond_to?" automatically triggered from here
54
57
  def attributes= attributes
55
58
  @attributes.merge!(attributes) do |key, old_value, new_value|
56
59
  Array.wrap(old_value) + Array.wrap(new_value)
57
60
  end
58
61
  end
59
62
 
60
- def attributes
61
- @computed ||= @attributes.each_with_object({}) do |(key, value), public_attributes|
62
- public_attributes[process(key)] = process(value)
63
+ # TODO: @computed need to be back, we compute what can be, the procs or methods will be calc each time
64
+ def attributes object = nil
65
+ #@computed ||=
66
+ @attributes.each_with_object({}) do |(key, value), public_attributes|
67
+ public_attributes[process(key, object)] = process(value, object)
63
68
  end
64
69
  end
65
70
 
66
71
 
67
- def process value
72
+ def process value, object = nil
68
73
  case value
69
74
  when Proc
70
- process(value.call)
75
+ proc_value = case value.arity
76
+ when 1 then value.call(object)
77
+ else value.call
78
+ end
79
+ process(proc_value, object)
71
80
  when Array
72
- value.map{ |unique_value| process(unique_value) }.join(" ")
81
+ value.map{ |unique_value| process(unique_value, object) }.join(' ')
73
82
  when String, Symbol
74
83
  value.to_s.dasherize
75
84
  else
76
- raise ArgumentError, "Must be Array, Proc or String/Symbol"
85
+ raise ArgumentError, 'Must be Array, Proc or String/Symbol'
77
86
  end
78
87
  end
79
88
  end
data/lib/r_kit/grid.rb CHANGED
@@ -1,4 +1,4 @@
1
- class RKit::Grid < RKit::Core
1
+ class RKit::Grid
2
2
 
3
3
  with_engine __FILE__
4
4
  with_sprockets __FILE__
@@ -18,7 +18,7 @@ class RKit::Grid < RKit::Core
18
18
  alias_config :kernel_extend, :extends
19
19
 
20
20
 
21
- config :base_width, [0.75, ["rem"]]
21
+ config :base_width, [0.75, ['rem']]
22
22
  config :col_size, 3
23
23
 
24
24
  end
@@ -0,0 +1,7 @@
1
+ class Array
2
+
3
+ def include_all? values
4
+ (self & Array(values)).size == size
5
+ end
6
+
7
+ end
@@ -0,0 +1,8 @@
1
+ class Hash
2
+
3
+ # TODO: for doc - this is usefull to fill an hash wich have a default proc
4
+ def keys= keys
5
+ Array(keys).each &method(:[])
6
+ end
7
+
8
+ end
@@ -0,0 +1,19 @@
1
+ module Kernel
2
+
3
+ def __class__
4
+ self.class
5
+ end
6
+
7
+ def __namespace__
8
+ (__class__.name.deconstantize.presence || 'Object').constantize
9
+ end
10
+
11
+
12
+ def running_script
13
+ "#{ File.basename($0) } #{ ARGV.join " " }"
14
+ end
15
+
16
+ def running_script? script
17
+ Regexp.new(script) =~ running_script
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ class Symbol
2
+ delegate :classify, to: :to_s
3
+ end
@@ -0,0 +1,16 @@
1
+ class RKit::Utility
2
+ UTILITIES = %i{array hash kernel symbol}
3
+
4
+
5
+ config :extends, true
6
+
7
+ UTILITIES.each do |utility|
8
+ alias_config "#{ utility }_extend", :extends
9
+ load_path __FILE__, "#{ utility }_extend.rb", if: "#{ utility }_extend"
10
+ end
11
+
12
+ # TODO: class_extend: to_module, ancestor=
13
+ # TODO: module_extend: to_class
14
+ # TODO: enumerable_extend/or-array_extend: with_indifferent_access
15
+ # TODO: get back some code from hash_extend && array_extend gems
16
+ end
data/lib/r_kit/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RKit
2
- VERSION = "0.3.2"
2
+ VERSION = '0.4.2'
3
3
  end
data/lib/r_kit.rb CHANGED
@@ -37,6 +37,15 @@ module RKit
37
37
  extend self
38
38
 
39
39
 
40
- require "r_kit/core"
41
- require "r_kit/version"
40
+ require 'r_kit/core'
41
+ require 'r_kit/version'
42
+
43
+
44
+ Dir[File.join(File.dirname(__FILE__), "r_kit", "*.rb")].each do |file|
45
+ basename = File.basename file, ".rb"
46
+
47
+ if ["core", "version"].exclude? basename
48
+ const_set basename.classify, Class.new(RKit::Core){}
49
+ end
50
+ end
42
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Petrachi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rails tools box
14
14
  email:
@@ -23,6 +23,11 @@ files:
23
23
  - README.md
24
24
  - Rakefile
25
25
  - lib/r_kit.rb
26
+ - lib/r_kit/active_record_utility.rb
27
+ - lib/r_kit/active_record_utility/active_record_extend.rb
28
+ - lib/r_kit/active_record_utility/database_schema_error.rb
29
+ - lib/r_kit/active_record_utility/utility.rb
30
+ - lib/r_kit/active_record_utility/utility/tag.rb
26
31
  - lib/r_kit/backtrace.rb
27
32
  - lib/r_kit/backtrace/kernel_extend.rb
28
33
  - lib/r_kit/core.rb
@@ -70,6 +75,11 @@ files:
70
75
  - lib/r_kit/grid/lib/assets/stylesheets/r_kit/mixins/gris.scss
71
76
  - lib/r_kit/grid/lib/assets/stylesheets/r_kit/variables/grid.scss
72
77
  - lib/r_kit/grid/sass_extend.rb
78
+ - lib/r_kit/utility.rb
79
+ - lib/r_kit/utility/array_extend.rb
80
+ - lib/r_kit/utility/hash_extend.rb
81
+ - lib/r_kit/utility/kernel_extend.rb
82
+ - lib/r_kit/utility/symbol_extend.rb
73
83
  - lib/r_kit/version.rb
74
84
  - r_kit.gemspec
75
85
  homepage: https://github.com/petrachi/r_kit