inherited_class_var 0.1.0 → 0.1.1

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: 1b3a4825303f3b5e5a3b941ce7a6c7fe45481b37
4
- data.tar.gz: 6353e89d09cae6c90675b82ebaec3c99aced9cf4
3
+ metadata.gz: 11b94c5852279a71dac8b6d886a9c15a536b9a8f
4
+ data.tar.gz: b2a9b2bc666ef7c34630363bd3d9ceaf98317e01
5
5
  SHA512:
6
- metadata.gz: 940ef48e70e3fcff95ccc8975ef7b8aa0c629738f4fc38fd184b4fa252f475247f4cbb844373d6995480d81c42c00e7a3ad9b2c87146d379073b1c07434224c1
7
- data.tar.gz: d29c1cf3e940b328c3f76d3860a645086200400be261f3c3034825bfc9f3137763a89020ec968606d1213c45729cc9490a8cdfb52068609452c53f6bed890534
6
+ metadata.gz: 84e87a0974eaa0f97be23329bd79e1156bcf091db69bfcacc7a121136a2b5c0ffb1c3ea62d395dfa8febb9e5e7486b1617f89f7160b8c107c69bd754e9200ecc
7
+ data.tar.gz: 38873074a0667a0b75e0a2eb0c7bddc4a272f4c1a1431be6ee0be7ac3f8cabe7bd2ce16f26ca948a77acb597d8828d6808b5120f14b36b69913370feb102866d
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'coveralls', require: false
8
- gem 'pry'
7
+ gem 'rspec'
8
+ gem 'coveralls'
9
+ gem 'pry-byebug'
9
10
  end
data/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/inherited_class_var`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
5
- [![Code Climate](https://codeclimate.com/github/joel/inherited_class_var.png)](https://codeclimate.com/github/joel/inherited_class_var)
5
+ [![Code Climate](https://codeclimate.com/github/FinalCAD/inherited_class_var.png)](https://codeclimate.com/github/FinalCAD/inherited_class_var)
6
6
 
7
- [![Dependency Status](https://gemnasium.com/joel/inherited_class_var.svg)](https://gemnasium.com/joel/inherited_class_var)
7
+ [![Dependency Status](https://gemnasium.com/FinalCAD/inherited_class_var.svg)](https://gemnasium.com/FinalCAD/inherited_class_var)
8
8
 
9
- [![Build Status](https://travis-ci.org/joel/inherited_class_var.svg?branch=master)](https://travis-ci.org/joel/inherited_class_var) (Travis CI)
9
+ [![Build Status](https://travis-ci.org/FinalCAD/inherited_class_var.svg?branch=master)](https://travis-ci.org/FinalCAD/inherited_class_var) (Travis CI)
10
10
 
11
- [![Coverage Status](https://coveralls.io/repos/joel/inherited_class_var/badge.svg?branch=master&service=github)](https://coveralls.io/github/joel/inherited_class_var?branch=master)
11
+ [![Coverage Status](https://coveralls.io/repos/FinalCAD/inherited_class_var/badge.svg?branch=master&service=github)](https://coveralls.io/github/FinalCAD/inherited_class_var?branch=master)
12
12
 
13
13
  [![Gem Version](https://badge.fury.io/rb/inherited_class_var.svg)](http://badge.fury.io/rb/inherited_class_var)
14
14
 
@@ -31,7 +31,58 @@ Or install it yourself as:
31
31
 
32
32
  ## Usage
33
33
 
34
- TODO: Write usage instructions here
34
+ You can follow this example, if you want to create Models with columns information and these informations still available after inheritance
35
+
36
+ Create a Model module with `inherited_class_var`
37
+
38
+ ```
39
+ require 'inherited_class_var'
40
+
41
+ module Model
42
+ extend ActiveSupport::Concern
43
+
44
+ included do
45
+ include InheritedClassVar
46
+ inherited_class_hash :columns
47
+ end
48
+
49
+ module ClassMethods
50
+
51
+ protected
52
+
53
+ def column(column_name, options={})
54
+ merge_columns(column_name.to_sym => options)
55
+ end
56
+ end
57
+ end
58
+ ```
59
+
60
+ `merge_columns` it's bring by `inherited_class_var`
61
+
62
+ ```
63
+ class ModelBase
64
+ include Model
65
+
66
+ column :id, type: Integer
67
+ end
68
+ ```
69
+
70
+ Gives
71
+ ```
72
+ ModelBase.columns # => {:id=>{:type=>Integer}}
73
+ ```
74
+
75
+ ```
76
+ class UserModel < ModelBase
77
+
78
+ column :name, type: String
79
+ end
80
+ ```
81
+
82
+ Gives
83
+ ```
84
+ UserModel.columns # => {:id=>{:type=>Integer}, :name=>{:type=>String}}
85
+ ```
35
86
 
36
87
  ## Development
37
88
 
@@ -11,22 +11,11 @@ Gem::Specification.new do |spec|
11
11
  spec.homepage = 'https://github.com/FinalCAD/inherited_class_var'
12
12
  spec.license = 'MIT'
13
13
 
14
- # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
15
- # delete this section to allow pushing this gem to any host.
16
- # if spec.respond_to?(:metadata)
17
- # spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com''
18
- # else
19
- # raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
20
- # end
21
-
22
14
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
15
  spec.bindir = 'exe'
24
16
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
17
  spec.require_paths = ['lib']
26
18
 
27
- spec.add_dependency 'activesupport', '~> 4.2'
28
-
29
- spec.add_development_dependency 'bundler', '~> 1.10'
30
- spec.add_development_dependency 'rake', '~> 10.0'
31
- spec.add_development_dependency 'rspec', '~> 3.3'
19
+ spec.add_dependency 'activesupport', '~> 4.2'
20
+ spec.add_development_dependency 'rake', '~> 10.0'
32
21
  end
@@ -1,3 +1,3 @@
1
1
  module InheritedClassVar
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -1,7 +1,6 @@
1
1
  require 'inherited_class_var/version'
2
2
 
3
3
  require 'active_support/concern'
4
- # require 'active_support/core_ext/module/deprecation' # https://github.com/rails/rails/commit/1e62457a6d4307edc026591f8c8a8335d9627768
5
4
  require 'active_support/dependencies/autoload'
6
5
  require 'active_support/core_ext'
7
6
  require 'active_support/json'
@@ -25,6 +24,7 @@ module InheritedClassVar
25
24
  protected
26
25
 
27
26
  # @param variable_name [Symbol] class variable name
27
+ # @option options [Array] :dependencies array of dependent method names
28
28
  def inherited_class_hash(variable_name, options={})
29
29
  options = check_and_merge_options(options, dependencies: [])
30
30
 
@@ -37,14 +37,16 @@ module InheritedClassVar
37
37
  end
38
38
 
39
39
  hidden_variable_name = hidden_variable_name(variable_name)
40
+
40
41
  define_singleton_method variable_name do
41
42
  inherited_class_var(hidden_variable_name, {}, :merge)
42
43
  end
44
+
43
45
  define_singleton_method "merge_#{variable_name}" do |merge_value|
44
46
  value = instance_variable_get(hidden_variable_name) || instance_variable_set(hidden_variable_name, {})
45
47
 
46
48
  deep_clear_class_cache(hidden_variable_name)
47
- options[:dependencies].each {|dependency_name| deep_clear_class_cache(hidden_variable_name(dependency_name)) }
49
+ options[:dependencies].each { |dependency_name| deep_clear_class_cache(hidden_variable_name(dependency_name)) }
48
50
 
49
51
  value.merge!(merge_value)
50
52
  end
@@ -60,7 +62,7 @@ module InheritedClassVar
60
62
  # @return [Array<Module>] inherited_ancestors of included_module (including self)
61
63
  def inherited_ancestors(included_module=InheritedClassVar)
62
64
  included_model_index = ancestors.index(included_module)
63
- included_model_index == 0 ? [included_module] : ancestors[0..(included_model_index - 1)]
65
+ included_model_index == 0 ? [included_module] : (ancestors[0..(included_model_index - 1)] - [InvalidOptions])
64
66
  end
65
67
 
66
68
  # @param accessor_method_name [Symbol] method to access the inherited_custom_class
@@ -90,14 +92,15 @@ module InheritedClassVar
90
92
  # @return [Object] a class variable merged across ancestors until inherited_class_module
91
93
  def inherited_class_var(variable_name, default_value, merge_method)
92
94
  class_cache(variable_name) do
93
- value = default_value
95
+ current_value = default_value
96
+
97
+ ancestor_values = inherited_ancestors.map { |ancestor| ancestor.instance_variable_get(variable_name) }.compact
94
98
 
95
- inherited_ancestors.each do |ancestor|
96
- ancestor_value = ancestor.instance_variable_get(variable_name)
97
- value = ancestor_value.public_send(merge_method, value) if ancestor_value.present?
99
+ ancestor_values.each do |ancestor_value|
100
+ current_value = current_value.public_send(merge_method, ancestor_value)
98
101
  end
99
102
 
100
- value
103
+ current_value
101
104
  end
102
105
  end
103
106
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inherited_class_var
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Chung
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2015-11-04 00:00:00.000000000 Z
12
+ date: 2016-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -25,20 +25,6 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '4.2'
28
- - !ruby/object:Gem::Dependency
29
- name: bundler
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '1.10'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '1.10'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: rake
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -53,20 +39,6 @@ dependencies:
53
39
  - - "~>"
54
40
  - !ruby/object:Gem::Version
55
41
  version: '10.0'
56
- - !ruby/object:Gem::Dependency
57
- name: rspec
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '3.3'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '3.3'
70
42
  description: Let inherited class var to authorize inheritance
71
43
  email:
72
44
  - hello@stevenchung.ca
@@ -78,8 +50,6 @@ files:
78
50
  - ".coveralls.yml"
79
51
  - ".gitignore"
80
52
  - ".rspec"
81
- - ".ruby-gemset"
82
- - ".ruby-version"
83
53
  - ".travis.yml"
84
54
  - CHANGELOG.md
85
55
  - CODE_OF_CONDUCT.md
@@ -114,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
84
  version: '0'
115
85
  requirements: []
116
86
  rubyforge_project:
117
- rubygems_version: 2.4.6
87
+ rubygems_version: 2.4.5.1
118
88
  signing_key:
119
89
  specification_version: 4
120
90
  summary: Let inherited class var
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- csv2hash
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.2.2