umwelt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +46 -0
  3. data/.gitignore +8 -0
  4. data/.rubocop.yml +28 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +7 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +8 -0
  10. data/Gemfile.lock +79 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +75 -0
  13. data/Rakefile +12 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +8 -0
  16. data/bin/umwelt +7 -0
  17. data/lib/umwelt.rb +23 -0
  18. data/lib/umwelt/abstract.rb +7 -0
  19. data/lib/umwelt/abstract/file.rb +7 -0
  20. data/lib/umwelt/abstract/file/restore.rb +48 -0
  21. data/lib/umwelt/abstract/file/store.rb +44 -0
  22. data/lib/umwelt/abstract/mapper.rb +17 -0
  23. data/lib/umwelt/cli.rb +6 -0
  24. data/lib/umwelt/cli/commands.rb +15 -0
  25. data/lib/umwelt/cli/commands/clone.rb +16 -0
  26. data/lib/umwelt/cli/commands/convey.rb +57 -0
  27. data/lib/umwelt/cli/commands/pull.rb +11 -0
  28. data/lib/umwelt/cli/commands/version.rb +9 -0
  29. data/lib/umwelt/command.rb +6 -0
  30. data/lib/umwelt/command/convey.rb +84 -0
  31. data/lib/umwelt/episode.rb +7 -0
  32. data/lib/umwelt/episode/file.rb +7 -0
  33. data/lib/umwelt/episode/file/restore.rb +22 -0
  34. data/lib/umwelt/episode/file/store.rb +15 -0
  35. data/lib/umwelt/episode/mapper.rb +33 -0
  36. data/lib/umwelt/fragment.rb +6 -0
  37. data/lib/umwelt/fragment/mapper.rb +11 -0
  38. data/lib/umwelt/history.rb +10 -0
  39. data/lib/umwelt/history/aggregate.rb +49 -0
  40. data/lib/umwelt/history/file.rb +7 -0
  41. data/lib/umwelt/history/file/restore.rb +22 -0
  42. data/lib/umwelt/history/file/store.rb +15 -0
  43. data/lib/umwelt/history/follow.rb +32 -0
  44. data/lib/umwelt/history/mapper.rb +33 -0
  45. data/lib/umwelt/history/trace.rb +51 -0
  46. data/lib/umwelt/node.rb +46 -0
  47. data/lib/umwelt/node/build.rb +31 -0
  48. data/lib/umwelt/node/root.rb +6 -0
  49. data/lib/umwelt/node/space.rb +6 -0
  50. data/lib/umwelt/phase.rb +6 -0
  51. data/lib/umwelt/phase/mapper.rb +18 -0
  52. data/lib/umwelt/project.rb +7 -0
  53. data/lib/umwelt/project/file.rb +7 -0
  54. data/lib/umwelt/project/file/restore.rb +22 -0
  55. data/lib/umwelt/project/file/store.rb +15 -0
  56. data/lib/umwelt/project/mapper.rb +11 -0
  57. data/lib/umwelt/semantic.rb +57 -0
  58. data/lib/umwelt/semantic/plain.rb +12 -0
  59. data/lib/umwelt/semantic/plain/root.rb +13 -0
  60. data/lib/umwelt/semantic/plain/space.rb +13 -0
  61. data/lib/umwelt/structs/episode.rb +9 -0
  62. data/lib/umwelt/structs/fragment.rb +13 -0
  63. data/lib/umwelt/structs/history.rb +3 -0
  64. data/lib/umwelt/structs/node.rb +13 -0
  65. data/lib/umwelt/structs/phase.rb +13 -0
  66. data/lib/umwelt/structs/project.rb +10 -0
  67. data/lib/umwelt/structs/trunk.rb +8 -0
  68. data/lib/umwelt/tree.rb +8 -0
  69. data/lib/umwelt/tree/fill.rb +35 -0
  70. data/lib/umwelt/tree/imprint.rb +53 -0
  71. data/lib/umwelt/tree/trunk.rb +27 -0
  72. data/lib/umwelt/version.rb +5 -0
  73. data/umwelt.gemspec +56 -0
  74. metadata +248 -0
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Base < Umwelt::Semantic::Base
5
+ def default_location
6
+ Pathname.new 'umwelt/lib'
7
+ end
8
+ end
9
+ end
10
+
11
+ require_relative './plain/root'
12
+ require_relative './plain/space'
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Root < Base
5
+ def ast
6
+ s(:module, const, nil)
7
+ end
8
+
9
+ def const
10
+ s(:const, nil, csymbol)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Space < Base
5
+ def ast
6
+ s(:module, const, nil)
7
+ end
8
+
9
+ def const
10
+ s(:const, context&.const, csymbol)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Episode',
5
+ :phase,
6
+ :engaged,
7
+ :forgotten,
8
+ keyword_init: true
9
+ )
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Fragment',
5
+ :id,
6
+ :abstract_id,
7
+ :context_id,
8
+ :origin_id,
9
+ :kind,
10
+ :body,
11
+ :note,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new('History', :project, :phases, keyword_init: true)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Node',
5
+ :id,
6
+ :abstract_id,
7
+ :context_id,
8
+ :origin_id,
9
+ :body,
10
+ :note,
11
+ :tree,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Phase',
5
+ :id,
6
+ :parent_id,
7
+ :merge_id,
8
+ :user_id,
9
+ :finished_at,
10
+ :name,
11
+ :description,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Project',
5
+ :user_name,
6
+ :project_name,
7
+ :project_id,
8
+ :description,
9
+ keyword_init: true
10
+ )
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Trunk',
5
+ :index,
6
+ :childs_ids,
7
+ keyword_init: true
8
+ )
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ end
5
+
6
+ require_relative './tree/fill'
7
+ require_relative './tree/imprint'
8
+ require_relative './tree/trunk'
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ class Fill
5
+ def initialize
6
+ @index = {}
7
+ @childs_ids = {}
8
+ end
9
+
10
+ def call(fragments)
11
+ fragments.each do |fragment|
12
+ add_to_index(fragment)
13
+ register_as_child(fragment)
14
+ end
15
+ fill_trunk
16
+ end
17
+
18
+ private
19
+
20
+ def add_to_index(fragment)
21
+ @index[fragment.id] = fragment
22
+ end
23
+
24
+ def register_as_child(fragment)
25
+ return if fragment.context_id.nil?
26
+
27
+ @childs_ids[fragment.context_id] ||= []
28
+ @childs_ids[fragment.context_id] << fragment.id
29
+ end
30
+
31
+ def fill_trunk
32
+ Trunk.new(index: @index, childs_ids: @childs_ids)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ class Imprint
5
+ include Hanami::Interactor
6
+ extend Forwardable
7
+ def_delegators FileUtils, :mkpath
8
+
9
+ expose :written_paths
10
+
11
+ def initialize(trunk, location: nil)
12
+ @trunk = trunk
13
+ @location = location
14
+ @written_paths = {}
15
+ end
16
+
17
+ def call(semantic_name)
18
+ error! not_clean unless location_clean?
19
+
20
+ @trunk.nodes.map do |node|
21
+ write node.semantic(semantic_name)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def write(semantic)
28
+ path = semantic.path(location: @location)
29
+
30
+ mkpath path.dirname
31
+
32
+ count = path.write(semantic.code)
33
+
34
+ @written_paths[path] = count
35
+ end
36
+
37
+ def location_clean?
38
+ mkpath imprint_root
39
+ imprint_root.empty?
40
+ end
41
+
42
+ def not_clean
43
+ <<~WARN_MESSAGE
44
+ #{imprint_root} contain files.
45
+ Try use another --target, or delete them.
46
+ WARN_MESSAGE
47
+ end
48
+
49
+ def imprint_root
50
+ Pathname.pwd / @location
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../structs/trunk'
4
+
5
+ module Umwelt::Tree
6
+ class Trunk < Struct::Trunk
7
+ def nodes
8
+ index
9
+ .values
10
+ .map { |fragment| builder.call(fragment) }
11
+ end
12
+
13
+ def node(id)
14
+ builder.call(index[id])
15
+ end
16
+
17
+ def childs(id)
18
+ childs_ids[id].map { |child_id| node(child_id) }
19
+ end
20
+
21
+ private
22
+
23
+ def builder
24
+ @builder ||= Umwelt::Node::Build.new(self)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'umwelt/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'umwelt'
9
+ spec.version = Umwelt::VERSION
10
+ spec.authors = ['Oleg Sovetnik']
11
+ spec.email = ['sovetnik@oblaka.biz']
12
+
13
+ spec.summary = 'Umwelt is a client for umwelt.dev'
14
+ spec.description = <<~DESCRIPTION
15
+ Umwelt is a domain architecture development(knowledge management) tool,
16
+ for handy prototyping domain specification with code structure.
17
+ DESCRIPTION
18
+ spec.homepage = 'http://umwelt.dev'
19
+ spec.license = 'MIT'
20
+
21
+ # Prevent pushing this gem to RubyGems.org.
22
+ # To allow pushes either set the 'allowed_push_host'
23
+ # to allow pushing to a single host or
24
+ # delete this section to allow pushing to any host.
25
+ if spec.respond_to?(:metadata)
26
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
27
+
28
+ spec.metadata['homepage_uri'] = spec.homepage
29
+ spec.metadata['source_code_uri'] = 'https://github.com/sovetnik/umwelt'
30
+ # spec.metadata["changelog_uri"] = "TODO: CHANGELOG.md URL here."
31
+ else
32
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
33
+ 'public gem pushes.'
34
+ end
35
+
36
+ # Specify which files should be added to the gem when it is released.
37
+ # The `git ls-files -z` loads the files in
38
+ # the RubyGem that have been added into git.
39
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
40
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
41
+ end
42
+ spec.bindir = 'bin'
43
+ spec.executables = %w[console setup umwelt]
44
+ spec.require_paths = ['lib']
45
+
46
+ spec.add_dependency 'hanami-cli'
47
+ spec.add_dependency 'unparser'
48
+
49
+ spec.add_development_dependency 'bundler', '~> 1.16'
50
+ spec.add_development_dependency 'fabrication'
51
+ spec.add_development_dependency 'faker'
52
+ spec.add_development_dependency 'minitest', '~> 5.0'
53
+ spec.add_development_dependency 'minitest-reporters'
54
+ spec.add_development_dependency 'pry'
55
+ spec.add_development_dependency 'rake', '~> 10.0'
56
+ end
metadata ADDED
@@ -0,0 +1,248 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: umwelt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Oleg Sovetnik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hanami-cli
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: unparser
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.16'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fabrication
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest-reporters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '10.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '10.0'
139
+ description: |
140
+ Umwelt is a domain architecture development(knowledge management) tool,
141
+ for handy prototyping domain specification with code structure.
142
+ email:
143
+ - sovetnik@oblaka.biz
144
+ executables:
145
+ - console
146
+ - setup
147
+ - umwelt
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - ".circleci/config.yml"
152
+ - ".gitignore"
153
+ - ".rubocop.yml"
154
+ - ".ruby-gemset"
155
+ - ".ruby-version"
156
+ - ".travis.yml"
157
+ - CODE_OF_CONDUCT.md
158
+ - Gemfile
159
+ - Gemfile.lock
160
+ - LICENSE.txt
161
+ - README.md
162
+ - Rakefile
163
+ - bin/console
164
+ - bin/setup
165
+ - bin/umwelt
166
+ - lib/umwelt.rb
167
+ - lib/umwelt/abstract.rb
168
+ - lib/umwelt/abstract/file.rb
169
+ - lib/umwelt/abstract/file/restore.rb
170
+ - lib/umwelt/abstract/file/store.rb
171
+ - lib/umwelt/abstract/mapper.rb
172
+ - lib/umwelt/cli.rb
173
+ - lib/umwelt/cli/commands.rb
174
+ - lib/umwelt/cli/commands/clone.rb
175
+ - lib/umwelt/cli/commands/convey.rb
176
+ - lib/umwelt/cli/commands/pull.rb
177
+ - lib/umwelt/cli/commands/version.rb
178
+ - lib/umwelt/command.rb
179
+ - lib/umwelt/command/convey.rb
180
+ - lib/umwelt/episode.rb
181
+ - lib/umwelt/episode/file.rb
182
+ - lib/umwelt/episode/file/restore.rb
183
+ - lib/umwelt/episode/file/store.rb
184
+ - lib/umwelt/episode/mapper.rb
185
+ - lib/umwelt/fragment.rb
186
+ - lib/umwelt/fragment/mapper.rb
187
+ - lib/umwelt/history.rb
188
+ - lib/umwelt/history/aggregate.rb
189
+ - lib/umwelt/history/file.rb
190
+ - lib/umwelt/history/file/restore.rb
191
+ - lib/umwelt/history/file/store.rb
192
+ - lib/umwelt/history/follow.rb
193
+ - lib/umwelt/history/mapper.rb
194
+ - lib/umwelt/history/trace.rb
195
+ - lib/umwelt/node.rb
196
+ - lib/umwelt/node/build.rb
197
+ - lib/umwelt/node/root.rb
198
+ - lib/umwelt/node/space.rb
199
+ - lib/umwelt/phase.rb
200
+ - lib/umwelt/phase/mapper.rb
201
+ - lib/umwelt/project.rb
202
+ - lib/umwelt/project/file.rb
203
+ - lib/umwelt/project/file/restore.rb
204
+ - lib/umwelt/project/file/store.rb
205
+ - lib/umwelt/project/mapper.rb
206
+ - lib/umwelt/semantic.rb
207
+ - lib/umwelt/semantic/plain.rb
208
+ - lib/umwelt/semantic/plain/root.rb
209
+ - lib/umwelt/semantic/plain/space.rb
210
+ - lib/umwelt/structs/episode.rb
211
+ - lib/umwelt/structs/fragment.rb
212
+ - lib/umwelt/structs/history.rb
213
+ - lib/umwelt/structs/node.rb
214
+ - lib/umwelt/structs/phase.rb
215
+ - lib/umwelt/structs/project.rb
216
+ - lib/umwelt/structs/trunk.rb
217
+ - lib/umwelt/tree.rb
218
+ - lib/umwelt/tree/fill.rb
219
+ - lib/umwelt/tree/imprint.rb
220
+ - lib/umwelt/tree/trunk.rb
221
+ - lib/umwelt/version.rb
222
+ - umwelt.gemspec
223
+ homepage: http://umwelt.dev
224
+ licenses:
225
+ - MIT
226
+ metadata:
227
+ homepage_uri: http://umwelt.dev
228
+ source_code_uri: https://github.com/sovetnik/umwelt
229
+ post_install_message:
230
+ rdoc_options: []
231
+ require_paths:
232
+ - lib
233
+ required_ruby_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ required_rubygems_version: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ requirements: []
244
+ rubygems_version: 3.0.1
245
+ signing_key:
246
+ specification_version: 4
247
+ summary: Umwelt is a client for umwelt.dev
248
+ test_files: []