alki-dsl 0.5.0 → 0.5.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: 4450c3089f0ffa33bd64349a3f6a06e3e2c93192
4
- data.tar.gz: 81c39bf6c311568c9b1ab3e633209622bc8c2798
3
+ metadata.gz: 90429495e92b8775651aac719580cdac47e97e14
4
+ data.tar.gz: 3084f05b8ca664ad0e4df95a85ba7623d39a2952
5
5
  SHA512:
6
- metadata.gz: 56fe3c9044b3e0f416b363615269344ec5150292a422964fed7c05002e614b4cd7feb7a6137738287d443cfc2f8d3ef8aae3c061f776b7019573131e5cbf5124
7
- data.tar.gz: a5d8ce35078e0cf74a313dbfbb7da8ce5312955dac27b06ba3c92582b06dee58d917cc1e055ca64f5ad4c390bde769b01ccd2214291f71974afeee05af9856de
6
+ metadata.gz: 64c345261de3bebc73b2f1bc76528794e634ed569736480477f8892d728e1c9ec14859d4af249efa72187d5f07b63fe3f981b32e35469093eedf1de087f229a6
7
+ data.tar.gz: 8120abd9422fdc9bb658637dd0d0e9fa7d40a346562d6a4ad5bb3ebdb9388a13ce8cc4effad0b81c6be8ae900a30707fa987c51335e05528cf87b40b2bb11a59
data/Gemfile CHANGED
@@ -1,3 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ gem 'rake'
6
+ gem 'alki-testing'
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'alki/testing/tasks'
2
+
3
+ task default: [:test]
data/alki-dsl.gemspec CHANGED
@@ -18,6 +18,5 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency 'alki-support', '~> 0.7'
21
- spec.add_dependency 'alki-loader', '~> 0.2'
22
- spec.add_development_dependency 'alki-testing', '~> 0.1'
21
+ spec.add_dependency 'alki-loader', '~> 0.2', '>= 0.2.2'
23
22
  end
data/bin/bundler ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ #
4
+ # This file was generated by Bundler.
5
+ #
6
+ # The application 'bundler' is installed as part of a gem, and
7
+ # this file is here to facilitate running it.
8
+ #
9
+
10
+ require "pathname"
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
12
+ Pathname.new(__FILE__).realpath)
13
+
14
+ require "rubygems"
15
+ require "bundler/setup"
16
+
17
+ load Gem.bin_path("bundler", "bundler")
data/bin/rake ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ #
4
+ # This file was generated by Bundler.
5
+ #
6
+ # The application 'rake' is installed as part of a gem, and
7
+ # this file is here to facilitate running it.
8
+ #
9
+
10
+ require "pathname"
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
12
+ Pathname.new(__FILE__).realpath)
13
+
14
+ require "rubygems"
15
+ require "bundler/setup"
16
+
17
+ load Gem.bin_path("rake", "rake")
@@ -2,146 +2,163 @@ require 'forwardable'
2
2
  require 'alki/support'
3
3
 
4
4
  module Alki
5
- class ClassBuilder
6
- def self.create_constant(name,value = Class.new, parent=nil)
7
- parent ||= Object
8
- *ans, ln = name.to_s.split('::')
9
- ans.each do |a|
10
- unless parent.const_defined? a
11
- parent.const_set a, Module.new
5
+ module ClassBuilder
6
+ class << self
7
+ def create_constant(name,value = Class.new, parent=nil)
8
+ parent ||= Object
9
+ *ans, ln = name.to_s.split('::')
10
+ ans.each do |a|
11
+ unless parent.const_defined? a
12
+ parent.const_set a, Module.new
13
+ end
14
+ parent = parent.const_get a
12
15
  end
13
- parent = parent.const_get a
16
+
17
+ parent.const_set ln, value
14
18
  end
15
19
 
16
- parent.const_set ln, value
17
- end
20
+ def build(data)
21
+ class_name = data[:constant_name]
22
+ if !class_name && data[:name]
23
+ class_name = Alki::Support.classify(data[:name])
24
+ end
18
25
 
19
- def self.build(data)
20
- class_name = data[:constant_name]
21
- if !class_name && data[:name]
22
- class_name = Alki::Support.classify(data[:name])
26
+ klass = find_or_create_class(class_name, data)
27
+
28
+ build_class data, klass
29
+
30
+ if data[:secondary_classes]
31
+ build_secondary_classes data[:secondary_classes], klass
32
+ end
33
+
34
+ klass
23
35
  end
24
36
 
25
- klass = Alki::Support.constantize class_name, data[:parent_class] if class_name
26
- must_create = !klass
37
+ private
38
+
39
+ def find_or_create_class(class_name, data)
40
+ type = data[:type] || :class
41
+ klass = Alki::Support.constantize class_name, data[:parent_class] if class_name
42
+ must_create_constant = !klass && class_name
43
+
44
+ super_class = data[:super_class] ? Alki.load(data[:super_class]) : Object
27
45
 
28
- if data[:type] == :module
29
46
  if klass
30
- if klass.class != Module
31
- raise "#{class_name} already exists as is a #{klass.class}"
32
- end
47
+ validate_existing_class(type, class_name, klass, super_class)
33
48
  else
34
- klass = Module.new
35
- end
36
- else
37
- if klass && klass.class != Class
38
- raise "#{class_name} already exists as is a #{klass.class}"
49
+ klass = case type
50
+ when :module then Module.new
51
+ when :class then Class.new(super_class)
52
+ end
39
53
  end
40
- super_class = if data[:super_class]
41
- Alki.load data[:super_class]
42
- else
43
- Object
54
+
55
+ if must_create_constant
56
+ create_constant class_name, klass, data[:parent_class]
44
57
  end
45
- if klass
46
- if klass.superclass != super_class
58
+ klass
59
+ end
60
+
61
+ def validate_existing_class(type, class_name, klass, super_class)
62
+ if type == :module
63
+ if klass.class != Module
64
+ raise "#{class_name} already exists as a #{klass.class}"
65
+ end
66
+ elsif type == :class
67
+ if klass.class != Class
68
+ raise "#{class_name} already exists as a #{klass.class}"
69
+ elsif klass.superclass != super_class
47
70
  raise "#{class_name} already exists with different super class"
48
71
  end
49
- else
50
- klass = Class.new super_class
51
72
  end
52
73
  end
53
- build_class data, klass
54
- if class_name && must_create
55
- create_constant class_name, klass, data[:parent_class]
56
- end
57
- if data[:secondary_classes]
58
- data[:secondary_classes].each do |data|
74
+
75
+ def build_secondary_classes(secondary_classes, parent_class)
76
+ secondary_classes.each do |data|
59
77
  if data[:subclass]
60
- data = data.merge(parent_class: klass,constant_name: data[:subclass])
78
+ data = data.merge(parent_class: parent_class,constant_name: data[:subclass])
61
79
  elsif !data[:constant_name] && !data[:name]
62
80
  raise ArgumentError.new("Secondary classes must have names")
63
81
  end
64
82
  build data
65
83
  end
66
84
  end
67
- klass
68
- end
69
85
 
70
- def self.module_not_empty?(mod)
71
- not mod.instance_methods.empty? &&
72
- mod.private_instance_methods.empty?
73
- end
86
+ def module_not_empty?(mod)
87
+ not mod.instance_methods.empty? &&
88
+ mod.private_instance_methods.empty?
89
+ end
74
90
 
75
- def self.build_class(data,klass)
76
- if data[:module]
77
- if module_not_empty? data[:module]
78
- klass.include data[:module]
79
- end
80
- if data[:module].const_defined?(:ClassMethods) &&
81
- module_not_empty?(data[:module]::ClassMethods)
82
- klass.extend data[:module]::ClassMethods
91
+ def build_class(data,klass)
92
+ if data[:module]
93
+ if module_not_empty? data[:module]
94
+ klass.include data[:module]
95
+ end
96
+ if data[:module].const_defined?(:ClassMethods) &&
97
+ module_not_empty?(data[:module]::ClassMethods)
98
+ klass.extend data[:module]::ClassMethods
99
+ end
83
100
  end
84
- end
85
101
 
86
- if data[:modules]
87
- data[:modules].each do |mod|
88
- klass.include Alki.load mod
102
+ if data[:modules]
103
+ data[:modules].each do |mod|
104
+ klass.include Alki.load mod
105
+ end
89
106
  end
90
- end
91
- if data[:class_modules]
92
- data[:class_modules].each do |mod|
93
- klass.extend Alki.load mod
107
+ if data[:class_modules]
108
+ data[:class_modules].each do |mod|
109
+ klass.extend Alki.load mod
110
+ end
94
111
  end
95
- end
96
112
 
97
- add_methods klass, data
98
- add_initialize klass, data[:initialize_params] if data[:initialize_params]
99
- end
113
+ add_methods klass, data
114
+ add_initialize klass, data[:initialize_params] if data[:initialize_params]
115
+ end
100
116
 
101
- def self.add_methods(klass, data)
102
- if data[:class_methods]
103
- data[:class_methods].each do |name, method|
104
- klass.define_singleton_method name, &method[:body]
105
- klass.singleton_class.send :private, name if method[:private]
117
+ def add_methods(klass, data)
118
+ if data[:class_methods]
119
+ data[:class_methods].each do |name, method|
120
+ klass.define_singleton_method name, &method[:body]
121
+ klass.singleton_class.send :private, name if method[:private]
122
+ end
106
123
  end
107
- end
108
124
 
109
- if data[:instance_methods]
110
- data[:instance_methods].each do |name, method|
111
- klass.send :define_method, name, &method[:body]
112
- klass.send :private, name if method[:private]
125
+ if data[:instance_methods]
126
+ data[:instance_methods].each do |name, method|
127
+ klass.send :define_method, name, &method[:body]
128
+ klass.send :private, name if method[:private]
129
+ end
113
130
  end
114
- end
115
131
 
116
- if data[:delegators]
117
- klass.extend Forwardable
118
- data[:delegators].each do |name,delegator|
119
- klass.def_delegator delegator[:accessor], delegator[:method], name
132
+ if data[:delegators]
133
+ klass.extend Forwardable
134
+ data[:delegators].each do |name,delegator|
135
+ klass.def_delegator delegator[:accessor], delegator[:method], name
136
+ end
120
137
  end
121
- end
122
138
 
123
- klass.send :attr_reader, *data[:attr_readers] if data[:attr_readers]
124
- klass.send :attr_writer, *data[:attr_writers] if data[:attr_writers]
125
- klass.send :attr_accessor, *data[:attr_accessors] if data[:attr_accessors]
126
- end
139
+ klass.send :attr_reader, *data[:attr_readers] if data[:attr_readers]
140
+ klass.send :attr_writer, *data[:attr_writers] if data[:attr_writers]
141
+ klass.send :attr_accessor, *data[:attr_accessors] if data[:attr_accessors]
142
+ end
127
143
 
128
- def self.add_initialize(klass,params)
129
- at_setters = ''
130
- params.each do |p|
131
- p,default = p.is_a?(Array) ? p : [p,nil]
132
- if default
133
- default_method = "_default_#{p}".to_sym
134
- klass.send(:define_method, default_method, &default)
135
- klass.send :private, default_method
136
- at_setters << "@#{p} = #{p} || #{default_method}\n"
137
- else
138
- at_setters << "@#{p} = #{p}\n"
144
+ def add_initialize(klass,params)
145
+ at_setters = ''
146
+ params.each do |p|
147
+ p,default = p.is_a?(Array) ? p : [p,nil]
148
+ if default
149
+ default_method = "_default_#{p}".to_sym
150
+ klass.send(:define_method, default_method, &default)
151
+ klass.send :private, default_method
152
+ at_setters << "@#{p} = #{p} || #{default_method}\n"
153
+ else
154
+ at_setters << "@#{p} = #{p}\n"
155
+ end
139
156
  end
140
- end
141
157
 
142
- klass.class_eval "
158
+ klass.class_eval "
143
159
  def initialize(#{params.map{|p| p.is_a?(Array) ? "#{p[0]}=nil" : p.to_s}.join(', ')})
144
160
  #{at_setters}end"
161
+ end
145
162
  end
146
163
  end
147
164
  end
@@ -1,5 +1,5 @@
1
1
  module Alki
2
2
  module Dsl
3
- VERSION = '0.5.0'
3
+ VERSION = '0.5.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alki-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Edlefsen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-16 00:00:00.000000000 Z
11
+ date: 2017-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alki-support
@@ -31,6 +31,9 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.2'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 0.2.2
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,20 +41,9 @@ dependencies:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
43
  version: '0.2'
41
- - !ruby/object:Gem::Dependency
42
- name: alki-testing
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.1'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
44
+ - - ">="
53
45
  - !ruby/object:Gem::Version
54
- version: '0.1'
46
+ version: 0.2.2
55
47
  description: Library for defining and using DSLs
56
48
  email:
57
49
  - matt.edlefsen@gmail.com
@@ -62,7 +54,10 @@ files:
62
54
  - ".gitignore"
63
55
  - Gemfile
64
56
  - README.adoc
57
+ - Rakefile
65
58
  - alki-dsl.gemspec
59
+ - bin/bundler
60
+ - bin/rake
66
61
  - lib/alki/class_builder.rb
67
62
  - lib/alki/dsl.rb
68
63
  - lib/alki/dsl/base.rb